1/*
2 * << Haru Free PDF Library >> -- hpdf_encoder.c
3 *
4 * URL: http://libharu.org
5 *
6 * Copyright (c) 1999-2006 Takeshi Kanno <takeshi_kanno@est.hi-ho.ne.jp>
7 * Copyright (c) 2007-2009 Antony Dovgal <tony@daylessday.org>
8 *
9 * Permission to use, copy, modify, distribute and sell this software
10 * and its documentation for any purpose is hereby granted without fee,
11 * provided that the above copyright notice appear in all copies and
12 * that both that copyright notice and this permission notice appear
13 * in supporting documentation.
14 * It is provided "as is" without express or implied warranty.
15 *
16 */
17
18#include "hpdf_conf.h"
19#include "hpdf_utils.h"
20#include "hpdf_encoder.h"
21#include "hpdf.h"
22
23typedef struct _HPDF_UnicodeGryphPair {
24 HPDF_UNICODE unicode;
25 const char *gryph_name;
26} HPDF_UnicodeGryphPair;
27
28#define HPDF_BASIC_ENCODER_FIRST_CHAR 32
29#define HPDF_BASIC_ENCODER_LAST_CHAR 255
30
31static const HPDF_UnicodeGryphPair HPDF_UNICODE_GRYPH_NAME_MAP[] = {
32 {0x0000, char_NOTDEF},
33 {0x0020, "space"},
34 {0x0021, "exclam"},
35 {0x0022, "quotedbl"},
36 {0x0023, "numbersign"},
37 {0x0024, "dollar"},
38 {0x0025, "percent"},
39 {0x0026, "ampersand"},
40 {0x0027, "quotesingle"},
41 {0x0028, "parenleft"},
42 {0x0029, "parenright"},
43 {0x002A, "asterisk"},
44 {0x002B, "plus"},
45 {0x002C, "comma"},
46 {0x002D, "hyphen"},
47 {0x002E, "period"},
48 {0x002F, "slash"},
49 {0x0030, "zero"},
50 {0x0031, "one"},
51 {0x0032, "two"},
52 {0x0033, "three"},
53 {0x0034, "four"},
54 {0x0035, "five"},
55 {0x0036, "six"},
56 {0x0037, "seven"},
57 {0x0038, "eight"},
58 {0x0039, "nine"},
59 {0x003A, "colon"},
60 {0x003B, "semicolon"},
61 {0x003C, "less"},
62 {0x003D, "equal"},
63 {0x003E, "greater"},
64 {0x003F, "question"},
65 {0x0040, "at"},
66 {0x0041, "A"},
67 {0x0042, "B"},
68 {0x0043, "C"},
69 {0x0044, "D"},
70 {0x0045, "E"},
71 {0x0046, "F"},
72 {0x0047, "G"},
73 {0x0048, "H"},
74 {0x0049, "I"},
75 {0x004A, "J"},
76 {0x004B, "K"},
77 {0x004C, "L"},
78 {0x004D, "M"},
79 {0x004E, "N"},
80 {0x004F, "O"},
81 {0x0050, "P"},
82 {0x0051, "Q"},
83 {0x0052, "R"},
84 {0x0053, "S"},
85 {0x0054, "T"},
86 {0x0055, "U"},
87 {0x0056, "V"},
88 {0x0057, "W"},
89 {0x0058, "X"},
90 {0x0059, "Y"},
91 {0x005A, "Z"},
92 {0x005B, "bracketleft"},
93 {0x005C, "backslash"},
94 {0x005D, "bracketright"},
95 {0x005E, "asciicircum"},
96 {0x005F, "underscore"},
97 {0x0060, "grave"},
98 {0x0061, "a"},
99 {0x0062, "b"},
100 {0x0063, "c"},
101 {0x0064, "d"},
102 {0x0065, "e"},
103 {0x0066, "f"},
104 {0x0067, "g"},
105 {0x0068, "h"},
106 {0x0069, "i"},
107 {0x006A, "j"},
108 {0x006B, "k"},
109 {0x006C, "l"},
110 {0x006D, "m"},
111 {0x006E, "n"},
112 {0x006F, "o"},
113 {0x0070, "p"},
114 {0x0071, "q"},
115 {0x0072, "r"},
116 {0x0073, "s"},
117 {0x0074, "t"},
118 {0x0075, "u"},
119 {0x0076, "v"},
120 {0x0077, "w"},
121 {0x0078, "x"},
122 {0x0079, "y"},
123 {0x007A, "z"},
124 {0x007B, "braceleft"},
125 {0x007C, "bar"},
126 {0x007D, "braceright"},
127 {0x007E, "asciitilde"},
128 {0x00A0, "space"},
129 {0x00A1, "exclamdown"},
130 {0x00A2, "cent"},
131 {0x00A3, "sterling"},
132 {0x00A4, "currency"},
133 {0x00A5, "yen"},
134 {0x00A6, "brokenbar"},
135 {0x00A7, "section"},
136 {0x00A8, "dieresis"},
137 {0x00A9, "copyright"},
138 {0x00AA, "ordfeminine"},
139 {0x00AB, "guillemotleft"},
140 {0x00AC, "logicalnot"},
141 {0x00AD, "hyphen"},
142 {0x00AE, "registered"},
143 {0x00AF, "macron"},
144 {0x00B0, "degree"},
145 {0x00B1, "plusminus"},
146 {0x00B2, "twosuperior"},
147 {0x00B3, "threesuperior"},
148 {0x00B4, "acute"},
149 {0x00B5, "mu"},
150 {0x00B6, "paragraph"},
151 {0x00B7, "periodcentered"},
152 {0x00B8, "cedilla"},
153 {0x00B9, "onesuperior"},
154 {0x00BA, "ordmasculine"},
155 {0x00BB, "guillemotright"},
156 {0x00BC, "onequarter"},
157 {0x00BD, "onehalf"},
158 {0x00BE, "threequarters"},
159 {0x00BF, "questiondown"},
160 {0x00C0, "Agrave"},
161 {0x00C1, "Aacute"},
162 {0x00C2, "Acircumflex"},
163 {0x00C3, "Atilde"},
164 {0x00C4, "Adieresis"},
165 {0x00C5, "Aring"},
166 {0x00C6, "AE"},
167 {0x00C7, "Ccedilla"},
168 {0x00C8, "Egrave"},
169 {0x00C9, "Eacute"},
170 {0x00CA, "Ecircumflex"},
171 {0x00CB, "Edieresis"},
172 {0x00CC, "Igrave"},
173 {0x00CD, "Iacute"},
174 {0x00CE, "Icircumflex"},
175 {0x00CF, "Idieresis"},
176 {0x00D0, "Eth"},
177 {0x00D1, "Ntilde"},
178 {0x00D2, "Ograve"},
179 {0x00D3, "Oacute"},
180 {0x00D4, "Ocircumflex"},
181 {0x00D5, "Otilde"},
182 {0x00D6, "Odieresis"},
183 {0x00D7, "multiply"},
184 {0x00D8, "Oslash"},
185 {0x00D9, "Ugrave"},
186 {0x00DA, "Uacute"},
187 {0x00DB, "Ucircumflex"},
188 {0x00DC, "Udieresis"},
189 {0x00DD, "Yacute"},
190 {0x00DE, "Thorn"},
191 {0x00DF, "germandbls"},
192 {0x00E0, "agrave"},
193 {0x00E1, "aacute"},
194 {0x00E2, "acircumflex"},
195 {0x00E3, "atilde"},
196 {0x00E4, "adieresis"},
197 {0x00E5, "aring"},
198 {0x00E6, "ae"},
199 {0x00E7, "ccedilla"},
200 {0x00E8, "egrave"},
201 {0x00E9, "eacute"},
202 {0x00EA, "ecircumflex"},
203 {0x00EB, "edieresis"},
204 {0x00EC, "igrave"},
205 {0x00ED, "iacute"},
206 {0x00EE, "icircumflex"},
207 {0x00EF, "idieresis"},
208 {0x00F0, "eth"},
209 {0x00F1, "ntilde"},
210 {0x00F2, "ograve"},
211 {0x00F3, "oacute"},
212 {0x00F4, "ocircumflex"},
213 {0x00F5, "otilde"},
214 {0x00F6, "odieresis"},
215 {0x00F7, "divide"},
216 {0x00F8, "oslash"},
217 {0x00F9, "ugrave"},
218 {0x00FA, "uacute"},
219 {0x00FB, "ucircumflex"},
220 {0x00FC, "udieresis"},
221 {0x00FD, "yacute"},
222 {0x00FE, "thorn"},
223 {0x00FF, "ydieresis"},
224 {0x0100, "Amacron"},
225 {0x0101, "amacron"},
226 {0x0102, "Abreve"},
227 {0x0103, "abreve"},
228 {0x0104, "Aogonek"},
229 {0x0105, "aogonek"},
230 {0x0106, "Cacute"},
231 {0x0107, "cacute"},
232 {0x0108, "Ccircumflex"},
233 {0x0109, "ccircumflex"},
234 {0x010A, "Cdotaccent"},
235 {0x010B, "cdotaccent"},
236 {0x010C, "Ccaron"},
237 {0x010D, "ccaron"},
238 {0x010E, "Dcaron"},
239 {0x010F, "dcaron"},
240 {0x0110, "Dcroat"},
241 {0x0111, "dcroat"},
242 {0x0112, "Emacron"},
243 {0x0113, "emacron"},
244 {0x0114, "Ebreve"},
245 {0x0115, "ebreve"},
246 {0x0116, "Edotaccent"},
247 {0x0117, "edotaccent"},
248 {0x0118, "Eogonek"},
249 {0x0119, "eogonek"},
250 {0x011A, "Ecaron"},
251 {0x011B, "ecaron"},
252 {0x011C, "Gcircumflex"},
253 {0x011D, "gcircumflex"},
254 {0x011E, "Gbreve"},
255 {0x011F, "gbreve"},
256 {0x0120, "Gdotaccent"},
257 {0x0121, "gdotaccent"},
258 {0x0122, "Gcommaaccent"},
259 {0x0123, "gcommaaccent"},
260 {0x0124, "Hcircumflex"},
261 {0x0125, "hcircumflex"},
262 {0x0126, "Hbar"},
263 {0x0127, "hbar"},
264 {0x0128, "Itilde"},
265 {0x0129, "itilde"},
266 {0x012A, "Imacron"},
267 {0x012B, "imacron"},
268 {0x012C, "Ibreve"},
269 {0x012D, "ibreve"},
270 {0x012E, "Iogonek"},
271 {0x012F, "iogonek"},
272 {0x0130, "Idotaccent"},
273 {0x0131, "dotlessi"},
274 {0x0132, "IJ"},
275 {0x0133, "ij"},
276 {0x0134, "Jcircumflex"},
277 {0x0135, "jcircumflex"},
278 {0x0136, "Kcommaaccent"},
279 {0x0137, "kcommaaccent"},
280 {0x0138, "kgreenlandic"},
281 {0x0139, "Lacute"},
282 {0x013A, "lacute"},
283 {0x013B, "Lcommaaccent"},
284 {0x013C, "lcommaaccent"},
285 {0x013D, "Lcaron"},
286 {0x013E, "lcaron"},
287 {0x013F, "Ldot"},
288 {0x0140, "ldot"},
289 {0x0141, "Lslash"},
290 {0x0142, "lslash"},
291 {0x0143, "Nacute"},
292 {0x0144, "nacute"},
293 {0x0145, "Ncommaaccent"},
294 {0x0146, "ncommaaccent"},
295 {0x0147, "Ncaron"},
296 {0x0148, "ncaron"},
297 {0x0149, "napostrophe"},
298 {0x014A, "Eng"},
299 {0x014B, "eng"},
300 {0x014C, "Omacron"},
301 {0x014D, "omacron"},
302 {0x014E, "Obreve"},
303 {0x014F, "obreve"},
304 {0x0150, "Ohungarumlaut"},
305 {0x0151, "ohungarumlaut"},
306 {0x0152, "OE"},
307 {0x0153, "oe"},
308 {0x0154, "Racute"},
309 {0x0155, "racute"},
310 {0x0156, "Rcommaaccent"},
311 {0x0157, "rcommaaccent"},
312 {0x0158, "Rcaron"},
313 {0x0159, "rcaron"},
314 {0x015A, "Sacute"},
315 {0x015B, "sacute"},
316 {0x015C, "Scircumflex"},
317 {0x015D, "scircumflex"},
318 {0x015E, "Scedilla"},
319 {0x015F, "scedilla"},
320 {0x0160, "Scaron"},
321 {0x0161, "scaron"},
322 {0x0162, "Tcommaaccent"},
323 {0x0163, "tcommaaccent"},
324 {0x0164, "Tcaron"},
325 {0x0165, "tcaron"},
326 {0x0166, "Tbar"},
327 {0x0167, "tbar"},
328 {0x0168, "Utilde"},
329 {0x0169, "utilde"},
330 {0x016A, "Umacron"},
331 {0x016B, "umacron"},
332 {0x016C, "Ubreve"},
333 {0x016D, "ubreve"},
334 {0x016E, "Uring"},
335 {0x016F, "uring"},
336 {0x0170, "Uhungarumlaut"},
337 {0x0171, "uhungarumlaut"},
338 {0x0172, "Uogonek"},
339 {0x0173, "uogonek"},
340 {0x0174, "Wcircumflex"},
341 {0x0175, "wcircumflex"},
342 {0x0176, "Ycircumflex"},
343 {0x0177, "ycircumflex"},
344 {0x0178, "Ydieresis"},
345 {0x0179, "Zacute"},
346 {0x017A, "zacute"},
347 {0x017B, "Zdotaccent"},
348 {0x017C, "zdotaccent"},
349 {0x017D, "Zcaron"},
350 {0x017E, "zcaron"},
351 {0x017F, "longs"},
352 {0x0192, "florin"},
353 {0x01A0, "Ohorn"},
354 {0x01A1, "ohorn"},
355 {0x01AF, "Uhorn"},
356 {0x01B0, "uhorn"},
357 {0x01E6, "Gcaron"},
358 {0x01E7, "gcaron"},
359 {0x01FA, "Aringacute"},
360 {0x01FB, "aringacute"},
361 {0x01FC, "AEacute"},
362 {0x01FD, "aeacute"},
363 {0x01FE, "Oslashacute"},
364 {0x01FF, "oslashacute"},
365 {0x0218, "Scommaaccent"},
366 {0x0219, "scommaaccent"},
367 {0x021A, "Tcommaaccent"},
368 {0x021B, "tcommaaccent"},
369 {0x02BC, "afii57929"},
370 {0x02BD, "afii64937"},
371 {0x02C6, "circumflex"},
372 {0x02C7, "caron"},
373 {0x02C9, "macron"},
374 {0x02D8, "breve"},
375 {0x02D9, "dotaccent"},
376 {0x02DA, "ring"},
377 {0x02DB, "ogonek"},
378 {0x02DC, "tilde"},
379 {0x02DD, "hungarumlaut"},
380 {0x0300, "gravecomb"},
381 {0x0301, "acutecomb"},
382 {0x0303, "tildecomb"},
383 {0x0309, "hookabovecomb"},
384 {0x0323, "dotbelowcomb"},
385 {0x0384, "tonos"},
386 {0x0385, "dieresistonos"},
387 {0x0386, "Alphatonos"},
388 {0x0387, "anoteleia"},
389 {0x0388, "Epsilontonos"},
390 {0x0389, "Etatonos"},
391 {0x038A, "Iotatonos"},
392 {0x038C, "Omicrontonos"},
393 {0x038E, "Upsilontonos"},
394 {0x038F, "Omegatonos"},
395 {0x0390, "iotadieresistonos"},
396 {0x0391, "Alpha"},
397 {0x0392, "Beta"},
398 {0x0393, "Gamma"},
399 {0x0394, "Delta"},
400 {0x0395, "Epsilon"},
401 {0x0396, "Zeta"},
402 {0x0397, "Eta"},
403 {0x0398, "Theta"},
404 {0x0399, "Iota"},
405 {0x039A, "Kappa"},
406 {0x039B, "Lambda"},
407 {0x039C, "Mu"},
408 {0x039D, "Nu"},
409 {0x039E, "Xi"},
410 {0x039F, "Omicron"},
411 {0x03A0, "Pi"},
412 {0x03A1, "Rho"},
413 {0x03A3, "Sigma"},
414 {0x03A4, "Tau"},
415 {0x03A5, "Upsilon"},
416 {0x03A6, "Phi"},
417 {0x03A7, "Chi"},
418 {0x03A8, "Psi"},
419 {0x03A9, "Omega"},
420 {0x03AA, "Iotadieresis"},
421 {0x03AB, "Upsilondieresis"},
422 {0x03AC, "alphatonos"},
423 {0x03AD, "epsilontonos"},
424 {0x03AE, "etatonos"},
425 {0x03AF, "iotatonos"},
426 {0x03B0, "upsilondieresistonos"},
427 {0x03B1, "alpha"},
428 {0x03B2, "beta"},
429 {0x03B3, "gamma"},
430 {0x03B4, "delta"},
431 {0x03B5, "epsilon"},
432 {0x03B6, "zeta"},
433 {0x03B7, "eta"},
434 {0x03B8, "theta"},
435 {0x03B9, "iota"},
436 {0x03BA, "kappa"},
437 {0x03BB, "lambda"},
438 {0x03BC, "mu"},
439 {0x03BD, "nu"},
440 {0x03BE, "xi"},
441 {0x03BF, "omicron"},
442 {0x03C0, "pi"},
443 {0x03C1, "rho"},
444 {0x03C2, "sigma1"},
445 {0x03C3, "sigma"},
446 {0x03C4, "tau"},
447 {0x03C5, "upsilon"},
448 {0x03C6, "phi"},
449 {0x03C7, "chi"},
450 {0x03C8, "psi"},
451 {0x03C9, "omega"},
452 {0x03CA, "iotadieresis"},
453 {0x03CB, "upsilondieresis"},
454 {0x03CC, "omicrontonos"},
455 {0x03CD, "upsilontonos"},
456 {0x03CE, "omegatonos"},
457 {0x03D1, "theta1"},
458 {0x03D2, "Upsilon1"},
459 {0x03D5, "phi1"},
460 {0x03D6, "omega1"},
461 {0x0401, "afii10023"},
462 {0x0402, "afii10051"},
463 {0x0403, "afii10052"},
464 {0x0404, "afii10053"},
465 {0x0405, "afii10054"},
466 {0x0406, "afii10055"},
467 {0x0407, "afii10056"},
468 {0x0408, "afii10057"},
469 {0x0409, "afii10058"},
470 {0x040A, "afii10059"},
471 {0x040B, "afii10060"},
472 {0x040C, "afii10061"},
473 {0x040E, "afii10062"},
474 {0x040F, "afii10145"},
475 {0x0410, "afii10017"},
476 {0x0411, "afii10018"},
477 {0x0412, "afii10019"},
478 {0x0413, "afii10020"},
479 {0x0414, "afii10021"},
480 {0x0415, "afii10022"},
481 {0x0416, "afii10024"},
482 {0x0417, "afii10025"},
483 {0x0418, "afii10026"},
484 {0x0419, "afii10027"},
485 {0x041A, "afii10028"},
486 {0x041B, "afii10029"},
487 {0x041C, "afii10030"},
488 {0x041D, "afii10031"},
489 {0x041E, "afii10032"},
490 {0x041F, "afii10033"},
491 {0x0420, "afii10034"},
492 {0x0421, "afii10035"},
493 {0x0422, "afii10036"},
494 {0x0423, "afii10037"},
495 {0x0424, "afii10038"},
496 {0x0425, "afii10039"},
497 {0x0426, "afii10040"},
498 {0x0427, "afii10041"},
499 {0x0428, "afii10042"},
500 {0x0429, "afii10043"},
501 {0x042A, "afii10044"},
502 {0x042B, "afii10045"},
503 {0x042C, "afii10046"},
504 {0x042D, "afii10047"},
505 {0x042E, "afii10048"},
506 {0x042F, "afii10049"},
507 {0x0430, "afii10065"},
508 {0x0431, "afii10066"},
509 {0x0432, "afii10067"},
510 {0x0433, "afii10068"},
511 {0x0434, "afii10069"},
512 {0x0435, "afii10070"},
513 {0x0436, "afii10072"},
514 {0x0437, "afii10073"},
515 {0x0438, "afii10074"},
516 {0x0439, "afii10075"},
517 {0x043A, "afii10076"},
518 {0x043B, "afii10077"},
519 {0x043C, "afii10078"},
520 {0x043D, "afii10079"},
521 {0x043E, "afii10080"},
522 {0x043F, "afii10081"},
523 {0x0440, "afii10082"},
524 {0x0441, "afii10083"},
525 {0x0442, "afii10084"},
526 {0x0443, "afii10085"},
527 {0x0444, "afii10086"},
528 {0x0445, "afii10087"},
529 {0x0446, "afii10088"},
530 {0x0447, "afii10089"},
531 {0x0448, "afii10090"},
532 {0x0449, "afii10091"},
533 {0x044A, "afii10092"},
534 {0x044B, "afii10093"},
535 {0x044C, "afii10094"},
536 {0x044D, "afii10095"},
537 {0x044E, "afii10096"},
538 {0x044F, "afii10097"},
539 {0x0451, "afii10071"},
540 {0x0452, "afii10099"},
541 {0x0453, "afii10100"},
542 {0x0454, "afii10101"},
543 {0x0455, "afii10102"},
544 {0x0456, "afii10103"},
545 {0x0457, "afii10104"},
546 {0x0458, "afii10105"},
547 {0x0459, "afii10106"},
548 {0x045A, "afii10107"},
549 {0x045B, "afii10108"},
550 {0x045C, "afii10109"},
551 {0x045E, "afii10110"},
552 {0x045F, "afii10193"},
553 {0x0462, "afii10146"},
554 {0x0463, "afii10194"},
555 {0x0472, "afii10147"},
556 {0x0473, "afii10195"},
557 {0x0474, "afii10148"},
558 {0x0475, "afii10196"},
559 {0x0490, "afii10050"},
560 {0x0491, "afii10098"},
561 {0x04D9, "afii10846"},
562 {0x05B0, "afii57799"},
563 {0x05B1, "afii57801"},
564 {0x05B2, "afii57800"},
565 {0x05B3, "afii57802"},
566 {0x05B4, "afii57793"},
567 {0x05B5, "afii57794"},
568 {0x05B6, "afii57795"},
569 {0x05B7, "afii57798"},
570 {0x05B8, "afii57797"},
571 {0x05B9, "afii57806"},
572 {0x05BB, "afii57796"},
573 {0x05BC, "afii57807"},
574 {0x05BD, "afii57839"},
575 {0x05BE, "afii57645"},
576 {0x05BF, "afii57841"},
577 {0x05C0, "afii57842"},
578 {0x05C1, "afii57804"},
579 {0x05C2, "afii57803"},
580 {0x05C3, "afii57658"},
581 {0x05D0, "afii57664"},
582 {0x05D1, "afii57665"},
583 {0x05D2, "afii57666"},
584 {0x05D3, "afii57667"},
585 {0x05D4, "afii57668"},
586 {0x05D5, "afii57669"},
587 {0x05D6, "afii57670"},
588 {0x05D7, "afii57671"},
589 {0x05D8, "afii57672"},
590 {0x05D9, "afii57673"},
591 {0x05DA, "afii57674"},
592 {0x05DB, "afii57675"},
593 {0x05DC, "afii57676"},
594 {0x05DD, "afii57677"},
595 {0x05DE, "afii57678"},
596 {0x05DF, "afii57679"},
597 {0x05E0, "afii57680"},
598 {0x05E1, "afii57681"},
599 {0x05E2, "afii57682"},
600 {0x05E3, "afii57683"},
601 {0x05E4, "afii57684"},
602 {0x05E5, "afii57685"},
603 {0x05E6, "afii57686"},
604 {0x05E7, "afii57687"},
605 {0x05E8, "afii57688"},
606 {0x05E9, "afii57689"},
607 {0x05EA, "afii57690"},
608 {0x05F0, "afii57716"},
609 {0x05F1, "afii57717"},
610 {0x05F2, "afii57718"},
611 {0x060C, "afii57388"},
612 {0x061B, "afii57403"},
613 {0x061F, "afii57407"},
614 {0x0621, "afii57409"},
615 {0x0622, "afii57410"},
616 {0x0623, "afii57411"},
617 {0x0624, "afii57412"},
618 {0x0625, "afii57413"},
619 {0x0626, "afii57414"},
620 {0x0627, "afii57415"},
621 {0x0628, "afii57416"},
622 {0x0629, "afii57417"},
623 {0x062A, "afii57418"},
624 {0x062B, "afii57419"},
625 {0x062C, "afii57420"},
626 {0x062D, "afii57421"},
627 {0x062E, "afii57422"},
628 {0x062F, "afii57423"},
629 {0x0630, "afii57424"},
630 {0x0631, "afii57425"},
631 {0x0632, "afii57426"},
632 {0x0633, "afii57427"},
633 {0x0634, "afii57428"},
634 {0x0635, "afii57429"},
635 {0x0636, "afii57430"},
636 {0x0637, "afii57431"},
637 {0x0638, "afii57432"},
638 {0x0639, "afii57433"},
639 {0x063A, "afii57434"},
640 {0x0640, "afii57440"},
641 {0x0641, "afii57441"},
642 {0x0642, "afii57442"},
643 {0x0643, "afii57443"},
644 {0x0644, "afii57444"},
645 {0x0645, "afii57445"},
646 {0x0646, "afii57446"},
647 {0x0647, "afii57470"},
648 {0x0648, "afii57448"},
649 {0x0649, "afii57449"},
650 {0x064A, "afii57450"},
651 {0x064B, "afii57451"},
652 {0x064C, "afii57452"},
653 {0x064D, "afii57453"},
654 {0x064E, "afii57454"},
655 {0x064F, "afii57455"},
656 {0x0650, "afii57456"},
657 {0x0651, "afii57457"},
658 {0x0652, "afii57458"},
659 {0x0660, "afii57392"},
660 {0x0661, "afii57393"},
661 {0x0662, "afii57394"},
662 {0x0663, "afii57395"},
663 {0x0664, "afii57396"},
664 {0x0665, "afii57397"},
665 {0x0666, "afii57398"},
666 {0x0667, "afii57399"},
667 {0x0668, "afii57400"},
668 {0x0669, "afii57401"},
669 {0x066A, "afii57381"},
670 {0x066D, "afii63167"},
671 {0x0679, "afii57511"},
672 {0x067E, "afii57506"},
673 {0x0686, "afii57507"},
674 {0x0688, "afii57512"},
675 {0x0691, "afii57513"},
676 {0x0698, "afii57508"},
677 {0x06A4, "afii57505"},
678 {0x06AF, "afii57509"},
679 {0x06BA, "afii57514"},
680 {0x06D2, "afii57519"},
681 {0x06D5, "afii57534"},
682 {0x1E80, "Wgrave"},
683 {0x1E81, "wgrave"},
684 {0x1E82, "Wacute"},
685 {0x1E83, "wacute"},
686 {0x1E84, "Wdieresis"},
687 {0x1E85, "wdieresis"},
688 {0x1EF2, "Ygrave"},
689 {0x1EF3, "ygrave"},
690 {0x200C, "afii61664"},
691 {0x200D, "afii301"},
692 {0x200E, "afii299"},
693 {0x200F, "afii300"},
694 {0x2012, "figuredash"},
695 {0x2013, "endash"},
696 {0x2014, "emdash"},
697 {0x2015, "afii00208"},
698 {0x2017, "underscoredbl"},
699 {0x2018, "quoteleft"},
700 {0x2019, "quoteright"},
701 {0x201A, "quotesinglbase"},
702 {0x201B, "quotereversed"},
703 {0x201C, "quotedblleft"},
704 {0x201D, "quotedblright"},
705 {0x201E, "quotedblbase"},
706 {0x2020, "dagger"},
707 {0x2021, "daggerdbl"},
708 {0x2022, "bullet"},
709 {0x2024, "onedotenleader"},
710 {0x2025, "twodotenleader"},
711 {0x2026, "ellipsis"},
712 {0x202C, "afii61573"},
713 {0x202D, "afii61574"},
714 {0x202E, "afii61575"},
715 {0x2030, "perthousand"},
716 {0x2032, "minute"},
717 {0x2033, "second"},
718 {0x2039, "guilsinglleft"},
719 {0x203A, "guilsinglright"},
720 {0x203C, "exclamdbl"},
721 {0x2044, "fraction"},
722 {0x2070, "zerosuperior"},
723 {0x2074, "foursuperior"},
724 {0x2075, "fivesuperior"},
725 {0x2076, "sixsuperior"},
726 {0x2077, "sevensuperior"},
727 {0x2078, "eightsuperior"},
728 {0x2079, "ninesuperior"},
729 {0x207D, "parenleftsuperior"},
730 {0x207E, "parenrightsuperior"},
731 {0x207F, "nsuperior"},
732 {0x2080, "zeroinferior"},
733 {0x2081, "oneinferior"},
734 {0x2082, "twoinferior"},
735 {0x2083, "threeinferior"},
736 {0x2084, "fourinferior"},
737 {0x2085, "fiveinferior"},
738 {0x2086, "sixinferior"},
739 {0x2087, "seveninferior"},
740 {0x2088, "eightinferior"},
741 {0x2089, "nineinferior"},
742 {0x208D, "parenleftinferior"},
743 {0x208E, "parenrightinferior"},
744 {0x20A1, "colonmonetary"},
745 {0x20A3, "franc"},
746 {0x20A4, "lira"},
747 {0x20A7, "peseta"},
748 {0x20AA, "afii57636"},
749 {0x20AB, "dong"},
750 {0x20AC, "Euro"},
751 {0x2105, "afii61248"},
752 {0x2111, "Ifraktur"},
753 {0x2113, "afii61289"},
754 {0x2116, "afii61352"},
755 {0x2118, "weierstrass"},
756 {0x211C, "Rfraktur"},
757 {0x211E, "prescription"},
758 {0x2122, "trademark"},
759 {0x2126, "Omega"},
760 {0x212E, "estimated"},
761 {0x2135, "aleph"},
762 {0x2153, "onethird"},
763 {0x2154, "twothirds"},
764 {0x215B, "oneeighth"},
765 {0x215C, "threeeighths"},
766 {0x215D, "fiveeighths"},
767 {0x215E, "seveneighths"},
768 {0x2190, "arrowleft"},
769 {0x2191, "arrowup"},
770 {0x2192, "arrowright"},
771 {0x2193, "arrowdown"},
772 {0x2194, "arrowboth"},
773 {0x2195, "arrowupdn"},
774 {0x21A8, "arrowupdnbse"},
775 {0x21B5, "carriagereturn"},
776 {0x21D0, "arrowdblleft"},
777 {0x21D1, "arrowdblup"},
778 {0x21D2, "arrowdblright"},
779 {0x21D3, "arrowdbldown"},
780 {0x21D4, "arrowdblboth"},
781 {0x2200, "universal"},
782 {0x2202, "partialdiff"},
783 {0x2203, "existential"},
784 {0x2205, "emptyset"},
785 {0x2206, "Delta"},
786 {0x2207, "gradient"},
787 {0x2208, "element"},
788 {0x2209, "notelement"},
789 {0x220B, "suchthat"},
790 {0x220F, "product"},
791 {0x2211, "summation"},
792 {0x2212, "minus"},
793 {0x2215, "fraction"},
794 {0x2217, "asteriskmath"},
795 {0x2219, "periodcentered"},
796 {0x221A, "radical"},
797 {0x221D, "proportional"},
798 {0x221E, "infinity"},
799 {0x221F, "orthogonal"},
800 {0x2220, "angle"},
801 {0x2227, "logicaland"},
802 {0x2228, "logicalor"},
803 {0x2229, "intersection"},
804 {0x222A, "union"},
805 {0x222B, "integral"},
806 {0x2234, "therefore"},
807 {0x223C, "similar"},
808 {0x2245, "congruent"},
809 {0x2248, "approxequal"},
810 {0x2260, "notequal"},
811 {0x2261, "equivalence"},
812 {0x2264, "lessequal"},
813 {0x2265, "greaterequal"},
814 {0x2282, "propersubset"},
815 {0x2283, "propersuperset"},
816 {0x2284, "notsubset"},
817 {0x2286, "reflexsubset"},
818 {0x2287, "reflexsuperset"},
819 {0x2295, "circleplus"},
820 {0x2297, "circlemultiply"},
821 {0x22A5, "perpendicular"},
822 {0x22C5, "dotmath"},
823 {0x2302, "house"},
824 {0x2310, "revlogicalnot"},
825 {0x2320, "integraltp"},
826 {0x2321, "integralbt"},
827 {0x2329, "angleleft"},
828 {0x232A, "angleright"},
829 {0x2500, "SF100000"},
830 {0x2502, "SF110000"},
831 {0x250C, "SF010000"},
832 {0x2510, "SF030000"},
833 {0x2514, "SF020000"},
834 {0x2518, "SF040000"},
835 {0x251C, "SF080000"},
836 {0x2524, "SF090000"},
837 {0x252C, "SF060000"},
838 {0x2534, "SF070000"},
839 {0x253C, "SF050000"},
840 {0x2550, "SF430000"},
841 {0x2551, "SF240000"},
842 {0x2552, "SF510000"},
843 {0x2553, "SF520000"},
844 {0x2554, "SF390000"},
845 {0x2555, "SF220000"},
846 {0x2556, "SF210000"},
847 {0x2557, "SF250000"},
848 {0x2558, "SF500000"},
849 {0x2559, "SF490000"},
850 {0x255A, "SF380000"},
851 {0x255B, "SF280000"},
852 {0x255C, "SF270000"},
853 {0x255D, "SF260000"},
854 {0x255E, "SF360000"},
855 {0x255F, "SF370000"},
856 {0x2560, "SF420000"},
857 {0x2561, "SF190000"},
858 {0x2562, "SF200000"},
859 {0x2563, "SF230000"},
860 {0x2564, "SF470000"},
861 {0x2565, "SF480000"},
862 {0x2566, "SF410000"},
863 {0x2567, "SF450000"},
864 {0x2568, "SF460000"},
865 {0x2569, "SF400000"},
866 {0x256A, "SF540000"},
867 {0x256B, "SF530000"},
868 {0x256C, "SF440000"},
869 {0x2580, "upblock"},
870 {0x2584, "dnblock"},
871 {0x2588, "block"},
872 {0x258C, "lfblock"},
873 {0x2590, "rtblock"},
874 {0x2591, "ltshade"},
875 {0x2592, "shade"},
876 {0x2593, "dkshade"},
877 {0x25A0, "filledbox"},
878 {0x25A1, "H22073"},
879 {0x25AA, "H18543"},
880 {0x25AB, "H18551"},
881 {0x25AC, "filledrect"},
882 {0x25B2, "triagup"},
883 {0x25BA, "triagrt"},
884 {0x25BC, "triagdn"},
885 {0x25C4, "triaglf"},
886 {0x25CA, "lozenge"},
887 {0x25CB, "circle"},
888 {0x25CF, "H18533"},
889 {0x25D8, "invbullet"},
890 {0x25D9, "invcircle"},
891 {0x25E6, "openbullet"},
892 {0x263A, "smileface"},
893 {0x263B, "invsmileface"},
894 {0x263C, "sun"},
895 {0x2640, "female"},
896 {0x2642, "male"},
897 {0x2660, "spade"},
898 {0x2663, "club"},
899 {0x2665, "heart"},
900 {0x2666, "diamond"},
901 {0x266A, "musicalnote"},
902 {0x266B, "musicalnotedbl"},
903 {0xF6BE, "dotlessj"},
904 {0xF6BF, "LL"},
905 {0xF6C0, "ll"},
906 {0xF6C1, "Scedilla"},
907 {0xF6C2, "scedilla"},
908 {0xF6C3, "commaaccent"},
909 {0xF6C4, "afii10063"},
910 {0xF6C5, "afii10064"},
911 {0xF6C6, "afii10192"},
912 {0xF6C7, "afii10831"},
913 {0xF6C8, "afii10832"},
914 {0xF6C9, "Acute"},
915 {0xF6CA, "Caron"},
916 {0xF6CB, "Dieresis"},
917 {0xF6CC, "DieresisAcute"},
918 {0xF6CD, "DieresisGrave"},
919 {0xF6CE, "Grave"},
920 {0xF6CF, "Hungarumlaut"},
921 {0xF6D0, "Macron"},
922 {0xF6D1, "cyrBreve"},
923 {0xF6D2, "cyrFlex"},
924 {0xF6D3, "dblGrave"},
925 {0xF6D4, "cyrbreve"},
926 {0xF6D5, "cyrflex"},
927 {0xF6D6, "dblgrave"},
928 {0xF6D7, "dieresisacute"},
929 {0xF6D8, "dieresisgrave"},
930 {0xF6D9, "copyrightserif"},
931 {0xF6DA, "registerserif"},
932 {0xF6DB, "trademarkserif"},
933 {0xF6DC, "onefitted"},
934 {0xF6DD, "rupiah"},
935 {0xF6DE, "threequartersemdash"},
936 {0xF6DF, "centinferior"},
937 {0xF6E0, "centsuperior"},
938 {0xF6E1, "commainferior"},
939 {0xF6E2, "commasuperior"},
940 {0xF6E3, "dollarinferior"},
941 {0xF6E4, "dollarsuperior"},
942 {0xF6E5, "hypheninferior"},
943 {0xF6E6, "hyphensuperior"},
944 {0xF6E7, "periodinferior"},
945 {0xF6E8, "periodsuperior"},
946 {0xF6E9, "asuperior"},
947 {0xF6EA, "bsuperior"},
948 {0xF6EB, "dsuperior"},
949 {0xF6EC, "esuperior"},
950 {0xF6ED, "isuperior"},
951 {0xF6EE, "lsuperior"},
952 {0xF6EF, "msuperior"},
953 {0xF6F0, "osuperior"},
954 {0xF6F1, "rsuperior"},
955 {0xF6F2, "ssuperior"},
956 {0xF6F3, "tsuperior"},
957 {0xF6F4, "Brevesmall"},
958 {0xF6F5, "Caronsmall"},
959 {0xF6F6, "Circumflexsmall"},
960 {0xF6F7, "Dotaccentsmall"},
961 {0xF6F8, "Hungarumlautsmall"},
962 {0xF6F9, "Lslashsmall"},
963 {0xF6FA, "OEsmall"},
964 {0xF6FB, "Ogoneksmall"},
965 {0xF6FC, "Ringsmall"},
966 {0xF6FD, "Scaronsmall"},
967 {0xF6FE, "Tildesmall"},
968 {0xF6FF, "Zcaronsmall"},
969 {0xF721, "exclamsmall"},
970 {0xF724, "dollaroldstyle"},
971 {0xF726, "ampersandsmall"},
972 {0xF730, "zerooldstyle"},
973 {0xF731, "oneoldstyle"},
974 {0xF732, "twooldstyle"},
975 {0xF733, "threeoldstyle"},
976 {0xF734, "fouroldstyle"},
977 {0xF735, "fiveoldstyle"},
978 {0xF736, "sixoldstyle"},
979 {0xF737, "sevenoldstyle"},
980 {0xF738, "eightoldstyle"},
981 {0xF739, "nineoldstyle"},
982 {0xF73F, "questionsmall"},
983 {0xF760, "Gravesmall"},
984 {0xF761, "Asmall"},
985 {0xF762, "Bsmall"},
986 {0xF763, "Csmall"},
987 {0xF764, "Dsmall"},
988 {0xF765, "Esmall"},
989 {0xF766, "Fsmall"},
990 {0xF767, "Gsmall"},
991 {0xF768, "Hsmall"},
992 {0xF769, "Ismall"},
993 {0xF76A, "Jsmall"},
994 {0xF76B, "Ksmall"},
995 {0xF76C, "Lsmall"},
996 {0xF76D, "Msmall"},
997 {0xF76E, "Nsmall"},
998 {0xF76F, "Osmall"},
999 {0xF770, "Psmall"},
1000 {0xF771, "Qsmall"},
1001 {0xF772, "Rsmall"},
1002 {0xF773, "Ssmall"},
1003 {0xF774, "Tsmall"},
1004 {0xF775, "Usmall"},
1005 {0xF776, "Vsmall"},
1006 {0xF777, "Wsmall"},
1007 {0xF778, "Xsmall"},
1008 {0xF779, "Ysmall"},
1009 {0xF77A, "Zsmall"},
1010 {0xF7A1, "exclamdownsmall"},
1011 {0xF7A2, "centoldstyle"},
1012 {0xF7A8, "Dieresissmall"},
1013 {0xF7AF, "Macronsmall"},
1014 {0xF7B4, "Acutesmall"},
1015 {0xF7B8, "Cedillasmall"},
1016 {0xF7BF, "questiondownsmall"},
1017 {0xF7E0, "Agravesmall"},
1018 {0xF7E1, "Aacutesmall"},
1019 {0xF7E2, "Acircumflexsmall"},
1020 {0xF7E3, "Atildesmall"},
1021 {0xF7E4, "Adieresissmall"},
1022 {0xF7E5, "Aringsmall"},
1023 {0xF7E6, "AEsmall"},
1024 {0xF7E7, "Ccedillasmall"},
1025 {0xF7E8, "Egravesmall"},
1026 {0xF7E9, "Eacutesmall"},
1027 {0xF7EA, "Ecircumflexsmall"},
1028 {0xF7EB, "Edieresissmall"},
1029 {0xF7EC, "Igravesmall"},
1030 {0xF7ED, "Iacutesmall"},
1031 {0xF7EE, "Icircumflexsmall"},
1032 {0xF7EF, "Idieresissmall"},
1033 {0xF7F0, "Ethsmall"},
1034 {0xF7F1, "Ntildesmall"},
1035 {0xF7F2, "Ogravesmall"},
1036 {0xF7F3, "Oacutesmall"},
1037 {0xF7F4, "Ocircumflexsmall"},
1038 {0xF7F5, "Otildesmall"},
1039 {0xF7F6, "Odieresissmall"},
1040 {0xF7F8, "Oslashsmall"},
1041 {0xF7F9, "Ugravesmall"},
1042 {0xF7FA, "Uacutesmall"},
1043 {0xF7FB, "Ucircumflexsmall"},
1044 {0xF7FC, "Udieresissmall"},
1045 {0xF7FD, "Yacutesmall"},
1046 {0xF7FE, "Thornsmall"},
1047 {0xF7FF, "Ydieresissmall"},
1048 {0xF8E5, "radicalex"},
1049 {0xF8E6, "arrowvertex"},
1050 {0xF8E7, "arrowhorizex"},
1051 {0xF8E8, "registersans"},
1052 {0xF8E9, "copyrightsans"},
1053 {0xF8EA, "trademarksans"},
1054 {0xF8EB, "parenlefttp"},
1055 {0xF8EC, "parenleftex"},
1056 {0xF8ED, "parenleftbt"},
1057 {0xF8EE, "bracketlefttp"},
1058 {0xF8EF, "bracketleftex"},
1059 {0xF8F0, "bracketleftbt"},
1060 {0xF8F1, "bracelefttp"},
1061 {0xF8F2, "braceleftmid"},
1062 {0xF8F3, "braceleftbt"},
1063 {0xF8F4, "braceex"},
1064 {0xF8F5, "integralex"},
1065 {0xF8F6, "parenrighttp"},
1066 {0xF8F7, "parenrightex"},
1067 {0xF8F8, "parenrightbt"},
1068 {0xF8F9, "bracketrighttp"},
1069 {0xF8FA, "bracketrightex"},
1070 {0xF8FB, "bracketrightbt"},
1071 {0xF8FC, "bracerighttp"},
1072 {0xF8FD, "bracerightmid"},
1073 {0xF8FE, "bracerightbt"},
1074 {0xFB00, "ff"},
1075 {0xFB01, "fi"},
1076 {0xFB02, "fl"},
1077 {0xFB03, "ffi"},
1078 {0xFB04, "ffl"},
1079 {0xFB1F, "afii57705"},
1080 {0xFB2A, "afii57694"},
1081 {0xFB2B, "afii57695"},
1082 {0xFB35, "afii57723"},
1083 {0xFB4B, "afii57700"},
1084 {0xFFFF, NULL}
1085};
1086
1087static const HPDF_UNICODE HPDF_UNICODE_MAP_STANDARD[] = {
1088 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x2019,
1089 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1090 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1091 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1092 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1093 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1094 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1095 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1096 0x2018, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1097 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1098 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1099 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x0000,
1100 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1101 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1102 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1103 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1104 0x0000, 0x00A1, 0x00A2, 0x00A3, 0x2044, 0x00A5, 0x0192, 0x00A7,
1105 0x00A4, 0x0027, 0x201C, 0x00AB, 0x2039, 0x203A, 0xFB01, 0xFB02,
1106 0x0000, 0x2013, 0x2020, 0x2021, 0x00B7, 0x0000, 0x00B6, 0x2022,
1107 0x201A, 0x201E, 0x201D, 0x00BB, 0x2026, 0x2030, 0x0000, 0x00BF,
1108 0x0000, 0x0060, 0x00B4, 0x02C6, 0x02DC, 0x00AF, 0x02D8, 0x02D9,
1109 0x00A8, 0x0000, 0x02DA, 0x00B8, 0x0000, 0x02DD, 0x02DB, 0x02C7,
1110 0x2014, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1111 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1112 0x0000, 0x00C6, 0x0000, 0x00AA, 0x0000, 0x0000, 0x0000, 0x0000,
1113 0x0141, 0x00D8, 0x0152, 0x00BA, 0x0000, 0x0000, 0x0000, 0x0000,
1114 0x0000, 0x00E6, 0x0000, 0x0000, 0x0000, 0x0131, 0x0000, 0x0000,
1115 0x0142, 0x00F8, 0x0153, 0x00DF, 0x0000, 0x0000, 0x0000, 0x0000
1116};
1117
1118static const HPDF_UNICODE HPDF_UNICODE_MAP_WIN_ANSI[] = {
1119 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1120 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1121 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1122 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1123 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1124 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1125 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1126 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1127 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1128 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1129 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1130 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x0000,
1131 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
1132 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x017D, 0x0000,
1133 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
1134 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x0000, 0x017E, 0x0178,
1135 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
1136 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
1137 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
1138 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
1139 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
1140 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
1141 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
1142 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
1143 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
1144 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
1145 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
1146 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF
1147};
1148
1149static const HPDF_UNICODE HPDF_UNICODE_MAP_MAC_ROMAN[] = {
1150 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1151 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1152 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1153 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1154 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1155 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1156 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1157 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1158 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1159 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1160 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1161 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x0000,
1162 0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6, 0x00DC, 0x00E1,
1163 0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8,
1164 0x00EA, 0x00EB, 0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3,
1165 0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9, 0x00FB, 0x00FC,
1166 0x2020, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF,
1167 0x00AE, 0x00A9, 0x2122, 0x00B4, 0x00A8, 0x2260, 0x00C6, 0x00D8,
1168 0x221E, 0x00B1, 0x2264, 0x2265, 0x00A5, 0x00B5, 0x2202, 0x2211,
1169 0x220F, 0x03C0, 0x222B, 0x00AA, 0x00BA, 0x03A9, 0x00E6, 0x00F8,
1170 0x00BF, 0x00A1, 0x00AC, 0x221A, 0x0192, 0x2248, 0x2206, 0x00AB,
1171 0x00BB, 0x2026, 0x00A0, 0x00C0, 0x00C3, 0x00D5, 0x0152, 0x0153,
1172 0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA,
1173 0x00FF, 0x0178, 0x2044, 0x20AC, 0x2039, 0x203A, 0xFB01, 0xFB02,
1174 0x2021, 0x00B7, 0x201A, 0x201E, 0x2030, 0x00C2, 0x00CA, 0x00C1,
1175 0x00CB, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4,
1176 0xF8FF, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0x0131, 0x02C6, 0x02DC,
1177 0x00AF, 0x02D8, 0x02D9, 0x02DA, 0x00B8, 0x02DD, 0x02DB, 0x02C7
1178};
1179
1180static const HPDF_UNICODE HPDF_UNICODE_MAP_FONT_SPECIFIC[] = {
1181 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1182 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1183 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1184 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1185 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1186 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1187 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1188 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1189 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1190 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1191 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1192 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1193 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
1194 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
1195 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
1196 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
1197 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
1198 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
1199 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
1200 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
1201 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
1202 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
1203 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
1204 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
1205 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
1206 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
1207 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
1208 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF
1209};
1210
1211#define HPDF_ISO8859_FIRST_CHAR 32
1212#define HPDF_ISO8859_LAST_CHAR 255
1213
1214/*---------------------------------------------------------------------------*/
1215/*------ ISO8859-2 Encoding -------------------------------------------------*/
1216
1217static const HPDF_UNICODE HPDF_UNICODE_MAP_ISO8859_2[] = {
1218 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1219 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1220 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1221 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1222 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1223 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1224 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1225 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1226 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1227 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1228 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1229 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1230 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1231 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1232 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1233 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1234 0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7,
1235 0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B,
1236 0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7,
1237 0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C,
1238 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7,
1239 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E,
1240 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7,
1241 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF,
1242 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7,
1243 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F,
1244 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7,
1245 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9
1246};
1247
1248/*---------------------------------------------------------------------------*/
1249/*------ ISO8859-3 Encoding -------------------------------------------------*/
1250
1251static const HPDF_UNICODE HPDF_UNICODE_MAP_ISO8859_3[] = {
1252 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1253 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1254 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1255 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1256 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1257 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1258 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1259 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1260 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1261 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1262 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1263 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1264 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1265 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1266 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1267 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1268 0x00A0, 0x0126, 0x02D8, 0x00A3, 0x00A4, 0x0000, 0x0124, 0x00A7,
1269 0x00A8, 0x0130, 0x015E, 0x011E, 0x0134, 0x00AD, 0x0000, 0x017B,
1270 0x00B0, 0x0127, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x0125, 0x00B7,
1271 0x00B8, 0x0131, 0x015F, 0x011F, 0x0135, 0x00BD, 0x0000, 0x017C,
1272 0x00C0, 0x00C1, 0x00C2, 0x0000, 0x00C4, 0x010A, 0x0108, 0x00C7,
1273 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
1274 0x0000, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x0120, 0x00D6, 0x00D7,
1275 0x011C, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x016C, 0x015C, 0x00DF,
1276 0x00E0, 0x00E1, 0x00E2, 0x0000, 0x00E4, 0x010B, 0x0109, 0x00E7,
1277 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
1278 0x0000, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x0121, 0x00F6, 0x00F7,
1279 0x011D, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x016D, 0x015D, 0x02D9
1280};
1281
1282/*---------------------------------------------------------------------------*/
1283/*------ ISO8859-4 Encoding -------------------------------------------------*/
1284
1285static const HPDF_UNICODE HPDF_UNICODE_MAP_ISO8859_4[] = {
1286 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1287 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1288 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1289 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1290 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1291 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1292 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1293 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1294 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1295 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1296 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1297 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1298 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1299 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1300 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1301 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1302 0x00A0, 0x0104, 0x0138, 0x0156, 0x00A4, 0x0128, 0x013B, 0x00A7,
1303 0x00A8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00AD, 0x017D, 0x00AF,
1304 0x00B0, 0x0105, 0x02DB, 0x0157, 0x00B4, 0x0129, 0x013C, 0x02C7,
1305 0x00B8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014A, 0x017E, 0x014B,
1306 0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E,
1307 0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x012A,
1308 0x0110, 0x0145, 0x014C, 0x0136, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
1309 0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x0168, 0x016A, 0x00DF,
1310 0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F,
1311 0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x012B,
1312 0x0111, 0x0146, 0x014D, 0x0137, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
1313 0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x0169, 0x016B, 0x02D9
1314};
1315
1316/*---------------------------------------------------------------------------*/
1317/*------ ISO8859-5 Encoding -------------------------------------------------*/
1318
1319static const HPDF_UNICODE HPDF_UNICODE_MAP_ISO8859_5[] = {
1320 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1321 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1322 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1323 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1324 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1325 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1326 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1327 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1328 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1329 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1330 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1331 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1332 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1333 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1334 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1335 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1336 0x00A0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407,
1337 0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x00AD, 0x040E, 0x040F,
1338 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
1339 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
1340 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
1341 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
1342 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
1343 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
1344 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
1345 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
1346 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457,
1347 0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x00A7, 0x045E, 0x045F
1348};
1349
1350/*---------------------------------------------------------------------------*/
1351/*------ ISO8859-6 Encoding -------------------------------------------------*/
1352
1353static const HPDF_UNICODE HPDF_UNICODE_MAP_ISO8859_6[] = {
1354 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1355 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1356 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1357 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1358 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1359 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1360 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1361 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1362 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1363 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1364 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1365 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1366 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1367 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1368 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1369 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1370 0x00A0, 0x0000, 0x0000, 0x0000, 0x00A4, 0x0000, 0x0000, 0x0000,
1371 0x0000, 0x0000, 0x0000, 0x0000, 0x060C, 0x00AD, 0x0000, 0x0000,
1372 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1373 0x0000, 0x0000, 0x0000, 0x061B, 0x0000, 0x0000, 0x0000, 0x061F,
1374 0x0000, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
1375 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F,
1376 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637,
1377 0x0638, 0x0639, 0x063A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1378 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647,
1379 0x0648, 0x0649, 0x064A, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F,
1380 0x0650, 0x0651, 0x0652, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1381 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
1382};
1383
1384/*---------------------------------------------------------------------------*/
1385/*------ ISO8859-7 Encoding -------------------------------------------------*/
1386
1387static const HPDF_UNICODE HPDF_UNICODE_MAP_ISO8859_7[] = {
1388 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1389 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1390 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1391 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1392 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1393 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1394 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1395 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1396 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1397 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1398 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1399 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1400 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1401 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1402 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1403 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1404 0x00A0, 0x2018, 0x2019, 0x00A3, 0x20AC, 0x20AF, 0x00A6, 0x00A7,
1405 0x00A8, 0x00A9, 0x037A, 0x00AB, 0x00AC, 0x00AD, 0x0000, 0x2015,
1406 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x0385, 0x0386, 0x00B7,
1407 0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F,
1408 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
1409 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
1410 0x03A0, 0x03A1, 0x0000, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7,
1411 0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF,
1412 0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7,
1413 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF,
1414 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7,
1415 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0x0000
1416};
1417
1418/*---------------------------------------------------------------------------*/
1419/*------ ISO8859-8 Encoding -------------------------------------------------*/
1420
1421static const HPDF_UNICODE HPDF_UNICODE_MAP_ISO8859_8[] = {
1422 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1423 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1424 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1425 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1426 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1427 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1428 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1429 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1430 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1431 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1432 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1433 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1434 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1435 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1436 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1437 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1438 0x00A0, 0x0000, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
1439 0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
1440 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
1441 0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x0000,
1442 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1443 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1444 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1445 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2017,
1446 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7,
1447 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
1448 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7,
1449 0x05E8, 0x05E9, 0x05EA, 0x0000, 0x0000, 0x200E, 0x200F, 0x0000,
1450};
1451
1452/*---------------------------------------------------------------------------*/
1453/*------ ISO8859-9 Encoding -------------------------------------------------*/
1454
1455static const HPDF_UNICODE HPDF_UNICODE_MAP_ISO8859_9[] = {
1456 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1457 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1458 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1459 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1460 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1461 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1462 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1463 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1464 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1465 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1466 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1467 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1468 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1469 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1470 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1471 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1472 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
1473 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
1474 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
1475 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
1476 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
1477 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
1478 0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
1479 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF,
1480 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
1481 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
1482 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
1483 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF
1484};
1485
1486/*---------------------------------------------------------------------------*/
1487/*------ ISO8859-10 Encoding ------------------------------------------------*/
1488
1489static const HPDF_UNICODE HPDF_UNICODE_MAP_ISO8859_10[] = {
1490 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1491 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1492 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1493 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1494 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1495 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1496 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1497 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1498 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1499 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1500 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1501 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1502 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1503 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1504 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1505 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1506 0x00A0, 0x0104, 0x0112, 0x0122, 0x012A, 0x0128, 0x0136, 0x00A7,
1507 0x013B, 0x0110, 0x0160, 0x0166, 0x017D, 0x00AD, 0x016A, 0x014A,
1508 0x00B0, 0x0105, 0x0113, 0x0123, 0x012B, 0x0129, 0x0137, 0x00B7,
1509 0x013C, 0x0111, 0x0161, 0x0167, 0x017E, 0x2015, 0x016B, 0x014B,
1510 0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E,
1511 0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x00CF,
1512 0x00D0, 0x0145, 0x014C, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x0168,
1513 0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
1514 0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F,
1515 0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x00EF,
1516 0x00F0, 0x0146, 0x014D, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x0169,
1517 0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x0138
1518};
1519
1520/*---------------------------------------------------------------------------*/
1521/*------ ISO8859-11 Encoding ------------------------------------------------*/
1522
1523static const HPDF_UNICODE HPDF_UNICODE_MAP_ISO8859_11[] = {
1524 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1525 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1526 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1527 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1528 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1529 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1530 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1531 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1532 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1533 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1534 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1535 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1536 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1537 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1538 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1539 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1540 0x00A0, 0x0E01, 0x0E02, 0x0E03, 0x0E04, 0x0E05, 0x0E06, 0x0E07,
1541 0x0E08, 0x0E09, 0x0E0A, 0x0E0B, 0x0E0C, 0x0E0D, 0x0E0E, 0x0E0F,
1542 0x0E10, 0x0E11, 0x0E12, 0x0E13, 0x0E14, 0x0E15, 0x0E16, 0x0E17,
1543 0x0E18, 0x0E19, 0x0E1A, 0x0E1B, 0x0E1C, 0x0E1D, 0x0E1E, 0x0E1F,
1544 0x0E20, 0x0E21, 0x0E22, 0x0E23, 0x0E24, 0x0E25, 0x0E26, 0x0E27,
1545 0x0E28, 0x0E29, 0x0E2A, 0x0E2B, 0x0E2C, 0x0E2D, 0x0E2E, 0x0E2F,
1546 0x0E30, 0x0E31, 0x0E32, 0x0E33, 0x0E34, 0x0E35, 0x0E36, 0x0E37,
1547 0x0E38, 0x0E39, 0x0E3A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0E3F,
1548 0x0E40, 0x0E41, 0x0E42, 0x0E43, 0x0E44, 0x0E45, 0x0E46, 0x0E47,
1549 0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D, 0x0E4E, 0x0E4F,
1550 0x0E50, 0x0E51, 0x0E52, 0x0E53, 0x0E54, 0x0E55, 0x0E56, 0x0E57,
1551 0x0E58, 0x0E59, 0x0E5A, 0x0E5B, 0x0000, 0x0000, 0x0000, 0x0000
1552};
1553
1554/*---------------------------------------------------------------------------*/
1555/*------ ISO8859-13 Encoding ------------------------------------------------*/
1556
1557static const HPDF_UNICODE HPDF_UNICODE_MAP_ISO8859_13[] = {
1558 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1559 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1560 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1561 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1562 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1563 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1564 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1565 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1566 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1567 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1568 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1569 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1570 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1571 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1572 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1573 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1574 0x00A0, 0x201D, 0x00A2, 0x00A3, 0x00A4, 0x201E, 0x00A6, 0x00A7,
1575 0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6,
1576 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x201C, 0x00B5, 0x00B6, 0x00B7,
1577 0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6,
1578 0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112,
1579 0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B,
1580 0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7,
1581 0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF,
1582 0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113,
1583 0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C,
1584 0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7,
1585 0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x2019
1586};
1587
1588/*---------------------------------------------------------------------------*/
1589/*------ ISO8859-14 Encoding ------------------------------------------------*/
1590
1591static const HPDF_UNICODE HPDF_UNICODE_MAP_ISO8859_14[] = {
1592 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1593 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1594 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1595 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1596 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1597 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1598 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1599 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1600 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1601 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1602 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1603 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1604 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1605 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1606 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1607 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1608 0x00A0, 0x1E02, 0x1E03, 0x00A3, 0x010A, 0x010B, 0x1E0A, 0x00A7,
1609 0x1E80, 0x00A9, 0x1E82, 0x1E0B, 0x1EF2, 0x00AD, 0x00AE, 0x0178,
1610 0x1E1E, 0x1E1F, 0x0120, 0x0121, 0x1E40, 0x1E41, 0x00B6, 0x1E56,
1611 0x1E81, 0x1E57, 0x1E83, 0x1E60, 0x1EF3, 0x1E84, 0x1E85, 0x1E61,
1612 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
1613 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
1614 0x0174, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x1E6A,
1615 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x0176, 0x00DF,
1616 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
1617 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
1618 0x0175, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x1E6B,
1619 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x0177, 0x00FF
1620};
1621
1622/*---------------------------------------------------------------------------*/
1623/*------ ISO8859-15 Encoding ------------------------------------------------*/
1624
1625static const HPDF_UNICODE HPDF_UNICODE_MAP_ISO8859_15[] = {
1626 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1627 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1628 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1629 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1630 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1631 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1632 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1633 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1634 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1635 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1636 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1637 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1638 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1639 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1640 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1641 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1642 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AC, 0x00A5, 0x0160, 0x00A7,
1643 0x0161, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
1644 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x017D, 0x00B5, 0x00B6, 0x00B7,
1645 0x017E, 0x00B9, 0x00BA, 0x00BB, 0x0152, 0x0153, 0x0178, 0x00BF,
1646 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
1647 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
1648 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
1649 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
1650 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
1651 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
1652 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
1653 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF
1654};
1655
1656/*---------------------------------------------------------------------------*/
1657/*------ ISO8859-16 Encoding ------------------------------------------------*/
1658
1659static const HPDF_UNICODE HPDF_UNICODE_MAP_ISO8859_16[] = {
1660 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1661 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1662 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1663 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1664 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1665 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1666 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1667 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1668 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1669 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1670 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1671 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1672 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1673 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1674 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1675 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1676 0x00A0, 0x0104, 0x0105, 0x0141, 0x20AC, 0x201E, 0x0160, 0x00A7,
1677 0x0161, 0x00A9, 0x0218, 0x00AB, 0x0179, 0x00AD, 0x017A, 0x017B,
1678 0x00B0, 0x00B1, 0x010C, 0x0142, 0x017D, 0x201D, 0x00B6, 0x00B7,
1679 0x017E, 0x010D, 0x0219, 0x00BB, 0x0152, 0x0153, 0x0178, 0x017C,
1680 0x00C0, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0106, 0x00C6, 0x00C7,
1681 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
1682 0x0110, 0x0143, 0x00D2, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x015A,
1683 0x0170, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0118, 0x021A, 0x00DF,
1684 0x00E0, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x0107, 0x00E6, 0x00E7,
1685 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
1686 0x0111, 0x0144, 0x00F2, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x015B,
1687 0x0171, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0119, 0x021B, 0x00FF
1688};
1689
1690#define HPDF_MSCP_FIRST_CHAR 32
1691#define HPDF_MSCP_LAST_CHAR 255
1692
1693
1694/*---------------------------------------------------------------------------*/
1695/*------ CP1250 Encoding ----------------------------------------------------*/
1696
1697static const HPDF_UNICODE HPDF_UNICODE_MAP_CP1250[] = {
1698 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1699 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1700 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1701 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1702 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1703 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1704 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1705 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1706 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1707 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1708 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1709 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1710 0x20AC, 0x0000, 0x201A, 0x0000, 0x201E, 0x2026, 0x2020, 0x2021,
1711 0x0000, 0x2030, 0x0160, 0x2039, 0x015A, 0x0164, 0x017D, 0x0179,
1712 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
1713 0x0000, 0x2122, 0x0161, 0x203A, 0x015B, 0x0165, 0x017E, 0x017A,
1714 0x00A0, 0x02C7, 0x02D8, 0x0141, 0x00A4, 0x0104, 0x00A6, 0x00A7,
1715 0x00A8, 0x00A9, 0x015E, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x017B,
1716 0x00B0, 0x00B1, 0x02DB, 0x0142, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
1717 0x00B8, 0x0105, 0x015F, 0x00BB, 0x013D, 0x02DD, 0x013E, 0x017C,
1718 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7,
1719 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E,
1720 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7,
1721 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF,
1722 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7,
1723 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F,
1724 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7,
1725 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9
1726};
1727
1728/*---------------------------------------------------------------------------*/
1729/*------ CP1251 Encoding ----------------------------------------------------*/
1730
1731static const HPDF_UNICODE HPDF_UNICODE_MAP_CP1251[] = {
1732 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1733 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1734 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1735 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1736 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1737 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1738 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1739 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1740 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1741 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1742 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1743 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1744 0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021,
1745 0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F,
1746 0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
1747 0x0000, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F,
1748 0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7,
1749 0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407,
1750 0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7,
1751 0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457,
1752 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
1753 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
1754 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
1755 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
1756 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
1757 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
1758 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
1759 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F
1760};
1761
1762/*---------------------------------------------------------------------------*/
1763/*------ CP1252 Encoding ----------------------------------------------------*/
1764
1765static const HPDF_UNICODE HPDF_UNICODE_MAP_CP1252[] = {
1766 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1767 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1768 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1769 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1770 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1771 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1772 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1773 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1774 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1775 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1776 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1777 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1778 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
1779 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x017D, 0x0000,
1780 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
1781 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x0000, 0x017E, 0x0178,
1782 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
1783 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
1784 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
1785 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
1786 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
1787 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
1788 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
1789 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
1790 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
1791 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
1792 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
1793 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF
1794};
1795
1796/*---------------------------------------------------------------------------*/
1797/*------ CP1253 Encoding ----------------------------------------------------*/
1798
1799static const HPDF_UNICODE HPDF_UNICODE_MAP_CP1253[] = {
1800 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1801 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1802 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1803 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1804 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1805 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1806 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1807 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1808 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1809 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1810 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1811 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1812 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
1813 0x0000, 0x2030, 0x0000, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000,
1814 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
1815 0x0000, 0x2122, 0x0000, 0x203A, 0x0000, 0x0000, 0x0000, 0x0000,
1816 0x00A0, 0x0385, 0x0386, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
1817 0x00A8, 0x00A9, 0x0000, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x2015,
1818 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x00B5, 0x00B6, 0x00B7,
1819 0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F,
1820 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
1821 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
1822 0x03A0, 0x03A1, 0x0000, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7,
1823 0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF,
1824 0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7,
1825 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF,
1826 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7,
1827 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0x0000
1828};
1829
1830/*---------------------------------------------------------------------------*/
1831/*------ CP1254 Encoding ----------------------------------------------------*/
1832
1833static const HPDF_UNICODE HPDF_UNICODE_MAP_CP1254[] = {
1834 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1835 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1836 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1837 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1838 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1839 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1840 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1841 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1842 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1843 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1844 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1845 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1846 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
1847 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x0000, 0x0000,
1848 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
1849 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x0000, 0x0000, 0x0178,
1850 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
1851 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
1852 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
1853 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
1854 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
1855 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
1856 0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
1857 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF,
1858 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
1859 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
1860 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
1861 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF
1862};
1863
1864/*---------------------------------------------------------------------------*/
1865/*------ CP1255 Encoding ----------------------------------------------------*/
1866
1867static const HPDF_UNICODE HPDF_UNICODE_MAP_CP1255[] = {
1868 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1869 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1870 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1871 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1872 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1873 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1874 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1875 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1876 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1877 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1878 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1879 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1880 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
1881 0x02C6, 0x2030, 0x0000, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000,
1882 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
1883 0x02DC, 0x2122, 0x0000, 0x203A, 0x0000, 0x0000, 0x0000, 0x0000,
1884 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AA, 0x00A5, 0x00A6, 0x00A7,
1885 0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
1886 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
1887 0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
1888 0x05B0, 0x05B1, 0x05B2, 0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7,
1889 0x05B8, 0x05B9, 0x0000, 0x05BB, 0x05BC, 0x05BD, 0x05BE, 0x05BF,
1890 0x05C0, 0x05C1, 0x05C2, 0x05C3, 0x05F0, 0x05F1, 0x05F2, 0x05F3,
1891 0x05F4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1892 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7,
1893 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
1894 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7,
1895 0x05E8, 0x05E9, 0x05EA, 0x0000, 0x0000, 0x200E, 0x200F, 0x0000
1896};
1897
1898/*---------------------------------------------------------------------------*/
1899/*------ CP1256 Encoding ----------------------------------------------------*/
1900
1901static const HPDF_UNICODE HPDF_UNICODE_MAP_CP1256[] = {
1902 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1903 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1904 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1905 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1906 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1907 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1908 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1909 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1910 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1911 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1912 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1913 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1914 0x20AC, 0x067E, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
1915 0x02C6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688,
1916 0x06AF, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
1917 0x06A9, 0x2122, 0x0691, 0x203A, 0x0153, 0x200C, 0x200D, 0x06BA,
1918 0x00A0, 0x060C, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
1919 0x00A8, 0x00A9, 0x06BE, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
1920 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
1921 0x00B8, 0x00B9, 0x061B, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x061F,
1922 0x06C1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
1923 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F,
1924 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00D7,
1925 0x0637, 0x0638, 0x0639, 0x063A, 0x0640, 0x0641, 0x0642, 0x0643,
1926 0x00E0, 0x0644, 0x00E2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00E7,
1927 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0649, 0x064A, 0x00EE, 0x00EF,
1928 0x064B, 0x064C, 0x064D, 0x064E, 0x00F4, 0x064F, 0x0650, 0x00F7,
1929 0x0651, 0x00F9, 0x0652, 0x00FB, 0x00FC, 0x200E, 0x200F, 0x06D2
1930};
1931
1932/*---------------------------------------------------------------------------*/
1933/*------ CP1257 Encoding ----------------------------------------------------*/
1934
1935static const HPDF_UNICODE HPDF_UNICODE_MAP_CP1257[] = {
1936 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1937 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1938 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1939 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1940 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1941 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1942 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1943 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1944 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1945 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1946 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1947 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1948 0x20AC, 0x0000, 0x201A, 0x0000, 0x201E, 0x2026, 0x2020, 0x2021,
1949 0x0000, 0x2030, 0x0000, 0x2039, 0x0000, 0x00A8, 0x02C7, 0x00B8,
1950 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
1951 0x0000, 0x2122, 0x0000, 0x203A, 0x0000, 0x00AF, 0x02DB, 0x0000,
1952 0x00A0, 0x0000, 0x00A2, 0x00A3, 0x00A4, 0x0000, 0x00A6, 0x00A7,
1953 0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6,
1954 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
1955 0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6,
1956 0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112,
1957 0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B,
1958 0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7,
1959 0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF,
1960 0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113,
1961 0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C,
1962 0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7,
1963 0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x02D9
1964};
1965
1966/*---------------------------------------------------------------------------*/
1967/*------ CP1258 Encoding ----------------------------------------------------*/
1968
1969static const HPDF_UNICODE HPDF_UNICODE_MAP_CP1258[] = {
1970 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1971 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1972 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1973 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1974 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1975 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1976 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1977 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1978 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1979 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1980 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1981 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
1982 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
1983 0x02C6, 0x2030, 0x0000, 0x2039, 0x0152, 0x0000, 0x0000, 0x0000,
1984 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
1985 0x02DC, 0x2122, 0x0000, 0x203A, 0x0153, 0x0000, 0x0000, 0x0178,
1986 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
1987 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
1988 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
1989 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
1990 0x00C0, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
1991 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x0300, 0x00CD, 0x00CE, 0x00CF,
1992 0x0110, 0x00D1, 0x0309, 0x00D3, 0x00D4, 0x01A0, 0x00D6, 0x00D7,
1993 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x01AF, 0x0303, 0x00DF,
1994 0x00E0, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
1995 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0301, 0x00ED, 0x00EE, 0x00EF,
1996 0x0111, 0x00F1, 0x0323, 0x00F3, 0x00F4, 0x01A1, 0x00F6, 0x00F7,
1997 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x01B0, 0x20AB, 0x00FF
1998};
1999
2000/*---------------------------------------------------------------------------*/
2001/*------ KOI8-R Encoding ----------------------------------------------------*/
2002
2003static const HPDF_UNICODE HPDF_UNICODE_MAP_KOI8_R[] = {
2004 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
2005 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
2006 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
2007 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
2008 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
2009 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
2010 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
2011 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
2012 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
2013 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
2014 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
2015 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
2016 0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524,
2017 0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590,
2018 0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2219, 0x221A, 0x2248,
2019 0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2, 0x00B7, 0x00F7,
2020 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556,
2021 0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x255C, 0x255D, 0x255E,
2022 0x255F, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565,
2023 0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x256B, 0x256C, 0x00A9,
2024 0x044E, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
2025 0x0445, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E,
2026 0x043F, 0x044F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
2027 0x044C, 0x044B, 0x0437, 0x0448, 0x044D, 0x0449, 0x0447, 0x044A,
2028 0x042E, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
2029 0x0425, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E,
2030 0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
2031 0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A
2032};
2033
2034typedef struct _HPDF_BuiltinEncodingData {
2035 const char *encoding_name;
2036 HPDF_BaseEncodings base_encoding;
2037 const HPDF_UNICODE *ovewrride_map;
2038} HPDF_BuiltinEncodingData;
2039
2040
2041static const HPDF_BuiltinEncodingData HPDF_BUILTIN_ENCODINGS[] = {
2042 {
2043 HPDF_ENCODING_FONT_SPECIFIC,
2044 HPDF_BASE_ENCODING_FONT_SPECIFIC,
2045 NULL},
2046 {
2047 HPDF_ENCODING_STANDARD,
2048 HPDF_BASE_ENCODING_STANDARD,
2049 NULL},
2050 {
2051 HPDF_ENCODING_MAC_ROMAN,
2052 HPDF_BASE_ENCODING_MAC_ROMAN,
2053 NULL},
2054 {
2055 HPDF_ENCODING_WIN_ANSI,
2056 HPDF_BASE_ENCODING_WIN_ANSI,
2057 NULL
2058 },
2059 {
2060 HPDF_ENCODING_ISO8859_2,
2061 HPDF_BASE_ENCODING_WIN_ANSI,
2062 HPDF_UNICODE_MAP_ISO8859_2
2063 },
2064 {
2065 HPDF_ENCODING_ISO8859_3,
2066 HPDF_BASE_ENCODING_WIN_ANSI,
2067 HPDF_UNICODE_MAP_ISO8859_3
2068 },
2069 {
2070 HPDF_ENCODING_ISO8859_4,
2071 HPDF_BASE_ENCODING_WIN_ANSI,
2072 HPDF_UNICODE_MAP_ISO8859_4
2073 },
2074 {
2075 HPDF_ENCODING_ISO8859_5,
2076 HPDF_BASE_ENCODING_WIN_ANSI,
2077 HPDF_UNICODE_MAP_ISO8859_5
2078 },
2079 {
2080 HPDF_ENCODING_ISO8859_6,
2081 HPDF_BASE_ENCODING_WIN_ANSI,
2082 HPDF_UNICODE_MAP_ISO8859_6
2083 },
2084 {
2085 HPDF_ENCODING_ISO8859_7,
2086 HPDF_BASE_ENCODING_WIN_ANSI,
2087 HPDF_UNICODE_MAP_ISO8859_7
2088 },
2089 {
2090 HPDF_ENCODING_ISO8859_8,
2091 HPDF_BASE_ENCODING_WIN_ANSI,
2092 HPDF_UNICODE_MAP_ISO8859_8
2093 },
2094 {
2095 HPDF_ENCODING_ISO8859_9,
2096 HPDF_BASE_ENCODING_WIN_ANSI,
2097 HPDF_UNICODE_MAP_ISO8859_9
2098 },
2099 {
2100 HPDF_ENCODING_ISO8859_10,
2101 HPDF_BASE_ENCODING_WIN_ANSI,
2102 HPDF_UNICODE_MAP_ISO8859_10
2103 },
2104 {
2105 HPDF_ENCODING_ISO8859_11,
2106 HPDF_BASE_ENCODING_WIN_ANSI,
2107 HPDF_UNICODE_MAP_ISO8859_11
2108 },
2109 {
2110 HPDF_ENCODING_ISO8859_13,
2111 HPDF_BASE_ENCODING_WIN_ANSI,
2112 HPDF_UNICODE_MAP_ISO8859_13
2113 },
2114 {
2115 HPDF_ENCODING_ISO8859_14,
2116 HPDF_BASE_ENCODING_WIN_ANSI,
2117 HPDF_UNICODE_MAP_ISO8859_14
2118 },
2119 {
2120 HPDF_ENCODING_ISO8859_15,
2121 HPDF_BASE_ENCODING_WIN_ANSI,
2122 HPDF_UNICODE_MAP_ISO8859_15
2123 },
2124 {
2125 HPDF_ENCODING_ISO8859_16,
2126 HPDF_BASE_ENCODING_WIN_ANSI,
2127 HPDF_UNICODE_MAP_ISO8859_16
2128 },
2129 {
2130 HPDF_ENCODING_CP1250,
2131 HPDF_BASE_ENCODING_WIN_ANSI,
2132 HPDF_UNICODE_MAP_CP1250
2133 },
2134 {
2135 HPDF_ENCODING_CP1251,
2136 HPDF_BASE_ENCODING_WIN_ANSI,
2137 HPDF_UNICODE_MAP_CP1251
2138 },
2139 {
2140 HPDF_ENCODING_CP1252,
2141 HPDF_BASE_ENCODING_WIN_ANSI,
2142 HPDF_UNICODE_MAP_CP1252
2143 },
2144 {
2145 HPDF_ENCODING_CP1253,
2146 HPDF_BASE_ENCODING_WIN_ANSI,
2147 HPDF_UNICODE_MAP_CP1253
2148 },
2149 {
2150 HPDF_ENCODING_CP1254,
2151 HPDF_BASE_ENCODING_WIN_ANSI,
2152 HPDF_UNICODE_MAP_CP1254
2153 },
2154 {
2155 HPDF_ENCODING_CP1255,
2156 HPDF_BASE_ENCODING_WIN_ANSI,
2157 HPDF_UNICODE_MAP_CP1255
2158 },
2159 {
2160 HPDF_ENCODING_CP1256,
2161 HPDF_BASE_ENCODING_WIN_ANSI,
2162 HPDF_UNICODE_MAP_CP1256
2163 },
2164 {
2165 HPDF_ENCODING_CP1257,
2166 HPDF_BASE_ENCODING_WIN_ANSI,
2167 HPDF_UNICODE_MAP_CP1257
2168 },
2169 {
2170 HPDF_ENCODING_CP1258,
2171 HPDF_BASE_ENCODING_WIN_ANSI,
2172 HPDF_UNICODE_MAP_CP1258
2173 },
2174 {
2175 HPDF_ENCODING_KOI8_R,
2176 HPDF_BASE_ENCODING_WIN_ANSI,
2177 HPDF_UNICODE_MAP_KOI8_R
2178 },
2179 {
2180 NULL,
2181 HPDF_BASE_ENCODING_EOF,
2182 NULL
2183 }
2184};
2185
2186
2187/*---------------------------------------------------------------------------*/
2188
2189const HPDF_BuiltinEncodingData*
2190HPDF_BasicEncoder_FindBuiltinData (const char *encoding_name);
2191
2192
2193void
2194HPDF_BasicEncoder_CopyMap (HPDF_Encoder encoder,
2195 const HPDF_UNICODE *map);
2196
2197
2198HPDF_STATUS
2199HPDF_BasicEncoder_OverrideMap (HPDF_Encoder encoder,
2200 const HPDF_UNICODE *map);
2201
2202
2203/*-- HPDF_Encoder ---------------------------------------*/
2204
2205HPDF_Encoder
2206HPDF_BasicEncoder_New (HPDF_MMgr mmgr,
2207 const char *encoding_name)
2208{
2209 HPDF_Encoder encoder;
2210 HPDF_BasicEncoderAttr encoder_attr;
2211 const HPDF_BuiltinEncodingData *data;
2212 char *eptr;
2213
2214 HPDF_PTRACE((" HPDF_BasicEncoder_New\n"));
2215
2216 if (mmgr == NULL)
2217 return NULL;
2218
2219 data = HPDF_BasicEncoder_FindBuiltinData (encoding_name);
2220 if (!data->encoding_name) {
2221 HPDF_SetError (mmgr->error, HPDF_INVALID_ENCODING_NAME, 0);
2222 return NULL;
2223 }
2224
2225 encoder = HPDF_GetMem (mmgr, sizeof(HPDF_Encoder_Rec));
2226 if (!encoder)
2227 return NULL;
2228
2229 HPDF_MemSet (encoder, 0, sizeof(HPDF_Encoder_Rec));
2230
2231 eptr = encoder->name + HPDF_LIMIT_MAX_NAME_LEN;
2232 HPDF_StrCpy (encoder->name, data->encoding_name, eptr);
2233
2234 encoder->mmgr = mmgr;
2235 encoder->error = mmgr->error;
2236 encoder->type = HPDF_ENCODER_TYPE_SINGLE_BYTE;
2237 encoder->to_unicode_fn = HPDF_BasicEncoder_ToUnicode;
2238 encoder->encode_text_fn = NULL;
2239 encoder->write_fn = HPDF_BasicEncoder_Write;
2240 encoder->free_fn = HPDF_BasicEncoder_Free;
2241
2242 encoder_attr = HPDF_GetMem(mmgr, sizeof(HPDF_BasicEncoderAttr_Rec));
2243 if (!encoder_attr) {
2244 HPDF_FreeMem (encoder->mmgr, encoder);
2245 return NULL;
2246 }
2247
2248 encoder->sig_bytes = HPDF_ENCODER_SIG_BYTES;
2249 encoder->attr = encoder_attr;
2250 HPDF_MemSet (encoder_attr, 0, sizeof(HPDF_BasicEncoderAttr_Rec));
2251
2252 encoder_attr->first_char = HPDF_BASIC_ENCODER_FIRST_CHAR;
2253 encoder_attr->last_char = HPDF_BASIC_ENCODER_LAST_CHAR;
2254 encoder_attr->has_differences = HPDF_FALSE;
2255
2256 eptr = encoder_attr->base_encoding + HPDF_LIMIT_MAX_NAME_LEN;
2257
2258 switch (data->base_encoding) {
2259 case HPDF_BASE_ENCODING_STANDARD:
2260 HPDF_StrCpy (encoder_attr->base_encoding,
2261 HPDF_ENCODING_STANDARD, eptr);
2262 HPDF_BasicEncoder_CopyMap (encoder, HPDF_UNICODE_MAP_STANDARD);
2263 break;
2264 case HPDF_BASE_ENCODING_WIN_ANSI:
2265 HPDF_StrCpy (encoder_attr->base_encoding,
2266 HPDF_ENCODING_WIN_ANSI, eptr);
2267 HPDF_BasicEncoder_CopyMap (encoder, HPDF_UNICODE_MAP_WIN_ANSI);
2268 break;
2269 case HPDF_BASE_ENCODING_MAC_ROMAN:
2270 HPDF_StrCpy (encoder_attr->base_encoding,
2271 HPDF_ENCODING_MAC_ROMAN, eptr);
2272 HPDF_BasicEncoder_CopyMap (encoder, HPDF_UNICODE_MAP_MAC_ROMAN);
2273 break;
2274 default:
2275 HPDF_StrCpy (encoder_attr->base_encoding,
2276 HPDF_ENCODING_FONT_SPECIFIC, eptr);
2277 HPDF_BasicEncoder_CopyMap (encoder,
2278 HPDF_UNICODE_MAP_FONT_SPECIFIC);
2279 }
2280
2281 if (data->ovewrride_map)
2282 HPDF_BasicEncoder_OverrideMap (encoder, data->ovewrride_map);
2283
2284 return encoder;
2285}
2286
2287
2288
2289
2290const HPDF_BuiltinEncodingData*
2291HPDF_BasicEncoder_FindBuiltinData (const char *encoding_name)
2292{
2293 HPDF_UINT i = 0;
2294
2295 HPDF_PTRACE((" HPDF_BasicEncoder_FindBuiltinData\n"));
2296
2297 while (HPDF_BUILTIN_ENCODINGS[i].encoding_name) {
2298 if (HPDF_StrCmp (HPDF_BUILTIN_ENCODINGS[i].encoding_name,
2299 encoding_name) == 0)
2300 break;
2301
2302 i++;
2303 }
2304
2305 return &HPDF_BUILTIN_ENCODINGS[i];
2306}
2307
2308
2309HPDF_UNICODE
2310HPDF_BasicEncoder_ToUnicode (HPDF_Encoder encoder,
2311 HPDF_UINT16 code)
2312{
2313 HPDF_BasicEncoderAttr attr = (HPDF_BasicEncoderAttr)encoder->attr;
2314
2315 if (code > 255)
2316 return 0;
2317
2318 return attr->unicode_map[code];
2319}
2320
2321
2322HPDF_UNICODE
2323HPDF_Encoder_ToUnicode (HPDF_Encoder encoder,
2324 HPDF_UINT16 code)
2325{
2326 return encoder->to_unicode_fn (encoder, code);
2327}
2328
2329
2330void
2331HPDF_BasicEncoder_CopyMap (HPDF_Encoder encoder,
2332 const HPDF_UNICODE *map)
2333{
2334 HPDF_UINT i;
2335 HPDF_UNICODE* dst = ((HPDF_BasicEncoderAttr)encoder->attr)->unicode_map +
2336 HPDF_BASIC_ENCODER_FIRST_CHAR;
2337
2338 HPDF_PTRACE((" HPDF_BasicEncoder_CopyMap\n"));
2339
2340 for (i = 0; i <= HPDF_BASIC_ENCODER_LAST_CHAR -
2341 HPDF_BASIC_ENCODER_FIRST_CHAR; i++)
2342 *dst++ = *map++;
2343}
2344
2345HPDF_STATUS
2346HPDF_BasicEncoder_OverrideMap (HPDF_Encoder encoder,
2347 const HPDF_UNICODE *map)
2348{
2349 HPDF_UINT i;
2350 HPDF_BasicEncoderAttr data = (HPDF_BasicEncoderAttr)encoder->attr;
2351 HPDF_UNICODE* dst;
2352 HPDF_BYTE* flgs;
2353
2354 HPDF_PTRACE ((" HPDF_BasicEncoder_OverrideMap\n"));
2355
2356 if (data->has_differences)
2357 return HPDF_SetError (encoder->error, HPDF_INVALID_OPERATION, 0);
2358
2359 dst = data->unicode_map + HPDF_BASIC_ENCODER_FIRST_CHAR;
2360 flgs = data->differences + HPDF_BASIC_ENCODER_FIRST_CHAR;
2361
2362 for (i = 0; i <= HPDF_BASIC_ENCODER_LAST_CHAR -
2363 HPDF_BASIC_ENCODER_FIRST_CHAR; i++) {
2364 if (*map != *dst) {
2365 *dst = *map;
2366 *flgs = 1;
2367 }
2368 map++;
2369 dst++;
2370 flgs++;
2371 }
2372 data->has_differences = HPDF_TRUE;
2373
2374 return HPDF_OK;
2375}
2376
2377void
2378HPDF_Encoder_Free (HPDF_Encoder encoder)
2379{
2380 HPDF_PTRACE ((" HPDF_Encoder_Free\n"));
2381
2382 if (!encoder)
2383 return;
2384
2385 if (encoder->free_fn)
2386 encoder->free_fn (encoder);
2387 HPDF_FreeMem (encoder->mmgr, encoder);
2388}
2389
2390
2391const char*
2392HPDF_UnicodeToGryphName (HPDF_UNICODE unicode)
2393{
2394 const HPDF_UnicodeGryphPair* map = HPDF_UNICODE_GRYPH_NAME_MAP;
2395
2396 HPDF_PTRACE ((" HPDF_UnicodeToGryphName\n"));
2397
2398 while (map->unicode <= unicode) {
2399 if (map->unicode == unicode)
2400 return map->gryph_name;
2401 map++;
2402 }
2403
2404 return HPDF_UNICODE_GRYPH_NAME_MAP[0].gryph_name;
2405}
2406
2407HPDF_UNICODE
2408HPDF_GryphNameToUnicode (const char *gryph_name)
2409{
2410 const HPDF_UnicodeGryphPair* map = HPDF_UNICODE_GRYPH_NAME_MAP;
2411
2412 HPDF_PTRACE ((" HPDF_GryphNameToUnicode\n"));
2413
2414 while (map->unicode != 0xFFFF) {
2415 if (HPDF_StrCmp (gryph_name, map->gryph_name) == 0)
2416 return map->unicode;
2417 map++;
2418 }
2419
2420 return 0x0000;
2421}
2422
2423void
2424HPDF_BasicEncoder_Free (HPDF_Encoder encoder)
2425{
2426 HPDF_PTRACE ((" HPDF_BasicEncoder_Free\n"));
2427
2428 HPDF_FreeMem (encoder->mmgr, encoder->attr);
2429 encoder->attr = NULL;
2430}
2431
2432HPDF_STATUS
2433HPDF_BasicEncoder_Write (HPDF_Encoder encoder,
2434 HPDF_Stream out)
2435{
2436 HPDF_STATUS ret;
2437 HPDF_BasicEncoderAttr attr = (HPDF_BasicEncoderAttr)encoder->attr;
2438
2439 HPDF_PTRACE ((" HPDF_BasicEncoder_Write\n"));
2440
2441 /* if HPDF_ENCODING_FONT_SPECIFIC is selected, no Encoding object will be "
2442 * written.
2443 */
2444 if (HPDF_StrCmp (attr->base_encoding, HPDF_ENCODING_FONT_SPECIFIC) == 0)
2445 return HPDF_OK;
2446
2447 /* if encoder has differences-data, encoding object is written as
2448 dictionary-object, otherwise it is written as name-object. */
2449 if (attr->has_differences == HPDF_TRUE) {
2450 ret = HPDF_Stream_WriteStr (out,
2451 "/Encoding <<\012"
2452 "/Type /Encoding\012"
2453 "/BaseEncoding ");
2454 if (ret != HPDF_OK)
2455 return ret;
2456 } else {
2457 ret = HPDF_Stream_WriteStr (out, "/Encoding ");
2458 if (ret != HPDF_OK)
2459 return ret;
2460 }
2461
2462 ret = HPDF_Stream_WriteEscapeName (out, attr->base_encoding);
2463 if (ret != HPDF_OK)
2464 return ret;
2465
2466 ret = HPDF_Stream_WriteStr (out, "\012");
2467 if (ret != HPDF_OK)
2468 return ret;
2469
2470 /* write differences data */
2471 if (attr->has_differences == HPDF_TRUE) {
2472 HPDF_INT i;
2473
2474 ret = HPDF_Stream_WriteStr (out, "/Differences [");
2475 if (ret != HPDF_OK)
2476 return ret;
2477
2478 for (i = attr->first_char; i <= attr->last_char; i++) {
2479 if (attr->differences[i] == 1) {
2480 char tmp[HPDF_TEXT_DEFAULT_LEN];
2481 char* ptmp = tmp;
2482 const char* char_name =
2483 HPDF_UnicodeToGryphName (attr->unicode_map[i]);
2484
2485 ptmp = HPDF_IToA (ptmp, i, tmp + HPDF_TEXT_DEFAULT_LEN - 1);
2486 *ptmp++ = ' ';
2487 *ptmp++ = '/';
2488 ptmp = (char *)HPDF_StrCpy (ptmp, char_name, tmp +
2489 HPDF_TEXT_DEFAULT_LEN - 1);
2490 *ptmp++ = ' ';
2491 *ptmp = 0;
2492
2493 ret = HPDF_Stream_WriteStr (out, tmp);
2494 if (ret != HPDF_OK)
2495 return ret;
2496 }
2497 }
2498
2499 ret = HPDF_Stream_WriteStr (out, "]\012>>\012");
2500 }
2501
2502 return ret;
2503}
2504
2505
2506HPDF_STATUS
2507HPDF_Encoder_Validate (HPDF_Encoder encoder)
2508{
2509 HPDF_PTRACE ((" HPDF_Encoder_Validate\n"));
2510
2511 if (!encoder || encoder->sig_bytes != HPDF_ENCODER_SIG_BYTES)
2512 return HPDF_FALSE;
2513 else
2514 return HPDF_TRUE;
2515}
2516
2517
2518/* At first, CMAP encoder is create as 'virtual' object.
2519 * When init_fn is called, cmap-data is loaded and it becomes to be available
2520 */
2521
2522HPDF_Encoder
2523HPDF_CMapEncoder_New (HPDF_MMgr mmgr,
2524 char *name,
2525 HPDF_Encoder_Init_Func init_fn)
2526{
2527 HPDF_Encoder encoder;
2528
2529 HPDF_PTRACE ((" HPDF_CMapEncoder_New\n"));
2530
2531 if (mmgr == NULL)
2532 return NULL;
2533
2534 encoder = HPDF_GetMem (mmgr, sizeof(HPDF_Encoder_Rec));
2535 if (!encoder)
2536 return NULL;
2537
2538 HPDF_MemSet (encoder, 0, sizeof(HPDF_Encoder_Rec));
2539
2540 HPDF_StrCpy (encoder->name, name, encoder->name + HPDF_LIMIT_MAX_NAME_LEN);
2541 encoder->mmgr = mmgr;
2542 encoder->error = mmgr->error;
2543 encoder->type = HPDF_ENCODER_TYPE_UNINITIALIZED;
2544 encoder->byte_type_fn = HPDF_CMapEncoder_ByteType;
2545 encoder->to_unicode_fn = HPDF_CMapEncoder_ToUnicode;
2546 encoder->write_fn = HPDF_CMapEncoder_Write;
2547 encoder->free_fn = HPDF_CMapEncoder_Free;
2548 encoder->init_fn = init_fn;
2549 encoder->sig_bytes = HPDF_ENCODER_SIG_BYTES;
2550
2551 return encoder;
2552}
2553
2554
2555HPDF_STATUS
2556HPDF_CMapEncoder_InitAttr (HPDF_Encoder encoder)
2557{
2558 HPDF_CMapEncoderAttr encoder_attr;
2559 HPDF_UINT i;
2560 HPDF_UINT j;
2561
2562 HPDF_PTRACE ((" HPDF_CMapEncoder_InitAttr\n"));
2563
2564 if (encoder->attr)
2565 return HPDF_INVALID_ENCODER;
2566
2567 encoder_attr = HPDF_GetMem(encoder->mmgr,
2568 sizeof(HPDF_CMapEncoderAttr_Rec));
2569
2570 if (!encoder_attr)
2571 return encoder->error->error_no;
2572
2573 HPDF_MemSet (encoder_attr, 0, sizeof(HPDF_CMapEncoderAttr_Rec));
2574 encoder->attr = encoder_attr;
2575
2576 encoder_attr->writing_mode = HPDF_WMODE_HORIZONTAL;
2577
2578 for (i = 0; i <= 255; i++) {
2579 for (j = 0; j <= 255; j++) {
2580 /* undefined charactors are replaced to square */
2581 encoder_attr->unicode_map[i][j] = 0x25A1;
2582 }
2583 }
2584
2585 /* create cmap range */
2586 encoder_attr->cmap_range = HPDF_List_New (encoder->mmgr,
2587 HPDF_DEF_RANGE_TBL_NUM);
2588 if (!encoder_attr->cmap_range)
2589 return encoder->error->error_no;
2590
2591 encoder_attr->notdef_range = HPDF_List_New (encoder->mmgr,
2592 HPDF_DEF_ITEMS_PER_BLOCK);
2593 if (!encoder_attr->notdef_range)
2594 return encoder->error->error_no;
2595
2596 encoder_attr->code_space_range = HPDF_List_New (encoder->mmgr,
2597 HPDF_DEF_ITEMS_PER_BLOCK);
2598 if (!encoder_attr->code_space_range)
2599 return encoder->error->error_no;
2600
2601 return HPDF_OK;
2602}
2603
2604
2605HPDF_UNICODE
2606HPDF_CMapEncoder_ToUnicode (HPDF_Encoder encoder,
2607 HPDF_UINT16 code)
2608{
2609 HPDF_BYTE l = (HPDF_BYTE)code;
2610 HPDF_BYTE h = (HPDF_BYTE)(code >> 8);
2611 HPDF_CMapEncoderAttr attr = (HPDF_CMapEncoderAttr)encoder->attr;
2612
2613 return attr->unicode_map[l][h];
2614}
2615
2616
2617HPDF_UINT16
2618HPDF_CMapEncoder_ToCID (HPDF_Encoder encoder,
2619 HPDF_UINT16 code)
2620{
2621 HPDF_BYTE l = (HPDF_BYTE)code;
2622 HPDF_BYTE h = (HPDF_BYTE)(code >> 8);
2623
2624 HPDF_CMapEncoderAttr attr = (HPDF_CMapEncoderAttr)encoder->attr;
2625
2626 return attr->cid_map[l][h];
2627}
2628
2629void
2630HPDF_CMapEncoder_Free (HPDF_Encoder encoder)
2631{
2632 HPDF_CMapEncoderAttr attr;
2633 HPDF_UINT i;
2634 HPDF_CidRange_Rec *data;
2635
2636 HPDF_PTRACE ((" HPDF_CMapEncoder_Free\n"));
2637
2638 attr = (HPDF_CMapEncoderAttr)encoder->attr;
2639
2640 if (attr && attr->cmap_range) {
2641 for (i = 0; i < attr->cmap_range->count; i++) {
2642 data = HPDF_List_ItemAt (attr->cmap_range, i);
2643
2644 HPDF_FreeMem (encoder->mmgr, data);
2645 }
2646
2647 HPDF_List_Free (attr->cmap_range);
2648 }
2649
2650 if (attr && attr->notdef_range) {
2651 for (i = 0; i < attr->notdef_range->count; i++) {
2652 data = HPDF_List_ItemAt (attr->notdef_range, i);
2653
2654 HPDF_FreeMem (encoder->mmgr, data);
2655 }
2656
2657 HPDF_List_Free (attr->notdef_range);
2658 }
2659
2660 if (attr && attr->code_space_range) {
2661 for (i = 0; i < attr->code_space_range->count; i++) {
2662 data = HPDF_List_ItemAt (attr->code_space_range, i);
2663
2664 HPDF_FreeMem (encoder->mmgr, data);
2665 }
2666
2667 HPDF_List_Free (attr->code_space_range);
2668 }
2669
2670 HPDF_FreeMem (encoder->mmgr, encoder->attr);
2671 encoder->attr = NULL;
2672}
2673
2674
2675HPDF_STATUS
2676HPDF_CMapEncoder_Write (HPDF_Encoder encoder,
2677 HPDF_Stream out)
2678{
2679 HPDF_STATUS ret = HPDF_OK;
2680 HPDF_UNUSED (out);
2681 HPDF_UNUSED (encoder);
2682
2683 return ret;
2684}
2685
2686
2687void
2688HPDF_Encoder_SetParseText (HPDF_Encoder encoder,
2689 HPDF_ParseText_Rec *state,
2690 const HPDF_BYTE *text,
2691 HPDF_UINT len)
2692{
2693 HPDF_PTRACE ((" HPDF_CMapEncoder_SetParseText\n"));
2694 HPDF_UNUSED (encoder);
2695
2696 state->text = text;
2697 state->index = 0;
2698 state->len = len;
2699 state->byte_type = HPDF_BYTE_TYPE_SINGLE;
2700}
2701
2702
2703HPDF_ByteType
2704HPDF_CMapEncoder_ByteType (HPDF_Encoder encoder,
2705 HPDF_ParseText_Rec *state)
2706{
2707 HPDF_CMapEncoderAttr attr = (HPDF_CMapEncoderAttr)encoder->attr;
2708
2709 HPDF_PTRACE ((" HPDF_CMapEncoder_ByteType\n"));
2710
2711 if (state->index >= state->len)
2712 return HPDF_BYTE_TYPE_UNKNOWN;
2713
2714 if (state->byte_type == HPDF_BYTE_TYPE_LEAD) {
2715 if (attr->is_trial_byte_fn (encoder, state->text[state->index]))
2716 state->byte_type = HPDF_BYTE_TYPE_TRIAL;
2717 else
2718 state->byte_type = HPDF_BYTE_TYPE_UNKNOWN;
2719 } else {
2720 if (attr->is_lead_byte_fn (encoder, state->text[state->index]))
2721 state->byte_type = HPDF_BYTE_TYPE_LEAD;
2722 else
2723 state->byte_type = HPDF_BYTE_TYPE_SINGLE;
2724 }
2725
2726 state->index++;
2727
2728 return state->byte_type;
2729}
2730
2731
2732HPDF_ByteType
2733HPDF_Encoder_ByteType (HPDF_Encoder encoder,
2734 HPDF_ParseText_Rec *state)
2735{
2736 HPDF_PTRACE ((" HPDF_Encoder_ByteType\n"));
2737
2738 if (encoder->byte_type_fn)
2739 return encoder->byte_type_fn (encoder, state);
2740 else
2741 return HPDF_BYTE_TYPE_SINGLE;
2742}
2743
2744
2745HPDF_STATUS
2746HPDF_CMapEncoder_AddCMap (HPDF_Encoder encoder,
2747 const HPDF_CidRange_Rec *range)
2748{
2749 HPDF_CMapEncoderAttr attr = (HPDF_CMapEncoderAttr)encoder->attr;
2750
2751 HPDF_PTRACE ((" HPDF_CMapEncoder_AddCMap\n"));
2752
2753 /* Copy specified pdf_cid_range array to fRangeArray. */
2754 while (range->from != 0xffff || range->to != 0xffff) {
2755 HPDF_CidRange_Rec *prange;
2756 HPDF_STATUS ret;
2757
2758 /*
2759 * Only if we have the default to_unicode_fn
2760 */
2761 if (encoder->to_unicode_fn == HPDF_CMapEncoder_ToUnicode) {
2762 HPDF_UINT16 code = range->from;
2763 HPDF_UINT16 cid = range->cid;
2764
2765 while (code <= range->to) {
2766 HPDF_BYTE l = code;
2767 HPDF_BYTE h = code >> 8;
2768
2769 attr->cid_map[l][h] = cid;
2770 code++;
2771 cid++;
2772 }
2773 }
2774
2775 prange = HPDF_GetMem (encoder->mmgr, sizeof(HPDF_CidRange_Rec));
2776 if (!prange)
2777 return encoder->error->error_no;
2778
2779 prange->from = range->from;
2780 prange->to = range->to;
2781 prange->cid = range->cid;
2782
2783 if ((ret = HPDF_List_Add (attr->cmap_range, prange)) != HPDF_OK) {
2784 HPDF_FreeMem (encoder->mmgr, prange);
2785 return ret;
2786 }
2787
2788 range++;
2789 }
2790
2791 return HPDF_OK;
2792}
2793
2794
2795static HPDF_STATUS
2796AddCidRainge (HPDF_MMgr mmgr,
2797 HPDF_CidRange_Rec range,
2798 HPDF_List target)
2799{
2800 HPDF_CidRange_Rec *prange;
2801 HPDF_STATUS ret;
2802
2803 prange = HPDF_GetMem (mmgr, sizeof(HPDF_CidRange_Rec));
2804 if (!prange)
2805 return mmgr->error->error_no;
2806
2807 prange->from = range.from;
2808 prange->to = range.to;
2809 prange->cid = range.cid;
2810
2811 if ((ret = HPDF_List_Add (target, prange))
2812 != HPDF_OK) {
2813 HPDF_FreeMem (mmgr, prange);
2814 return ret;
2815 }
2816
2817 return HPDF_OK;
2818}
2819
2820
2821HPDF_STATUS
2822HPDF_CMapEncoder_AddNotDefRange (HPDF_Encoder encoder,
2823 HPDF_CidRange_Rec range)
2824{
2825 HPDF_CMapEncoderAttr attr = (HPDF_CMapEncoderAttr)encoder->attr;
2826
2827 HPDF_PTRACE ((" HPDF_CMapEncoder_AddNotDefRange\n"));
2828
2829 return AddCidRainge (encoder->mmgr, range, attr->notdef_range);
2830}
2831
2832
2833HPDF_STATUS
2834HPDF_CMapEncoder_AddCodeSpaceRange (HPDF_Encoder encoder,
2835 HPDF_CidRange_Rec range)
2836{
2837 HPDF_CMapEncoderAttr attr = (HPDF_CMapEncoderAttr)encoder->attr;
2838
2839 HPDF_PTRACE ((" HPDF_CMapEncoder_AddNotDefRange\n"));
2840
2841 return AddCidRainge (encoder->mmgr, range, attr->code_space_range);
2842}
2843
2844
2845void
2846HPDF_CMapEncoder_SetUnicodeArray (HPDF_Encoder encoder,
2847 const HPDF_UnicodeMap_Rec *array)
2848{
2849 HPDF_CMapEncoderAttr attr = (HPDF_CMapEncoderAttr)encoder->attr;
2850
2851 HPDF_PTRACE ((" HPDF_CMapEncoder_SetUnicodeArray\n"));
2852
2853 if (array != NULL)
2854 while (array->unicode != 0xffff) {
2855 HPDF_BYTE l = (HPDF_BYTE)array->code;
2856 HPDF_BYTE h = (HPDF_BYTE)(array->code >> 8);
2857 attr->unicode_map[l][h] = array->unicode;
2858 array++;
2859 }
2860}
2861
2862
2863HPDF_STATUS
2864HPDF_CMapEncoder_AddJWWLineHead (HPDF_Encoder encoder,
2865 const HPDF_UINT16 *code)
2866{
2867 HPDF_CMapEncoderAttr attr = (HPDF_CMapEncoderAttr)encoder->attr;
2868 HPDF_UINT i, j;
2869
2870 HPDF_PTRACE ((" HPDF_CMapEncoder_AddJWWLineHead\n"));
2871
2872 for (i = 0; i < HPDF_MAX_JWW_NUM; i++) {
2873 if (*code == 0)
2874 break;
2875
2876 for (j = 0; j < HPDF_MAX_JWW_NUM; j++) {
2877 if (attr->jww_line_head[j] == *code)
2878 break;
2879
2880 if (attr->jww_line_head[j] == 0) {
2881 attr->jww_line_head[j] = *code;
2882 break;
2883 }
2884
2885 if (j == HPDF_MAX_JWW_NUM - 1)
2886 return HPDF_SetError (encoder->error,
2887 HPDF_EXCEED_JWW_CODE_NUM_LIMIT, i);
2888 }
2889
2890 code++;
2891 }
2892
2893 return HPDF_OK;
2894}
2895
2896
2897HPDF_BOOL
2898HPDF_Encoder_CheckJWWLineHead (HPDF_Encoder encoder,
2899 const HPDF_UINT16 code)
2900{
2901 HPDF_CMapEncoderAttr attr;
2902 HPDF_UINT j;
2903
2904 HPDF_PTRACE ((" HPDF_Encoder_CheckJWWLineHead\n"));
2905
2906 if (!HPDF_Encoder_Validate (encoder))
2907 return HPDF_FALSE;
2908
2909 if (encoder->type != HPDF_ENCODER_TYPE_DOUBLE_BYTE)
2910 return HPDF_FALSE;
2911
2912 attr = (HPDF_CMapEncoderAttr)encoder->attr;
2913
2914 for (j = 0; j < HPDF_MAX_JWW_NUM; j++) {
2915 if (code == attr->jww_line_head[j])
2916 return HPDF_TRUE;
2917
2918 if (attr->jww_line_head[j] == 0)
2919 return HPDF_FALSE;
2920 }
2921
2922 return HPDF_FALSE;
2923}
2924
2925
2926
2927
2928
2929HPDF_EXPORT(HPDF_UNICODE)
2930HPDF_Encoder_GetUnicode (HPDF_Encoder encoder,
2931 HPDF_UINT16 code)
2932{
2933 HPDF_PTRACE ((" HPDF_Encoder_GetUnicode\n"));
2934
2935 if (!HPDF_Encoder_Validate (encoder))
2936 return 0;
2937
2938 return HPDF_Encoder_ToUnicode (encoder, code);
2939}
2940
2941
2942HPDF_EXPORT(HPDF_ByteType)
2943HPDF_Encoder_GetByteType (HPDF_Encoder encoder,
2944 const char *text,
2945 HPDF_UINT index)
2946{
2947 HPDF_ParseText_Rec parse_state;
2948 HPDF_ByteType btype;
2949
2950 HPDF_PTRACE ((" HPDF_Encoder_GetByteType\n"));
2951
2952 if (!HPDF_Encoder_Validate (encoder))
2953 return HPDF_BYTE_TYPE_UNKNOWN;
2954
2955 if (encoder->type != HPDF_ENCODER_TYPE_DOUBLE_BYTE)
2956 return HPDF_BYTE_TYPE_SINGLE;
2957
2958 HPDF_Encoder_SetParseText (encoder, &parse_state, (HPDF_BYTE *)text, index + 1);
2959
2960 for (;;) {
2961 btype = HPDF_CMapEncoder_ByteType (encoder, &parse_state);
2962
2963 if (index == 0)
2964 break;
2965
2966 text++;
2967 if (!(*text))
2968 return HPDF_BYTE_TYPE_UNKNOWN;
2969 index--;
2970 }
2971
2972 return btype;
2973}
2974
2975
2976HPDF_EXPORT(HPDF_EncoderType)
2977HPDF_Encoder_GetType (HPDF_Encoder encoder)
2978{
2979 HPDF_PTRACE ((" HPDF_Encoder_GetType\n"));
2980
2981 if (!HPDF_Encoder_Validate (encoder))
2982 return HPDF_ENCODER_UNKNOWN;
2983
2984 return encoder->type;
2985}
2986
2987
2988HPDF_EXPORT(HPDF_WritingMode)
2989HPDF_Encoder_GetWritingMode (HPDF_Encoder encoder)
2990{
2991 HPDF_PTRACE ((" HPDF_Encoder_GetWritingMode\n"));
2992
2993 if (!HPDF_Encoder_Validate (encoder))
2994 return HPDF_WMODE_HORIZONTAL;
2995
2996 if (encoder->type == HPDF_ENCODER_TYPE_DOUBLE_BYTE) {
2997 HPDF_CMapEncoderAttr attr = (HPDF_CMapEncoderAttr)encoder->attr;
2998 return attr->writing_mode;
2999 }
3000
3001 return HPDF_WMODE_HORIZONTAL;
3002}
3003