1 /*
2 * << H a r u --free pdf library >> -- PdfEncodingDef.h
3 *
4 * Copyright (c) 1999-2003 Takeshi Kanno <takeshi_kanno@est.hi-ho.ne.jp>
5 *
6 * Permission to use, copy, modify, distribute and sell this software
7 * and its documentation for any purpose is hereby granted without fee,
8 * provided that the above copyright notice appear in all copies and
9 * that both that copyright notice and this permission notice appear
10 * in supporting documentation.
11 * It is provided "as is" without express or implied warranty.
12 *
13 */
14
15 #include "libharu.h"
16 #include <new>
17
18 static const unsigned char UNICODE_HEADER[PDF_UNICODE_HEADER_LEN] = {
19 0xFE, 0xFF
20 };
21
22 struct pdf_unicode_gryph_pair_struct {
23 unsigned short unicode;
24 const char* gryph_name;
25 };
26 typedef pdf_unicode_gryph_pair_struct pdf_unicode_gryph_pair;
27
28 /*----------------------------------------------------------------------------*/
29
30 struct pdf_encode_name_pair {
31 pdf_encoding encode;
32 char* encode_name;
33 };
34
35 static const pdf_encode_name_pair pdf_encoding_names[5] = {
36 {PDF_STANDARD_ENCODING, (char *) "StandardEncoding"},
37 {PDF_MAC_ROMAN_ENCODING, (char *)"MacRomanEncoding"},
38 {PDF_WIN_ANSI_ENCODING, (char *) "WinAnsiEncoding"},
39 {PDF_FONT_SPECIFIC, (char *) "FontSpecific"}
40 };
41
42 /*----------------------------------------------------------------------------*/
43
PdfEncodingDef()44 PdfEncodingDef::PdfEncodingDef()
45 : PdfAutoPtrObject()
46 {
47 fFirstChar = 0;
48 fLastChar = 0;
49 fBaseEncoding = PDF_ENCODING_EOF;
50 fDifferences = NULL;
51
52 for (int i = 0; i < 255; i++)
53 fUnicodeArray[i] = 0x0000;
54
55 PDF_DEBUG_PRINT(("++ [%x] PdfEncodingDef new.\n", (int)this));
56 }
57
58 void
AddDifference(unsigned int code,const char * char_name)59 PdfEncodingDef::AddDifference(unsigned int code, const char* char_name)
60 {
61 if (fDifferences == NULL) {
62 fDifferences = new PdfList();
63 PDF_DEBUG_PRINT(("++ [%x] fDifferences new.\n",
64 (int)fDifferences));
65 }
66
67 pdf_differences_element* diff = new pdf_differences_element;
68 PDF_DEBUG_PRINT(("++ [%x] pdf_differences_element new.\n", (int)diff));
69 diff->code = code;
70 diff->char_name = char_name;
71
72 PDF_DEBUG_PRINT(("PdfEncodingDef::AddDifference [%d], [%d]\n",
73 code, (int)char_name));
74 if (fDifferences->AddItem(diff) != true) {
75 delete diff;
76 throw PdfException(PDF_ERR_MALLOC,
77 "ERROR: PdfEncodingDef::AddDifference");
78 }
79 }
80
81 int
GetCharCode(unsigned short unicode)82 PdfEncodingDef::GetCharCode(unsigned short unicode)
83 {
84 for (unsigned int i = 0; i <= fLastChar - fFirstChar; i++) {
85 if (fUnicodeArray[i] == unicode)
86 return i + fFirstChar;
87 }
88 return -1;
89 }
90
91 int
GetCharCode(const char * char_name)92 PdfEncodingDef::GetCharCode(const char* char_name)
93 {
94 unsigned int unicode = GryphNameToUnicode(char_name);
95 return GetCharCode(unicode);
96 }
97
98 const char*
GetCharName(unsigned int code)99 PdfEncodingDef::GetCharName(unsigned int code)
100 {
101 if (fFirstChar > code || code > fLastChar)
102 return PDF_CHAR_NOTDEF;
103
104 unsigned int unicode = fUnicodeArray[code - fFirstChar];
105 return UnicodeToGryphName(unicode);
106 }
107
108 unsigned short
GetUnicode(unsigned int code)109 PdfEncodingDef::GetUnicode(unsigned int code)
110 {
111 return ((fFirstChar <= code && code <= fLastChar) ?
112 fUnicodeArray[code - fFirstChar] : 0x0000);
113 }
114
~PdfEncodingDef()115 PdfEncodingDef::~PdfEncodingDef()
116 {
117 ClearDefferences();
118
119 PDF_DEBUG_PRINT(("++ [%x] fDifferences delete.\n", (int)fDifferences));
120 delete fDifferences;
121
122 PDF_DEBUG_PRINT(("++ [%x] PdfEncodingDef delete.\n", (int)this));
123 }
124
125 void
ClearDefferences()126 PdfEncodingDef::ClearDefferences()
127 {
128 if (fDifferences != NULL) {
129 for (int i = 0; i < fDifferences->CountItems(); i++) {
130 PDF_DEBUG_PRINT(("++ [%x] Differences delete.\n",
131 (int)fDifferences->ItemAt(i)));
132 delete (pdf_differences_element*)fDifferences->ItemAt(i);
133 }
134 }
135 }
136
137 PdfObject*
GetEncoding(PdfXref * xref)138 PdfEncodingDef::GetEncoding(PdfXref *xref)
139 {
140 if (fDifferences == NULL || fDifferences->CountItems() == 0) {
141 PdfName* name = new PdfName(PdfEncodingToString(fBaseEncoding));
142 return name;
143 } else {
144
145 /* create dictionary for encoding. */
146 PdfDictionary *dict = new PdfDictionary(xref);
147 try {
148 dict->AddElement("Type", new PdfName("Encoding"));
149
150 if (fBaseEncoding != PDF_FONT_SPECIFIC) {
151 const char* base_name = PdfEncodingToString(fBaseEncoding);
152
153 dict->AddElement("BaseEncoding", new PdfName(base_name));
154 }
155 PdfArray* array = new PdfArray(xref);
156
157 try {
158 for (int i = 0; i < fDifferences->CountItems(); i++) {
159 pdf_differences_element* element =
160 (pdf_differences_element*)fDifferences->ItemAt(i);
161 array->Add(new PdfNumber(element->code));
162 array->Add(new PdfName(element->char_name));
163 }
164 } catch (...) {
165 delete array;
166 throw;
167 }
168 dict->AddElement("Differences", array);
169 } catch (...) {
170 delete dict;
171 throw;
172 }
173 return dict;
174 }
175 }
176
177 int
ToUnicode(const char * src,unsigned char * dst,int * len)178 PdfEncodingDef::ToUnicode(const char* src, unsigned char* dst, int* len)
179 {
180 int srclen = strlen(src);
181 int dstlen;
182 int j = 0;
183
184 if (dst != NULL && len != NULL)
185 dstlen = *len - 1;
186 else
187 dstlen = -1;
188
189 if (dstlen > 2) {
190 memcpy(dst, UNICODE_HEADER, PDF_UNICODE_HEADER_LEN);
191 j = 2;
192 } else
193 return -1;
194
195 const unsigned char* usrc = (const unsigned char*)src;
196 for (int i = 0; i < srclen; i++) {
197 unsigned int unicode;
198 unsigned char tmp[2];
199
200 unicode = GetUnicode(usrc[i]);
201 tmp[0] = unicode >> 8;
202 tmp[1] = unicode;
203
204 if (j < dstlen) {
205 memcpy(dst + j, tmp, 2);
206 j += 2;
207 }
208 }
209 *len = j;
210 return j;
211 }
212
213 void
SetUnicodeArray(unsigned int first_char,unsigned int last_char,const unsigned short * array)214 PdfEncodingDef::SetUnicodeArray(unsigned int first_char,
215 unsigned int last_char, const unsigned short* array)
216 {
217 fFirstChar = first_char;
218 fLastChar = last_char;
219
220 ClearDefferences();
221
222 for (unsigned int i = 0; i <= fLastChar - fFirstChar; i++)
223 fUnicodeArray[i] = array[i];
224 }
225
226 void
OverrideUnicodeArray(const unsigned short * array)227 PdfEncodingDef::OverrideUnicodeArray(const unsigned short* array)
228 {
229 ClearDefferences();
230
231 for (unsigned int i = 0; i <= fLastChar - fFirstChar; i++) {
232 if (fUnicodeArray[i] != array[i]) {
233 fUnicodeArray[i] = array[i];
234 AddDifference(i + fFirstChar, UnicodeToGryphName(array[i]));
235 }
236 }
237 }
238
239 /*---------------------------------------------------------------------------*/
240 /*------ utility routine ----------------------------------------------------*/
241
242 static const pdf_unicode_gryph_pair UNICODE_GRYPH_NAME_MAP[] = {
243 {0x0000, PDF_CHAR_NOTDEF},
244 {0x0020, "space"},
245 {0x0021, "exclam"},
246 {0x0022, "quotedbl"},
247 {0x0023, "numbersign"},
248 {0x0024, "dollar"},
249 {0x0025, "percent"},
250 {0x0026, "ampersand"},
251 {0x0027, "quotesingle"},
252 {0x0028, "parenleft"},
253 {0x0029, "parenright"},
254 {0x002A, "asterisk"},
255 {0x002B, "plus"},
256 {0x002C, "comma"},
257 {0x002D, "hyphen"},
258 {0x002E, "period"},
259 {0x002F, "slash"},
260 {0x0030, "zero"},
261 {0x0031, "one"},
262 {0x0032, "two"},
263 {0x0033, "three"},
264 {0x0034, "four"},
265 {0x0035, "five"},
266 {0x0036, "six"},
267 {0x0037, "seven"},
268 {0x0038, "eight"},
269 {0x0039, "nine"},
270 {0x003A, "colon"},
271 {0x003B, "semicolon"},
272 {0x003C, "less"},
273 {0x003D, "equal"},
274 {0x003E, "greater"},
275 {0x003F, "question"},
276 {0x0040, "at"},
277 {0x0041, "A"},
278 {0x0042, "B"},
279 {0x0043, "C"},
280 {0x0044, "D"},
281 {0x0045, "E"},
282 {0x0046, "F"},
283 {0x0047, "G"},
284 {0x0048, "H"},
285 {0x0049, "I"},
286 {0x004A, "J"},
287 {0x004B, "K"},
288 {0x004C, "L"},
289 {0x004D, "M"},
290 {0x004E, "N"},
291 {0x004F, "O"},
292 {0x0050, "P"},
293 {0x0051, "Q"},
294 {0x0052, "R"},
295 {0x0053, "S"},
296 {0x0054, "T"},
297 {0x0055, "U"},
298 {0x0056, "V"},
299 {0x0057, "W"},
300 {0x0058, "X"},
301 {0x0059, "Y"},
302 {0x005A, "Z"},
303 {0x005B, "bracketleft"},
304 {0x005C, "backslash"},
305 {0x005D, "bracketright"},
306 {0x005E, "asciicircum"},
307 {0x005F, "underscore"},
308 {0x0060, "grave"},
309 {0x0061, "a"},
310 {0x0062, "b"},
311 {0x0063, "c"},
312 {0x0064, "d"},
313 {0x0065, "e"},
314 {0x0066, "f"},
315 {0x0067, "g"},
316 {0x0068, "h"},
317 {0x0069, "i"},
318 {0x006A, "j"},
319 {0x006B, "k"},
320 {0x006C, "l"},
321 {0x006D, "m"},
322 {0x006E, "n"},
323 {0x006F, "o"},
324 {0x0070, "p"},
325 {0x0071, "q"},
326 {0x0072, "r"},
327 {0x0073, "s"},
328 {0x0074, "t"},
329 {0x0075, "u"},
330 {0x0076, "v"},
331 {0x0077, "w"},
332 {0x0078, "x"},
333 {0x0079, "y"},
334 {0x007A, "z"},
335 {0x007B, "braceleft"},
336 {0x007C, "bar"},
337 {0x007D, "braceright"},
338 {0x007E, "asciitilde"},
339 {0x00A0, "space"},
340 {0x00A1, "exclamdown"},
341 {0x00A2, "cent"},
342 {0x00A3, "sterling"},
343 {0x00A4, "currency"},
344 {0x00A5, "yen"},
345 {0x00A6, "brokenbar"},
346 {0x00A7, "section"},
347 {0x00A8, "dieresis"},
348 {0x00A9, "copyright"},
349 {0x00AA, "ordfeminine"},
350 {0x00AB, "guillemotleft"},
351 {0x00AC, "logicalnot"},
352 {0x00AD, "hyphen"},
353 {0x00AE, "registered"},
354 {0x00AF, "macron"},
355 {0x00B0, "degree"},
356 {0x00B1, "plusminus"},
357 {0x00B2, "twosuperior"},
358 {0x00B3, "threesuperior"},
359 {0x00B4, "acute"},
360 {0x00B5, "mu"},
361 {0x00B6, "paragraph"},
362 {0x00B7, "periodcentered"},
363 {0x00B8, "cedilla"},
364 {0x00B9, "onesuperior"},
365 {0x00BA, "ordmasculine"},
366 {0x00BB, "guillemotright"},
367 {0x00BC, "onequarter"},
368 {0x00BD, "onehalf"},
369 {0x00BE, "threequarters"},
370 {0x00BF, "questiondown"},
371 {0x00C0, "Agrave"},
372 {0x00C1, "Aacute"},
373 {0x00C2, "Acircumflex"},
374 {0x00C3, "Atilde"},
375 {0x00C4, "Adieresis"},
376 {0x00C5, "Aring"},
377 {0x00C6, "AE"},
378 {0x00C7, "Ccedilla"},
379 {0x00C8, "Egrave"},
380 {0x00C9, "Eacute"},
381 {0x00CA, "Ecircumflex"},
382 {0x00CB, "Edieresis"},
383 {0x00CC, "Igrave"},
384 {0x00CD, "Iacute"},
385 {0x00CE, "Icircumflex"},
386 {0x00CF, "Idieresis"},
387 {0x00D0, "Eth"},
388 {0x00D1, "Ntilde"},
389 {0x00D2, "Ograve"},
390 {0x00D3, "Oacute"},
391 {0x00D4, "Ocircumflex"},
392 {0x00D5, "Otilde"},
393 {0x00D6, "Odieresis"},
394 {0x00D7, "multiply"},
395 {0x00D8, "Oslash"},
396 {0x00D9, "Ugrave"},
397 {0x00DA, "Uacute"},
398 {0x00DB, "Ucircumflex"},
399 {0x00DC, "Udieresis"},
400 {0x00DD, "Yacute"},
401 {0x00DE, "Thorn"},
402 {0x00DF, "germandbls"},
403 {0x00E0, "agrave"},
404 {0x00E1, "aacute"},
405 {0x00E2, "acircumflex"},
406 {0x00E3, "atilde"},
407 {0x00E4, "adieresis"},
408 {0x00E5, "aring"},
409 {0x00E6, "ae"},
410 {0x00E7, "ccedilla"},
411 {0x00E8, "egrave"},
412 {0x00E9, "eacute"},
413 {0x00EA, "ecircumflex"},
414 {0x00EB, "edieresis"},
415 {0x00EC, "igrave"},
416 {0x00ED, "iacute"},
417 {0x00EE, "icircumflex"},
418 {0x00EF, "idieresis"},
419 {0x00F0, "eth"},
420 {0x00F1, "ntilde"},
421 {0x00F2, "ograve"},
422 {0x00F3, "oacute"},
423 {0x00F4, "ocircumflex"},
424 {0x00F5, "otilde"},
425 {0x00F6, "odieresis"},
426 {0x00F7, "divide"},
427 {0x00F8, "oslash"},
428 {0x00F9, "ugrave"},
429 {0x00FA, "uacute"},
430 {0x00FB, "ucircumflex"},
431 {0x00FC, "udieresis"},
432 {0x00FD, "yacute"},
433 {0x00FE, "thorn"},
434 {0x00FF, "ydieresis"},
435 {0x0100, "Amacron"},
436 {0x0101, "amacron"},
437 {0x0102, "Abreve"},
438 {0x0103, "abreve"},
439 {0x0104, "Aogonek"},
440 {0x0105, "aogonek"},
441 {0x0106, "Cacute"},
442 {0x0107, "cacute"},
443 {0x0108, "Ccircumflex"},
444 {0x0109, "ccircumflex"},
445 {0x010A, "Cdotaccent"},
446 {0x010B, "cdotaccent"},
447 {0x010C, "Ccaron"},
448 {0x010D, "ccaron"},
449 {0x010E, "Dcaron"},
450 {0x010F, "dcaron"},
451 {0x0110, "Dcroat"},
452 {0x0111, "dcroat"},
453 {0x0112, "Emacron"},
454 {0x0113, "emacron"},
455 {0x0114, "Ebreve"},
456 {0x0115, "ebreve"},
457 {0x0116, "Edotaccent"},
458 {0x0117, "edotaccent"},
459 {0x0118, "Eogonek"},
460 {0x0119, "eogonek"},
461 {0x011A, "Ecaron"},
462 {0x011B, "ecaron"},
463 {0x011C, "Gcircumflex"},
464 {0x011D, "gcircumflex"},
465 {0x011E, "Gbreve"},
466 {0x011F, "gbreve"},
467 {0x0120, "Gdotaccent"},
468 {0x0121, "gdotaccent"},
469 {0x0122, "Gcommaaccent"},
470 {0x0123, "gcommaaccent"},
471 {0x0124, "Hcircumflex"},
472 {0x0125, "hcircumflex"},
473 {0x0126, "Hbar"},
474 {0x0127, "hbar"},
475 {0x0128, "Itilde"},
476 {0x0129, "itilde"},
477 {0x012A, "Imacron"},
478 {0x012B, "imacron"},
479 {0x012C, "Ibreve"},
480 {0x012D, "ibreve"},
481 {0x012E, "Iogonek"},
482 {0x012F, "iogonek"},
483 {0x0130, "Idotaccent"},
484 {0x0131, "dotlessi"},
485 {0x0132, "IJ"},
486 {0x0133, "ij"},
487 {0x0134, "Jcircumflex"},
488 {0x0135, "jcircumflex"},
489 {0x0136, "Kcommaaccent"},
490 {0x0137, "kcommaaccent"},
491 {0x0138, "kgreenlandic"},
492 {0x0139, "Lacute"},
493 {0x013A, "lacute"},
494 {0x013B, "Lcommaaccent"},
495 {0x013C, "lcommaaccent"},
496 {0x013D, "Lcaron"},
497 {0x013E, "lcaron"},
498 {0x013F, "Ldot"},
499 {0x0140, "ldot"},
500 {0x0141, "Lslash"},
501 {0x0142, "lslash"},
502 {0x0143, "Nacute"},
503 {0x0144, "nacute"},
504 {0x0145, "Ncommaaccent"},
505 {0x0146, "ncommaaccent"},
506 {0x0147, "Ncaron"},
507 {0x0148, "ncaron"},
508 {0x0149, "napostrophe"},
509 {0x014A, "Eng"},
510 {0x014B, "eng"},
511 {0x014C, "Omacron"},
512 {0x014D, "omacron"},
513 {0x014E, "Obreve"},
514 {0x014F, "obreve"},
515 {0x0150, "Ohungarumlaut"},
516 {0x0151, "ohungarumlaut"},
517 {0x0152, "OE"},
518 {0x0153, "oe"},
519 {0x0154, "Racute"},
520 {0x0155, "racute"},
521 {0x0156, "Rcommaaccent"},
522 {0x0157, "rcommaaccent"},
523 {0x0158, "Rcaron"},
524 {0x0159, "rcaron"},
525 {0x015A, "Sacute"},
526 {0x015B, "sacute"},
527 {0x015C, "Scircumflex"},
528 {0x015D, "scircumflex"},
529 {0x015E, "Scedilla"},
530 {0x015F, "scedilla"},
531 {0x0160, "Scaron"},
532 {0x0161, "scaron"},
533 {0x0162, "Tcommaaccent"},
534 {0x0163, "tcommaaccent"},
535 {0x0164, "Tcaron"},
536 {0x0165, "tcaron"},
537 {0x0166, "Tbar"},
538 {0x0167, "tbar"},
539 {0x0168, "Utilde"},
540 {0x0169, "utilde"},
541 {0x016A, "Umacron"},
542 {0x016B, "umacron"},
543 {0x016C, "Ubreve"},
544 {0x016D, "ubreve"},
545 {0x016E, "Uring"},
546 {0x016F, "uring"},
547 {0x0170, "Uhungarumlaut"},
548 {0x0171, "uhungarumlaut"},
549 {0x0172, "Uogonek"},
550 {0x0173, "uogonek"},
551 {0x0174, "Wcircumflex"},
552 {0x0175, "wcircumflex"},
553 {0x0176, "Ycircumflex"},
554 {0x0177, "ycircumflex"},
555 {0x0178, "Ydieresis"},
556 {0x0179, "Zacute"},
557 {0x017A, "zacute"},
558 {0x017B, "Zdotaccent"},
559 {0x017C, "zdotaccent"},
560 {0x017D, "Zcaron"},
561 {0x017E, "zcaron"},
562 {0x017F, "longs"},
563 {0x0192, "florin"},
564 {0x01A0, "Ohorn"},
565 {0x01A1, "ohorn"},
566 {0x01AF, "Uhorn"},
567 {0x01B0, "uhorn"},
568 {0x01E6, "Gcaron"},
569 {0x01E7, "gcaron"},
570 {0x01FA, "Aringacute"},
571 {0x01FB, "aringacute"},
572 {0x01FC, "AEacute"},
573 {0x01FD, "aeacute"},
574 {0x01FE, "Oslashacute"},
575 {0x01FF, "oslashacute"},
576 {0x0218, "Scommaaccent"},
577 {0x0219, "scommaaccent"},
578 {0x021A, "Tcommaaccent"},
579 {0x021B, "tcommaaccent"},
580 {0x02BC, "afii57929"},
581 {0x02BD, "afii64937"},
582 {0x02C6, "circumflex"},
583 {0x02C7, "caron"},
584 {0x02C9, "macron"},
585 {0x02D8, "breve"},
586 {0x02D9, "dotaccent"},
587 {0x02DA, "ring"},
588 {0x02DB, "ogonek"},
589 {0x02DC, "tilde"},
590 {0x02DD, "hungarumlaut"},
591 {0x0300, "gravecomb"},
592 {0x0301, "acutecomb"},
593 {0x0303, "tildecomb"},
594 {0x0309, "hookabovecomb"},
595 {0x0323, "dotbelowcomb"},
596 {0x0384, "tonos"},
597 {0x0385, "dieresistonos"},
598 {0x0386, "Alphatonos"},
599 {0x0387, "anoteleia"},
600 {0x0388, "Epsilontonos"},
601 {0x0389, "Etatonos"},
602 {0x038A, "Iotatonos"},
603 {0x038C, "Omicrontonos"},
604 {0x038E, "Upsilontonos"},
605 {0x038F, "Omegatonos"},
606 {0x0390, "iotadieresistonos"},
607 {0x0391, "Alpha"},
608 {0x0392, "Beta"},
609 {0x0393, "Gamma"},
610 {0x0394, "Delta"},
611 {0x0395, "Epsilon"},
612 {0x0396, "Zeta"},
613 {0x0397, "Eta"},
614 {0x0398, "Theta"},
615 {0x0399, "Iota"},
616 {0x039A, "Kappa"},
617 {0x039B, "Lambda"},
618 {0x039C, "Mu"},
619 {0x039D, "Nu"},
620 {0x039E, "Xi"},
621 {0x039F, "Omicron"},
622 {0x03A0, "Pi"},
623 {0x03A1, "Rho"},
624 {0x03A3, "Sigma"},
625 {0x03A4, "Tau"},
626 {0x03A5, "Upsilon"},
627 {0x03A6, "Phi"},
628 {0x03A7, "Chi"},
629 {0x03A8, "Psi"},
630 {0x03A9, "Omega"},
631 {0x03AA, "Iotadieresis"},
632 {0x03AB, "Upsilondieresis"},
633 {0x03AC, "alphatonos"},
634 {0x03AD, "epsilontonos"},
635 {0x03AE, "etatonos"},
636 {0x03AF, "iotatonos"},
637 {0x03B0, "upsilondieresistonos"},
638 {0x03B1, "alpha"},
639 {0x03B2, "beta"},
640 {0x03B3, "gamma"},
641 {0x03B4, "delta"},
642 {0x03B5, "epsilon"},
643 {0x03B6, "zeta"},
644 {0x03B7, "eta"},
645 {0x03B8, "theta"},
646 {0x03B9, "iota"},
647 {0x03BA, "kappa"},
648 {0x03BB, "lambda"},
649 {0x03BC, "mu"},
650 {0x03BD, "nu"},
651 {0x03BE, "xi"},
652 {0x03BF, "omicron"},
653 {0x03C0, "pi"},
654 {0x03C1, "rho"},
655 {0x03C2, "sigma1"},
656 {0x03C3, "sigma"},
657 {0x03C4, "tau"},
658 {0x03C5, "upsilon"},
659 {0x03C6, "phi"},
660 {0x03C7, "chi"},
661 {0x03C8, "psi"},
662 {0x03C9, "omega"},
663 {0x03CA, "iotadieresis"},
664 {0x03CB, "upsilondieresis"},
665 {0x03CC, "omicrontonos"},
666 {0x03CD, "upsilontonos"},
667 {0x03CE, "omegatonos"},
668 {0x03D1, "theta1"},
669 {0x03D2, "Upsilon1"},
670 {0x03D5, "phi1"},
671 {0x03D6, "omega1"},
672 {0x0401, "afii10023"},
673 {0x0402, "afii10051"},
674 {0x0403, "afii10052"},
675 {0x0404, "afii10053"},
676 {0x0405, "afii10054"},
677 {0x0406, "afii10055"},
678 {0x0407, "afii10056"},
679 {0x0408, "afii10057"},
680 {0x0409, "afii10058"},
681 {0x040A, "afii10059"},
682 {0x040B, "afii10060"},
683 {0x040C, "afii10061"},
684 {0x040E, "afii10062"},
685 {0x040F, "afii10145"},
686 {0x0410, "afii10017"},
687 {0x0411, "afii10018"},
688 {0x0412, "afii10019"},
689 {0x0413, "afii10020"},
690 {0x0414, "afii10021"},
691 {0x0415, "afii10022"},
692 {0x0416, "afii10024"},
693 {0x0417, "afii10025"},
694 {0x0418, "afii10026"},
695 {0x0419, "afii10027"},
696 {0x041A, "afii10028"},
697 {0x041B, "afii10029"},
698 {0x041C, "afii10030"},
699 {0x041D, "afii10031"},
700 {0x041E, "afii10032"},
701 {0x041F, "afii10033"},
702 {0x0420, "afii10034"},
703 {0x0421, "afii10035"},
704 {0x0422, "afii10036"},
705 {0x0423, "afii10037"},
706 {0x0424, "afii10038"},
707 {0x0425, "afii10039"},
708 {0x0426, "afii10040"},
709 {0x0427, "afii10041"},
710 {0x0428, "afii10042"},
711 {0x0429, "afii10043"},
712 {0x042A, "afii10044"},
713 {0x042B, "afii10045"},
714 {0x042C, "afii10046"},
715 {0x042D, "afii10047"},
716 {0x042E, "afii10048"},
717 {0x042F, "afii10049"},
718 {0x0430, "afii10065"},
719 {0x0431, "afii10066"},
720 {0x0432, "afii10067"},
721 {0x0433, "afii10068"},
722 {0x0434, "afii10069"},
723 {0x0435, "afii10070"},
724 {0x0436, "afii10072"},
725 {0x0437, "afii10073"},
726 {0x0438, "afii10074"},
727 {0x0439, "afii10075"},
728 {0x043A, "afii10076"},
729 {0x043B, "afii10077"},
730 {0x043C, "afii10078"},
731 {0x043D, "afii10079"},
732 {0x043E, "afii10080"},
733 {0x043F, "afii10081"},
734 {0x0440, "afii10082"},
735 {0x0441, "afii10083"},
736 {0x0442, "afii10084"},
737 {0x0443, "afii10085"},
738 {0x0444, "afii10086"},
739 {0x0445, "afii10087"},
740 {0x0446, "afii10088"},
741 {0x0447, "afii10089"},
742 {0x0448, "afii10090"},
743 {0x0449, "afii10091"},
744 {0x044A, "afii10092"},
745 {0x044B, "afii10093"},
746 {0x044C, "afii10094"},
747 {0x044D, "afii10095"},
748 {0x044E, "afii10096"},
749 {0x044F, "afii10097"},
750 {0x0451, "afii10071"},
751 {0x0452, "afii10099"},
752 {0x0453, "afii10100"},
753 {0x0454, "afii10101"},
754 {0x0455, "afii10102"},
755 {0x0456, "afii10103"},
756 {0x0457, "afii10104"},
757 {0x0458, "afii10105"},
758 {0x0459, "afii10106"},
759 {0x045A, "afii10107"},
760 {0x045B, "afii10108"},
761 {0x045C, "afii10109"},
762 {0x045E, "afii10110"},
763 {0x045F, "afii10193"},
764 {0x0462, "afii10146"},
765 {0x0463, "afii10194"},
766 {0x0472, "afii10147"},
767 {0x0473, "afii10195"},
768 {0x0474, "afii10148"},
769 {0x0475, "afii10196"},
770 {0x0490, "afii10050"},
771 {0x0491, "afii10098"},
772 {0x04D9, "afii10846"},
773 {0x05B0, "afii57799"},
774 {0x05B1, "afii57801"},
775 {0x05B2, "afii57800"},
776 {0x05B3, "afii57802"},
777 {0x05B4, "afii57793"},
778 {0x05B5, "afii57794"},
779 {0x05B6, "afii57795"},
780 {0x05B7, "afii57798"},
781 {0x05B8, "afii57797"},
782 {0x05B9, "afii57806"},
783 {0x05BB, "afii57796"},
784 {0x05BC, "afii57807"},
785 {0x05BD, "afii57839"},
786 {0x05BE, "afii57645"},
787 {0x05BF, "afii57841"},
788 {0x05C0, "afii57842"},
789 {0x05C1, "afii57804"},
790 {0x05C2, "afii57803"},
791 {0x05C3, "afii57658"},
792 {0x05D0, "afii57664"},
793 {0x05D1, "afii57665"},
794 {0x05D2, "afii57666"},
795 {0x05D3, "afii57667"},
796 {0x05D4, "afii57668"},
797 {0x05D5, "afii57669"},
798 {0x05D6, "afii57670"},
799 {0x05D7, "afii57671"},
800 {0x05D8, "afii57672"},
801 {0x05D9, "afii57673"},
802 {0x05DA, "afii57674"},
803 {0x05DB, "afii57675"},
804 {0x05DC, "afii57676"},
805 {0x05DD, "afii57677"},
806 {0x05DE, "afii57678"},
807 {0x05DF, "afii57679"},
808 {0x05E0, "afii57680"},
809 {0x05E1, "afii57681"},
810 {0x05E2, "afii57682"},
811 {0x05E3, "afii57683"},
812 {0x05E4, "afii57684"},
813 {0x05E5, "afii57685"},
814 {0x05E6, "afii57686"},
815 {0x05E7, "afii57687"},
816 {0x05E8, "afii57688"},
817 {0x05E9, "afii57689"},
818 {0x05EA, "afii57690"},
819 {0x05F0, "afii57716"},
820 {0x05F1, "afii57717"},
821 {0x05F2, "afii57718"},
822 {0x060C, "afii57388"},
823 {0x061B, "afii57403"},
824 {0x061F, "afii57407"},
825 {0x0621, "afii57409"},
826 {0x0622, "afii57410"},
827 {0x0623, "afii57411"},
828 {0x0624, "afii57412"},
829 {0x0625, "afii57413"},
830 {0x0626, "afii57414"},
831 {0x0627, "afii57415"},
832 {0x0628, "afii57416"},
833 {0x0629, "afii57417"},
834 {0x062A, "afii57418"},
835 {0x062B, "afii57419"},
836 {0x062C, "afii57420"},
837 {0x062D, "afii57421"},
838 {0x062E, "afii57422"},
839 {0x062F, "afii57423"},
840 {0x0630, "afii57424"},
841 {0x0631, "afii57425"},
842 {0x0632, "afii57426"},
843 {0x0633, "afii57427"},
844 {0x0634, "afii57428"},
845 {0x0635, "afii57429"},
846 {0x0636, "afii57430"},
847 {0x0637, "afii57431"},
848 {0x0638, "afii57432"},
849 {0x0639, "afii57433"},
850 {0x063A, "afii57434"},
851 {0x0640, "afii57440"},
852 {0x0641, "afii57441"},
853 {0x0642, "afii57442"},
854 {0x0643, "afii57443"},
855 {0x0644, "afii57444"},
856 {0x0645, "afii57445"},
857 {0x0646, "afii57446"},
858 {0x0647, "afii57470"},
859 {0x0648, "afii57448"},
860 {0x0649, "afii57449"},
861 {0x064A, "afii57450"},
862 {0x064B, "afii57451"},
863 {0x064C, "afii57452"},
864 {0x064D, "afii57453"},
865 {0x064E, "afii57454"},
866 {0x064F, "afii57455"},
867 {0x0650, "afii57456"},
868 {0x0651, "afii57457"},
869 {0x0652, "afii57458"},
870 {0x0660, "afii57392"},
871 {0x0661, "afii57393"},
872 {0x0662, "afii57394"},
873 {0x0663, "afii57395"},
874 {0x0664, "afii57396"},
875 {0x0665, "afii57397"},
876 {0x0666, "afii57398"},
877 {0x0667, "afii57399"},
878 {0x0668, "afii57400"},
879 {0x0669, "afii57401"},
880 {0x066A, "afii57381"},
881 {0x066D, "afii63167"},
882 {0x0679, "afii57511"},
883 {0x067E, "afii57506"},
884 {0x0686, "afii57507"},
885 {0x0688, "afii57512"},
886 {0x0691, "afii57513"},
887 {0x0698, "afii57508"},
888 {0x06A4, "afii57505"},
889 {0x06AF, "afii57509"},
890 {0x06BA, "afii57514"},
891 {0x06D2, "afii57519"},
892 {0x06D5, "afii57534"},
893 {0x1E80, "Wgrave"},
894 {0x1E81, "wgrave"},
895 {0x1E82, "Wacute"},
896 {0x1E83, "wacute"},
897 {0x1E84, "Wdieresis"},
898 {0x1E85, "wdieresis"},
899 {0x1EF2, "Ygrave"},
900 {0x1EF3, "ygrave"},
901 {0x200C, "afii61664"},
902 {0x200D, "afii301"},
903 {0x200E, "afii299"},
904 {0x200F, "afii300"},
905 {0x2012, "figuredash"},
906 {0x2013, "endash"},
907 {0x2014, "emdash"},
908 {0x2015, "afii00208"},
909 {0x2017, "underscoredbl"},
910 {0x2018, "quoteleft"},
911 {0x2019, "quoteright"},
912 {0x201A, "quotesinglbase"},
913 {0x201B, "quotereversed"},
914 {0x201C, "quotedblleft"},
915 {0x201D, "quotedblright"},
916 {0x201E, "quotedblbase"},
917 {0x2020, "dagger"},
918 {0x2021, "daggerdbl"},
919 {0x2022, "bullet"},
920 {0x2024, "onedotenleader"},
921 {0x2025, "twodotenleader"},
922 {0x2026, "ellipsis"},
923 {0x202C, "afii61573"},
924 {0x202D, "afii61574"},
925 {0x202E, "afii61575"},
926 {0x2030, "perthousand"},
927 {0x2032, "minute"},
928 {0x2033, "second"},
929 {0x2039, "guilsinglleft"},
930 {0x203A, "guilsinglright"},
931 {0x203C, "exclamdbl"},
932 {0x2044, "fraction"},
933 {0x2070, "zerosuperior"},
934 {0x2074, "foursuperior"},
935 {0x2075, "fivesuperior"},
936 {0x2076, "sixsuperior"},
937 {0x2077, "sevensuperior"},
938 {0x2078, "eightsuperior"},
939 {0x2079, "ninesuperior"},
940 {0x207D, "parenleftsuperior"},
941 {0x207E, "parenrightsuperior"},
942 {0x207F, "nsuperior"},
943 {0x2080, "zeroinferior"},
944 {0x2081, "oneinferior"},
945 {0x2082, "twoinferior"},
946 {0x2083, "threeinferior"},
947 {0x2084, "fourinferior"},
948 {0x2085, "fiveinferior"},
949 {0x2086, "sixinferior"},
950 {0x2087, "seveninferior"},
951 {0x2088, "eightinferior"},
952 {0x2089, "nineinferior"},
953 {0x208D, "parenleftinferior"},
954 {0x208E, "parenrightinferior"},
955 {0x20A1, "colonmonetary"},
956 {0x20A3, "franc"},
957 {0x20A4, "lira"},
958 {0x20A7, "peseta"},
959 {0x20AA, "afii57636"},
960 {0x20AB, "dong"},
961 {0x20AC, "Euro"},
962 {0x2105, "afii61248"},
963 {0x2111, "Ifraktur"},
964 {0x2113, "afii61289"},
965 {0x2116, "afii61352"},
966 {0x2118, "weierstrass"},
967 {0x211C, "Rfraktur"},
968 {0x211E, "prescription"},
969 {0x2122, "trademark"},
970 {0x2126, "Omega"},
971 {0x212E, "estimated"},
972 {0x2135, "aleph"},
973 {0x2153, "onethird"},
974 {0x2154, "twothirds"},
975 {0x215B, "oneeighth"},
976 {0x215C, "threeeighths"},
977 {0x215D, "fiveeighths"},
978 {0x215E, "seveneighths"},
979 {0x2190, "arrowleft"},
980 {0x2191, "arrowup"},
981 {0x2192, "arrowright"},
982 {0x2193, "arrowdown"},
983 {0x2194, "arrowboth"},
984 {0x2195, "arrowupdn"},
985 {0x21A8, "arrowupdnbse"},
986 {0x21B5, "carriagereturn"},
987 {0x21D0, "arrowdblleft"},
988 {0x21D1, "arrowdblup"},
989 {0x21D2, "arrowdblright"},
990 {0x21D3, "arrowdbldown"},
991 {0x21D4, "arrowdblboth"},
992 {0x2200, "universal"},
993 {0x2202, "partialdiff"},
994 {0x2203, "existential"},
995 {0x2205, "emptyset"},
996 {0x2206, "Delta"},
997 {0x2207, "gradient"},
998 {0x2208, "element"},
999 {0x2209, "notelement"},
1000 {0x220B, "suchthat"},
1001 {0x220F, "product"},
1002 {0x2211, "summation"},
1003 {0x2212, "minus"},
1004 {0x2215, "fraction"},
1005 {0x2217, "asteriskmath"},
1006 {0x2219, "periodcentered"},
1007 {0x221A, "radical"},
1008 {0x221D, "proportional"},
1009 {0x221E, "infinity"},
1010 {0x221F, "orthogonal"},
1011 {0x2220, "angle"},
1012 {0x2227, "logicaland"},
1013 {0x2228, "logicalor"},
1014 {0x2229, "intersection"},
1015 {0x222A, "union"},
1016 {0x222B, "integral"},
1017 {0x2234, "therefore"},
1018 {0x223C, "similar"},
1019 {0x2245, "congruent"},
1020 {0x2248, "approxequal"},
1021 {0x2260, "notequal"},
1022 {0x2261, "equivalence"},
1023 {0x2264, "lessequal"},
1024 {0x2265, "greaterequal"},
1025 {0x2282, "propersubset"},
1026 {0x2283, "propersuperset"},
1027 {0x2284, "notsubset"},
1028 {0x2286, "reflexsubset"},
1029 {0x2287, "reflexsuperset"},
1030 {0x2295, "circleplus"},
1031 {0x2297, "circlemultiply"},
1032 {0x22A5, "perpendicular"},
1033 {0x22C5, "dotmath"},
1034 {0x2302, "house"},
1035 {0x2310, "revlogicalnot"},
1036 {0x2320, "integraltp"},
1037 {0x2321, "integralbt"},
1038 {0x2329, "angleleft"},
1039 {0x232A, "angleright"},
1040 {0x2500, "SF100000"},
1041 {0x2502, "SF110000"},
1042 {0x250C, "SF010000"},
1043 {0x2510, "SF030000"},
1044 {0x2514, "SF020000"},
1045 {0x2518, "SF040000"},
1046 {0x251C, "SF080000"},
1047 {0x2524, "SF090000"},
1048 {0x252C, "SF060000"},
1049 {0x2534, "SF070000"},
1050 {0x253C, "SF050000"},
1051 {0x2550, "SF430000"},
1052 {0x2551, "SF240000"},
1053 {0x2552, "SF510000"},
1054 {0x2553, "SF520000"},
1055 {0x2554, "SF390000"},
1056 {0x2555, "SF220000"},
1057 {0x2556, "SF210000"},
1058 {0x2557, "SF250000"},
1059 {0x2558, "SF500000"},
1060 {0x2559, "SF490000"},
1061 {0x255A, "SF380000"},
1062 {0x255B, "SF280000"},
1063 {0x255C, "SF270000"},
1064 {0x255D, "SF260000"},
1065 {0x255E, "SF360000"},
1066 {0x255F, "SF370000"},
1067 {0x2560, "SF420000"},
1068 {0x2561, "SF190000"},
1069 {0x2562, "SF200000"},
1070 {0x2563, "SF230000"},
1071 {0x2564, "SF470000"},
1072 {0x2565, "SF480000"},
1073 {0x2566, "SF410000"},
1074 {0x2567, "SF450000"},
1075 {0x2568, "SF460000"},
1076 {0x2569, "SF400000"},
1077 {0x256A, "SF540000"},
1078 {0x256B, "SF530000"},
1079 {0x256C, "SF440000"},
1080 {0x2580, "upblock"},
1081 {0x2584, "dnblock"},
1082 {0x2588, "block"},
1083 {0x258C, "lfblock"},
1084 {0x2590, "rtblock"},
1085 {0x2591, "ltshade"},
1086 {0x2592, "shade"},
1087 {0x2593, "dkshade"},
1088 {0x25A0, "filledbox"},
1089 {0x25A1, "H22073"},
1090 {0x25AA, "H18543"},
1091 {0x25AB, "H18551"},
1092 {0x25AC, "filledrect"},
1093 {0x25B2, "triagup"},
1094 {0x25BA, "triagrt"},
1095 {0x25BC, "triagdn"},
1096 {0x25C4, "triaglf"},
1097 {0x25CA, "lozenge"},
1098 {0x25CB, "circle"},
1099 {0x25CF, "H18533"},
1100 {0x25D8, "invbullet"},
1101 {0x25D9, "invcircle"},
1102 {0x25E6, "openbullet"},
1103 {0x263A, "smileface"},
1104 {0x263B, "invsmileface"},
1105 {0x263C, "sun"},
1106 {0x2640, "female"},
1107 {0x2642, "male"},
1108 {0x2660, "spade"},
1109 {0x2663, "club"},
1110 {0x2665, "heart"},
1111 {0x2666, "diamond"},
1112 {0x266A, "musicalnote"},
1113 {0x266B, "musicalnotedbl"},
1114 {0xF6BE, "dotlessj"},
1115 {0xF6BF, "LL"},
1116 {0xF6C0, "ll"},
1117 {0xF6C1, "Scedilla"},
1118 {0xF6C2, "scedilla"},
1119 {0xF6C3, "commaaccent"},
1120 {0xF6C4, "afii10063"},
1121 {0xF6C5, "afii10064"},
1122 {0xF6C6, "afii10192"},
1123 {0xF6C7, "afii10831"},
1124 {0xF6C8, "afii10832"},
1125 {0xF6C9, "Acute"},
1126 {0xF6CA, "Caron"},
1127 {0xF6CB, "Dieresis"},
1128 {0xF6CC, "DieresisAcute"},
1129 {0xF6CD, "DieresisGrave"},
1130 {0xF6CE, "Grave"},
1131 {0xF6CF, "Hungarumlaut"},
1132 {0xF6D0, "Macron"},
1133 {0xF6D1, "cyrBreve"},
1134 {0xF6D2, "cyrFlex"},
1135 {0xF6D3, "dblGrave"},
1136 {0xF6D4, "cyrbreve"},
1137 {0xF6D5, "cyrflex"},
1138 {0xF6D6, "dblgrave"},
1139 {0xF6D7, "dieresisacute"},
1140 {0xF6D8, "dieresisgrave"},
1141 {0xF6D9, "copyrightserif"},
1142 {0xF6DA, "registerserif"},
1143 {0xF6DB, "trademarkserif"},
1144 {0xF6DC, "onefitted"},
1145 {0xF6DD, "rupiah"},
1146 {0xF6DE, "threequartersemdash"},
1147 {0xF6DF, "centinferior"},
1148 {0xF6E0, "centsuperior"},
1149 {0xF6E1, "commainferior"},
1150 {0xF6E2, "commasuperior"},
1151 {0xF6E3, "dollarinferior"},
1152 {0xF6E4, "dollarsuperior"},
1153 {0xF6E5, "hypheninferior"},
1154 {0xF6E6, "hyphensuperior"},
1155 {0xF6E7, "periodinferior"},
1156 {0xF6E8, "periodsuperior"},
1157 {0xF6E9, "asuperior"},
1158 {0xF6EA, "bsuperior"},
1159 {0xF6EB, "dsuperior"},
1160 {0xF6EC, "esuperior"},
1161 {0xF6ED, "isuperior"},
1162 {0xF6EE, "lsuperior"},
1163 {0xF6EF, "msuperior"},
1164 {0xF6F0, "osuperior"},
1165 {0xF6F1, "rsuperior"},
1166 {0xF6F2, "ssuperior"},
1167 {0xF6F3, "tsuperior"},
1168 {0xF6F4, "Brevesmall"},
1169 {0xF6F5, "Caronsmall"},
1170 {0xF6F6, "Circumflexsmall"},
1171 {0xF6F7, "Dotaccentsmall"},
1172 {0xF6F8, "Hungarumlautsmall"},
1173 {0xF6F9, "Lslashsmall"},
1174 {0xF6FA, "OEsmall"},
1175 {0xF6FB, "Ogoneksmall"},
1176 {0xF6FC, "Ringsmall"},
1177 {0xF6FD, "Scaronsmall"},
1178 {0xF6FE, "Tildesmall"},
1179 {0xF6FF, "Zcaronsmall"},
1180 {0xF721, "exclamsmall"},
1181 {0xF724, "dollaroldstyle"},
1182 {0xF726, "ampersandsmall"},
1183 {0xF730, "zerooldstyle"},
1184 {0xF731, "oneoldstyle"},
1185 {0xF732, "twooldstyle"},
1186 {0xF733, "threeoldstyle"},
1187 {0xF734, "fouroldstyle"},
1188 {0xF735, "fiveoldstyle"},
1189 {0xF736, "sixoldstyle"},
1190 {0xF737, "sevenoldstyle"},
1191 {0xF738, "eightoldstyle"},
1192 {0xF739, "nineoldstyle"},
1193 {0xF73F, "questionsmall"},
1194 {0xF760, "Gravesmall"},
1195 {0xF761, "Asmall"},
1196 {0xF762, "Bsmall"},
1197 {0xF763, "Csmall"},
1198 {0xF764, "Dsmall"},
1199 {0xF765, "Esmall"},
1200 {0xF766, "Fsmall"},
1201 {0xF767, "Gsmall"},
1202 {0xF768, "Hsmall"},
1203 {0xF769, "Ismall"},
1204 {0xF76A, "Jsmall"},
1205 {0xF76B, "Ksmall"},
1206 {0xF76C, "Lsmall"},
1207 {0xF76D, "Msmall"},
1208 {0xF76E, "Nsmall"},
1209 {0xF76F, "Osmall"},
1210 {0xF770, "Psmall"},
1211 {0xF771, "Qsmall"},
1212 {0xF772, "Rsmall"},
1213 {0xF773, "Ssmall"},
1214 {0xF774, "Tsmall"},
1215 {0xF775, "Usmall"},
1216 {0xF776, "Vsmall"},
1217 {0xF777, "Wsmall"},
1218 {0xF778, "Xsmall"},
1219 {0xF779, "Ysmall"},
1220 {0xF77A, "Zsmall"},
1221 {0xF7A1, "exclamdownsmall"},
1222 {0xF7A2, "centoldstyle"},
1223 {0xF7A8, "Dieresissmall"},
1224 {0xF7AF, "Macronsmall"},
1225 {0xF7B4, "Acutesmall"},
1226 {0xF7B8, "Cedillasmall"},
1227 {0xF7BF, "questiondownsmall"},
1228 {0xF7E0, "Agravesmall"},
1229 {0xF7E1, "Aacutesmall"},
1230 {0xF7E2, "Acircumflexsmall"},
1231 {0xF7E3, "Atildesmall"},
1232 {0xF7E4, "Adieresissmall"},
1233 {0xF7E5, "Aringsmall"},
1234 {0xF7E6, "AEsmall"},
1235 {0xF7E7, "Ccedillasmall"},
1236 {0xF7E8, "Egravesmall"},
1237 {0xF7E9, "Eacutesmall"},
1238 {0xF7EA, "Ecircumflexsmall"},
1239 {0xF7EB, "Edieresissmall"},
1240 {0xF7EC, "Igravesmall"},
1241 {0xF7ED, "Iacutesmall"},
1242 {0xF7EE, "Icircumflexsmall"},
1243 {0xF7EF, "Idieresissmall"},
1244 {0xF7F0, "Ethsmall"},
1245 {0xF7F1, "Ntildesmall"},
1246 {0xF7F2, "Ogravesmall"},
1247 {0xF7F3, "Oacutesmall"},
1248 {0xF7F4, "Ocircumflexsmall"},
1249 {0xF7F5, "Otildesmall"},
1250 {0xF7F6, "Odieresissmall"},
1251 {0xF7F8, "Oslashsmall"},
1252 {0xF7F9, "Ugravesmall"},
1253 {0xF7FA, "Uacutesmall"},
1254 {0xF7FB, "Ucircumflexsmall"},
1255 {0xF7FC, "Udieresissmall"},
1256 {0xF7FD, "Yacutesmall"},
1257 {0xF7FE, "Thornsmall"},
1258 {0xF7FF, "Ydieresissmall"},
1259 {0xF8E5, "radicalex"},
1260 {0xF8E6, "arrowvertex"},
1261 {0xF8E7, "arrowhorizex"},
1262 {0xF8E8, "registersans"},
1263 {0xF8E9, "copyrightsans"},
1264 {0xF8EA, "trademarksans"},
1265 {0xF8EB, "parenlefttp"},
1266 {0xF8EC, "parenleftex"},
1267 {0xF8ED, "parenleftbt"},
1268 {0xF8EE, "bracketlefttp"},
1269 {0xF8EF, "bracketleftex"},
1270 {0xF8F0, "bracketleftbt"},
1271 {0xF8F1, "bracelefttp"},
1272 {0xF8F2, "braceleftmid"},
1273 {0xF8F3, "braceleftbt"},
1274 {0xF8F4, "braceex"},
1275 {0xF8F5, "integralex"},
1276 {0xF8F6, "parenrighttp"},
1277 {0xF8F7, "parenrightex"},
1278 {0xF8F8, "parenrightbt"},
1279 {0xF8F9, "bracketrighttp"},
1280 {0xF8FA, "bracketrightex"},
1281 {0xF8FB, "bracketrightbt"},
1282 {0xF8FC, "bracerighttp"},
1283 {0xF8FD, "bracerightmid"},
1284 {0xF8FE, "bracerightbt"},
1285 {0xFB00, "ff"},
1286 {0xFB01, "fi"},
1287 {0xFB02, "fl"},
1288 {0xFB03, "ffi"},
1289 {0xFB04, "ffl"},
1290 {0xFB1F, "afii57705"},
1291 {0xFB2A, "afii57694"},
1292 {0xFB2B, "afii57695"},
1293 {0xFB35, "afii57723"},
1294 {0xFB4B, "afii57700"},
1295 {0xFFFF, NULL}
1296 };
1297
1298 const char*
UnicodeToGryphName(unsigned short unicode)1299 PdfEncodingDef::UnicodeToGryphName(unsigned short unicode)
1300 {
1301 static const char* NOTDEF = PDF_CHAR_NOTDEF;
1302 const pdf_unicode_gryph_pair* map = UNICODE_GRYPH_NAME_MAP;
1303
1304 while (map->unicode <= unicode) {
1305 if (map->unicode == unicode)
1306 return map->gryph_name;
1307 map++;
1308 }
1309 return NOTDEF;
1310 }
1311
1312 unsigned short
GryphNameToUnicode(const char * gryph_name)1313 PdfEncodingDef::GryphNameToUnicode(const char* gryph_name)
1314 {
1315 const pdf_unicode_gryph_pair* map = UNICODE_GRYPH_NAME_MAP;
1316
1317 while (map->unicode != 0xFFFF) {
1318 if (strcmp(gryph_name, map->gryph_name) == 0)
1319 return map->unicode;
1320 map++;
1321 }
1322 return 0x0000;
1323 }
1324
1325 const char*
PdfEncodingToString(pdf_encoding encoding)1326 PdfEncodingDef::PdfEncodingToString(pdf_encoding encoding)
1327 {
1328 int idx = -1;
1329 for (int i = 0; i < (int)PDF_ENCODING_EOF; i++){
1330 if (pdf_encoding_names[i].encode == encoding) {
1331 idx = i;
1332 break;
1333 }
1334 }
1335
1336 if (idx < 0) {
1337 PDF_DEBUG_PRINT(("ERROR: internal error invalid encoding [%d].\n",
1338 encoding));
1339 return NULL;
1340 }
1341
1342 return pdf_encoding_names[idx].encode_name;
1343 }
1344
1345 pdf_encoding
StringToPdfEncoding(const char * encoding)1346 PdfEncodingDef::StringToPdfEncoding(const char* encoding)
1347 {
1348 if (encoding == NULL)
1349 return PDF_ENCODING_EOF;
1350
1351 for (int i = 0; i < (int)PDF_ENCODING_EOF; i++){
1352 if (strcmp(pdf_encoding_names[i].encode_name, encoding) == 0)
1353 return (pdf_encoding)i;
1354 }
1355
1356 if (strcmp(encoding, "AdobeStandardEncoding") == 0)
1357 return PDF_STANDARD_ENCODING;
1358 return PDF_ENCODING_EOF;
1359 }
1360
1361 /*----------------------------------------------------------------------------*/
1362 /*------ PdfStandardEncoding -------------------------------------------------*/
1363
PdfStandardEncoding()1364 PdfStandardEncoding::PdfStandardEncoding()
1365 : PdfEncodingDef()
1366 {
1367 static const unsigned int FIRST_CHAR= 32;
1368 static const unsigned int LAST_CHAR= 255;
1369
1370 const unsigned short UNICODE_MAP_STANDARD[] = {
1371 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x2019,
1372 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1373 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1374 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1375 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1376 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1377 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1378 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1379 0x2018, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1380 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1381 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1382 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x0000,
1383 0x0000, 0x0000, 0x0000, 0x0000, 0x00D1, 0x0000, 0x0000, 0x0000,
1384 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1385 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1386 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1387 0x0000, 0x00A1, 0x00A2, 0x00A3, 0x2044, 0x00A5, 0x0192, 0x00A7,
1388 0x00A4, 0x0027, 0x201C, 0x00AB, 0x2039, 0x203A, 0xFB01, 0xFB02,
1389 0x0000, 0x2013, 0x2020, 0x2021, 0x00B7, 0x0000, 0x00B6, 0x2022,
1390 0x201A, 0x201E, 0x201D, 0x00BB, 0x2026, 0x2030, 0x0000, 0x00BF,
1391 0x0000, 0x0060, 0x00B4, 0x02C6, 0x02DC, 0x00AF, 0x02D8, 0x02D9,
1392 0x00A8, 0x0000, 0x02DA, 0x00B8, 0x0000, 0x02DD, 0x02DB, 0x02C7,
1393 0x2014, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1394 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1395 0x0000, 0x00C6, 0x0000, 0x00AA, 0x0000, 0x0000, 0x0000, 0x0000,
1396 0x0141, 0x00D8, 0x0152, 0x00BA, 0x0000, 0x0000, 0x0000, 0x0000,
1397 0x0000, 0x00E6, 0x0000, 0x0000, 0x0000, 0x0131, 0x0000, 0x0000,
1398 0x0142, 0x00F8, 0x0153, 0x00DF, 0x0000, 0x0000, 0x0000, 0x0000
1399 };
1400
1401 SetUnicodeArray(FIRST_CHAR, LAST_CHAR, UNICODE_MAP_STANDARD);
1402 fBaseEncoding = PDF_STANDARD_ENCODING;
1403 }
1404
1405 /*----------------------------------------------------------------------------*/
1406 /*------ WinAnsiEncoding -----------------------------------------------------*/
1407
PdfWinAnsiEncoding()1408 PdfWinAnsiEncoding::PdfWinAnsiEncoding()
1409 : PdfEncodingDef()
1410 {
1411 static const unsigned int FIRST_CHAR= 32;
1412 static const unsigned int LAST_CHAR= 255;
1413
1414 static const unsigned short UNICODE_MAP_WIN_ANSI[224] = {
1415 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1416 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1417 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1418 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1419 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1420 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1421 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1422 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1423 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1424 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1425 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1426 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x0000,
1427 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
1428 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x017D, 0x0000,
1429 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
1430 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x0000, 0x017E, 0x0178,
1431 0x0000, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
1432 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x0000, 0x00AE, 0x00AF,
1433 0x02DA, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
1434 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
1435 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
1436 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
1437 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
1438 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
1439 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
1440 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
1441 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
1442 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF
1443 };
1444
1445 SetUnicodeArray(FIRST_CHAR, LAST_CHAR, UNICODE_MAP_WIN_ANSI);
1446 fBaseEncoding = PDF_WIN_ANSI_ENCODING;
1447 }
1448
1449 /*----------------------------------------------------------------------------*/
1450 /*------ PdfMacRomanEncoding -------------------------------------------------*/
1451
PdfMacRomanEncoding()1452 PdfMacRomanEncoding::PdfMacRomanEncoding()
1453 : PdfEncodingDef()
1454 {
1455 static const unsigned int FIRST_CHAR= 32;
1456 static const unsigned int LAST_CHAR= 255;
1457
1458 static const unsigned short UNICODE_MAP_MAC_ROMAN[224] = {
1459 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
1460 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
1461 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
1462 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
1463 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
1464 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
1465 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
1466 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
1467 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
1468 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
1469 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
1470 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x0000,
1471 0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x0000, 0x00D6, 0x00DC, 0x00E1,
1472 0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8,
1473 0x00EA, 0x00EB, 0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3,
1474 0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9, 0x00FB, 0x00FC,
1475 0x2020, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF,
1476 0x00AE, 0x00A9, 0x2122, 0x00B4, 0x00A8, 0x0000, 0x00C6, 0x00D8,
1477 0x0000, 0x00B1, 0x0000, 0x0000, 0x00A5, 0x00B5, 0x0000, 0x0000,
1478 0x0000, 0x0000, 0x0000, 0x00AA, 0x00BA, 0x0000, 0x00E6, 0x00F8,
1479 0x00BF, 0x00A1, 0x00AC, 0x0000, 0x0192, 0x0000, 0x0000, 0x00AB,
1480 0x00BB, 0x2026, 0x0020, 0x00C0, 0x00C3, 0x00D5, 0x0152, 0x0153,
1481 0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x0000,
1482 0x00FF, 0x0178, 0x2044, 0x00A4, 0x2039, 0x203A, 0xFB01, 0xFB02,
1483 0x2021, 0x00B7, 0x201A, 0x201E, 0x2030, 0x00C2, 0x00CA, 0x00C1,
1484 0x00CB, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4,
1485 0x0000, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0x0131, 0x02C6, 0x02DC,
1486 0x00AF, 0x02D8, 0x02D9, 0x02DA, 0x00B8, 0x02DD, 0x02DB, 0x02C7
1487 };
1488
1489 SetUnicodeArray(FIRST_CHAR, LAST_CHAR, UNICODE_MAP_MAC_ROMAN);
1490 fBaseEncoding = PDF_MAC_ROMAN_ENCODING;
1491 }
1492
1493 /*----------------------------------------------------------------------------*/
1494
1495