yusukes@chromium.org | d257d18 | 2009-11-04 04:56:32 +0000 | [diff] [blame] | 1 | ------------------------------------------------------------------------------ |
| 2 | ot-sanitise - TTF/OTF font transcoder |
| 3 | |
| 4 | Description: |
| 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 | |
| 13 | Usage: |
| 14 | $ ./ot-sanitise ttf_or_otf_file > transcoded_file |
| 15 | |
| 16 | Example: |
| 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 | ------------------------------------------------------------------------------ |
| 25 | idempotent - TTF/OTF font transcoder (for OTS debugging) |
| 26 | |
| 27 | Description: |
| 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 | |
| 43 | Usage: |
| 44 | $ ./idempotent ttf_or_otf_file |
| 45 | |
| 46 | Example: |
| 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 | ------------------------------------------------------------------------------ |
| 55 | validator_checker - font validation checker |
| 56 | |
| 57 | Description: |
| 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 | |
| 74 | Usage: |
| 75 | $ catchsegv ./validator_checker malicous_ttf_or_otf_file |
| 76 | |
| 77 | Example: |
| 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 | ------------------------------------------------------------------------------ |
| 86 | perf - performance checker |
| 87 | |
| 88 | Description: |
| 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 | |
| 96 | Usage: |
| 97 | $ ./perf ttf_or_otf_file |
| 98 | |
| 99 | Example: |
| 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 | ------------------------------------------------------------------------------ |
| 106 | side-by-side - font quality checker |
| 107 | |
| 108 | Description: |
| 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 | |
| 126 | Usage: |
| 127 | $ ./side-by-side ttf_or_otf_file |
| 128 | |
| 129 | Example: |
| 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 | ------------------------------------------------------------------------------ |