From df3e022729ed4cdba89922d88eedb8a3be720fbf Mon Sep 17 00:00:00 2001 From: Alex Denes Date: Thu, 24 Dec 2020 10:02:06 +0000 Subject: [PATCH] Initial commit --- script.zsh | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100755 script.zsh diff --git a/script.zsh b/script.zsh new file mode 100755 index 0000000..098164c --- /dev/null +++ b/script.zsh @@ -0,0 +1,55 @@ +#!/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"