her.esy.fun/engine/optim-classes.sh

70 lines
1.7 KiB
Bash
Raw Normal View History

2020-05-25 20:28:06 +00:00
#!/usr/bin/env zsh
2019-12-05 13:55:51 +00:00
2020-02-10 08:42:17 +00:00
cd "$(git rev-parse --show-toplevel)" || exit 1
2020-02-16 15:56:19 +00:00
webdir="_optim"
2019-12-06 14:34:36 +00:00
retrieve_classes_in_html () {
2021-04-27 13:32:55 +00:00
cat $webdir/**/*.html | \
2019-12-06 14:34:36 +00:00
perl -pe 's/class="?([a-zA-Z0-9_-]*)/\nCLASS: $1\n/g'
}
retrieve_classes_in_css () {
2021-04-27 13:32:55 +00:00
cat $webdir/**/*.css | \
perl -pe 's/ \.([a-zA-Z-_][a-zA-Z0-9-_]*)/\nCLASS:$1\n/g'
2019-12-06 14:34:36 +00:00
}
classes=( $( {retrieve_classes_in_html; retrieve_classes_in_css}| \
egrep "^CLASS: [^ ]*$" |\
sort -u | \
2021-05-02 19:15:12 +00:00
awk '$2 !~ /(gzwebfilesize|webfilesize|yyydate|example|src)/ {print length($2),$2}'|\
2019-12-06 14:34:36 +00:00
sort -rn | \
awk '{print $2}') )
2019-12-05 13:55:51 +00:00
chr() {
[ "$1" -lt 26 ] || return 1
printf "\\$(printf '%03o' $(( 97 + $1 )))"
}
shortName() {
if [ "$1" -gt 25 ]; then
print -- $(shortName $(( ( $1 / 26 ) - 1 )))$(shortName $(( $1 % 26 )))
else
chr $1
fi
}
i=0;
typeset -A assoc
for c in $classes; do
sn=$(shortName $i)
2019-12-06 18:05:06 +00:00
print -- "$c -> $sn"
2019-12-05 13:55:51 +00:00
assoc[$c]=$sn
((i++))
done
2019-12-06 14:34:36 +00:00
htmlreplacer=''
cssreplacer=''
for long in $classes; do
htmlreplacer=$htmlreplacer's#class=("?)'${long}'#class=$1'${assoc[$long]}'#g;'
cssreplacer=$cssreplacer's#\.'${long}'#.'${assoc[$long]}'#g;'
done
2019-12-06 18:05:06 +00:00
sizeof() {
stat --format="%s" "$*"
}
2019-12-05 13:55:51 +00:00
2019-12-06 14:34:36 +00:00
for fic in $webdir/**/*.{html,xml}(N); do
2019-12-06 18:05:06 +00:00
before=$(sizeof $fic)
print -n -- "$fic ($before"
2019-12-06 14:34:36 +00:00
perl -pi -e $htmlreplacer $fic
2019-12-06 18:05:06 +00:00
after=$(sizeof $fic)
2020-02-16 14:49:12 +00:00
print -- " => $after [$(( ((before - after) * 100) / before ))%])"
2019-12-05 13:55:51 +00:00
done
2019-12-06 14:34:36 +00:00
for fic in $webdir/**/*.css(N); do
2019-12-06 18:05:06 +00:00
before=$(sizeof $fic)
print -n -- "$fic ($before"
2019-12-06 14:34:36 +00:00
perl -pi -e $cssreplacer $fic
2019-12-06 18:05:06 +00:00
after=$(sizeof $fic)
2020-02-16 14:49:12 +00:00
print -- " => $after [$(( ((before - after) * 100) / before ))%])"
2019-12-05 13:55:51 +00:00
done