css-dedupe/script.zsh

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"