README
1------------------------------------------------------------------------------
2ot-sanitise - TTF/OTF font transcoder
3
4Description:
5 ot-sanitise is a program which validates and transcodes a truetype or
6 opentype font file using the OTS library:
7
8 transcoded_font = ValidateAndTranscode(original_font);
9 if (validation_error)
10 PrintErrorAndExit;
11 OutputToStdout(transcoded_font);
12
13Usage:
14 $ ./ot-sanitise ttf_or_otf_file > transcoded_file
15
16Example:
17 $ ./ot-sanitise sample.otf > transcoded_sample.otf
18 $ ./ot-sanitise malformed.ttf > transcoded_malformed.ttf
19 WARNING at ots/src/ots.cc:158: bad range shift
20 ERROR at ots/src/ots.cc:199 (bool<unnamed>::do_ots_process(ots::OpenTypeFile*, ots::OTSStream*, const uint8_t*, size_t))
21 Failed to sanitise file!
22 $
23
24------------------------------------------------------------------------------
25idempotent - TTF/OTF font transcoder (for OTS debugging)
26
27Description:
28 idempotent is a program which validates and transcodes a truetype or opentype
29 font file using OTS. This tool transcodes the original font twice and then
30 verifies that the two transcoded fonts are identical:
31
32 t1 = ValidateAndTranscode(original_font);
33 if (validation_error)
34 PrintErrorAndExit;
35 t2 = ValidateAndTranscode(t1);
36 if (validation_error)
37 PrintErrorAndExit;
38 if (t1 != t2)
39 PrintErrorAndExit;
40
41 This tool is basically for OTS developers.
42
43Usage:
44 $ ./idempotent ttf_or_otf_file
45
46Example:
47 $ ./idempotent sample.otf
48 $ ./idempotent malformed.ttf
49 WARNING at ots/src/ots.cc:158: bad range shift
50 ERROR at ots/src/ots.cc:199 (bool<unnamed>::do_ots_process(ots::OpenTypeFile*, ots::OTSStream*, const uint8_t*, size_t))
51 Failed to sanitise file!
52 $
53
54------------------------------------------------------------------------------
55validator_checker - font validation checker
56
57Description:
58 validator_checker is a program which is intended to validate malformed fonts.
59 If the program detects that the font is invalid, it prints "OK" and returns
60 with 0 (success). If it coulndn't detect any errors, the program then opens
61 the transcoded font and renders some characters using FreeType2:
62
63 transcoded_font = ValidateAndTranscode(malicious_font);
64 if (validation_error)
65 Print("OK");
66 OpenAndRenderSomeCharacters(transcoded_font); # may cause SIGSEGV
67 Print("OK");
68
69 If SEGV doesn't raise inside FreeType2 library, the program prints "OK" and
70 returns with 0 as well. You should run this tool under the catchsegv or
71 valgrind command so that you can easily verify that all transformed fonts
72 don't crash the library (see the example below).
73
74Usage:
75 $ catchsegv ./validator_checker malicous_ttf_or_otf_file
76
77Example:
78 $ for f in malformed/*.ttf ; do catchsegv ./validator-checker "$f" ; done
79 OK: the malicious font was filtered: malformed/1.ttf
80 OK: the malicious font was filtered: malformed/2.ttf
81 OK: FreeType2 didn't crash: malformed/3.ttf
82 OK: the malicious font was filtered: malformed/4.ttf
83 $
84
85------------------------------------------------------------------------------
86perf - performance checker
87
88Description:
89 perf is a program which validates and transcodes a truetype or opentype font
90 file N times using OTS, then prints the elapsed time:
91
92 for (N times)
93 ValidateAndTranscode(original_font);
94 Print(elapsed_time_in_us / N);
95
96Usage:
97 $ ./perf ttf_or_otf_file
98
99Example:
100 $ ./perf sample.ttf
101 903 [us] sample.ttf (139332 bytes, 154 [byte/us])
102 $ ./perf sample-bold.otf
103 291 [us] sample-bold.otf (150652 bytes, 517 [byte/us])
104
105------------------------------------------------------------------------------
106side-by-side - font quality checker
107
108Description:
109 side-by-side is a program which renders some characters (ASCII, Latin-1, CJK)
110 using both original font and transcoded font and checks that the two rendering
111 results are exactly equal.
112
113 The following Unicode characters are used during the test:
114 0x0020 - 0x007E // Basic Latin
115 0x00A1 - 0x017F // Latin-1
116 0x1100 - 0x11FF // Hangul
117 0x3040 - 0x309F // Japanese HIRAGANA letters
118 0x3130 - 0x318F // Hangul
119 0x4E00 - 0x4F00 // CJK Kanji/Hanja
120 0xAC00 - 0xAD00 // Hangul
121
122 This tool uses FreeType2 library.
123 Note: This tool doesn't check kerning (GPOS/kern) nor font substitution
124 (GSUB). These should be tested in Layout tests if necessary.
125
126Usage:
127 $ ./side-by-side ttf_or_otf_file
128
129Example:
130 $ ./side-by-side linux/kochi-gothic.ttf # no problem
131 $ ./side-by-side free/kredit1.ttf # this is known issue of OTS.
132 bitmap metrics doesn't match! (14, 57), (37, 45)
133 EXPECTED:
134
135 +#######*.
136 +##########+
137 .###+.#. .#.
138 *#* # #*
139 ##. # ##
140 ## # ##
141 ## # ##
142 ## #. ##
143 ##. #. .##
144 ##. #. .##
145 *#+ *+ +#*
146 *#+ *+ +#*
147 *#+ *+ +#*
148 *#+ *+ +#*
149 *#+ *+ *#*
150 *#+ ++ *#+
151 +#* +* *#+
152 +#* +* *#+
153 +#* +* *#+
154 +#* +* ##.
155 +#* +* ##.
156 .## .# ##
157 .## .# ##
158 .## .# ##
159 ## # ##
160 ## # ##
161 ## # .##
162 ## # .##
163 ## .#+ +#*
164 ## +######*
165 ##.+#######*
166 *##########*
167 +##########+
168 #########*
169 .########
170 +####+
171
172
173
174
175
176
177 .*######*
178 +##*.*#####
179 .##+.#+ +#
180 *#* ## #+
181 ##*### ##
182 ###### ##
183 ##+.##+ +##
184 ## ##########
185 ## +#########
186 ## +########
187 *#. .########*
188 .#* #########.
189 +##########+
190 +*######*
191
192 ACTUAL:
193
194 .*##*+
195 +##+.##*.
196 .#* .##.+#*
197 *# ### *#+
198 #*######+ .*#+
199 #########*. +#*.
200 ###########* +#*
201 *############+ *#+
202 +##############. .##.
203 *##############* +#*
204 +###############+ *#+
205 *###############+ .*#+
206 .###############*. +#*.
207 +###############* +#*
208 *###############+ *#+
209 .*###############+ .*#+
210 +###############*. +#*
211 +###############* **
212 *###############+ #+
213 .###############* ##
214 +############+ ##
215 +########* .##
216 .######. +###
217 +#####+ .*#..#
218 +#####* *###..#
219 *#####. +#######*
220 +#####+ .*########.
221 +#####* +#########*
222 *#####. +##########+
223 +#####+ *#########*.
224 .#####* +##########+
225 *#####. +##########*
226 +#####+ *#########*.
227 .#####* +##########+
228 *#####+ +##########*
229 .#*++#+ *#########*.
230 .#+ ## +##########+
231 ****###+.##########*
232 ##################.
233 ###+ *#########+
234 ## +########*
235 *#+ *########.
236 ##.#######+
237 +#######*
238 *###*.
239
240
241 Glyph mismatch! (file: free/kredit1.ttf, U+0021, 100pt)!
242 $
243------------------------------------------------------------------------------
244