56 lines
1.5 KiB
Bash
Executable File
56 lines
1.5 KiB
Bash
Executable File
#!/bin/zsh
|
|
|
|
FILE="$1"
|
|
HEADER="$2"
|
|
MODFILE="$3"
|
|
IFS="$IFS;!}{.:"
|
|
STYLESHEET_AR=($(< "$FILE"))
|
|
STYLESHEET="$(< "$FILE")"
|
|
typeset -A colorcnt
|
|
typeset -A varnames
|
|
for i in ${(Mc)${STYLESHEET_AR}:#\#??????} ${(Mc)STYLESHEET_AR:#\#???}; do
|
|
colorcnt[$i]=$(( ${colorcnt[$i]:-0} + 1 ))
|
|
done
|
|
for k i in ${(@kv)colorcnt}; do
|
|
local KEY="$(< /dev/urandom tr -dc A-Za-z0-9 | head -c 32)"
|
|
typeset -a arr
|
|
if [ ${#k} -eq 7 ]; then
|
|
arr=(${k:1:2} ${k:3:2} ${k:5:2})
|
|
elif [ ${#k} -eq 4 ]; then
|
|
arr=("${k[2]}0" "${k[3]}0" "${k[4]}0")
|
|
fi
|
|
if [ ${#varnames} -gt 0 ]; then
|
|
for name val in ${(@kv)varnames}; do
|
|
skip=0
|
|
local -a red=($(( 0x${val:0:2} )) $(( 0x${arr[1]} )))
|
|
local -a green=($(( 0x${val:2:2} )) $(( 0x${arr[2]} )))
|
|
local -a blue=($(( 0x${val:4:2} )) $(( 0x${arr[3]} )))
|
|
for m x in ${(nO)red} ${(nO)green} ${(nO)blue}; do
|
|
[ "$(( $m - $x ))" -gt 5 ] && skip=1 && break
|
|
done
|
|
[ $skip -eq 0 ] && <<< "Deduplicated #${(j::)arr} as #${val}" >&2 && break
|
|
done
|
|
if [ $skip -eq 0 ]; then
|
|
STYLESHEET="$(<<< "$STYLESHEET" sed s/\\"$k"/"var(--$name)"/g)"
|
|
<<< "Set $k as $name" >&2
|
|
else
|
|
STYLESHEET="$(<<< "$STYLESHEET" sed s/\\"$k"/"var(--$KEY)"/g)"
|
|
<<< "Set $k as $KEY" >&2
|
|
varnames[$KEY]="${(j::)arr}"
|
|
fi
|
|
else
|
|
STYLESHEET="$(<<< "$STYLESHEET" sed s/\\"$k"/"var(--$KEY)"/g)"
|
|
<<< "Set $k as $KEY" >&2
|
|
varnames[$KEY]="${(j::)arr}"
|
|
fi
|
|
done
|
|
(
|
|
<<< ":root {"
|
|
typeset -a sortname
|
|
for name in ${(@nk)varnames}; do
|
|
<<< $'\t'"--$name: #${varnames[$name]};"
|
|
done
|
|
<<< "}"
|
|
) > "$HEADER"
|
|
<<< "$STYLESHEET" > "$MODFILE"
|