CardiacPhase/Git/usr/bin/getemojis

104 lines
2.2 KiB
Bash

#! /bin/sh
case "$1" in
*.*) fullemojis="$1"; shift;;
"") echo "Usage: `basename $0` .../full-emoji-list.html [emoji style]..." >&2
echo >&2
echo "This script extracts emojis graphics (.png format) from a downloaded copy of" >&2
echo " http://www.unicode.org/emoji/charts-11.0/full-emoji-list.html" >&2
echo "for the selected emoji style sets, or (if none selected) all of them:" >&2
echo " apple google twitter emojione facebook samsung windows" >&2
echo "and always extracts common emoji graphics." >&2
echo >&2
echo "Warning: with all styles selected, this may take a few hours on Cygwin." >&2
exit;;
*) echo missing file name of full emoji list >&2; exit;;
esac
sel=
while case "$1" in
apple) sel="1$sel";;
google) sel="2$sel";;
twitter) sel="3$sel";;
emojione) sel="4$sel";;
facebook) sel="5$sel";;
samsung) sel="6$sel";;
windows) sel="7$sel";;
"") false;;
*) echo emoji set "$1" not known; exit;;
esac
do shift
done
sel=0${sel:-1234567}
export sel
echo "Warning: this may take a few hours on Cygwin" >&2
LC_ALL=C
export LC_ALL
total=`grep -e "name='\([^']*\)'.*U+" "$fullemojis" | wc -l`
export total
(
echo "Extracting $total emojis from $fullemojis" >&2
cat <<\/EOS
n=0
name () {
ename=$1
style=0
n=$(( $n + 1 ))
p=$(( ${n}00 / $total ))
echo "emoji $ename (${p}%)" >&2
}
img0 () {
echo " common 0/$ename.png" >&2
echo "$1" | base64 -d > 0/$ename.png
}
img () {
style=$(( $style + 1 ))
case $sel in
*$style*) echo "$1" | base64 -d > $style/$ename.png;;
esac
}
imgskip () {
style=$(( $style + 1 ))
case $sel in
*$style*) echo " skip $style/$ename.png" >&2;;
esac
}
/EOS
mkdirlink () {
case $sel in
*$1*) mkdir -p $1
[ -e "$2" ] || ln -s "$1" "$2"
;;
esac
}
mkdirlink 1 apple
mkdirlink 2 google
mkdirlink 3 twitter
mkdirlink 4 emojione
mkdirlink 5 facebook
mkdirlink 6 samsung
mkdirlink 7 windows
mkdirlink 0 common
cat "$fullemojis" |
sed -e "s/^.*name='\([^']*\)'.*U+.*/name \1/" -e "t name" \
-e "s/.*—.*/imgskip/" -e t \
-e "s@^.*….*src='data:image/png;base64,\([^']*\)'.*@img0 \1@" -e t \
-e "s@^.*src='data:image/png;base64,\([^']*\)'.*@img \1@" -e t \
-e d \
-e ": name" \
-e "s,_,-,g"
) | sh