comparison .svn/pristine/c8/c84c8feb09c74f4066537c3dc5805060fec4acf5.svn-base @ 909:cbb26bc654de redmine-1.3

Update to Redmine 1.3-stable branch (Redmine SVN rev 8964)
author Chris Cannam
date Fri, 24 Feb 2012 19:09:32 +0000
parents
children
comparison
equal deleted inserted replaced
908:c6c2cbd0afee 909:cbb26bc654de
1 #!/usr/bin/env ruby
2 #
3 # Utility to generate font definition files
4 # Version: 1.1
5 # Date: 2006-07-19
6 #
7 # Changelog:
8 # Version 1.1 - Brian Ollenberger
9 # - Fixed a very small bug in MakeFont for generating FontDef.diff.
10
11 Charencodings = {
12 # Central Europe
13 'cp1250' => [
14 '.notdef', '.notdef', '.notdef', '.notdef',
15 '.notdef', '.notdef', '.notdef', '.notdef',
16 '.notdef', '.notdef', '.notdef', '.notdef',
17 '.notdef', '.notdef', '.notdef', '.notdef',
18 '.notdef', '.notdef', '.notdef', '.notdef',
19 '.notdef', '.notdef', '.notdef', '.notdef',
20 '.notdef', '.notdef', '.notdef', '.notdef',
21 '.notdef', '.notdef', '.notdef', '.notdef',
22 'space', 'exclam', 'quotedbl', 'numbersign',
23 'dollar', 'percent', 'ampersand', 'quotesingle',
24 'parenleft', 'parenright', 'asterisk', 'plus',
25 'comma', 'hyphen', 'period', 'slash',
26 'zero', 'one', 'two', 'three',
27 'four', 'five', 'six', 'seven',
28 'eight', 'nine', 'colon', 'semicolon',
29 'less', 'equal', 'greater', 'question',
30 'at', 'A', 'B', 'C',
31 'D', 'E', 'F', 'G',
32 'H', 'I', 'J', 'K',
33 'L', 'M', 'N', 'O',
34 'P', 'Q', 'R', 'S',
35 'T', 'U', 'V', 'W',
36 'X', 'Y', 'Z', 'bracketleft',
37 'backslash', 'bracketright', 'asciicircum', 'underscore',
38 'grave', 'a', 'b', 'c',
39 'd', 'e', 'f', 'g',
40 'h', 'i', 'j', 'k',
41 'l', 'm', 'n', 'o',
42 'p', 'q', 'r', 's',
43 't', 'u', 'v', 'w',
44 'x', 'y', 'z', 'braceleft',
45 'bar', 'braceright', 'asciitilde', '.notdef',
46 'Euro', '.notdef', 'quotesinglbase', '.notdef',
47 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl',
48 '.notdef', 'perthousand', 'Scaron', 'guilsinglleft',
49 'Sacute', 'Tcaron', 'Zcaron', 'Zacute',
50 '.notdef', 'quoteleft', 'quoteright', 'quotedblleft',
51 'quotedblright', 'bullet', 'endash', 'emdash',
52 '.notdef', 'trademark', 'scaron', 'guilsinglright',
53 'sacute', 'tcaron', 'zcaron', 'zacute',
54 'space', 'caron', 'breve', 'Lslash',
55 'currency', 'Aogonek', 'brokenbar', 'section',
56 'dieresis', 'copyright', 'Scedilla', 'guillemotleft',
57 'logicalnot', 'hyphen', 'registered', 'Zdotaccent',
58 'degree', 'plusminus', 'ogonek', 'lslash',
59 'acute', 'mu', 'paragraph', 'periodcentered',
60 'cedilla', 'aogonek', 'scedilla', 'guillemotright',
61 'Lcaron', 'hungarumlaut', 'lcaron', 'zdotaccent',
62 'Racute', 'Aacute', 'Acircumflex', 'Abreve',
63 'Adieresis', 'Lacute', 'Cacute', 'Ccedilla',
64 'Ccaron', 'Eacute', 'Eogonek', 'Edieresis',
65 'Ecaron', 'Iacute', 'Icircumflex', 'Dcaron',
66 'Dcroat', 'Nacute', 'Ncaron', 'Oacute',
67 'Ocircumflex', 'Ohungarumlaut', 'Odieresis', 'multiply',
68 'Rcaron', 'Uring', 'Uacute', 'Uhungarumlaut',
69 'Udieresis', 'Yacute', 'Tcommaaccent', 'germandbls',
70 'racute', 'aacute', 'acircumflex', 'abreve',
71 'adieresis', 'lacute', 'cacute', 'ccedilla',
72 'ccaron', 'eacute', 'eogonek', 'edieresis',
73 'ecaron', 'iacute', 'icircumflex', 'dcaron',
74 'dcroat', 'nacute', 'ncaron', 'oacute',
75 'ocircumflex', 'ohungarumlaut', 'odieresis', 'divide',
76 'rcaron', 'uring', 'uacute', 'uhungarumlaut',
77 'udieresis', 'yacute', 'tcommaaccent', 'dotaccent'
78 ],
79 # Cyrillic
80 'cp1251' => [
81 '.notdef', '.notdef', '.notdef', '.notdef',
82 '.notdef', '.notdef', '.notdef', '.notdef',
83 '.notdef', '.notdef', '.notdef', '.notdef',
84 '.notdef', '.notdef', '.notdef', '.notdef',
85 '.notdef', '.notdef', '.notdef', '.notdef',
86 '.notdef', '.notdef', '.notdef', '.notdef',
87 '.notdef', '.notdef', '.notdef', '.notdef',
88 '.notdef', '.notdef', '.notdef', '.notdef',
89 'space', 'exclam', 'quotedbl', 'numbersign',
90 'dollar', 'percent', 'ampersand', 'quotesingle',
91 'parenleft', 'parenright', 'asterisk', 'plus',
92 'comma', 'hyphen', 'period', 'slash',
93 'zero', 'one', 'two', 'three',
94 'four', 'five', 'six', 'seven',
95 'eight', 'nine', 'colon', 'semicolon',
96 'less', 'equal', 'greater', 'question',
97 'at', 'A', 'B', 'C',
98 'D', 'E', 'F', 'G',
99 'H', 'I', 'J', 'K',
100 'L', 'M', 'N', 'O',
101 'P', 'Q', 'R', 'S',
102 'T', 'U', 'V', 'W',
103 'X', 'Y', 'Z', 'bracketleft',
104 'backslash', 'bracketright', 'asciicircum', 'underscore',
105 'grave', 'a', 'b', 'c',
106 'd', 'e', 'f', 'g',
107 'h', 'i', 'j', 'k',
108 'l', 'm', 'n', 'o',
109 'p', 'q', 'r', 's',
110 't', 'u', 'v', 'w',
111 'x', 'y', 'z', 'braceleft',
112 'bar', 'braceright', 'asciitilde', '.notdef',
113 'afii10051', 'afii10052', 'quotesinglbase', 'afii10100',
114 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl',
115 'Euro', 'perthousand', 'afii10058', 'guilsinglleft',
116 'afii10059', 'afii10061', 'afii10060', 'afii10145',
117 'afii10099', 'quoteleft', 'quoteright', 'quotedblleft',
118 'quotedblright', 'bullet', 'endash', 'emdash',
119 '.notdef', 'trademark', 'afii10106', 'guilsinglright',
120 'afii10107', 'afii10109', 'afii10108', 'afii10193',
121 'space', 'afii10062', 'afii10110', 'afii10057',
122 'currency', 'afii10050', 'brokenbar', 'section',
123 'afii10023', 'copyright', 'afii10053', 'guillemotleft',
124 'logicalnot', 'hyphen', 'registered', 'afii10056',
125 'degree', 'plusminus', 'afii10055', 'afii10103',
126 'afii10098', 'mu', 'paragraph', 'periodcentered',
127 'afii10071', 'afii61352', 'afii10101', 'guillemotright',
128 'afii10105', 'afii10054', 'afii10102', 'afii10104',
129 'afii10017', 'afii10018', 'afii10019', 'afii10020',
130 'afii10021', 'afii10022', 'afii10024', 'afii10025',
131 'afii10026', 'afii10027', 'afii10028', 'afii10029',
132 'afii10030', 'afii10031', 'afii10032', 'afii10033',
133 'afii10034', 'afii10035', 'afii10036', 'afii10037',
134 'afii10038', 'afii10039', 'afii10040', 'afii10041',
135 'afii10042', 'afii10043', 'afii10044', 'afii10045',
136 'afii10046', 'afii10047', 'afii10048', 'afii10049',
137 'afii10065', 'afii10066', 'afii10067', 'afii10068',
138 'afii10069', 'afii10070', 'afii10072', 'afii10073',
139 'afii10074', 'afii10075', 'afii10076', 'afii10077',
140 'afii10078', 'afii10079', 'afii10080', 'afii10081',
141 'afii10082', 'afii10083', 'afii10084', 'afii10085',
142 'afii10086', 'afii10087', 'afii10088', 'afii10089',
143 'afii10090', 'afii10091', 'afii10092', 'afii10093',
144 'afii10094', 'afii10095', 'afii10096', 'afii10097'
145 ],
146 # Western Europe
147 'cp1252' => [
148 '.notdef', '.notdef', '.notdef', '.notdef',
149 '.notdef', '.notdef', '.notdef', '.notdef',
150 '.notdef', '.notdef', '.notdef', '.notdef',
151 '.notdef', '.notdef', '.notdef', '.notdef',
152 '.notdef', '.notdef', '.notdef', '.notdef',
153 '.notdef', '.notdef', '.notdef', '.notdef',
154 '.notdef', '.notdef', '.notdef', '.notdef',
155 '.notdef', '.notdef', '.notdef', '.notdef',
156 'space', 'exclam', 'quotedbl', 'numbersign',
157 'dollar', 'percent', 'ampersand', 'quotesingle',
158 'parenleft', 'parenright', 'asterisk', 'plus',
159 'comma', 'hyphen', 'period', 'slash',
160 'zero', 'one', 'two', 'three',
161 'four', 'five', 'six', 'seven',
162 'eight', 'nine', 'colon', 'semicolon',
163 'less', 'equal', 'greater', 'question',
164 'at', 'A', 'B', 'C',
165 'D', 'E', 'F', 'G',
166 'H', 'I', 'J', 'K',
167 'L', 'M', 'N', 'O',
168 'P', 'Q', 'R', 'S',
169 'T', 'U', 'V', 'W',
170 'X', 'Y', 'Z', 'bracketleft',
171 'backslash', 'bracketright', 'asciicircum', 'underscore',
172 'grave', 'a', 'b', 'c',
173 'd', 'e', 'f', 'g',
174 'h', 'i', 'j', 'k',
175 'l', 'm', 'n', 'o',
176 'p', 'q', 'r', 's',
177 't', 'u', 'v', 'w',
178 'x', 'y', 'z', 'braceleft',
179 'bar', 'braceright', 'asciitilde', '.notdef',
180 'Euro', '.notdef', 'quotesinglbase', 'florin',
181 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl',
182 'circumflex', 'perthousand', 'Scaron', 'guilsinglleft',
183 'OE', '.notdef', 'Zcaron', '.notdef',
184 '.notdef', 'quoteleft', 'quoteright', 'quotedblleft',
185 'quotedblright', 'bullet', 'endash', 'emdash',
186 'tilde', 'trademark', 'scaron', 'guilsinglright',
187 'oe', '.notdef', 'zcaron', 'Ydieresis',
188 'space', 'exclamdown', 'cent', 'sterling',
189 'currency', 'yen', 'brokenbar', 'section',
190 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft',
191 'logicalnot', 'hyphen', 'registered', 'macron',
192 'degree', 'plusminus', 'twosuperior', 'threesuperior',
193 'acute', 'mu', 'paragraph', 'periodcentered',
194 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright',
195 'onequarter', 'onehalf', 'threequarters', 'questiondown',
196 'Agrave', 'Aacute', 'Acircumflex', 'Atilde',
197 'Adieresis', 'Aring', 'AE', 'Ccedilla',
198 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis',
199 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis',
200 'Eth', 'Ntilde', 'Ograve', 'Oacute',
201 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply',
202 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex',
203 'Udieresis', 'Yacute', 'Thorn', 'germandbls',
204 'agrave', 'aacute', 'acircumflex', 'atilde',
205 'adieresis', 'aring', 'ae', 'ccedilla',
206 'egrave', 'eacute', 'ecircumflex', 'edieresis',
207 'igrave', 'iacute', 'icircumflex', 'idieresis',
208 'eth', 'ntilde', 'ograve', 'oacute',
209 'ocircumflex', 'otilde', 'odieresis', 'divide',
210 'oslash', 'ugrave', 'uacute', 'ucircumflex',
211 'udieresis', 'yacute', 'thorn', 'ydieresis'
212 ],
213 # Greek
214 'cp1253' => [
215 '.notdef', '.notdef', '.notdef', '.notdef',
216 '.notdef', '.notdef', '.notdef', '.notdef',
217 '.notdef', '.notdef', '.notdef', '.notdef',
218 '.notdef', '.notdef', '.notdef', '.notdef',
219 '.notdef', '.notdef', '.notdef', '.notdef',
220 '.notdef', '.notdef', '.notdef', '.notdef',
221 '.notdef', '.notdef', '.notdef', '.notdef',
222 '.notdef', '.notdef', '.notdef', '.notdef',
223 'space', 'exclam', 'quotedbl', 'numbersign',
224 'dollar', 'percent', 'ampersand', 'quotesingle',
225 'parenleft', 'parenright', 'asterisk', 'plus',
226 'comma', 'hyphen', 'period', 'slash',
227 'zero', 'one', 'two', 'three',
228 'four', 'five', 'six', 'seven',
229 'eight', 'nine', 'colon', 'semicolon',
230 'less', 'equal', 'greater', 'question',
231 'at', 'A', 'B', 'C',
232 'D', 'E', 'F', 'G',
233 'H', 'I', 'J', 'K',
234 'L', 'M', 'N', 'O',
235 'P', 'Q', 'R', 'S',
236 'T', 'U', 'V', 'W',
237 'X', 'Y', 'Z', 'bracketleft',
238 'backslash', 'bracketright', 'asciicircum', 'underscore',
239 'grave', 'a', 'b', 'c',
240 'd', 'e', 'f', 'g',
241 'h', 'i', 'j', 'k',
242 'l', 'm', 'n', 'o',
243 'p', 'q', 'r', 's',
244 't', 'u', 'v', 'w',
245 'x', 'y', 'z', 'braceleft',
246 'bar', 'braceright', 'asciitilde', '.notdef',
247 'Euro', '.notdef', 'quotesinglbase', 'florin',
248 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl',
249 '.notdef', 'perthousand', '.notdef', 'guilsinglleft',
250 '.notdef', '.notdef', '.notdef', '.notdef',
251 '.notdef', 'quoteleft', 'quoteright', 'quotedblleft',
252 'quotedblright', 'bullet', 'endash', 'emdash',
253 '.notdef', 'trademark', '.notdef', 'guilsinglright',
254 '.notdef', '.notdef', '.notdef', '.notdef',
255 'space', 'dieresistonos', 'Alphatonos', 'sterling',
256 'currency', 'yen', 'brokenbar', 'section',
257 'dieresis', 'copyright', '.notdef', 'guillemotleft',
258 'logicalnot', 'hyphen', 'registered', 'afii00208',
259 'degree', 'plusminus', 'twosuperior', 'threesuperior',
260 'tonos', 'mu', 'paragraph', 'periodcentered',
261 'Epsilontonos', 'Etatonos', 'Iotatonos', 'guillemotright',
262 'Omicrontonos', 'onehalf', 'Upsilontonos', 'Omegatonos',
263 'iotadieresistonos','Alpha', 'Beta', 'Gamma',
264 'Delta', 'Epsilon', 'Zeta', 'Eta',
265 'Theta', 'Iota', 'Kappa', 'Lambda',
266 'Mu', 'Nu', 'Xi', 'Omicron',
267 'Pi', 'Rho', '.notdef', 'Sigma',
268 'Tau', 'Upsilon', 'Phi', 'Chi',
269 'Psi', 'Omega', 'Iotadieresis', 'Upsilondieresis',
270 'alphatonos', 'epsilontonos', 'etatonos', 'iotatonos',
271 'upsilondieresistonos','alpha', 'beta', 'gamma',
272 'delta', 'epsilon', 'zeta', 'eta',
273 'theta', 'iota', 'kappa', 'lambda',
274 'mu', 'nu', 'xi', 'omicron',
275 'pi', 'rho', 'sigma1', 'sigma',
276 'tau', 'upsilon', 'phi', 'chi',
277 'psi', 'omega', 'iotadieresis', 'upsilondieresis',
278 'omicrontonos', 'upsilontonos', 'omegatonos', '.notdef'
279 ],
280 # Turkish
281 'cp1254' => [
282 '.notdef', '.notdef', '.notdef', '.notdef',
283 '.notdef', '.notdef', '.notdef', '.notdef',
284 '.notdef', '.notdef', '.notdef', '.notdef',
285 '.notdef', '.notdef', '.notdef', '.notdef',
286 '.notdef', '.notdef', '.notdef', '.notdef',
287 '.notdef', '.notdef', '.notdef', '.notdef',
288 '.notdef', '.notdef', '.notdef', '.notdef',
289 '.notdef', '.notdef', '.notdef', '.notdef',
290 'space', 'exclam', 'quotedbl', 'numbersign',
291 'dollar', 'percent', 'ampersand', 'quotesingle',
292 'parenleft', 'parenright', 'asterisk', 'plus',
293 'comma', 'hyphen', 'period', 'slash',
294 'zero', 'one', 'two', 'three',
295 'four', 'five', 'six', 'seven',
296 'eight', 'nine', 'colon', 'semicolon',
297 'less', 'equal', 'greater', 'question',
298 'at', 'A', 'B', 'C',
299 'D', 'E', 'F', 'G',
300 'H', 'I', 'J', 'K',
301 'L', 'M', 'N', 'O',
302 'P', 'Q', 'R', 'S',
303 'T', 'U', 'V', 'W',
304 'X', 'Y', 'Z', 'bracketleft',
305 'backslash', 'bracketright', 'asciicircum', 'underscore',
306 'grave', 'a', 'b', 'c',
307 'd', 'e', 'f', 'g',
308 'h', 'i', 'j', 'k',
309 'l', 'm', 'n', 'o',
310 'p', 'q', 'r', 's',
311 't', 'u', 'v', 'w',
312 'x', 'y', 'z', 'braceleft',
313 'bar', 'braceright', 'asciitilde', '.notdef',
314 'Euro', '.notdef', 'quotesinglbase', 'florin',
315 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl',
316 'circumflex', 'perthousand', 'Scaron', 'guilsinglleft',
317 'OE', '.notdef', '.notdef', '.notdef',
318 '.notdef', 'quoteleft', 'quoteright', 'quotedblleft',
319 'quotedblright', 'bullet', 'endash', 'emdash',
320 'tilde', 'trademark', 'scaron', 'guilsinglright',
321 'oe', '.notdef', '.notdef', 'Ydieresis',
322 'space', 'exclamdown', 'cent', 'sterling',
323 'currency', 'yen', 'brokenbar', 'section',
324 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft',
325 'logicalnot', 'hyphen', 'registered', 'macron',
326 'degree', 'plusminus', 'twosuperior', 'threesuperior',
327 'acute', 'mu', 'paragraph', 'periodcentered',
328 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright',
329 'onequarter', 'onehalf', 'threequarters', 'questiondown',
330 'Agrave', 'Aacute', 'Acircumflex', 'Atilde',
331 'Adieresis', 'Aring', 'AE', 'Ccedilla',
332 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis',
333 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis',
334 'Gbreve', 'Ntilde', 'Ograve', 'Oacute',
335 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply',
336 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex',
337 'Udieresis', 'Idotaccent', 'Scedilla', 'germandbls',
338 'agrave', 'aacute', 'acircumflex', 'atilde',
339 'adieresis', 'aring', 'ae', 'ccedilla',
340 'egrave', 'eacute', 'ecircumflex', 'edieresis',
341 'igrave', 'iacute', 'icircumflex', 'idieresis',
342 'gbreve', 'ntilde', 'ograve', 'oacute',
343 'ocircumflex', 'otilde', 'odieresis', 'divide',
344 'oslash', 'ugrave', 'uacute', 'ucircumflex',
345 'udieresis', 'dotlessi', 'scedilla', 'ydieresis'
346 ],
347 # Hebrew
348 'cp1255' => [
349 '.notdef', '.notdef', '.notdef', '.notdef',
350 '.notdef', '.notdef', '.notdef', '.notdef',
351 '.notdef', '.notdef', '.notdef', '.notdef',
352 '.notdef', '.notdef', '.notdef', '.notdef',
353 '.notdef', '.notdef', '.notdef', '.notdef',
354 '.notdef', '.notdef', '.notdef', '.notdef',
355 '.notdef', '.notdef', '.notdef', '.notdef',
356 '.notdef', '.notdef', '.notdef', '.notdef',
357 'space', 'exclam', 'quotedbl', 'numbersign',
358 'dollar', 'percent', 'ampersand', 'quotesingle',
359 'parenleft', 'parenright', 'asterisk', 'plus',
360 'comma', 'hyphen', 'period', 'slash',
361 'zero', 'one', 'two', 'three',
362 'four', 'five', 'six', 'seven',
363 'eight', 'nine', 'colon', 'semicolon',
364 'less', 'equal', 'greater', 'question',
365 'at', 'A', 'B', 'C',
366 'D', 'E', 'F', 'G',
367 'H', 'I', 'J', 'K',
368 'L', 'M', 'N', 'O',
369 'P', 'Q', 'R', 'S',
370 'T', 'U', 'V', 'W',
371 'X', 'Y', 'Z', 'bracketleft',
372 'backslash', 'bracketright', 'asciicircum', 'underscore',
373 'grave', 'a', 'b', 'c',
374 'd', 'e', 'f', 'g',
375 'h', 'i', 'j', 'k',
376 'l', 'm', 'n', 'o',
377 'p', 'q', 'r', 's',
378 't', 'u', 'v', 'w',
379 'x', 'y', 'z', 'braceleft',
380 'bar', 'braceright', 'asciitilde', '.notdef',
381 'Euro', '.notdef', 'quotesinglbase', 'florin',
382 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl',
383 'circumflex', 'perthousand', '.notdef', 'guilsinglleft',
384 '.notdef', '.notdef', '.notdef', '.notdef',
385 '.notdef', 'quoteleft', 'quoteright', 'quotedblleft',
386 'quotedblright', 'bullet', 'endash', 'emdash',
387 'tilde', 'trademark', '.notdef', 'guilsinglright',
388 '.notdef', '.notdef', '.notdef', '.notdef',
389 'space', 'exclamdown', 'cent', 'sterling',
390 'afii57636', 'yen', 'brokenbar', 'section',
391 'dieresis', 'copyright', 'multiply', 'guillemotleft',
392 'logicalnot', 'sfthyphen', 'registered', 'macron',
393 'degree', 'plusminus', 'twosuperior', 'threesuperior',
394 'acute', 'mu', 'paragraph', 'middot',
395 'cedilla', 'onesuperior', 'divide', 'guillemotright',
396 'onequarter', 'onehalf', 'threequarters', 'questiondown',
397 'afii57799', 'afii57801', 'afii57800', 'afii57802',
398 'afii57793', 'afii57794', 'afii57795', 'afii57798',
399 'afii57797', 'afii57806', '.notdef', 'afii57796',
400 'afii57807', 'afii57839', 'afii57645', 'afii57841',
401 'afii57842', 'afii57804', 'afii57803', 'afii57658',
402 'afii57716', 'afii57717', 'afii57718', 'gereshhebrew',
403 'gershayimhebrew','.notdef', '.notdef', '.notdef',
404 '.notdef', '.notdef', '.notdef', '.notdef',
405 'afii57664', 'afii57665', 'afii57666', 'afii57667',
406 'afii57668', 'afii57669', 'afii57670', 'afii57671',
407 'afii57672', 'afii57673', 'afii57674', 'afii57675',
408 'afii57676', 'afii57677', 'afii57678', 'afii57679',
409 'afii57680', 'afii57681', 'afii57682', 'afii57683',
410 'afii57684', 'afii57685', 'afii57686', 'afii57687',
411 'afii57688', 'afii57689', 'afii57690', '.notdef',
412 '.notdef', 'afii299', 'afii300', '.notdef'
413 ],
414 # Baltic
415 'cp1257' => [
416 '.notdef', '.notdef', '.notdef', '.notdef',
417 '.notdef', '.notdef', '.notdef', '.notdef',
418 '.notdef', '.notdef', '.notdef', '.notdef',
419 '.notdef', '.notdef', '.notdef', '.notdef',
420 '.notdef', '.notdef', '.notdef', '.notdef',
421 '.notdef', '.notdef', '.notdef', '.notdef',
422 '.notdef', '.notdef', '.notdef', '.notdef',
423 '.notdef', '.notdef', '.notdef', '.notdef',
424 'space', 'exclam', 'quotedbl', 'numbersign',
425 'dollar', 'percent', 'ampersand', 'quotesingle',
426 'parenleft', 'parenright', 'asterisk', 'plus',
427 'comma', 'hyphen', 'period', 'slash',
428 'zero', 'one', 'two', 'three',
429 'four', 'five', 'six', 'seven',
430 'eight', 'nine', 'colon', 'semicolon',
431 'less', 'equal', 'greater', 'question',
432 'at', 'A', 'B', 'C',
433 'D', 'E', 'F', 'G',
434 'H', 'I', 'J', 'K',
435 'L', 'M', 'N', 'O',
436 'P', 'Q', 'R', 'S',
437 'T', 'U', 'V', 'W',
438 'X', 'Y', 'Z', 'bracketleft',
439 'backslash', 'bracketright', 'asciicircum', 'underscore',
440 'grave', 'a', 'b', 'c',
441 'd', 'e', 'f', 'g',
442 'h', 'i', 'j', 'k',
443 'l', 'm', 'n', 'o',
444 'p', 'q', 'r', 's',
445 't', 'u', 'v', 'w',
446 'x', 'y', 'z', 'braceleft',
447 'bar', 'braceright', 'asciitilde', '.notdef',
448 'Euro', '.notdef', 'quotesinglbase', '.notdef',
449 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl',
450 '.notdef', 'perthousand', '.notdef', 'guilsinglleft',
451 '.notdef', 'dieresis', 'caron', 'cedilla',
452 '.notdef', 'quoteleft', 'quoteright', 'quotedblleft',
453 'quotedblright', 'bullet', 'endash', 'emdash',
454 '.notdef', 'trademark', '.notdef', 'guilsinglright',
455 '.notdef', 'macron', 'ogonek', '.notdef',
456 'space', '.notdef', 'cent', 'sterling',
457 'currency', '.notdef', 'brokenbar', 'section',
458 'Oslash', 'copyright', 'Rcommaaccent', 'guillemotleft',
459 'logicalnot', 'hyphen', 'registered', 'AE',
460 'degree', 'plusminus', 'twosuperior', 'threesuperior',
461 'acute', 'mu', 'paragraph', 'periodcentered',
462 'oslash', 'onesuperior', 'rcommaaccent', 'guillemotright',
463 'onequarter', 'onehalf', 'threequarters', 'ae',
464 'Aogonek', 'Iogonek', 'Amacron', 'Cacute',
465 'Adieresis', 'Aring', 'Eogonek', 'Emacron',
466 'Ccaron', 'Eacute', 'Zacute', 'Edotaccent',
467 'Gcommaaccent', 'Kcommaaccent', 'Imacron', 'Lcommaaccent',
468 'Scaron', 'Nacute', 'Ncommaaccent', 'Oacute',
469 'Omacron', 'Otilde', 'Odieresis', 'multiply',
470 'Uogonek', 'Lslash', 'Sacute', 'Umacron',
471 'Udieresis', 'Zdotaccent', 'Zcaron', 'germandbls',
472 'aogonek', 'iogonek', 'amacron', 'cacute',
473 'adieresis', 'aring', 'eogonek', 'emacron',
474 'ccaron', 'eacute', 'zacute', 'edotaccent',
475 'gcommaaccent', 'kcommaaccent', 'imacron', 'lcommaaccent',
476 'scaron', 'nacute', 'ncommaaccent', 'oacute',
477 'omacron', 'otilde', 'odieresis', 'divide',
478 'uogonek', 'lslash', 'sacute', 'umacron',
479 'udieresis', 'zdotaccent', 'zcaron', 'dotaccent'
480 ],
481 # Vietnamese
482 'cp1258' => [
483 '.notdef', '.notdef', '.notdef', '.notdef',
484 '.notdef', '.notdef', '.notdef', '.notdef',
485 '.notdef', '.notdef', '.notdef', '.notdef',
486 '.notdef', '.notdef', '.notdef', '.notdef',
487 '.notdef', '.notdef', '.notdef', '.notdef',
488 '.notdef', '.notdef', '.notdef', '.notdef',
489 '.notdef', '.notdef', '.notdef', '.notdef',
490 '.notdef', '.notdef', '.notdef', '.notdef',
491 'space', 'exclam', 'quotedbl', 'numbersign',
492 'dollar', 'percent', 'ampersand', 'quotesingle',
493 'parenleft', 'parenright', 'asterisk', 'plus',
494 'comma', 'hyphen', 'period', 'slash',
495 'zero', 'one', 'two', 'three',
496 'four', 'five', 'six', 'seven',
497 'eight', 'nine', 'colon', 'semicolon',
498 'less', 'equal', 'greater', 'question',
499 'at', 'A', 'B', 'C',
500 'D', 'E', 'F', 'G',
501 'H', 'I', 'J', 'K',
502 'L', 'M', 'N', 'O',
503 'P', 'Q', 'R', 'S',
504 'T', 'U', 'V', 'W',
505 'X', 'Y', 'Z', 'bracketleft',
506 'backslash', 'bracketright', 'asciicircum', 'underscore',
507 'grave', 'a', 'b', 'c',
508 'd', 'e', 'f', 'g',
509 'h', 'i', 'j', 'k',
510 'l', 'm', 'n', 'o',
511 'p', 'q', 'r', 's',
512 't', 'u', 'v', 'w',
513 'x', 'y', 'z', 'braceleft',
514 'bar', 'braceright', 'asciitilde', '.notdef',
515 'Euro', '.notdef', 'quotesinglbase', 'florin',
516 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl',
517 'circumflex', 'perthousand', '.notdef', 'guilsinglleft',
518 'OE', '.notdef', '.notdef', '.notdef',
519 '.notdef', 'quoteleft', 'quoteright', 'quotedblleft',
520 'quotedblright', 'bullet', 'endash', 'emdash',
521 'tilde', 'trademark', '.notdef', 'guilsinglright',
522 'oe', '.notdef', '.notdef', 'Ydieresis',
523 'space', 'exclamdown', 'cent', 'sterling',
524 'currency', 'yen', 'brokenbar', 'section',
525 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft',
526 'logicalnot', 'hyphen', 'registered', 'macron',
527 'degree', 'plusminus', 'twosuperior', 'threesuperior',
528 'acute', 'mu', 'paragraph', 'periodcentered',
529 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright',
530 'onequarter', 'onehalf', 'threequarters', 'questiondown',
531 'Agrave', 'Aacute', 'Acircumflex', 'Abreve',
532 'Adieresis', 'Aring', 'AE', 'Ccedilla',
533 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis',
534 'gravecomb', 'Iacute', 'Icircumflex', 'Idieresis',
535 'Dcroat', 'Ntilde', 'hookabovecomb', 'Oacute',
536 'Ocircumflex', 'Ohorn', 'Odieresis', 'multiply',
537 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex',
538 'Udieresis', 'Uhorn', 'tildecomb', 'germandbls',
539 'agrave', 'aacute', 'acircumflex', 'abreve',
540 'adieresis', 'aring', 'ae', 'ccedilla',
541 'egrave', 'eacute', 'ecircumflex', 'edieresis',
542 'acutecomb', 'iacute', 'icircumflex', 'idieresis',
543 'dcroat', 'ntilde', 'dotbelowcomb', 'oacute',
544 'ocircumflex', 'ohorn', 'odieresis', 'divide',
545 'oslash', 'ugrave', 'uacute', 'ucircumflex',
546 'udieresis', 'uhorn', 'dong', 'ydieresis'
547 ],
548 # Thai
549 'cp874' => [
550 '.notdef', '.notdef', '.notdef', '.notdef',
551 '.notdef', '.notdef', '.notdef', '.notdef',
552 '.notdef', '.notdef', '.notdef', '.notdef',
553 '.notdef', '.notdef', '.notdef', '.notdef',
554 '.notdef', '.notdef', '.notdef', '.notdef',
555 '.notdef', '.notdef', '.notdef', '.notdef',
556 '.notdef', '.notdef', '.notdef', '.notdef',
557 '.notdef', '.notdef', '.notdef', '.notdef',
558 'space', 'exclam', 'quotedbl', 'numbersign',
559 'dollar', 'percent', 'ampersand', 'quotesingle',
560 'parenleft', 'parenright', 'asterisk', 'plus',
561 'comma', 'hyphen', 'period', 'slash',
562 'zero', 'one', 'two', 'three',
563 'four', 'five', 'six', 'seven',
564 'eight', 'nine', 'colon', 'semicolon',
565 'less', 'equal', 'greater', 'question',
566 'at', 'A', 'B', 'C',
567 'D', 'E', 'F', 'G',
568 'H', 'I', 'J', 'K',
569 'L', 'M', 'N', 'O',
570 'P', 'Q', 'R', 'S',
571 'T', 'U', 'V', 'W',
572 'X', 'Y', 'Z', 'bracketleft',
573 'backslash', 'bracketright', 'asciicircum', 'underscore',
574 'grave', 'a', 'b', 'c',
575 'd', 'e', 'f', 'g',
576 'h', 'i', 'j', 'k',
577 'l', 'm', 'n', 'o',
578 'p', 'q', 'r', 's',
579 't', 'u', 'v', 'w',
580 'x', 'y', 'z', 'braceleft',
581 'bar', 'braceright', 'asciitilde', '.notdef',
582 'Euro', '.notdef', '.notdef', '.notdef',
583 '.notdef', 'ellipsis', '.notdef', '.notdef',
584 '.notdef', '.notdef', '.notdef', '.notdef',
585 '.notdef', '.notdef', '.notdef', '.notdef',
586 '.notdef', 'quoteleft', 'quoteright', 'quotedblleft',
587 'quotedblright', 'bullet', 'endash', 'emdash',
588 '.notdef', '.notdef', '.notdef', '.notdef',
589 '.notdef', '.notdef', '.notdef', '.notdef',
590 'space', 'kokaithai', 'khokhaithai', 'khokhuatthai',
591 'khokhwaithai', 'khokhonthai', 'khorakhangthai', 'ngonguthai',
592 'chochanthai', 'chochingthai', 'chochangthai', 'sosothai',
593 'chochoethai', 'yoyingthai', 'dochadathai', 'topatakthai',
594 'thothanthai', 'thonangmonthothai', 'thophuthaothai', 'nonenthai',
595 'dodekthai', 'totaothai', 'thothungthai', 'thothahanthai',
596 'thothongthai', 'nonuthai', 'bobaimaithai', 'poplathai',
597 'phophungthai', 'fofathai', 'phophanthai', 'fofanthai',
598 'phosamphaothai', 'momathai', 'yoyakthai', 'roruathai',
599 'ruthai', 'lolingthai', 'luthai', 'wowaenthai',
600 'sosalathai', 'sorusithai', 'sosuathai', 'hohipthai',
601 'lochulathai', 'oangthai', 'honokhukthai', 'paiyannoithai',
602 'saraathai', 'maihanakatthai', 'saraaathai', 'saraamthai',
603 'saraithai', 'saraiithai', 'sarauethai', 'saraueethai',
604 'sarauthai', 'sarauuthai', 'phinthuthai', '.notdef',
605 '.notdef', '.notdef', '.notdef', 'bahtthai',
606 'saraethai', 'saraaethai', 'saraothai', 'saraaimaimuanthai',
607 'saraaimaimalaithai', 'lakkhangyaothai', 'maiyamokthai', 'maitaikhuthai',
608 'maiekthai', 'maithothai', 'maitrithai', 'maichattawathai',
609 'thanthakhatthai', 'nikhahitthai', 'yamakkanthai', 'fongmanthai',
610 'zerothai', 'onethai', 'twothai', 'threethai',
611 'fourthai', 'fivethai', 'sixthai', 'seventhai',
612 'eightthai', 'ninethai', 'angkhankhuthai', 'khomutthai',
613 '.notdef', '.notdef', '.notdef', '.notdef'
614 ],
615 # Western Europe
616 'ISO-8859-1' => [
617 '.notdef', '.notdef', '.notdef', '.notdef',
618 '.notdef', '.notdef', '.notdef', '.notdef',
619 '.notdef', '.notdef', '.notdef', '.notdef',
620 '.notdef', '.notdef', '.notdef', '.notdef',
621 '.notdef', '.notdef', '.notdef', '.notdef',
622 '.notdef', '.notdef', '.notdef', '.notdef',
623 '.notdef', '.notdef', '.notdef', '.notdef',
624 '.notdef', '.notdef', '.notdef', '.notdef',
625 'space', 'exclam', 'quotedbl', 'numbersign',
626 'dollar', 'percent', 'ampersand', 'quotesingle',
627 'parenleft', 'parenright', 'asterisk', 'plus',
628 'comma', 'hyphen', 'period', 'slash',
629 'zero', 'one', 'two', 'three',
630 'four', 'five', 'six', 'seven',
631 'eight', 'nine', 'colon', 'semicolon',
632 'less', 'equal', 'greater', 'question',
633 'at', 'A', 'B', 'C',
634 'D', 'E', 'F', 'G',
635 'H', 'I', 'J', 'K',
636 'L', 'M', 'N', 'O',
637 'P', 'Q', 'R', 'S',
638 'T', 'U', 'V', 'W',
639 'X', 'Y', 'Z', 'bracketleft',
640 'backslash', 'bracketright', 'asciicircum', 'underscore',
641 'grave', 'a', 'b', 'c',
642 'd', 'e', 'f', 'g',
643 'h', 'i', 'j', 'k',
644 'l', 'm', 'n', 'o',
645 'p', 'q', 'r', 's',
646 't', 'u', 'v', 'w',
647 'x', 'y', 'z', 'braceleft',
648 'bar', 'braceright', 'asciitilde', '.notdef',
649 '.notdef', '.notdef', '.notdef', '.notdef',
650 '.notdef', '.notdef', '.notdef', '.notdef',
651 '.notdef', '.notdef', '.notdef', '.notdef',
652 '.notdef', '.notdef', '.notdef', '.notdef',
653 '.notdef', '.notdef', '.notdef', '.notdef',
654 '.notdef', '.notdef', '.notdef', '.notdef',
655 '.notdef', '.notdef', '.notdef', '.notdef',
656 '.notdef', '.notdef', '.notdef', '.notdef',
657 'space', 'exclamdown', 'cent', 'sterling',
658 'currency', 'yen', 'brokenbar', 'section',
659 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft',
660 'logicalnot', 'hyphen', 'registered', 'macron',
661 'degree', 'plusminus', 'twosuperior', 'threesuperior',
662 'acute', 'mu', 'paragraph', 'periodcentered',
663 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright',
664 'onequarter', 'onehalf', 'threequarters', 'questiondown',
665 'Agrave', 'Aacute', 'Acircumflex', 'Atilde',
666 'Adieresis', 'Aring', 'AE', 'Ccedilla',
667 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis',
668 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis',
669 'Eth', 'Ntilde', 'Ograve', 'Oacute',
670 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply',
671 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex',
672 'Udieresis', 'Yacute', 'Thorn', 'germandbls',
673 'agrave', 'aacute', 'acircumflex', 'atilde',
674 'adieresis', 'aring', 'ae', 'ccedilla',
675 'egrave', 'eacute', 'ecircumflex', 'edieresis',
676 'igrave', 'iacute', 'icircumflex', 'idieresis',
677 'eth', 'ntilde', 'ograve', 'oacute',
678 'ocircumflex', 'otilde', 'odieresis', 'divide',
679 'oslash', 'ugrave', 'uacute', 'ucircumflex',
680 'udieresis', 'yacute', 'thorn', 'ydieresis'
681 ],
682 # Central Europe
683 'ISO-8859-2' => [
684 '.notdef', '.notdef', '.notdef', '.notdef',
685 '.notdef', '.notdef', '.notdef', '.notdef',
686 '.notdef', '.notdef', '.notdef', '.notdef',
687 '.notdef', '.notdef', '.notdef', '.notdef',
688 '.notdef', '.notdef', '.notdef', '.notdef',
689 '.notdef', '.notdef', '.notdef', '.notdef',
690 '.notdef', '.notdef', '.notdef', '.notdef',
691 '.notdef', '.notdef', '.notdef', '.notdef',
692 'space', 'exclam', 'quotedbl', 'numbersign',
693 'dollar', 'percent', 'ampersand', 'quotesingle',
694 'parenleft', 'parenright', 'asterisk', 'plus',
695 'comma', 'hyphen', 'period', 'slash',
696 'zero', 'one', 'two', 'three',
697 'four', 'five', 'six', 'seven',
698 'eight', 'nine', 'colon', 'semicolon',
699 'less', 'equal', 'greater', 'question',
700 'at', 'A', 'B', 'C',
701 'D', 'E', 'F', 'G',
702 'H', 'I', 'J', 'K',
703 'L', 'M', 'N', 'O',
704 'P', 'Q', 'R', 'S',
705 'T', 'U', 'V', 'W',
706 'X', 'Y', 'Z', 'bracketleft',
707 'backslash', 'bracketright', 'asciicircum', 'underscore',
708 'grave', 'a', 'b', 'c',
709 'd', 'e', 'f', 'g',
710 'h', 'i', 'j', 'k',
711 'l', 'm', 'n', 'o',
712 'p', 'q', 'r', 's',
713 't', 'u', 'v', 'w',
714 'x', 'y', 'z', 'braceleft',
715 'bar', 'braceright', 'asciitilde', '.notdef',
716 '.notdef', '.notdef', '.notdef', '.notdef',
717 '.notdef', '.notdef', '.notdef', '.notdef',
718 '.notdef', '.notdef', '.notdef', '.notdef',
719 '.notdef', '.notdef', '.notdef', '.notdef',
720 '.notdef', '.notdef', '.notdef', '.notdef',
721 '.notdef', '.notdef', '.notdef', '.notdef',
722 '.notdef', '.notdef', '.notdef', '.notdef',
723 '.notdef', '.notdef', '.notdef', '.notdef',
724 'space', 'Aogonek', 'breve', 'Lslash',
725 'currency', 'Lcaron', 'Sacute', 'section',
726 'dieresis', 'Scaron', 'Scedilla', 'Tcaron',
727 'Zacute', 'hyphen', 'Zcaron', 'Zdotaccent',
728 'degree', 'aogonek', 'ogonek', 'lslash',
729 'acute', 'lcaron', 'sacute', 'caron',
730 'cedilla', 'scaron', 'scedilla', 'tcaron',
731 'zacute', 'hungarumlaut', 'zcaron', 'zdotaccent',
732 'Racute', 'Aacute', 'Acircumflex', 'Abreve',
733 'Adieresis', 'Lacute', 'Cacute', 'Ccedilla',
734 'Ccaron', 'Eacute', 'Eogonek', 'Edieresis',
735 'Ecaron', 'Iacute', 'Icircumflex', 'Dcaron',
736 'Dcroat', 'Nacute', 'Ncaron', 'Oacute',
737 'Ocircumflex', 'Ohungarumlaut', 'Odieresis', 'multiply',
738 'Rcaron', 'Uring', 'Uacute', 'Uhungarumlaut',
739 'Udieresis', 'Yacute', 'Tcommaaccent', 'germandbls',
740 'racute', 'aacute', 'acircumflex', 'abreve',
741 'adieresis', 'lacute', 'cacute', 'ccedilla',
742 'ccaron', 'eacute', 'eogonek', 'edieresis',
743 'ecaron', 'iacute', 'icircumflex', 'dcaron',
744 'dcroat', 'nacute', 'ncaron', 'oacute',
745 'ocircumflex', 'ohungarumlaut', 'odieresis', 'divide',
746 'rcaron', 'uring', 'uacute', 'uhungarumlaut',
747 'udieresis', 'yacute', 'tcommaaccent', 'dotaccent'
748 ],
749 # Baltic
750 'ISO-8859-4' => [
751 '.notdef', '.notdef', '.notdef', '.notdef',
752 '.notdef', '.notdef', '.notdef', '.notdef',
753 '.notdef', '.notdef', '.notdef', '.notdef',
754 '.notdef', '.notdef', '.notdef', '.notdef',
755 '.notdef', '.notdef', '.notdef', '.notdef',
756 '.notdef', '.notdef', '.notdef', '.notdef',
757 '.notdef', '.notdef', '.notdef', '.notdef',
758 '.notdef', '.notdef', '.notdef', '.notdef',
759 'space', 'exclam', 'quotedbl', 'numbersign',
760 'dollar', 'percent', 'ampersand', 'quotesingle',
761 'parenleft', 'parenright', 'asterisk', 'plus',
762 'comma', 'hyphen', 'period', 'slash',
763 'zero', 'one', 'two', 'three',
764 'four', 'five', 'six', 'seven',
765 'eight', 'nine', 'colon', 'semicolon',
766 'less', 'equal', 'greater', 'question',
767 'at', 'A', 'B', 'C',
768 'D', 'E', 'F', 'G',
769 'H', 'I', 'J', 'K',
770 'L', 'M', 'N', 'O',
771 'P', 'Q', 'R', 'S',
772 'T', 'U', 'V', 'W',
773 'X', 'Y', 'Z', 'bracketleft',
774 'backslash', 'bracketright', 'asciicircum', 'underscore',
775 'grave', 'a', 'b', 'c',
776 'd', 'e', 'f', 'g',
777 'h', 'i', 'j', 'k',
778 'l', 'm', 'n', 'o',
779 'p', 'q', 'r', 's',
780 't', 'u', 'v', 'w',
781 'x', 'y', 'z', 'braceleft',
782 'bar', 'braceright', 'asciitilde', '.notdef',
783 '.notdef', '.notdef', '.notdef', '.notdef',
784 '.notdef', '.notdef', '.notdef', '.notdef',
785 '.notdef', '.notdef', '.notdef', '.notdef',
786 '.notdef', '.notdef', '.notdef', '.notdef',
787 '.notdef', '.notdef', '.notdef', '.notdef',
788 '.notdef', '.notdef', '.notdef', '.notdef',
789 '.notdef', '.notdef', '.notdef', '.notdef',
790 '.notdef', '.notdef', '.notdef', '.notdef',
791 'space', 'Aogonek', 'kgreenlandic', 'Rcommaaccent',
792 'currency', 'Itilde', 'Lcommaaccent', 'section',
793 'dieresis', 'Scaron', 'Emacron', 'Gcommaaccent',
794 'Tbar', 'hyphen', 'Zcaron', 'macron',
795 'degree', 'aogonek', 'ogonek', 'rcommaaccent',
796 'acute', 'itilde', 'lcommaaccent', 'caron',
797 'cedilla', 'scaron', 'emacron', 'gcommaaccent',
798 'tbar', 'Eng', 'zcaron', 'eng',
799 'Amacron', 'Aacute', 'Acircumflex', 'Atilde',
800 'Adieresis', 'Aring', 'AE', 'Iogonek',
801 'Ccaron', 'Eacute', 'Eogonek', 'Edieresis',
802 'Edotaccent', 'Iacute', 'Icircumflex', 'Imacron',
803 'Dcroat', 'Ncommaaccent', 'Omacron', 'Kcommaaccent',
804 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply',
805 'Oslash', 'Uogonek', 'Uacute', 'Ucircumflex',
806 'Udieresis', 'Utilde', 'Umacron', 'germandbls',
807 'amacron', 'aacute', 'acircumflex', 'atilde',
808 'adieresis', 'aring', 'ae', 'iogonek',
809 'ccaron', 'eacute', 'eogonek', 'edieresis',
810 'edotaccent', 'iacute', 'icircumflex', 'imacron',
811 'dcroat', 'ncommaaccent', 'omacron', 'kcommaaccent',
812 'ocircumflex', 'otilde', 'odieresis', 'divide',
813 'oslash', 'uogonek', 'uacute', 'ucircumflex',
814 'udieresis', 'utilde', 'umacron', 'dotaccent'
815 ],
816 # Cyrillic
817 'ISO-8859-5' => [
818 '.notdef', '.notdef', '.notdef', '.notdef',
819 '.notdef', '.notdef', '.notdef', '.notdef',
820 '.notdef', '.notdef', '.notdef', '.notdef',
821 '.notdef', '.notdef', '.notdef', '.notdef',
822 '.notdef', '.notdef', '.notdef', '.notdef',
823 '.notdef', '.notdef', '.notdef', '.notdef',
824 '.notdef', '.notdef', '.notdef', '.notdef',
825 '.notdef', '.notdef', '.notdef', '.notdef',
826 'space', 'exclam', 'quotedbl', 'numbersign',
827 'dollar', 'percent', 'ampersand', 'quotesingle',
828 'parenleft', 'parenright', 'asterisk', 'plus',
829 'comma', 'hyphen', 'period', 'slash',
830 'zero', 'one', 'two', 'three',
831 'four', 'five', 'six', 'seven',
832 'eight', 'nine', 'colon', 'semicolon',
833 'less', 'equal', 'greater', 'question',
834 'at', 'A', 'B', 'C',
835 'D', 'E', 'F', 'G',
836 'H', 'I', 'J', 'K',
837 'L', 'M', 'N', 'O',
838 'P', 'Q', 'R', 'S',
839 'T', 'U', 'V', 'W',
840 'X', 'Y', 'Z', 'bracketleft',
841 'backslash', 'bracketright', 'asciicircum', 'underscore',
842 'grave', 'a', 'b', 'c',
843 'd', 'e', 'f', 'g',
844 'h', 'i', 'j', 'k',
845 'l', 'm', 'n', 'o',
846 'p', 'q', 'r', 's',
847 't', 'u', 'v', 'w',
848 'x', 'y', 'z', 'braceleft',
849 'bar', 'braceright', 'asciitilde', '.notdef',
850 '.notdef', '.notdef', '.notdef', '.notdef',
851 '.notdef', '.notdef', '.notdef', '.notdef',
852 '.notdef', '.notdef', '.notdef', '.notdef',
853 '.notdef', '.notdef', '.notdef', '.notdef',
854 '.notdef', '.notdef', '.notdef', '.notdef',
855 '.notdef', '.notdef', '.notdef', '.notdef',
856 '.notdef', '.notdef', '.notdef', '.notdef',
857 '.notdef', '.notdef', '.notdef', '.notdef',
858 'space', 'afii10023', 'afii10051', 'afii10052',
859 'afii10053', 'afii10054', 'afii10055', 'afii10056',
860 'afii10057', 'afii10058', 'afii10059', 'afii10060',
861 'afii10061', 'hyphen', 'afii10062', 'afii10145',
862 'afii10017', 'afii10018', 'afii10019', 'afii10020',
863 'afii10021', 'afii10022', 'afii10024', 'afii10025',
864 'afii10026', 'afii10027', 'afii10028', 'afii10029',
865 'afii10030', 'afii10031', 'afii10032', 'afii10033',
866 'afii10034', 'afii10035', 'afii10036', 'afii10037',
867 'afii10038', 'afii10039', 'afii10040', 'afii10041',
868 'afii10042', 'afii10043', 'afii10044', 'afii10045',
869 'afii10046', 'afii10047', 'afii10048', 'afii10049',
870 'afii10065', 'afii10066', 'afii10067', 'afii10068',
871 'afii10069', 'afii10070', 'afii10072', 'afii10073',
872 'afii10074', 'afii10075', 'afii10076', 'afii10077',
873 'afii10078', 'afii10079', 'afii10080', 'afii10081',
874 'afii10082', 'afii10083', 'afii10084', 'afii10085',
875 'afii10086', 'afii10087', 'afii10088', 'afii10089',
876 'afii10090', 'afii10091', 'afii10092', 'afii10093',
877 'afii10094', 'afii10095', 'afii10096', 'afii10097',
878 'afii61352', 'afii10071', 'afii10099', 'afii10100',
879 'afii10101', 'afii10102', 'afii10103', 'afii10104',
880 'afii10105', 'afii10106', 'afii10107', 'afii10108',
881 'afii10109', 'section', 'afii10110', 'afii10193'
882 ],
883 # Greek
884 'ISO-8859-7' => [
885 '.notdef', '.notdef', '.notdef', '.notdef',
886 '.notdef', '.notdef', '.notdef', '.notdef',
887 '.notdef', '.notdef', '.notdef', '.notdef',
888 '.notdef', '.notdef', '.notdef', '.notdef',
889 '.notdef', '.notdef', '.notdef', '.notdef',
890 '.notdef', '.notdef', '.notdef', '.notdef',
891 '.notdef', '.notdef', '.notdef', '.notdef',
892 '.notdef', '.notdef', '.notdef', '.notdef',
893 'space', 'exclam', 'quotedbl', 'numbersign',
894 'dollar', 'percent', 'ampersand', 'quotesingle',
895 'parenleft', 'parenright', 'asterisk', 'plus',
896 'comma', 'hyphen', 'period', 'slash',
897 'zero', 'one', 'two', 'three',
898 'four', 'five', 'six', 'seven',
899 'eight', 'nine', 'colon', 'semicolon',
900 'less', 'equal', 'greater', 'question',
901 'at', 'A', 'B', 'C',
902 'D', 'E', 'F', 'G',
903 'H', 'I', 'J', 'K',
904 'L', 'M', 'N', 'O',
905 'P', 'Q', 'R', 'S',
906 'T', 'U', 'V', 'W',
907 'X', 'Y', 'Z', 'bracketleft',
908 'backslash', 'bracketright', 'asciicircum', 'underscore',
909 'grave', 'a', 'b', 'c',
910 'd', 'e', 'f', 'g',
911 'h', 'i', 'j', 'k',
912 'l', 'm', 'n', 'o',
913 'p', 'q', 'r', 's',
914 't', 'u', 'v', 'w',
915 'x', 'y', 'z', 'braceleft',
916 'bar', 'braceright', 'asciitilde', '.notdef',
917 '.notdef', '.notdef', '.notdef', '.notdef',
918 '.notdef', '.notdef', '.notdef', '.notdef',
919 '.notdef', '.notdef', '.notdef', '.notdef',
920 '.notdef', '.notdef', '.notdef', '.notdef',
921 '.notdef', '.notdef', '.notdef', '.notdef',
922 '.notdef', '.notdef', '.notdef', '.notdef',
923 '.notdef', '.notdef', '.notdef', '.notdef',
924 '.notdef', '.notdef', '.notdef', '.notdef',
925 'space', 'quoteleft', 'quoteright', 'sterling',
926 '.notdef', '.notdef', 'brokenbar', 'section',
927 'dieresis', 'copyright', '.notdef', 'guillemotleft',
928 'logicalnot', 'hyphen', '.notdef', 'afii00208',
929 'degree', 'plusminus', 'twosuperior', 'threesuperior',
930 'tonos', 'dieresistonos', 'Alphatonos', 'periodcentered',
931 'Epsilontonos', 'Etatonos', 'Iotatonos', 'guillemotright',
932 'Omicrontonos', 'onehalf', 'Upsilontonos', 'Omegatonos',
933 'iotadieresistonos','Alpha', 'Beta', 'Gamma',
934 'Delta', 'Epsilon', 'Zeta', 'Eta',
935 'Theta', 'Iota', 'Kappa', 'Lambda',
936 'Mu', 'Nu', 'Xi', 'Omicron',
937 'Pi', 'Rho', '.notdef', 'Sigma',
938 'Tau', 'Upsilon', 'Phi', 'Chi',
939 'Psi', 'Omega', 'Iotadieresis', 'Upsilondieresis',
940 'alphatonos', 'epsilontonos', 'etatonos', 'iotatonos',
941 'upsilondieresistonos','alpha', 'beta', 'gamma',
942 'delta', 'epsilon', 'zeta', 'eta',
943 'theta', 'iota', 'kappa', 'lambda',
944 'mu', 'nu', 'xi', 'omicron',
945 'pi', 'rho', 'sigma1', 'sigma',
946 'tau', 'upsilon', 'phi', 'chi',
947 'psi', 'omega', 'iotadieresis', 'upsilondieresis',
948 'omicrontonos', 'upsilontonos', 'omegatonos', '.notdef'
949 ],
950 # Turkish
951 'ISO-8859-9' => [
952 '.notdef', '.notdef', '.notdef', '.notdef',
953 '.notdef', '.notdef', '.notdef', '.notdef',
954 '.notdef', '.notdef', '.notdef', '.notdef',
955 '.notdef', '.notdef', '.notdef', '.notdef',
956 '.notdef', '.notdef', '.notdef', '.notdef',
957 '.notdef', '.notdef', '.notdef', '.notdef',
958 '.notdef', '.notdef', '.notdef', '.notdef',
959 '.notdef', '.notdef', '.notdef', '.notdef',
960 'space', 'exclam', 'quotedbl', 'numbersign',
961 'dollar', 'percent', 'ampersand', 'quotesingle',
962 'parenleft', 'parenright', 'asterisk', 'plus',
963 'comma', 'hyphen', 'period', 'slash',
964 'zero', 'one', 'two', 'three',
965 'four', 'five', 'six', 'seven',
966 'eight', 'nine', 'colon', 'semicolon',
967 'less', 'equal', 'greater', 'question',
968 'at', 'A', 'B', 'C',
969 'D', 'E', 'F', 'G',
970 'H', 'I', 'J', 'K',
971 'L', 'M', 'N', 'O',
972 'P', 'Q', 'R', 'S',
973 'T', 'U', 'V', 'W',
974 'X', 'Y', 'Z', 'bracketleft',
975 'backslash', 'bracketright', 'asciicircum', 'underscore',
976 'grave', 'a', 'b', 'c',
977 'd', 'e', 'f', 'g',
978 'h', 'i', 'j', 'k',
979 'l', 'm', 'n', 'o',
980 'p', 'q', 'r', 's',
981 't', 'u', 'v', 'w',
982 'x', 'y', 'z', 'braceleft',
983 'bar', 'braceright', 'asciitilde', '.notdef',
984 '.notdef', '.notdef', '.notdef', '.notdef',
985 '.notdef', '.notdef', '.notdef', '.notdef',
986 '.notdef', '.notdef', '.notdef', '.notdef',
987 '.notdef', '.notdef', '.notdef', '.notdef',
988 '.notdef', '.notdef', '.notdef', '.notdef',
989 '.notdef', '.notdef', '.notdef', '.notdef',
990 '.notdef', '.notdef', '.notdef', '.notdef',
991 '.notdef', '.notdef', '.notdef', '.notdef',
992 'space', 'exclamdown', 'cent', 'sterling',
993 'currency', 'yen', 'brokenbar', 'section',
994 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft',
995 'logicalnot', 'hyphen', 'registered', 'macron',
996 'degree', 'plusminus', 'twosuperior', 'threesuperior',
997 'acute', 'mu', 'paragraph', 'periodcentered',
998 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright',
999 'onequarter', 'onehalf', 'threequarters', 'questiondown',
1000 'Agrave', 'Aacute', 'Acircumflex', 'Atilde',
1001 'Adieresis', 'Aring', 'AE', 'Ccedilla',
1002 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis',
1003 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis',
1004 'Gbreve', 'Ntilde', 'Ograve', 'Oacute',
1005 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply',
1006 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex',
1007 'Udieresis', 'Idotaccent', 'Scedilla', 'germandbls',
1008 'agrave', 'aacute', 'acircumflex', 'atilde',
1009 'adieresis', 'aring', 'ae', 'ccedilla',
1010 'egrave', 'eacute', 'ecircumflex', 'edieresis',
1011 'igrave', 'iacute', 'icircumflex', 'idieresis',
1012 'gbreve', 'ntilde', 'ograve', 'oacute',
1013 'ocircumflex', 'otilde', 'odieresis', 'divide',
1014 'oslash', 'ugrave', 'uacute', 'ucircumflex',
1015 'udieresis', 'dotlessi', 'scedilla', 'ydieresis'
1016 ],
1017 # Thai
1018 'ISO-8859-11' => [
1019 '.notdef', '.notdef', '.notdef', '.notdef',
1020 '.notdef', '.notdef', '.notdef', '.notdef',
1021 '.notdef', '.notdef', '.notdef', '.notdef',
1022 '.notdef', '.notdef', '.notdef', '.notdef',
1023 '.notdef', '.notdef', '.notdef', '.notdef',
1024 '.notdef', '.notdef', '.notdef', '.notdef',
1025 '.notdef', '.notdef', '.notdef', '.notdef',
1026 '.notdef', '.notdef', '.notdef', '.notdef',
1027 'space', 'exclam', 'quotedbl', 'numbersign',
1028 'dollar', 'percent', 'ampersand', 'quotesingle',
1029 'parenleft', 'parenright', 'asterisk', 'plus',
1030 'comma', 'hyphen', 'period', 'slash',
1031 'zero', 'one', 'two', 'three',
1032 'four', 'five', 'six', 'seven',
1033 'eight', 'nine', 'colon', 'semicolon',
1034 'less', 'equal', 'greater', 'question',
1035 'at', 'A', 'B', 'C',
1036 'D', 'E', 'F', 'G',
1037 'H', 'I', 'J', 'K',
1038 'L', 'M', 'N', 'O',
1039 'P', 'Q', 'R', 'S',
1040 'T', 'U', 'V', 'W',
1041 'X', 'Y', 'Z', 'bracketleft',
1042 'backslash', 'bracketright', 'asciicircum', 'underscore',
1043 'grave', 'a', 'b', 'c',
1044 'd', 'e', 'f', 'g',
1045 'h', 'i', 'j', 'k',
1046 'l', 'm', 'n', 'o',
1047 'p', 'q', 'r', 's',
1048 't', 'u', 'v', 'w',
1049 'x', 'y', 'z', 'braceleft',
1050 'bar', 'braceright', 'asciitilde', '.notdef',
1051 '.notdef', '.notdef', '.notdef', '.notdef',
1052 '.notdef', '.notdef', '.notdef', '.notdef',
1053 '.notdef', '.notdef', '.notdef', '.notdef',
1054 '.notdef', '.notdef', '.notdef', '.notdef',
1055 '.notdef', '.notdef', '.notdef', '.notdef',
1056 '.notdef', '.notdef', '.notdef', '.notdef',
1057 '.notdef', '.notdef', '.notdef', '.notdef',
1058 '.notdef', '.notdef', '.notdef', '.notdef',
1059 'space', 'kokaithai', 'khokhaithai', 'khokhuatthai',
1060 'khokhwaithai', 'khokhonthai', 'khorakhangthai', 'ngonguthai',
1061 'chochanthai', 'chochingthai', 'chochangthai', 'sosothai',
1062 'chochoethai', 'yoyingthai', 'dochadathai', 'topatakthai',
1063 'thothanthai', 'thonangmonthothai','thophuthaothai', 'nonenthai',
1064 'dodekthai', 'totaothai', 'thothungthai', 'thothahanthai',
1065 'thothongthai', 'nonuthai', 'bobaimaithai', 'poplathai',
1066 'phophungthai', 'fofathai', 'phophanthai', 'fofanthai',
1067 'phosamphaothai', 'momathai', 'yoyakthai', 'roruathai',
1068 'ruthai', 'lolingthai', 'luthai', 'wowaenthai',
1069 'sosalathai', 'sorusithai', 'sosuathai', 'hohipthai',
1070 'lochulathai', 'oangthai', 'honokhukthai', 'paiyannoithai',
1071 'saraathai', 'maihanakatthai', 'saraaathai', 'saraamthai',
1072 'saraithai', 'saraiithai', 'sarauethai', 'saraueethai',
1073 'sarauthai', 'sarauuthai', 'phinthuthai', '.notdef',
1074 '.notdef', '.notdef', '.notdef', 'bahtthai',
1075 'saraethai', 'saraaethai', 'saraothai', 'saraaimaimuanthai',
1076 'saraaimaimalaithai','lakkhangyaothai','maiyamokthai', 'maitaikhuthai',
1077 'maiekthai', 'maithothai', 'maitrithai', 'maichattawathai',
1078 'thanthakhatthai','nikhahitthai', 'yamakkanthai', 'fongmanthai',
1079 'zerothai', 'onethai', 'twothai', 'threethai',
1080 'fourthai', 'fivethai', 'sixthai', 'seventhai',
1081 'eightthai', 'ninethai', 'angkhankhuthai', 'khomutthai',
1082 '.notdef', '.notdef', '.notdef', '.notdef'
1083 ],
1084 # Western Europe
1085 'ISO-8859-15' => [
1086 '.notdef', '.notdef', '.notdef', '.notdef',
1087 '.notdef', '.notdef', '.notdef', '.notdef',
1088 '.notdef', '.notdef', '.notdef', '.notdef',
1089 '.notdef', '.notdef', '.notdef', '.notdef',
1090 '.notdef', '.notdef', '.notdef', '.notdef',
1091 '.notdef', '.notdef', '.notdef', '.notdef',
1092 '.notdef', '.notdef', '.notdef', '.notdef',
1093 '.notdef', '.notdef', '.notdef', '.notdef',
1094 'space', 'exclam', 'quotedbl', 'numbersign',
1095 'dollar', 'percent', 'ampersand', 'quotesingle',
1096 'parenleft', 'parenright', 'asterisk', 'plus',
1097 'comma', 'hyphen', 'period', 'slash',
1098 'zero', 'one', 'two', 'three',
1099 'four', 'five', 'six', 'seven',
1100 'eight', 'nine', 'colon', 'semicolon',
1101 'less', 'equal', 'greater', 'question',
1102 'at', 'A', 'B', 'C',
1103 'D', 'E', 'F', 'G',
1104 'H', 'I', 'J', 'K',
1105 'L', 'M', 'N', 'O',
1106 'P', 'Q', 'R', 'S',
1107 'T', 'U', 'V', 'W',
1108 'X', 'Y', 'Z', 'bracketleft',
1109 'backslash', 'bracketright', 'asciicircum', 'underscore',
1110 'grave', 'a', 'b', 'c',
1111 'd', 'e', 'f', 'g',
1112 'h', 'i', 'j', 'k',
1113 'l', 'm', 'n', 'o',
1114 'p', 'q', 'r', 's',
1115 't', 'u', 'v', 'w',
1116 'x', 'y', 'z', 'braceleft',
1117 'bar', 'braceright', 'asciitilde', '.notdef',
1118 '.notdef', '.notdef', '.notdef', '.notdef',
1119 '.notdef', '.notdef', '.notdef', '.notdef',
1120 '.notdef', '.notdef', '.notdef', '.notdef',
1121 '.notdef', '.notdef', '.notdef', '.notdef',
1122 '.notdef', '.notdef', '.notdef', '.notdef',
1123 '.notdef', '.notdef', '.notdef', '.notdef',
1124 '.notdef', '.notdef', '.notdef', '.notdef',
1125 '.notdef', '.notdef', '.notdef', '.notdef',
1126 'space', 'exclamdown', 'cent', 'sterling',
1127 'Euro', 'yen', 'Scaron', 'section',
1128 'scaron', 'copyright', 'ordfeminine', 'guillemotleft',
1129 'logicalnot', 'hyphen', 'registered', 'macron',
1130 'degree', 'plusminus', 'twosuperior', 'threesuperior',
1131 'Zcaron', 'mu', 'paragraph', 'periodcentered',
1132 'zcaron', 'onesuperior', 'ordmasculine', 'guillemotright',
1133 'OE', 'oe', 'Ydieresis', 'questiondown',
1134 'Agrave', 'Aacute', 'Acircumflex', 'Atilde',
1135 'Adieresis', 'Aring', 'AE', 'Ccedilla',
1136 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis',
1137 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis',
1138 'Eth', 'Ntilde', 'Ograve', 'Oacute',
1139 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply',
1140 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex',
1141 'Udieresis', 'Yacute', 'Thorn', 'germandbls',
1142 'agrave', 'aacute', 'acircumflex', 'atilde',
1143 'adieresis', 'aring', 'ae', 'ccedilla',
1144 'egrave', 'eacute', 'ecircumflex', 'edieresis',
1145 'igrave', 'iacute', 'icircumflex', 'idieresis',
1146 'eth', 'ntilde', 'ograve', 'oacute',
1147 'ocircumflex', 'otilde', 'odieresis', 'divide',
1148 'oslash', 'ugrave', 'uacute', 'ucircumflex',
1149 'udieresis', 'yacute', 'thorn', 'ydieresis'
1150 ],
1151 # Central Europe
1152 'ISO-8859-16' => [
1153 '.notdef', '.notdef', '.notdef', '.notdef',
1154 '.notdef', '.notdef', '.notdef', '.notdef',
1155 '.notdef', '.notdef', '.notdef', '.notdef',
1156 '.notdef', '.notdef', '.notdef', '.notdef',
1157 '.notdef', '.notdef', '.notdef', '.notdef',
1158 '.notdef', '.notdef', '.notdef', '.notdef',
1159 '.notdef', '.notdef', '.notdef', '.notdef',
1160 '.notdef', '.notdef', '.notdef', '.notdef',
1161 'space', 'exclam', 'quotedbl', 'numbersign',
1162 'dollar', 'percent', 'ampersand', 'quotesingle',
1163 'parenleft', 'parenright', 'asterisk', 'plus',
1164 'comma', 'hyphen', 'period', 'slash',
1165 'zero', 'one', 'two', 'three',
1166 'four', 'five', 'six', 'seven',
1167 'eight', 'nine', 'colon', 'semicolon',
1168 'less', 'equal', 'greater', 'question',
1169 'at', 'A', 'B', 'C',
1170 'D', 'E', 'F', 'G',
1171 'H', 'I', 'J', 'K',
1172 'L', 'M', 'N', 'O',
1173 'P', 'Q', 'R', 'S',
1174 'T', 'U', 'V', 'W',
1175 'X', 'Y', 'Z', 'bracketleft',
1176 'backslash', 'bracketright', 'asciicircum', 'underscore',
1177 'grave', 'a', 'b', 'c',
1178 'd', 'e', 'f', 'g',
1179 'h', 'i', 'j', 'k',
1180 'l', 'm', 'n', 'o',
1181 'p', 'q', 'r', 's',
1182 't', 'u', 'v', 'w',
1183 'x', 'y', 'z', 'braceleft',
1184 'bar', 'braceright', 'asciitilde', '.notdef',
1185 '.notdef', '.notdef', '.notdef', '.notdef',
1186 '.notdef', '.notdef', '.notdef', '.notdef',
1187 '.notdef', '.notdef', '.notdef', '.notdef',
1188 '.notdef', '.notdef', '.notdef', '.notdef',
1189 '.notdef', '.notdef', '.notdef', '.notdef',
1190 '.notdef', '.notdef', '.notdef', '.notdef',
1191 '.notdef', '.notdef', '.notdef', '.notdef',
1192 '.notdef', '.notdef', '.notdef', '.notdef',
1193 'space', 'Aogonek', 'aogonek', 'Lslash',
1194 'Euro', 'quotedblbase', 'Scaron', 'section',
1195 'scaron', 'copyright', 'Scommaaccent', 'guillemotleft',
1196 'Zacute', 'hyphen', 'zacute', 'Zdotaccent',
1197 'degree', 'plusminus', 'Ccaron', 'lslash',
1198 'Zcaron', 'quotedblright', 'paragraph', 'periodcentered',
1199 'zcaron', 'ccaron', 'scommaaccent', 'guillemotright',
1200 'OE', 'oe', 'Ydieresis', 'zdotaccent',
1201 'Agrave', 'Aacute', 'Acircumflex', 'Abreve',
1202 'Adieresis', 'Cacute', 'AE', 'Ccedilla',
1203 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis',
1204 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis',
1205 'Dcroat', 'Nacute', 'Ograve', 'Oacute',
1206 'Ocircumflex', 'Ohungarumlaut', 'Odieresis', 'Sacute',
1207 'Uhungarumlaut', 'Ugrave', 'Uacute', 'Ucircumflex',
1208 'Udieresis', 'Eogonek', 'Tcommaaccent', 'germandbls',
1209 'agrave', 'aacute', 'acircumflex', 'abreve',
1210 'adieresis', 'cacute', 'ae', 'ccedilla',
1211 'egrave', 'eacute', 'ecircumflex', 'edieresis',
1212 'igrave', 'iacute', 'icircumflex', 'idieresis',
1213 'dcroat', 'nacute', 'ograve', 'oacute',
1214 'ocircumflex', 'ohungarumlaut', 'odieresis', 'sacute',
1215 'uhungarumlaut', 'ugrave', 'uacute', 'ucircumflex',
1216 'udieresis', 'eogonek', 'tcommaaccent', 'ydieresis'
1217 ],
1218 # Russian
1219 'KOI8-R' => [
1220 '.notdef', '.notdef', '.notdef', '.notdef',
1221 '.notdef', '.notdef', '.notdef', '.notdef',
1222 '.notdef', '.notdef', '.notdef', '.notdef',
1223 '.notdef', '.notdef', '.notdef', '.notdef',
1224 '.notdef', '.notdef', '.notdef', '.notdef',
1225 '.notdef', '.notdef', '.notdef', '.notdef',
1226 '.notdef', '.notdef', '.notdef', '.notdef',
1227 '.notdef', '.notdef', '.notdef', '.notdef',
1228 'space', 'exclam', 'quotedbl', 'numbersign',
1229 'dollar', 'percent', 'ampersand', 'quotesingle',
1230 'parenleft', 'parenright', 'asterisk', 'plus',
1231 'comma', 'hyphen', 'period', 'slash',
1232 'zero', 'one', 'two', 'three',
1233 'four', 'five', 'six', 'seven',
1234 'eight', 'nine', 'colon', 'semicolon',
1235 'less', 'equal', 'greater', 'question',
1236 'at', 'A', 'B', 'C',
1237 'D', 'E', 'F', 'G',
1238 'H', 'I', 'J', 'K',
1239 'L', 'M', 'N', 'O',
1240 'P', 'Q', 'R', 'S',
1241 'T', 'U', 'V', 'W',
1242 'X', 'Y', 'Z', 'bracketleft',
1243 'backslash', 'bracketright', 'asciicircum', 'underscore',
1244 'grave', 'a', 'b', 'c',
1245 'd', 'e', 'f', 'g',
1246 'h', 'i', 'j', 'k',
1247 'l', 'm', 'n', 'o',
1248 'p', 'q', 'r', 's',
1249 't', 'u', 'v', 'w',
1250 'x', 'y', 'z', 'braceleft',
1251 'bar', 'braceright', 'asciitilde', '.notdef',
1252 'SF100000', 'SF110000', 'SF010000', 'SF030000',
1253 'SF020000', 'SF040000', 'SF080000', 'SF090000',
1254 'SF060000', 'SF070000', 'SF050000', 'upblock',
1255 'dnblock', 'block', 'lfblock', 'rtblock',
1256 'ltshade', 'shade', 'dkshade', 'integraltp',
1257 'filledbox', 'periodcentered', 'radical', 'approxequal',
1258 'lessequal', 'greaterequal', 'space', 'integralbt',
1259 'degree', 'twosuperior', 'periodcentered', 'divide',
1260 'SF430000', 'SF240000', 'SF510000', 'afii10071',
1261 'SF520000', 'SF390000', 'SF220000', 'SF210000',
1262 'SF250000', 'SF500000', 'SF490000', 'SF380000',
1263 'SF280000', 'SF270000', 'SF260000', 'SF360000',
1264 'SF370000', 'SF420000', 'SF190000', 'afii10023',
1265 'SF200000', 'SF230000', 'SF470000', 'SF480000',
1266 'SF410000', 'SF450000', 'SF460000', 'SF400000',
1267 'SF540000', 'SF530000', 'SF440000', 'copyright',
1268 'afii10096', 'afii10065', 'afii10066', 'afii10088',
1269 'afii10069', 'afii10070', 'afii10086', 'afii10068',
1270 'afii10087', 'afii10074', 'afii10075', 'afii10076',
1271 'afii10077', 'afii10078', 'afii10079', 'afii10080',
1272 'afii10081', 'afii10097', 'afii10082', 'afii10083',
1273 'afii10084', 'afii10085', 'afii10072', 'afii10067',
1274 'afii10094', 'afii10093', 'afii10073', 'afii10090',
1275 'afii10095', 'afii10091', 'afii10089', 'afii10092',
1276 'afii10048', 'afii10017', 'afii10018', 'afii10040',
1277 'afii10021', 'afii10022', 'afii10038', 'afii10020',
1278 'afii10039', 'afii10026', 'afii10027', 'afii10028',
1279 'afii10029', 'afii10030', 'afii10031', 'afii10032',
1280 'afii10033', 'afii10049', 'afii10034', 'afii10035',
1281 'afii10036', 'afii10037', 'afii10024', 'afii10019',
1282 'afii10046', 'afii10045', 'afii10025', 'afii10042',
1283 'afii10047', 'afii10043', 'afii10041', 'afii10044'
1284 ],
1285 # Ukrainian
1286 'KOI8-U' => [
1287 '.notdef', '.notdef', '.notdef', '.notdef',
1288 '.notdef', '.notdef', '.notdef', '.notdef',
1289 '.notdef', '.notdef', '.notdef', '.notdef',
1290 '.notdef', '.notdef', '.notdef', '.notdef',
1291 '.notdef', '.notdef', '.notdef', '.notdef',
1292 '.notdef', '.notdef', '.notdef', '.notdef',
1293 '.notdef', '.notdef', '.notdef', '.notdef',
1294 '.notdef', '.notdef', '.notdef', '.notdef',
1295 'space', 'exclam', 'quotedbl', 'numbersign',
1296 'dollar', 'percent', 'ampersand', 'quotesingle',
1297 'parenleft', 'parenright', 'asterisk', 'plus',
1298 'comma', 'hyphen', 'period', 'slash',
1299 'zero', 'one', 'two', 'three',
1300 'four', 'five', 'six', 'seven',
1301 'eight', 'nine', 'colon', 'semicolon',
1302 'less', 'equal', 'greater', 'question',
1303 'at', 'A', 'B', 'C',
1304 'D', 'E', 'F', 'G',
1305 'H', 'I', 'J', 'K',
1306 'L', 'M', 'N', 'O',
1307 'P', 'Q', 'R', 'S',
1308 'T', 'U', 'V', 'W',
1309 'X', 'Y', 'Z', 'bracketleft',
1310 'backslash', 'bracketright', 'asciicircum', 'underscore',
1311 'grave', 'a', 'b', 'c',
1312 'd', 'e', 'f', 'g',
1313 'h', 'i', 'j', 'k',
1314 'l', 'm', 'n', 'o',
1315 'p', 'q', 'r', 's',
1316 't', 'u', 'v', 'w',
1317 'x', 'y', 'z', 'braceleft',
1318 'bar', 'braceright', 'asciitilde', '.notdef',
1319 'SF100000', 'SF110000', 'SF010000', 'SF030000',
1320 'SF020000', 'SF040000', 'SF080000', 'SF090000',
1321 'SF060000', 'SF070000', 'SF050000', 'upblock',
1322 'dnblock', 'block', 'lfblock', 'rtblock',
1323 'ltshade', 'shade', 'dkshade', 'integraltp',
1324 'filledbox', 'bullet', 'radical', 'approxequal',
1325 'lessequal', 'greaterequal', 'space', 'integralbt',
1326 'degree', 'twosuperior', 'periodcentered', 'divide',
1327 'SF430000', 'SF240000', 'SF510000', 'afii10071',
1328 'afii10101', 'SF390000', 'afii10103', 'afii10104',
1329 'SF250000', 'SF500000', 'SF490000', 'SF380000',
1330 'SF280000', 'afii10098', 'SF260000', 'SF360000',
1331 'SF370000', 'SF420000', 'SF190000', 'afii10023',
1332 'afii10053', 'SF230000', 'afii10055', 'afii10056',
1333 'SF410000', 'SF450000', 'SF460000', 'SF400000',
1334 'SF540000', 'afii10050', 'SF440000', 'copyright',
1335 'afii10096', 'afii10065', 'afii10066', 'afii10088',
1336 'afii10069', 'afii10070', 'afii10086', 'afii10068',
1337 'afii10087', 'afii10074', 'afii10075', 'afii10076',
1338 'afii10077', 'afii10078', 'afii10079', 'afii10080',
1339 'afii10081', 'afii10097', 'afii10082', 'afii10083',
1340 'afii10084', 'afii10085', 'afii10072', 'afii10067',
1341 'afii10094', 'afii10093', 'afii10073', 'afii10090',
1342 'afii10095', 'afii10091', 'afii10089', 'afii10092',
1343 'afii10048', 'afii10017', 'afii10018', 'afii10040',
1344 'afii10021', 'afii10022', 'afii10038', 'afii10020',
1345 'afii10039', 'afii10026', 'afii10027', 'afii10028',
1346 'afii10029', 'afii10030', 'afii10031', 'afii10032',
1347 'afii10033', 'afii10049', 'afii10034', 'afii10035',
1348 'afii10036', 'afii10037', 'afii10024', 'afii10019',
1349 'afii10046', 'afii10045', 'afii10025', 'afii10042',
1350 'afii10047', 'afii10043', 'afii10041', 'afii10044'
1351 ]
1352 }
1353
1354 def ReadAFM(file, map)
1355
1356 # Read a font metric file
1357 a = IO.readlines(file)
1358
1359 raise "File no found: #{file}" if a.size == 0
1360
1361 widths = {}
1362 fm = {}
1363 fix = { 'Edot' => 'Edotaccent', 'edot' => 'edotaccent',
1364 'Idot' => 'Idotaccent',
1365 'Zdot' => 'Zdotaccent', 'zdot' => 'zdotaccent',
1366 'Odblacute' => 'Ohungarumlaut', 'odblacute' => 'ohungarumlaut',
1367 'Udblacute' => 'Uhungarumlaut', 'udblacute' => 'uhungarumlaut',
1368 'Gcedilla' => 'Gcommaaccent', 'gcedilla' => 'gcommaaccent',
1369 'Kcedilla' => 'Kcommaaccent', 'kcedilla' => 'kcommaaccent',
1370 'Lcedilla' => 'Lcommaaccent', 'lcedilla' => 'lcommaaccent',
1371 'Ncedilla' => 'Ncommaaccent', 'ncedilla' => 'ncommaaccent',
1372 'Rcedilla' => 'Rcommaaccent', 'rcedilla' => 'rcommaaccent',
1373 'Scedilla' => 'Scommaaccent',' scedilla' => 'scommaaccent',
1374 'Tcedilla' => 'Tcommaaccent',' tcedilla' => 'tcommaaccent',
1375 'Dslash' => 'Dcroat', 'dslash' => 'dcroat',
1376 'Dmacron' => 'Dcroat', 'dmacron' => 'dcroat',
1377 'combininggraveaccent' => 'gravecomb',
1378 'combininghookabove' => 'hookabovecomb',
1379 'combiningtildeaccent' => 'tildecomb',
1380 'combiningacuteaccent' => 'acutecomb',
1381 'combiningdotbelow' => 'dotbelowcomb',
1382 'dongsign' => 'dong'
1383 }
1384
1385 a.each do |line|
1386
1387 e = line.rstrip.split(' ')
1388 next if e.size < 2
1389
1390 code = e[0]
1391 param = e[1]
1392
1393 if code == 'C' then
1394
1395 # Character metrics
1396 cc = e[1].to_i
1397 w = e[4]
1398 gn = e[7]
1399
1400 gn = 'Euro' if gn[-4, 4] == '20AC'
1401
1402 if fix[gn] then
1403
1404 # Fix incorrect glyph name
1405 0.upto(map.size - 1) do |i|
1406 if map[i] == fix[gn] then
1407 map[i] = gn
1408 end
1409 end
1410 end
1411
1412 if map.size == 0 then
1413 # Symbolic font: use built-in encoding
1414 widths[cc] = w
1415 else
1416 widths[gn] = w
1417 fm['CapXHeight'] = e[13].to_i if gn == 'X'
1418 end
1419
1420 fm['MissingWidth'] = w if gn == '.notdef'
1421
1422 elsif code == 'FontName' then
1423 fm['FontName'] = param
1424 elsif code == 'Weight' then
1425 fm['Weight'] = param
1426 elsif code == 'ItalicAngle' then
1427 fm['ItalicAngle'] = param.to_f
1428 elsif code == 'Ascender' then
1429 fm['Ascender'] = param.to_i
1430 elsif code == 'Descender' then
1431 fm['Descender'] = param.to_i
1432 elsif code == 'UnderlineThickness' then
1433 fm['UnderlineThickness'] = param.to_i
1434 elsif code == 'UnderlinePosition' then
1435 fm['UnderlinePosition'] = param.to_i
1436 elsif code == 'IsFixedPitch' then
1437 fm['IsFixedPitch'] = (param == 'true')
1438 elsif code == 'FontBBox' then
1439 fm['FontBBox'] = "[#{e[1]},#{e[2]},#{e[3]},#{e[4]}]"
1440 elsif code == 'CapHeight' then
1441 fm['CapHeight'] = param.to_i
1442 elsif code == 'StdVW' then
1443 fm['StdVW'] = param.to_i
1444 end
1445 end
1446
1447 raise 'FontName not found' unless fm['FontName']
1448
1449 if map.size > 0 then
1450 widths['.notdef'] = 600 unless widths['.notdef']
1451
1452 if (widths['Delta'] == nil) && widths['increment'] then
1453 widths['Delta'] = widths['increment']
1454 end
1455
1456 # Order widths according to map
1457 0.upto(255) do |i|
1458 if widths[map[i]] == nil
1459 puts "Warning: character #{map[i]} is missing"
1460 widths[i] = widths['.notdef']
1461 else
1462 widths[i] = widths[map[i]]
1463 end
1464 end
1465 end
1466
1467 fm['Widths'] = widths
1468
1469 return fm
1470 end
1471
1472 def MakeFontDescriptor(fm, symbolic)
1473
1474 # Ascent
1475 asc = fm['Ascender'] ? fm['Ascender'] : 1000
1476 fd = "{\n 'Ascent' => '#{asc}'"
1477
1478 # Descent
1479 desc = fm['Descender'] ? fm['Descender'] : -200
1480 fd += ", 'Descent' => '#{desc}'"
1481
1482 # CapHeight
1483 if fm['CapHeight'] then
1484 ch = fm['CapHeight']
1485 elsif fm['CapXHeight']
1486 ch = fm['CapXHeight']
1487 else
1488 ch = asc
1489 end
1490 fd += ", 'CapHeight' => '#{ch}'"
1491
1492 # Flags
1493 flags = 0
1494
1495 if fm['IsFixedPitch'] then
1496 flags += 1 << 0
1497 end
1498
1499 if symbolic then
1500 flags += 1 << 2
1501 else
1502 flags += 1 << 5
1503 end
1504
1505 if fm['ItalicAngle'] && (fm['ItalicAngle'] != 0) then
1506 flags += 1 << 6
1507 end
1508
1509 fd += ",\n 'Flags' => '#{flags}'"
1510
1511 # FontBBox
1512 if fm['FontBBox'] then
1513 fbb = fm['FontBBox'].gsub(/,/, ' ')
1514 else
1515 fbb = "[0 #{desc - 100} 1000 #{asc + 100}]"
1516 end
1517
1518 fd += ", 'FontBBox' => '#{fbb}'"
1519
1520 # ItalicAngle
1521 ia = fm['ItalicAngle'] ? fm['ItalicAngle'] : 0
1522 fd += ",\n 'ItalicAngle' => '#{ia}'"
1523
1524 # StemV
1525 if fm['StdVW'] then
1526 stemv = fm['StdVW']
1527 elsif fm['Weight'] && (/bold|black/i =~ fm['Weight'])
1528 stemv = 120
1529 else
1530 stemv = 70
1531 end
1532
1533 fd += ", 'StemV' => '#{stemv}'"
1534
1535 # MissingWidth
1536 if fm['MissingWidth'] then
1537 fd += ", 'MissingWidth' => '#{fm['MissingWidth']}'"
1538 end
1539
1540 fd += "\n }"
1541 return fd
1542 end
1543
1544 def MakeWidthArray(fm)
1545
1546 # Make character width array
1547 s = " [\n "
1548
1549 cw = fm['Widths']
1550
1551 0.upto(255) do |i|
1552 s += "%5d" % cw[i]
1553 s += "," if i != 255
1554 s += "\n " if (i % 8) == 7
1555 end
1556
1557 s += ']'
1558
1559 return s
1560 end
1561
1562 def MakeFontEncoding(map)
1563
1564 # Build differences from reference encoding
1565 ref = Charencodings['cp1252']
1566 s = ''
1567 last = 0
1568 32.upto(255) do |i|
1569 if map[i] != ref[i] then
1570 if i != last + 1 then
1571 s += i.to_s + ' '
1572 end
1573 last = i
1574 s += '/' + map[i] + ' '
1575 end
1576 end
1577 return s.rstrip
1578 end
1579
1580 def ReadShort(f)
1581 a = f.read(2).unpack('n')
1582 return a[0]
1583 end
1584
1585 def ReadLong(f)
1586 a = f.read(4).unpack('N')
1587 return a[0]
1588 end
1589
1590 def CheckTTF(file)
1591
1592 rl = false
1593 pp = false
1594 e = false
1595
1596 # Check if font license allows embedding
1597 File.open(file, 'rb') do |f|
1598
1599 # Extract number of tables
1600 f.seek(4, IO::SEEK_CUR)
1601 nb = ReadShort(f)
1602 f.seek(6, IO::SEEK_CUR)
1603
1604 # Seek OS/2 table
1605 found = false
1606 0.upto(nb - 1) do |i|
1607 if f.read(4) == 'OS/2' then
1608 found = true
1609 break
1610 end
1611
1612 f.seek(12, IO::SEEK_CUR)
1613 end
1614
1615 if ! found then
1616 return
1617 end
1618
1619 f.seek(4, IO::SEEK_CUR)
1620 offset = ReadLong(f)
1621 f.seek(offset, IO::SEEK_SET)
1622
1623 # Extract fsType flags
1624 f.seek(8, IO::SEEK_CUR)
1625 fsType = ReadShort(f)
1626
1627 rl = (fsType & 0x02) != 0
1628 pp = (fsType & 0x04) != 0
1629 e = (fsType & 0x08) != 0
1630 end
1631
1632 if rl && ( ! pp) && ( ! e) then
1633 puts 'Warning: font license does not allow embedding'
1634 end
1635 end
1636
1637 #
1638 # fontfile: path to TTF file (or empty string if not to be embedded)
1639 # afmfile: path to AFM file
1640 # enc: font encoding (or empty string for symbolic fonts)
1641 # patch: optional patch for encoding
1642 # type : font type if $fontfile is empty
1643 #
1644 def MakeFont(fontfile, afmfile, enc = 'cp1252', patch = {}, type = 'TrueType')
1645 # Generate a font definition file
1646 if (enc != nil) && (enc != '') then
1647 map = Charencodings[enc]
1648 patch.each { |cc, gn| map[cc] = gn }
1649 else
1650 map = []
1651 end
1652
1653 raise "Error: AFM file not found: #{afmfile}" unless File.exists?(afmfile)
1654
1655 fm = ReadAFM(afmfile, map)
1656
1657 if (enc != nil) && (enc != '') then
1658 diff = MakeFontEncoding(map)
1659 else
1660 diff = ''
1661 end
1662
1663 fd = MakeFontDescriptor(fm, (map.size == 0))
1664
1665 # Find font type
1666 if fontfile then
1667 ext = File.extname(fontfile).downcase.sub(/^\./, '')
1668
1669 if ext == 'ttf' then
1670 type = 'TrueType'
1671 elsif ext == 'pfb'
1672 type = 'Type1'
1673 else
1674 raise "Error: unrecognized font file extension: #{ext}"
1675 end
1676 else
1677 raise "Error: incorrect font type: #{type}" if (type != 'TrueType') && (type != 'Type1')
1678 end
1679 printf "type = #{type}\n"
1680 # Start generation
1681 s = "# #{fm['FontName']} font definition\n\n"
1682 s += "module FontDef\n"
1683 s += " def FontDef.type\n '#{type}'\n end\n"
1684 s += " def FontDef.name\n '#{fm['FontName']}'\n end\n"
1685 s += " def FontDef.desc\n #{fd}\n end\n"
1686
1687 if fm['UnderlinePosition'] == nil then
1688 fm['UnderlinePosition'] = -100
1689 end
1690
1691 if fm['UnderlineThickness'] == nil then
1692 fm['UnderlineThickness'] = 50
1693 end
1694
1695 s += " def FontDef.up\n #{fm['UnderlinePosition']}\n end\n"
1696 s += " def FontDef.ut\n #{fm['UnderlineThickness']}\n end\n"
1697
1698 w = MakeWidthArray(fm)
1699 s += " def FontDef.cw\n#{w}\n end\n"
1700
1701 s += " def FontDef.enc\n '#{enc}'\n end\n"
1702 s += " def FontDef.diff\n #{(diff == nil) || (diff == '') ? 'nil' : '\'' + diff '\''}\n end\n"
1703
1704 basename = File.basename(afmfile, '.*')
1705
1706 if fontfile then
1707 # Embedded font
1708 if ! File.exist?(fontfile) then
1709 raise "Error: font file not found: #{fontfile}"
1710 end
1711
1712 if type == 'TrueType' then
1713 CheckTTF(fontfile)
1714 end
1715
1716 file = ''
1717 File.open(fontfile, 'rb') do |f|
1718 file = f.read()
1719 end
1720
1721 if type == 'Type1' then
1722 # Find first two sections and discard third one
1723 header = file[0] == 128
1724 file = file[6, file.length - 6] if header
1725
1726 pos = file.index('eexec')
1727 raise 'Error: font file does not seem to be valid Type1' if pos == nil
1728
1729 size1 = pos + 6
1730
1731 file = file[0, size1] + file[size1 + 6, file.length - (size1 + 6)] if header && file[size1] == 128
1732
1733 pos = file.index('00000000')
1734 raise 'Error: font file does not seem to be valid Type1' if pos == nil
1735
1736 size2 = pos - size1
1737 file = file[0, size1 + size2]
1738 end
1739
1740 if require 'zlib' then
1741 File.open(basename + '.z', 'wb') { |f| f.write(Zlib::Deflate.deflate(file)) }
1742 s += " def FontDef.file\n '#{basename}.z'\n end\n"
1743 puts "Font file compressed ('#{basename}.z')"
1744 else
1745 s += " def FontDef.file\n '#{File.basename(fontfile)}'\n end\n"
1746 puts 'Notice: font file could not be compressed (zlib not available)'
1747 end
1748
1749 if type == 'Type1' then
1750 s += " def FontDef.size1\n '#{size1}'\n end\n"
1751 s += " def FontDef.size2\n '#{size2}'\n end\n"
1752 else
1753 s += " def FontDef.originalsize\n '#{File.size(fontfile)}'\n end\n"
1754 end
1755
1756 else
1757 # Not embedded font
1758 s += " def FontDef.file\n ''\n end\n"
1759 end
1760
1761 s += "end\n"
1762 File.open(basename + '.rb', 'w') { |file| file.write(s)}
1763 puts "Font definition file generated (#{basename}.rb)"
1764 end
1765
1766
1767 if $0 == __FILE__ then
1768 if ARGV.length >= 3 then
1769 enc = ARGV[2]
1770 else
1771 enc = 'cp1252'
1772 end
1773
1774 if ARGV.length >= 4 then
1775 patch = ARGV[3]
1776 else
1777 patch = {}
1778 end
1779
1780 if ARGV.length >= 5 then
1781 type = ARGV[4]
1782 else
1783 type = 'TrueType'
1784 end
1785
1786 MakeFont(ARGV[0], ARGV[1], enc, patch, type)
1787 end