Add script to generate TTF font

Necessary tool to build TTF font:
  - Inkscape - (https://inkscape.org/)
  - GNU Parallel - (https://www.gnu.org/software/parallel/)
  - FontCustom - (https://github.com/FontCustom/fontcustom)
  - Xvfb - optional, but highly recommended

The process is:
1. Convert every single icon from stroke to path using Inkscape and
Parallel
2. Compile converted icons to TTF font using FontCustom

If Xvfb is present or informed via XVFB environment variable, it will
suppress Inkscape windows to show up through X11 Virtual Framebuffer
This commit is contained in:
Renato Bezerra 2019-05-29 18:31:38 -03:00
parent 5a991dddea
commit bc3040710d
2 changed files with 53 additions and 1 deletions

3
.gitignore vendored
View File

@ -3,4 +3,5 @@ node_modules
dist
sandbox
stash
coverage
coverage
.fontcustom-manifest.json

51
bin/build-ttf.sh Executable file
View File

@ -0,0 +1,51 @@
#!/bin/bash
# This script uses:
# - Inkscape to convert every icon from strokes to paths
# - Fontcustom to convert all svg icons to TTF font
# - GNU Parallel to speedup process
# - Xvfb (X11 virtual frame buffer) to prevent show Inkscape window for
# every icon. Its not necessary, but highly recommended
# First parameter is the output directory based on workdir wich should be ./../
# ex.: (...)/bin/build-ttf.sh dist/font will generate TTF in (...)/dist/font
# Some times, this script logs some Glib or Inkscape related errors to console.
# Its normal, simple ignore
WORKDIR="$(cd "$(dirname "$0")/../" && pwd)"
OUTDIR=$1
if [[ -z $OUTDIR ]]; then
printf "Please, inform output directory as first argument\n"
exit 1
fi
OUTDIR="$WORKDIR/$OUTDIR"
rm -rf $OUTDIR && mkdir -p $OUTDIR
if [[ -z $XVFB ]]; then
OS=`uname -s`
if [[ $OS == "Darwin" ]]; then
XVFB="/usr/X11/bin/Xvfb"
elif [[ $OS == "Linux" ]]; then
XVFB=`which Xvfb`
fi
fi
TEMPDIR=`mktemp -d -t feather.XXXXXXXXXX`
CMD="parallel --bar inkscape -f {}\
--verb=EditSelectAll\
--verb=StrokeToPath\
--verb=FileSave\
--verb=FileQuit\
::: $TEMPDIR/*.svg"
cp "$WORKDIR"/icons/* "$TEMPDIR"
printf "TTF font will be generated on $OUTDIR using temp folder $TEMPDIR\n"
if [[ -x $XVFB ]]; then
$XVFB :2019 -screen 0 640x480x24 -nolisten tcp >> /dev/null 2>&1 &
XVFBPID=$!
DISPLAY=:2019 $CMD && kill -SIGTERM $XVFBPID
else
$CMD
fi
fontcustom compile $TEMPDIR -n Feather -o "$OUTDIR" -F -h
rm -rf $TEMPDIR