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