1+ #! /bin/bash
2+ # This script does an end to end test on an IFT font encoding.
3+ #
4+ # Given a font, an encoder config, and a text sample it produces the IFT encoded font.
5+ # Extends it with an IFT client for the text sample. Then finally compares the rendering
6+ # of that text sample by the extended font against the original input font.
7+ #
8+ # Comparison is made using a locally compiled version of hb-shape. Additional, if there
9+ # is an installed copy of hb-view that's also used to compare actual rendering (ie. `which hb-view` returns something).
10+ #
11+ # Usage:
12+ # end-to-end.sh <path to font> <path to config> <text string>
13+
14+ FONT=$( readlink -f $1 )
15+ CONFIG=$( readlink -f $2 )
16+ TEXT_SAMPLE=$3
17+ WORKING_DIR=$( mktemp -d)
18+
19+ # TODO(garretrieger): take an optional design space position
20+ # TODO(garretrieger): take an optional list of feature tags
21+
22+ # Locate hb-view if available
23+ HB_VIEW=$( which hb-view)
24+
25+ # Create the IFT encoding
26+ bazel run //util:font2ift -- \
27+ --input_font=" $FONT " --config=" $CONFIG " \
28+ --output_path=" $WORKING_DIR " --output_font=" ift_font.ttf" 2> /dev/null 1> /dev/null
29+
30+ # Run an extesion on it using the provided text
31+ bazel run @fontations//:ift_extend -- \
32+ --font=$WORKING_DIR /ift_font.ttf --text=" $TEXT_SAMPLE " -o $WORKING_DIR /extended.ttf 2> /dev/null 1> /dev/null
33+
34+ # Compare shaping
35+ bazel run @harfbuzz//:hb-shape -- \
36+ $FONT --text=" $TEXT_SAMPLE " > $WORKING_DIR /original_shaping.txt 2> /dev/null
37+ bazel run @harfbuzz//:hb-shape -- \
38+ $WORKING_DIR /extended.ttf --text=" $TEXT_SAMPLE " > $WORKING_DIR /extended_shaping.txt 2> /dev/null
39+
40+ diff -u $WORKING_DIR /original_shaping.txt $WORKING_DIR /extended_shaping.txt > $WORKING_DIR /diff.txt
41+
42+ SHAPE_RETCODE=$?
43+ if [ $SHAPE_RETCODE -ne 0 ]; then
44+ echo " Shaping Comparison: FAILED"
45+ cat $WORKING_DIR /diff.txt
46+ echo " "
47+ else
48+ echo " Shaping Comparison: SUCCESS"
49+ fi
50+
51+ VIEW_RETCODE=0
52+ if [[ -n " $HB_VIEW " ]]; then
53+ $HB_VIEW $FONT --text=" $TEXT_SAMPLE " -o $WORKING_DIR /original.svg -O svg
54+ $HB_VIEW $WORKING_DIR /extended.ttf --text=" $TEXT_SAMPLE " -o $WORKING_DIR /extended.svg -O svg
55+ diff -u $WORKING_DIR /original.svg $WORKING_DIR /extended.svg > $WORKING_DIR /diff.txt
56+ VIEW_RETCODE=$?
57+ if [ $VIEW_RETCODE -ne 0 ]; then
58+ echo " Rendering Comparison: FAILED"
59+ cat $WORKING_DIR /diff.txt
60+ else
61+ echo " Rendering Comparison: SUCCESS"
62+ fi
63+ rm $WORKING_DIR /* .svg
64+ else
65+ echo " Rendering Comparison: SKIPPED (hb-view not found)"
66+ fi
67+
68+ rm $WORKING_DIR /* .ttf
69+ rm $WORKING_DIR /* .txt
70+ rm $WORKING_DIR /* .ift_tk
71+ rm $WORKING_DIR /* .ift_gk
72+ rmdir $WORKING_DIR
73+
74+ if [ $SHAPE_RETCODE -ne 0 ] || [ $VIEW_RETCODE -ne 0 ]; then
75+ exit -1
76+ fi
77+ exit 0
0 commit comments