blob: 36f4f4e5a2a1007d1e6e06d657144107cc0a4216 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#!/bin/sh
. ./ansi.sh
. ./colors.sh
lightness() {
bc -l <<-EOF
define pow(a, b) {
if (scale(b) == 0) return a ^ b
return e(b * l(a))
}
define cprime(c) {
c = c/256
if (c <= 0.03928) return(c / 12.92)
return pow((c + 0.055)/1.055, 2.4)
}
define lumi(r, g, b) {
return (cprime(r) * 0.2126) + \
(cprime(g) * 0.7152) + \
(cprime(b) * 0.0722)
}
lumi($1, $2, $3)
EOF
}
contrast() {
bc <<-EOF
scale = 2
define contrast(a, b) {
if (a > b) {
return (a + 0.05) / (b + 0.05)
} else {
return (b + 0.05) / (a + 0.05)
}
}
contrast($(lightness $(coldec $1)), $(lightness $(coldec $2)))
EOF
}
[ $# -lt 0 ] || set -- \
red green yellow blue magenta cyan white \
brred brgreen bryellow brblue brmagenta brcyan brwhite
# lower: error if below this
lower=4
# higher: warn if below this
higher=7
reprint() {
printf '%s%s' "$@" "$(reset)"
}
demo() {
reprint "$(fgc $1)$(bgc $2) demo text "
}
gt() {
test -n "$(printf 'if (%s > %s) 1' "$1" "$2" | bc)"
}
for i; do
color=$(eval echo '$'$i)
value=$(contrast $background $color)
if gt "$lower" "$value"; then
# fail
reprint "$(acol 31)fail"
elif gt "$higher" "$value"; then
# warn
reprint "$(acol 33)warn"
else
# pass
reprint "$(acol 32)pass"
fi
printf ': #%s at %s\t%s (%s)\n' \
"$color" "$value" "$(demo $color $background)" "$i"
done
|