1 // Copyright 2016 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #include "core/fpdfapi/font/cpdf_fontencoding.h"
8
9 #include <utility>
10
11 #include "core/fpdfapi/parser/cpdf_array.h"
12 #include "core/fpdfapi/parser/cpdf_dictionary.h"
13 #include "core/fpdfapi/parser/cpdf_name.h"
14 #include "core/fpdfapi/parser/cpdf_number.h"
15 #include "core/fpdfapi/parser/fpdf_parser_decode.h"
16 #include "core/fxge/fx_freetype.h"
17
18 namespace {
19
20 const uint16_t MSSymbolEncoding[256] = {
21 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
22 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
23 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
24 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 32, 33, 8704, 35,
25 8707, 37, 38, 8715, 40, 41, 8727, 43, 44,
26 8722, 46, 47, 48, 49, 50, 51, 52, 53,
27 54, 55, 56, 57, 58, 59, 60, 61, 62,
28 63, 8773, 913, 914, 935, 916, 917, 934, 915,
29 919, 921, 977, 922, 923, 924, 925, 927, 928,
30 920, 929, 931, 932, 933, 962, 937, 926, 936,
31 918, 91, 8756, 93, 8869, 95, 8254, 945, 946,
32 967, 948, 949, 966, 947, 951, 953, 981, 954,
33 955, 956, 957, 959, 960, 952, 961, 963, 964,
34 965, 982, 969, 958, 968, 950, 123, 124, 125,
35 8764, 0, 0, 0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
36 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
37 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
38 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 978,
39 8242, 8804, 8725, 8734, 402, 9827, 9830, 9828, 9824,
40 8596, 8592, 8593, 8594, 8595, 176, 177, 8243, 8805,
41 215, 8733, 8706, 8729, 247, 8800, 8801, 8776, 8943,
42 0, 0, 8629, 0, 8465, 8476, 8472, 8855, 8853,
43 8709, 8745, 8746, 8835, 8839, 8836, 8834, 8838, 8712,
44 8713, 8736, 8711, 174, 169, 8482, 8719, 8730, 8901,
45 172, 8743, 8744, 8660, 8656, 8657, 8658, 8659, 9674,
46 9001, 0, 0, 0, 8721, 0, 0, 0, 0,
47 0, 0, 0, 0, 0, 0, 0x0000, 9002, 8747,
48 8992, 0, 8993, 0, 0, 0, 0, 0, 0,
49 0x0000, 0x0000, 0x0000, 0x0000};
50
51 const uint16_t StandardEncoding[256] = {
52 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
53 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
54 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
55 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0021, 0x0022, 0x0023,
56 0x0024, 0x0025, 0x0026, 0x2019, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c,
57 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035,
58 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e,
59 0x003f, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
60 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
61 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059,
62 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 0x2018, 0x0061, 0x0062,
63 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b,
64 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074,
65 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d,
66 0x007e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
67 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
68 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
69 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00a1,
70 0x00a2, 0x00a3, 0x2044, 0x00a5, 0x0192, 0x00a7, 0x00a4, 0x0027, 0x201c,
71 0x00ab, 0x2039, 0x203a, 0xfb01, 0xfb02, 0x0000, 0x2013, 0x2020, 0x2021,
72 0x00b7, 0x0000, 0x00b6, 0x2022, 0x201a, 0x201e, 0x201d, 0x00bb, 0x2026,
73 0x2030, 0x0000, 0x00bf, 0x0000, 0x0060, 0x00b4, 0x02c6, 0x02dc, 0x00af,
74 0x02d8, 0x02d9, 0x00a8, 0x0000, 0x02da, 0x00b8, 0x0000, 0x02dd, 0x02db,
75 0x02c7, 0x2014, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
76 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
77 0x00c6, 0x0000, 0x00aa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0141, 0x00d8,
78 0x0152, 0x00ba, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00e6, 0x0000,
79 0x0000, 0x0000, 0x0131, 0x0000, 0x0000, 0x0142, 0x00f8, 0x0153, 0x00df,
80 0x0000, 0x0000, 0x0000, 0x0000};
81
82 const uint16_t MacRomanEncoding[256] = {
83 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
84 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
85 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
86 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0021, 0x0022, 0x0023,
87 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c,
88 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035,
89 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e,
90 0x003f, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
91 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
92 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059,
93 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 0x0060, 0x0061, 0x0062,
94 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b,
95 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074,
96 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d,
97 0x007e, 0x0000, 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc,
98 0x00e1, 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8,
99 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, 0x00f2,
100 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, 0x2020, 0x00b0,
101 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, 0x00ae, 0x00a9, 0x2122,
102 0x00b4, 0x00a8, 0x0000, 0x00c6, 0x00d8, 0x0000, 0x00b1, 0x0000, 0x0000,
103 0x00a5, 0x00b5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00aa, 0x00ba,
104 0x0000, 0x00e6, 0x00f8, 0x00bf, 0x00a3, 0x00ac, 0x0000, 0x0192, 0x0000,
105 0x0000, 0x00ab, 0x00bb, 0x2026, 0x0020, 0x00c0, 0x00c3, 0x00d5, 0x0152,
106 0x0153, 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x0000,
107 0x00ff, 0x0178, 0x2044, 0x00a4, 0x2039, 0x203a, 0xfb01, 0xfb02, 0x2021,
108 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1, 0x00cb, 0x00c8,
109 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, 0x0000, 0x00d2, 0x00da,
110 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc, 0x00af, 0x02d8, 0x02d9, 0x02da,
111 0x00b8, 0x02dd, 0x02db, 0x02c7};
112
113 const uint16_t AdobeWinAnsiEncoding[256] = {
114 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
115 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
116 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
117 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0021, 0x0022, 0x0023,
118 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c,
119 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035,
120 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e,
121 0x003f, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
122 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
123 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059,
124 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 0x0060, 0x0061, 0x0062,
125 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b,
126 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074,
127 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d,
128 0x007e, 0x2022, 0x20ac, 0x2022, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020,
129 0x2021, 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x2022, 0x017d, 0x2022,
130 0x2022, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x02dc,
131 0x2122, 0x0161, 0x203a, 0x0153, 0x2022, 0x017e, 0x0178, 0x0020, 0x00a1,
132 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00aa,
133 0x00ab, 0x00ac, 0x002d, 0x00ae, 0x00af, 0x00b0, 0x00b1, 0x00b2, 0x00b3,
134 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc,
135 0x00bd, 0x00be, 0x00bf, 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5,
136 0x00c6, 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce,
137 0x00cf, 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
138 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, 0x00e0,
139 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9,
140 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f2,
141 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb,
142 0x00fc, 0x00fd, 0x00fe, 0x00ff};
143
144 const uint16_t MacExpertEncoding[256] = {
145 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
146 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
147 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
148 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xf721, 0xf6f8, 0xf7a2,
149 0xf724, 0xf6e4, 0xf726, 0xf7b4, 0x207d, 0x207e, 0x2025, 0x2024, 0x002c,
150 0x002d, 0x002e, 0x2044, 0xf730, 0xf731, 0xf732, 0xf733, 0xf734, 0xf735,
151 0xf736, 0xf737, 0xf738, 0xf739, 0x003a, 0x003b, 0x0000, 0xf6de, 0x0000,
152 0xf73f, 0x0000, 0x0000, 0x0000, 0x0000, 0xf7f0, 0x0000, 0x0000, 0x00bc,
153 0x00bd, 0x00be, 0x215b, 0x215c, 0x215d, 0x215e, 0x2153, 0x2154, 0x0000,
154 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfb00, 0xfb01, 0xfb02, 0xfb03,
155 0xfb04, 0x208d, 0x0000, 0x208e, 0xf6f6, 0xf6e5, 0xf760, 0xf761, 0xf762,
156 0xf763, 0xf764, 0xf765, 0xf766, 0xf767, 0xf768, 0xf769, 0xf76a, 0xf76b,
157 0xf76c, 0xf76d, 0xf76e, 0xf76f, 0xf770, 0xf771, 0xf772, 0xf773, 0xf774,
158 0xf775, 0xf776, 0xf777, 0xf778, 0xf779, 0xf77a, 0x20a1, 0xf6dc, 0xf6dd,
159 0xf6fe, 0x0000, 0x0000, 0xf6e9, 0xf6e0, 0x0000, 0x0000, 0x0000, 0x0000,
160 0xf7e1, 0xf7e0, 0xf7e2, 0xf7e4, 0xf7e3, 0xf7e5, 0xf7e7, 0xf7e9, 0xf7e8,
161 0xf7ea, 0xf7eb, 0xf7ed, 0xf7ec, 0xf7ee, 0xf7ef, 0xf7f1, 0xf7f3, 0xf7f2,
162 0xf7f4, 0xf7f6, 0xf7f5, 0xf7fa, 0xf7f9, 0xf7fb, 0xf7fc, 0x0000, 0x2078,
163 0x2084, 0x2083, 0x2086, 0x2088, 0x2087, 0xf6fd, 0x0000, 0xf6df, 0x2082,
164 0x0000, 0xf7a8, 0x0000, 0xf6f5, 0xf6fd, 0x2085, 0x0000, 0xf6e1, 0xf6e7,
165 0xf7fd, 0x0000, 0xf6e3, 0x0000, 0x0000, 0xf7fe, 0x0000, 0x2089, 0x2080,
166 0xf6ff, 0xf7e6, 0xf7f8, 0xf7bf, 0x2081, 0xf6e9, 0x0000, 0x0000, 0x0000,
167 0x0000, 0x0000, 0x0000, 0xf7b8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
168 0xf6fa, 0x2012, 0xf6e6, 0x0000, 0x0000, 0x0000, 0x0000, 0xf7a1, 0x0000,
169 0xf7ff, 0x0000, 0x00b9, 0x00b2, 0x00b3, 0x2074, 0x2075, 0x2076, 0x2077,
170 0x2079, 0x2070, 0x0000, 0xf6ec, 0xf6f1, 0x0000, 0x0000, 0x0000, 0xf6ed,
171 0xf6f2, 0xf6eb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf6ee, 0xf6fb,
172 0xf6f4, 0xf7af, 0xf6ea, 0x207f, 0xf6ef, 0xf6e2, 0xf6e8, 0xf6f7, 0xf6fc,
173 0x0000, 0x0000, 0x0000, 0x0000};
174
175 const uint16_t AdobeSymbolEncoding[256] = {
176 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
177 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
178 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
179 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0021, 0x2200, 0x0023,
180 0x2203, 0x0025, 0x0026, 0x220B, 0x0028, 0x0029, 0x2217, 0x002B, 0x002C,
181 0x2212, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035,
182 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E,
183 0x003F, 0x2245, 0x0391, 0x0392, 0x03A7, 0x0394, 0x0395, 0x03A6, 0x0393,
184 0x0397, 0x0399, 0x03D1, 0x039A, 0x039B, 0x039C, 0x039D, 0x039F, 0x03A0,
185 0x0398, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03C2, 0x03A9, 0x039E, 0x03A8,
186 0x0396, 0x005B, 0x2234, 0x005D, 0x22A5, 0x005F, 0xF8E5, 0x03B1, 0x03B2,
187 0x03C7, 0x03B4, 0x03B5, 0x03C6, 0x03B3, 0x03B7, 0x03B9, 0x03D5, 0x03BA,
188 0x03BB, 0x03BC, 0x03BD, 0x03BF, 0x03C0, 0x03B8, 0x03C1, 0x03C3, 0x03C4,
189 0x03C5, 0x03D6, 0x03C9, 0x03BE, 0x03C8, 0x03B6, 0x007B, 0x007C, 0x007D,
190 0x223C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
191 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
192 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
193 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20AC, 0x03D2,
194 0x2032, 0x2264, 0x2044, 0x221E, 0x0192, 0x2663, 0x2666, 0x2665, 0x2660,
195 0x2194, 0x2190, 0x2191, 0x2192, 0x2193, 0x00B0, 0x00B1, 0x2033, 0x2265,
196 0x00D7, 0x221D, 0x2202, 0x2022, 0x00F7, 0x2260, 0x2261, 0x2248, 0x2026,
197 0xF8E6, 0xF8E7, 0x21B5, 0x2135, 0x2111, 0x211C, 0x2118, 0x2297, 0x2295,
198 0x2205, 0x2229, 0x222A, 0x2283, 0x2287, 0x2284, 0x2282, 0x2286, 0x2208,
199 0x2209, 0x2220, 0x2207, 0xF6DA, 0xF6D9, 0xF6DB, 0x220F, 0x221A, 0x22C5,
200 0x00AC, 0x2227, 0x2228, 0x21D4, 0x21D0, 0x21D1, 0x21D2, 0x21D3, 0x25CA,
201 0x2329, 0xF8E8, 0xF8E9, 0xF8EA, 0x2211, 0xF8EB, 0xF8EC, 0xF8ED, 0xF8EE,
202 0xF8EF, 0xF8F0, 0xF8F1, 0xF8F2, 0xF8F3, 0xF8F4, 0x0000, 0x232A, 0x222B,
203 0x2320, 0xF8F5, 0x2321, 0xF8F6, 0xF8F7, 0xF8F8, 0xF8F9, 0xF8FA, 0xF8FB,
204 0xF8FC, 0xF8FD, 0xF8FE, 0x0000,
205 };
206
207 const uint16_t ZapfEncoding[256] = {
208 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
209 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
210 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
211 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x2701, 0x2702, 0x2703,
212 0x2704, 0x260E, 0x2706, 0x2707, 0x2708, 0x2709, 0x261B, 0x261E, 0x270C,
213 0x270D, 0x270E, 0x270F, 0x2710, 0x2711, 0x2712, 0x2713, 0x2714, 0x2715,
214 0x2716, 0x2717, 0x2718, 0x2719, 0x271A, 0x271B, 0x271C, 0x271D, 0x271E,
215 0x271F, 0x2720, 0x2721, 0x2722, 0x2723, 0x2724, 0x2725, 0x2726, 0x2727,
216 0x2605, 0x2729, 0x272A, 0x272B, 0x272C, 0x272D, 0x272E, 0x272F, 0x2730,
217 0x2731, 0x2732, 0x2733, 0x2734, 0x2735, 0x2736, 0x2737, 0x2738, 0x2739,
218 0x273A, 0x273B, 0x273C, 0x273D, 0x273E, 0x273F, 0x2740, 0x2741, 0x2742,
219 0x2743, 0x2744, 0x2745, 0x2746, 0x2747, 0x2748, 0x2749, 0x274A, 0x274B,
220 0x25CF, 0x274D, 0x25A0, 0x274F, 0x2750, 0x2751, 0x2752, 0x25B2, 0x25BC,
221 0x25C6, 0x2756, 0x25D7, 0x2758, 0x2759, 0x275A, 0x275B, 0x275C, 0x275D,
222 0x275E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
223 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
224 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
225 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2761,
226 0x2762, 0x2763, 0x2764, 0x2765, 0x2766, 0x2767, 0x2663, 0x2666, 0x2665,
227 0x2660, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467,
228 0x2468, 0x2469, 0x2776, 0x2777, 0x2778, 0x2779, 0x277A, 0x277B, 0x277C,
229 0x277D, 0x277E, 0x277F, 0x2780, 0x2781, 0x2782, 0x2783, 0x2784, 0x2785,
230 0x2786, 0x2787, 0x2788, 0x2789, 0x278A, 0x278B, 0x278C, 0x278D, 0x278E,
231 0x278F, 0x2790, 0x2791, 0x2792, 0x2793, 0x2794, 0x2192, 0x2194, 0x2195,
232 0x2798, 0x2799, 0x279A, 0x279B, 0x279C, 0x279D, 0x279E, 0x279F, 0x27A0,
233 0x27A1, 0x27A2, 0x27A3, 0x27A4, 0x27A5, 0x27A6, 0x27A7, 0x27A8, 0x27A9,
234 0x27AA, 0x27AB, 0x27AC, 0x27AD, 0x27AE, 0x27AF, 0x0000, 0x27B1, 0x27B2,
235 0x27B3, 0x27B4, 0x27B5, 0x27B6, 0x27B7, 0x27B8, 0x27B9, 0x27BA, 0x27BB,
236 0x27BC, 0x27BD, 0x27BE, 0x0000,
237 };
238
239 const char* const StandardEncodingNames[224] = {
240 "space",
241 "exclam",
242 "quotedbl",
243 "numbersign",
244 "dollar",
245 "percent",
246 "ampersand",
247 "quoteright",
248 "parenleft",
249 "parenright",
250 "asterisk",
251 "plus",
252 "comma",
253 "hyphen",
254 "period",
255 "slash",
256 "zero",
257 "one",
258 "two",
259 "three",
260 "four",
261 "five",
262 "six",
263 "seven",
264 "eight",
265 "nine",
266 "colon",
267 "semicolon",
268 "less",
269 "equal",
270 "greater",
271 "question",
272 "at",
273 "A",
274 "B",
275 "C",
276 "D",
277 "E",
278 "F",
279 "G",
280 "H",
281 "I",
282 "J",
283 "K",
284 "L",
285 "M",
286 "N",
287 "O",
288 "P",
289 "Q",
290 "R",
291 "S",
292 "T",
293 "U",
294 "V",
295 "W",
296 "X",
297 "Y",
298 "Z",
299 "bracketleft",
300 "backslash",
301 "bracketright",
302 "asciicircum",
303 "underscore",
304 "quoteleft",
305 "a",
306 "b",
307 "c",
308 "d",
309 "e",
310 "f",
311 "g",
312 "h",
313 "i",
314 "j",
315 "k",
316 "l",
317 "m",
318 "n",
319 "o",
320 "p",
321 "q",
322 "r",
323 "s",
324 "t",
325 "u",
326 "v",
327 "w",
328 "x",
329 "y",
330 "z",
331 "braceleft",
332 "bar",
333 "braceright",
334 "asciitilde",
335 nullptr,
336 nullptr,
337 nullptr,
338 nullptr,
339 nullptr,
340 nullptr,
341 nullptr,
342 nullptr,
343 nullptr,
344 nullptr,
345 nullptr,
346 nullptr,
347 nullptr,
348 nullptr,
349 nullptr,
350 nullptr,
351 nullptr,
352 nullptr,
353 nullptr,
354 nullptr,
355 nullptr,
356 nullptr,
357 nullptr,
358 nullptr,
359 nullptr,
360 nullptr,
361 nullptr,
362 nullptr,
363 nullptr,
364 nullptr,
365 nullptr,
366 nullptr,
367 nullptr,
368 nullptr,
369 "exclamdown",
370 "cent",
371 "sterling",
372 "fraction",
373 "yen",
374 "florin",
375 "section",
376 "currency",
377 "quotesingle",
378 "quotedblleft",
379 "guillemotleft",
380 "guilsinglleft",
381 "guilsinglright",
382 "fi",
383 "fl",
384 nullptr,
385 "endash",
386 "dagger",
387 "daggerdbl",
388 "periodcentered",
389 nullptr,
390 "paragraph",
391 "bullet",
392 "quotesinglbase",
393 "quotedblbase",
394 "quotedblright",
395 "guillemotright",
396 "ellipsis",
397 "perthousand",
398 nullptr,
399 "questiondown",
400 nullptr,
401 "grave",
402 "acute",
403 "circumflex",
404 "tilde",
405 "macron",
406 "breve",
407 "dotaccent",
408 "dieresis",
409 nullptr,
410 "ring",
411 "cedilla",
412 nullptr,
413 "hungarumlaut",
414 "ogonek",
415 "caron",
416 "emdash",
417 nullptr,
418 nullptr,
419 nullptr,
420 nullptr,
421 nullptr,
422 nullptr,
423 nullptr,
424 nullptr,
425 nullptr,
426 nullptr,
427 nullptr,
428 nullptr,
429 nullptr,
430 nullptr,
431 nullptr,
432 nullptr,
433 "AE",
434 nullptr,
435 "ordfeminine",
436 nullptr,
437 nullptr,
438 nullptr,
439 nullptr,
440 "Lslash",
441 "Oslash",
442 "OE",
443 "ordmasculine",
444 nullptr,
445 nullptr,
446 nullptr,
447 nullptr,
448 nullptr,
449 "ae",
450 nullptr,
451 nullptr,
452 nullptr,
453 "dotlessi",
454 nullptr,
455 nullptr,
456 "lslash",
457 "oslash",
458 "oe",
459 "germandbls",
460 nullptr,
461 nullptr,
462 nullptr,
463 nullptr,
464 };
465
466 const char* const AdobeWinAnsiEncodingNames[224] = {
467 "space",
468 "exclam",
469 "quotedbl",
470 "numbersign",
471 "dollar",
472 "percent",
473 "ampersand",
474 "quotesingle",
475 "parenleft",
476 "parenright",
477 "asterisk",
478 "plus",
479 "comma",
480 "hyphen",
481 "period",
482 "slash",
483 "zero",
484 "one",
485 "two",
486 "three",
487 "four",
488 "five",
489 "six",
490 "seven",
491 "eight",
492 "nine",
493 "colon",
494 "semicolon",
495 "less",
496 "equal",
497 "greater",
498 "question",
499 "at",
500 "A",
501 "B",
502 "C",
503 "D",
504 "E",
505 "F",
506 "G",
507 "H",
508 "I",
509 "J",
510 "K",
511 "L",
512 "M",
513 "N",
514 "O",
515 "P",
516 "Q",
517 "R",
518 "S",
519 "T",
520 "U",
521 "V",
522 "W",
523 "X",
524 "Y",
525 "Z",
526 "bracketleft",
527 "backslash",
528 "bracketright",
529 "asciicircum",
530 "underscore",
531 "grave",
532 "a",
533 "b",
534 "c",
535 "d",
536 "e",
537 "f",
538 "g",
539 "h",
540 "i",
541 "j",
542 "k",
543 "l",
544 "m",
545 "n",
546 "o",
547 "p",
548 "q",
549 "r",
550 "s",
551 "t",
552 "u",
553 "v",
554 "w",
555 "x",
556 "y",
557 "z",
558 "braceleft",
559 "bar",
560 "braceright",
561 "asciitilde",
562 "bullet",
563 "Euro",
564 "bullet",
565 "quotesinglbase",
566 "florin",
567 "quotedblbase",
568 "ellipsis",
569 "dagger",
570 "daggerdbl",
571 "circumflex",
572 "perthousand",
573 "Scaron",
574 "guilsinglleft",
575 "OE",
576 "bullet",
577 "Zcaron",
578 "bullet",
579 "bullet",
580 "quoteleft",
581 "quoteright",
582 "quotedblleft",
583 "quotedblright",
584 "bullet",
585 "endash",
586 "emdash",
587 "tilde",
588 "trademark",
589 "scaron",
590 "guilsinglright",
591 "oe",
592 "bullet",
593 "zcaron",
594 "Ydieresis",
595 "space",
596 "exclamdown",
597 "cent",
598 "sterling",
599 "currency",
600 "yen",
601 "brokenbar",
602 "section",
603 "dieresis",
604 "copyright",
605 "ordfeminine",
606 "guillemotleft",
607 "logicalnot",
608 "hyphen",
609 "registered",
610 "macron",
611 "degree",
612 "plusminus",
613 "twosuperior",
614 "threesuperior",
615 "acute",
616 "mu",
617 "paragraph",
618 "periodcentered",
619 "cedilla",
620 "onesuperior",
621 "ordmasculine",
622 "guillemotright",
623 "onequarter",
624 "onehalf",
625 "threequarters",
626 "questiondown",
627 "Agrave",
628 "Aacute",
629 "Acircumflex",
630 "Atilde",
631 "Adieresis",
632 "Aring",
633 "AE",
634 "Ccedilla",
635 "Egrave",
636 "Eacute",
637 "Ecircumflex",
638 "Edieresis",
639 "Igrave",
640 "Iacute",
641 "Icircumflex",
642 "Idieresis",
643 "Eth",
644 "Ntilde",
645 "Ograve",
646 "Oacute",
647 "Ocircumflex",
648 "Otilde",
649 "Odieresis",
650 "multiply",
651 "Oslash",
652 "Ugrave",
653 "Uacute",
654 "Ucircumflex",
655 "Udieresis",
656 "Yacute",
657 "Thorn",
658 "germandbls",
659 "agrave",
660 "aacute",
661 "acircumflex",
662 "atilde",
663 "adieresis",
664 "aring",
665 "ae",
666 "ccedilla",
667 "egrave",
668 "eacute",
669 "ecircumflex",
670 "edieresis",
671 "igrave",
672 "iacute",
673 "icircumflex",
674 "idieresis",
675 "eth",
676 "ntilde",
677 "ograve",
678 "oacute",
679 "ocircumflex",
680 "otilde",
681 "odieresis",
682 "divide",
683 "oslash",
684 "ugrave",
685 "uacute",
686 "ucircumflex",
687 "udieresis",
688 "yacute",
689 "thorn",
690 "ydieresis",
691 };
692
693 const char* const MacRomanEncodingNames[224] = {
694 "space",
695 "exclam",
696 "quotedbl",
697 "numbersign",
698 "dollar",
699 "percent",
700 "ampersand",
701 "quotesingle",
702 "parenleft",
703 "parenright",
704 "asterisk",
705 "plus",
706 "comma",
707 "hyphen",
708 "period",
709 "slash",
710 "zero",
711 "one",
712 "two",
713 "three",
714 "four",
715 "five",
716 "six",
717 "seven",
718 "eight",
719 "nine",
720 "colon",
721 "semicolon",
722 "less",
723 "equal",
724 "greater",
725 "question",
726 "at",
727 "A",
728 "B",
729 "C",
730 "D",
731 "E",
732 "F",
733 "G",
734 "H",
735 "I",
736 "J",
737 "K",
738 "L",
739 "M",
740 "N",
741 "O",
742 "P",
743 "Q",
744 "R",
745 "S",
746 "T",
747 "U",
748 "V",
749 "W",
750 "X",
751 "Y",
752 "Z",
753 "bracketleft",
754 "backslash",
755 "bracketright",
756 "asciicircum",
757 "underscore",
758 "grave",
759 "a",
760 "b",
761 "c",
762 "d",
763 "e",
764 "f",
765 "g",
766 "h",
767 "i",
768 "j",
769 "k",
770 "l",
771 "m",
772 "n",
773 "o",
774 "p",
775 "q",
776 "r",
777 "s",
778 "t",
779 "u",
780 "v",
781 "w",
782 "x",
783 "y",
784 "z",
785 "braceleft",
786 "bar",
787 "braceright",
788 "asciitilde",
789 nullptr,
790 "Adieresis",
791 "Aring",
792 "Ccedilla",
793 "Eacute",
794 "Ntilde",
795 "Odieresis",
796 "Udieresis",
797 "aacute",
798 "agrave",
799 "acircumflex",
800 "adieresis",
801 "atilde",
802 "aring",
803 "ccedilla",
804 "eacute",
805 "egrave",
806 "ecircumflex",
807 "edieresis",
808 "iacute",
809 "igrave",
810 "icircumflex",
811 "idieresis",
812 "ntilde",
813 "oacute",
814 "ograve",
815 "ocircumflex",
816 "odieresis",
817 "otilde",
818 "uacute",
819 "ugrave",
820 "ucircumflex",
821 "udieresis",
822 "dagger",
823 "degree",
824 "cent",
825 "sterling",
826 "section",
827 "bullet",
828 "paragraph",
829 "germandbls",
830 "registered",
831 "copyright",
832 "trademark",
833 "acute",
834 "dieresis",
835 "notequal",
836 "AE",
837 "Oslash",
838 "infinity",
839 "plusminus",
840 "lessequal",
841 "greaterequal",
842 "yen",
843 "mu",
844 "partialdiff",
845 "summation",
846 "product",
847 "pi",
848 "integral",
849 "ordfeminine",
850 "ordmasculine",
851 "Omega",
852 "ae",
853 "oslash",
854 "questiondown",
855 "exclamdown",
856 "logicalnot",
857 "radical",
858 "florin",
859 "approxequal",
860 "Delta",
861 "guillemotleft",
862 "guillemotright",
863 "ellipsis",
864 "space",
865 "Agrave",
866 "Atilde",
867 "Otilde",
868 "OE",
869 "oe",
870 "endash",
871 "emdash",
872 "quotedblleft",
873 "quotedblright",
874 "quoteleft",
875 "quoteright",
876 "divide",
877 "lozenge",
878 "ydieresis",
879 "Ydieresis",
880 "fraction",
881 "currency",
882 "guilsinglleft",
883 "guilsinglright",
884 "fi",
885 "fl",
886 "daggerdbl",
887 "periodcentered",
888 "quotesinglbase",
889 "quotedblbase",
890 "perthousand",
891 "Acircumflex",
892 "Ecircumflex",
893 "Aacute",
894 "Edieresis",
895 "Egrave",
896 "Iacute",
897 "Icircumflex",
898 "Idieresis",
899 "Igrave",
900 "Oacute",
901 "Ocircumflex",
902 "apple",
903 "Ograve",
904 "Uacute",
905 "Ucircumflex",
906 "Ugrave",
907 "dotlessi",
908 "circumflex",
909 "tilde",
910 "macron",
911 "breve",
912 "dotaccent",
913 "ring",
914 "cedilla",
915 "hungarumlaut",
916 "ogonek",
917 "caron",
918 };
919
920 const char* const MacExpertEncodingNames[224] = {
921 "space",
922 "exclamsmall",
923 "Hungarumlautsmall",
924 "centoldstyle",
925 "dollaroldstyle",
926 "dollarsuperior",
927 "ampersandsmall",
928 "Acutesmall",
929 "parenleftsuperior",
930 "parenrightsuperior",
931 "twodotenleader",
932 "onedotenleader",
933 "comma",
934 "hyphen",
935 "period",
936 "fraction",
937 "zerooldstyle",
938 "oneoldstyle",
939 "twooldstyle",
940 "threeoldstyle",
941 "fouroldstyle",
942 "fiveoldstyle",
943 "sixoldstyle",
944 "sevenoldstyle",
945 "eightoldstyle",
946 "nineoldstyle",
947 "colon",
948 "semicolon",
949 nullptr,
950 "threequartersemdash",
951 nullptr,
952 "questionsmall",
953 nullptr,
954 nullptr,
955 nullptr,
956 nullptr,
957 "Ethsmall",
958 nullptr,
959 nullptr,
960 "onequarter",
961 "onehalf",
962 "threequarters",
963 "oneeighth",
964 "threeeighths",
965 "fiveeighths",
966 "seveneighths",
967 "onethird",
968 "twothirds",
969 nullptr,
970 nullptr,
971 nullptr,
972 nullptr,
973 nullptr,
974 nullptr,
975 "ff",
976 "fi",
977 "fl",
978 "ffi",
979 "ffl",
980 "parenleftinferior",
981 nullptr,
982 "parenrightinferior",
983 "Circumflexsmall",
984 "hypheninferior",
985 "Gravesmall",
986 "Asmall",
987 "Bsmall",
988 "Csmall",
989 "Dsmall",
990 "Esmall",
991 "Fsmall",
992 "Gsmall",
993 "Hsmall",
994 "Ismall",
995 "Jsmall",
996 "Ksmall",
997 "Lsmall",
998 "Msmall",
999 "Nsmall",
1000 "Osmall",
1001 "Psmall",
1002 "Qsmall",
1003 "Rsmall",
1004 "Ssmall",
1005 "Tsmall",
1006 "Usmall",
1007 "Vsmall",
1008 "Wsmall",
1009 "Xsmall",
1010 "Ysmall",
1011 "Zsmall",
1012 "colonmonetary",
1013 "onefitted",
1014 "rupiah",
1015 "Tildesmall",
1016 nullptr,
1017 nullptr,
1018 "asuperior",
1019 "centsuperior",
1020 nullptr,
1021 nullptr,
1022 nullptr,
1023 nullptr,
1024 "Aacutesmall",
1025 "Agravesmall",
1026 "Acircumflexsmall",
1027 "Adieresissmall",
1028 "Atildesmall",
1029 "Aringsmall",
1030 "Ccedillasmall",
1031 "Eacutesmall",
1032 "Egravesmall",
1033 "Ecircumflexsmall",
1034 "Edieresissmall",
1035 "Iacutesmall",
1036 "Igravesmall",
1037 "Icircumflexsmall",
1038 "Idieresissmall",
1039 "Ntildesmall",
1040 "Oacutesmall",
1041 "Ogravesmall",
1042 "Ocircumflexsmall",
1043 "Odieresissmall",
1044 "Otildesmall",
1045 "Uacutesmall",
1046 "Ugravesmall",
1047 "Ucircumflexsmall",
1048 "Udieresissmall",
1049 nullptr,
1050 "eightsuperior",
1051 "fourinferior",
1052 "threeinferior",
1053 "sixinferior",
1054 "eightinferior",
1055 "seveninferior",
1056 "Scaronsmall",
1057 nullptr,
1058 "centinferior",
1059 "twoinferior",
1060 nullptr,
1061 "Dieresissmall",
1062 nullptr,
1063 "Caronsmall",
1064 "Scaronsmall",
1065 "fiveinferior",
1066 nullptr,
1067 "commainferior",
1068 "periodinferior",
1069 "Yacutesmall",
1070 nullptr,
1071 "dollarinferior",
1072 nullptr,
1073 nullptr,
1074 "Thornsmall",
1075 nullptr,
1076 "nineinferior",
1077 "zeroinferior",
1078 "Zcaronsmall",
1079 "AEsmall",
1080 "Oslashsmall",
1081 "questiondownsmall",
1082 "oneinferior",
1083 "asuperior",
1084 nullptr,
1085 nullptr,
1086 nullptr,
1087 nullptr,
1088 nullptr,
1089 nullptr,
1090 "Cedillasmall",
1091 nullptr,
1092 nullptr,
1093 nullptr,
1094 nullptr,
1095 nullptr,
1096 "OEsmall",
1097 "figuredash",
1098 "hyphensuperior",
1099 nullptr,
1100 nullptr,
1101 nullptr,
1102 nullptr,
1103 "exclamdownsmall",
1104 nullptr,
1105 "Ydieresissmall",
1106 nullptr,
1107 "onesuperior",
1108 "twosuperior",
1109 "threesuperior",
1110 "foursuperior",
1111 "fivesuperior",
1112 "sixsuperior",
1113 "sevensuperior",
1114 "ninesuperior",
1115 "zerosuperior",
1116 nullptr,
1117 "esuperior",
1118 "rsuperior",
1119 nullptr,
1120 nullptr,
1121 nullptr,
1122 "isuperior",
1123 "ssuperior",
1124 "dsuperior",
1125 nullptr,
1126 nullptr,
1127 nullptr,
1128 nullptr,
1129 nullptr,
1130 "lsuperior",
1131 "Ogoneksmall",
1132 "Brevesmall",
1133 "Macronsmall",
1134 "bsuperior",
1135 "nsuperior",
1136 "msuperior",
1137 "commasuperior",
1138 "periodsuperior",
1139 "Dotaccentsmall",
1140 "Ringsmall",
1141 nullptr,
1142 nullptr,
1143 nullptr,
1144 nullptr,
1145 };
1146
1147 const char* const PDFDocEncodingNames[232] = {
1148 "breve",
1149 "caron",
1150 "circumflex",
1151 "dotaccent",
1152 "hungarumlaut",
1153 "ogonek",
1154 "ring",
1155 "tilde",
1156 "space",
1157 "exclam",
1158 "quotedbl",
1159 "numbersign",
1160 "dollar",
1161 "percent",
1162 "ampersand",
1163 "quotesingle",
1164 "parenleft",
1165 "parenright",
1166 "asterisk",
1167 "plus",
1168 "comma",
1169 "hyphen",
1170 "period",
1171 "slash",
1172 "zero",
1173 "one",
1174 "two",
1175 "three",
1176 "four",
1177 "five",
1178 "six",
1179 "seven",
1180 "eight",
1181 "nine",
1182 "colon",
1183 "semicolon",
1184 "less",
1185 "equal",
1186 "greater",
1187 "question",
1188 "at",
1189 "A",
1190 "B",
1191 "C",
1192 "D",
1193 "E",
1194 "F",
1195 "G",
1196 "H",
1197 "I",
1198 "J",
1199 "K",
1200 "L",
1201 "M",
1202 "N",
1203 "O",
1204 "P",
1205 "Q",
1206 "R",
1207 "S",
1208 "T",
1209 "U",
1210 "V",
1211 "W",
1212 "X",
1213 "Y",
1214 "Z",
1215 "bracketleft",
1216 "backslash",
1217 "bracketright",
1218 "asciicircum",
1219 "underscore",
1220 "grave",
1221 "a",
1222 "b",
1223 "c",
1224 "d",
1225 "e",
1226 "f",
1227 "g",
1228 "h",
1229 "i",
1230 "j",
1231 "k",
1232 "l",
1233 "m",
1234 "n",
1235 "o",
1236 "p",
1237 "q",
1238 "r",
1239 "s",
1240 "t",
1241 "u",
1242 "v",
1243 "w",
1244 "x",
1245 "y",
1246 "z",
1247 "braceleft",
1248 "bar",
1249 "braceright",
1250 "asciitilde",
1251 nullptr,
1252 "bullet3",
1253 "dagger",
1254 "daggerdbl",
1255 "ellipsis",
1256 "emdash",
1257 "endash",
1258 "florin",
1259 "fraction",
1260 "guilsinglleft",
1261 "guilsinglright",
1262 "minus",
1263 "perthousand",
1264 "quotedblbase",
1265 "quotedblleft",
1266 "quotedblright",
1267 "quoteleft",
1268 "quoteright",
1269 "quotesinglbase",
1270 "trademark",
1271 "fi",
1272 "fl",
1273 "Lslash",
1274 "OE",
1275 "Scaron",
1276 "Ydieresis",
1277 "Zcaron2",
1278 "dotlessi",
1279 "lslash",
1280 "oe",
1281 "scaron",
1282 "zcaron2",
1283 nullptr,
1284 "Euro",
1285 "exclamdown",
1286 "cent",
1287 "sterling",
1288 "currency",
1289 "yen",
1290 "brokenbar",
1291 "section",
1292 "dieresis",
1293 "copyright",
1294 "ordfeminine",
1295 "guillemotleft4",
1296 "logicalnot",
1297 nullptr,
1298 "registered",
1299 "macron",
1300 "degree",
1301 "plusminus",
1302 "twosuperior",
1303 "threesuperior",
1304 "acute",
1305 "mu",
1306 "paragraph",
1307 "periodcentered",
1308 "cedilla",
1309 "onesuperior",
1310 "ordmasculine",
1311 "guillemotright4",
1312 "onequarter",
1313 "onehalf",
1314 "threequarters",
1315 "questiondown",
1316 "Agrave",
1317 "Aacute",
1318 "Acircumflex",
1319 "Atilde",
1320 "Adieresis",
1321 "Aring",
1322 "AE",
1323 "Ccedilla",
1324 "Egrave",
1325 "Eacute",
1326 "Ecircumflex",
1327 "Edieresis",
1328 "Igrave",
1329 "Iacute",
1330 "Icircumflex",
1331 "Idieresis",
1332 "Eth",
1333 "Ntilde",
1334 "Ograve",
1335 "Oacute",
1336 "Ocircumflex",
1337 "Otilde",
1338 "Odieresis",
1339 "multiply",
1340 "Oslash",
1341 "Ugrave",
1342 "Uacute",
1343 "Ucircumflex",
1344 "Udieresis",
1345 "Yacute",
1346 "Thorn",
1347 "germandbls",
1348 "agrave",
1349 "aacute",
1350 "acircumflex",
1351 "atilde",
1352 "adieresis",
1353 "aring",
1354 "ae",
1355 "ccedilla",
1356 "egrave",
1357 "eacute",
1358 "ecircumflex",
1359 "edieresis",
1360 "igrave",
1361 "iacute",
1362 "icircumflex",
1363 "idieresis",
1364 "eth",
1365 "ntilde",
1366 "ograve",
1367 "oacute",
1368 "ocircumflex",
1369 "otilde",
1370 "odieresis",
1371 "divide",
1372 "oslash",
1373 "ugrave",
1374 "uacute",
1375 "ucircumflex",
1376 "udieresis",
1377 "yacute",
1378 "thorn",
1379 "ydieresis",
1380 };
1381
1382 const char* const AdobeSymbolEncodingNames[224] = {
1383 "space",
1384 "exclam",
1385 "universal",
1386 "numbersign",
1387 "existential",
1388 "percent",
1389 "ampersand",
1390 "suchthat",
1391 "parenleft",
1392 "parenright",
1393 "asteriskmath",
1394 "plus",
1395 "comma",
1396 "minus",
1397 "period",
1398 "slash",
1399 "zero",
1400 "one",
1401 "two",
1402 "three",
1403 "four",
1404 "five",
1405 "six",
1406 "seven",
1407 "eight",
1408 "nine",
1409 "colon",
1410 "semicolon",
1411 "less",
1412 "equal",
1413 "greater",
1414 "question",
1415 "congruent",
1416 "Alpha",
1417 "Beta",
1418 "Chi",
1419 "Delta",
1420 "Epsilon",
1421 "Phi",
1422 "Gamma",
1423 "Eta",
1424 "Iota",
1425 "theta1",
1426 "Kappa",
1427 "Lambda",
1428 "Mu",
1429 "Nu",
1430 "Omicron",
1431 "Pi",
1432 "Theta",
1433 "Rho",
1434 "Sigma",
1435 "Tau",
1436 "Upsilon",
1437 "sigma1",
1438 "Omega",
1439 "Xi",
1440 "Psi",
1441 "Zeta",
1442 "bracketleft",
1443 "therefore",
1444 "bracketright",
1445 "perpendicular",
1446 "underscore",
1447 "radicalex",
1448 "alpha",
1449 "beta",
1450 "chi",
1451 "delta",
1452 "epsilon",
1453 "phi",
1454 "gamma",
1455 "eta",
1456 "iota",
1457 "phi1",
1458 "kappa",
1459 "lambda",
1460 "mu",
1461 "nu",
1462 "omicron",
1463 "pi",
1464 "theta",
1465 "rho",
1466 "sigma",
1467 "tau",
1468 "upsilon",
1469 "omega1",
1470 "omega",
1471 "xi",
1472 "psi",
1473 "zeta",
1474 "braceleft",
1475 "bar",
1476 "braceright",
1477 "similar",
1478 nullptr,
1479 nullptr,
1480 nullptr,
1481 nullptr,
1482 nullptr,
1483 nullptr,
1484 nullptr,
1485 nullptr,
1486 nullptr,
1487 nullptr,
1488 nullptr,
1489 nullptr,
1490 nullptr,
1491 nullptr,
1492 nullptr,
1493 nullptr,
1494 nullptr,
1495 nullptr,
1496 nullptr,
1497 nullptr,
1498 nullptr,
1499 nullptr,
1500 nullptr,
1501 nullptr,
1502 nullptr,
1503 nullptr,
1504 nullptr,
1505 nullptr,
1506 nullptr,
1507 nullptr,
1508 nullptr,
1509 nullptr,
1510 nullptr,
1511 "Euro",
1512 "Upsilon1",
1513 "minute",
1514 "lessequal",
1515 "fraction",
1516 "infinity",
1517 "florin",
1518 "club",
1519 "diamond",
1520 "heart",
1521 "spade",
1522 "arrowboth",
1523 "arrowleft",
1524 "arrowup",
1525 "arrowright",
1526 "arrowdown",
1527 "degree",
1528 "plusminus",
1529 "second",
1530 "greaterequal",
1531 "multiply",
1532 "proportional",
1533 "partialdiff",
1534 "bullet",
1535 "divide",
1536 "notequal",
1537 "equivalence",
1538 "approxequal",
1539 "ellipsis",
1540 "arrowvertex",
1541 "arrowhorizex",
1542 "carriagereturn",
1543 "aleph",
1544 "Ifraktur",
1545 "Rfraktur",
1546 "weierstrass",
1547 "circlemultiply",
1548 "circleplus",
1549 "emptyset",
1550 "intersection",
1551 "union",
1552 "propersuperset",
1553 "reflexsuperset",
1554 "notsubset",
1555 "propersubset",
1556 "reflexsubset",
1557 "element",
1558 "notelement",
1559 "angle",
1560 "gradient",
1561 "registerserif",
1562 "copyrightserif",
1563 "trademarkserif",
1564 "product",
1565 "radical",
1566 "dotmath",
1567 "logicalnot",
1568 "logicaland",
1569 "logicalor",
1570 "arrowdblboth",
1571 "arrowdblleft",
1572 "arrowdblup",
1573 "arrowdblright",
1574 "arrowdbldown",
1575 "lozenge",
1576 "angleleft",
1577 "registersans",
1578 "copyrightsans",
1579 "trademarksans",
1580 "summation",
1581 "parenlefttp",
1582 "parenleftex",
1583 "parenleftbt",
1584 "bracketlefttp",
1585 "bracketleftex",
1586 "bracketleftbt",
1587 "bracelefttp",
1588 "braceleftmid",
1589 "braceleftbt",
1590 "braceex",
1591 nullptr,
1592 "angleright",
1593 "integral",
1594 "integraltp",
1595 "integralex",
1596 "integralbt",
1597 "parenrighttp",
1598 "parenrightex",
1599 "parenrightbt",
1600 "bracketrighttp",
1601 "bracketrightex",
1602 "bracketrightbt",
1603 "bracerighttp",
1604 "bracerightmid",
1605 "bracerightbt",
1606 nullptr,
1607 };
1608
1609 const char* const ZapfEncodingNames[224] = {
1610 "space", "a1", "a2", "a202", "a3", "a4", "a5", "a119",
1611 "a118", "a117", "a11", "a12", "a13", "a14", "a15", "a16",
1612 "a105", "a17", "a18", "a19", "a20", "a21", "a22", "a23",
1613 "a24", "a25", "a26", "a27", "a28", "a6", "a7", "a8",
1614 "a9", "a10", "a29", "a30", "a31", "a32", "a33", "a34",
1615 "a35", "a36", "a37", "a38", "a39", "a40", "a41", "a42",
1616 "a43", "a44", "a45", "a46", "a47", "a48", "a49", "a50",
1617 "a51", "a52", "a53", "a54", "a55", "a56", "a57", "a58",
1618 "a59", "a60", "a61", "a62", "a63", "a64", "a65", "a66",
1619 "a67", "a68", "a69", "a70", "a71", "a72", "a73", "a74",
1620 "a203", "a75", "a204", "a76", "a77", "a78", "a79", "a81",
1621 "a82", "a83", "a84", "a97", "a98", "a99", "a100", nullptr,
1622 "a89", "a90", "a93", "a94", "a91", "a92", "a205", "a85",
1623 "a206", "a86", "a87", "a88", "a95", "a96", nullptr, nullptr,
1624 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1625 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1626 nullptr, "a101", "a102", "a103", "a104", "a106", "a107", "a108",
1627 "a112", "a111", "a110", "a109", "a120", "a121", "a122", "a123",
1628 "a124", "a125", "a126", "a127", "a128", "a129", "a130", "a131",
1629 "a132", "a133", "a134", "a135", "a136", "a137", "a138", "a139",
1630 "a140", "a141", "a142", "a143", "a144", "a145", "a146", "a147",
1631 "a148", "a149", "a150", "a151", "a152", "a153", "a154", "a155",
1632 "a156", "a157", "a158", "a159", "a160", "a161", "a163", "a164",
1633 "a196", "a165", "a192", "a166", "a167", "a168", "a169", "a170",
1634 "a171", "a172", "a173", "a162", "a174", "a175", "a176", "a177",
1635 "a178", "a179", "a193", "a180", "a199", "a181", "a200", "a182",
1636 nullptr, "a201", "a183", "a184", "a197", "a185", "a194", "a198",
1637 "a186", "a195", "a187", "a188", "a189", "a190", "a191", nullptr};
1638
PDF_FindCode(const uint16_t * pCodes,uint16_t unicode)1639 uint32_t PDF_FindCode(const uint16_t* pCodes, uint16_t unicode) {
1640 for (uint32_t i = 0; i < 256; i++)
1641 if (pCodes[i] == unicode)
1642 return i;
1643 return 0;
1644 }
1645
1646 } // namespace
1647
CPDF_FontEncoding()1648 CPDF_FontEncoding::CPDF_FontEncoding() {
1649 memset(m_Unicodes, 0, sizeof(m_Unicodes));
1650 }
1651
CharCodeFromUnicode(wchar_t unicode) const1652 int CPDF_FontEncoding::CharCodeFromUnicode(wchar_t unicode) const {
1653 for (int i = 0; i < 256; i++)
1654 if (m_Unicodes[i] == unicode) {
1655 return i;
1656 }
1657 return -1;
1658 }
1659
CPDF_FontEncoding(int PredefinedEncoding)1660 CPDF_FontEncoding::CPDF_FontEncoding(int PredefinedEncoding) {
1661 const uint16_t* pSrc = PDF_UnicodesForPredefinedCharSet(PredefinedEncoding);
1662 if (!pSrc) {
1663 memset(m_Unicodes, 0, sizeof(m_Unicodes));
1664 } else {
1665 for (int i = 0; i < 256; i++)
1666 m_Unicodes[i] = pSrc[i];
1667 }
1668 }
1669
IsIdentical(CPDF_FontEncoding * pAnother) const1670 bool CPDF_FontEncoding::IsIdentical(CPDF_FontEncoding* pAnother) const {
1671 return memcmp(m_Unicodes, pAnother->m_Unicodes, sizeof(m_Unicodes)) == 0;
1672 }
1673
Realize(WeakPtr<ByteStringPool> pPool)1674 std::unique_ptr<CPDF_Object> CPDF_FontEncoding::Realize(
1675 WeakPtr<ByteStringPool> pPool) {
1676 int predefined = 0;
1677 for (int cs = PDFFONT_ENCODING_WINANSI; cs < PDFFONT_ENCODING_ZAPFDINGBATS;
1678 cs++) {
1679 const uint16_t* pSrc = PDF_UnicodesForPredefinedCharSet(cs);
1680 bool match = true;
1681 for (int i = 0; i < 256; ++i) {
1682 if (m_Unicodes[i] != pSrc[i]) {
1683 match = false;
1684 break;
1685 }
1686 }
1687 if (match) {
1688 predefined = cs;
1689 break;
1690 }
1691 }
1692 if (predefined) {
1693 if (predefined == PDFFONT_ENCODING_WINANSI)
1694 return pdfium::MakeUnique<CPDF_Name>(pPool, "WinAnsiEncoding");
1695 if (predefined == PDFFONT_ENCODING_MACROMAN)
1696 return pdfium::MakeUnique<CPDF_Name>(pPool, "MacRomanEncoding");
1697 if (predefined == PDFFONT_ENCODING_MACEXPERT)
1698 return pdfium::MakeUnique<CPDF_Name>(pPool, "MacExpertEncoding");
1699
1700 return nullptr;
1701 }
1702 const uint16_t* pStandard =
1703 PDF_UnicodesForPredefinedCharSet(PDFFONT_ENCODING_WINANSI);
1704 auto pDiff = pdfium::MakeUnique<CPDF_Array>();
1705 for (int i = 0; i < 256; i++) {
1706 if (pStandard[i] == m_Unicodes[i])
1707 continue;
1708
1709 pDiff->AddNew<CPDF_Number>(i);
1710 pDiff->AddNew<CPDF_Name>(PDF_AdobeNameFromUnicode(m_Unicodes[i]));
1711 }
1712
1713 auto pDict = pdfium::MakeUnique<CPDF_Dictionary>(pPool);
1714 pDict->SetNewFor<CPDF_Name>("BaseEncoding", "WinAnsiEncoding");
1715 pDict->SetFor("Differences", std::move(pDiff));
1716 return std::move(pDict);
1717 }
1718
FT_CharCodeFromUnicode(int encoding,wchar_t unicode)1719 uint32_t FT_CharCodeFromUnicode(int encoding, wchar_t unicode) {
1720 switch (encoding) {
1721 case FXFT_ENCODING_UNICODE:
1722 return unicode;
1723 case FXFT_ENCODING_ADOBE_STANDARD:
1724 return PDF_FindCode(StandardEncoding, unicode);
1725 case FXFT_ENCODING_ADOBE_EXPERT:
1726 return PDF_FindCode(MacExpertEncoding, unicode);
1727 case FXFT_ENCODING_ADOBE_LATIN_1:
1728 return PDF_FindCode(AdobeWinAnsiEncoding, unicode);
1729 case FXFT_ENCODING_APPLE_ROMAN:
1730 return PDF_FindCode(MacRomanEncoding, unicode);
1731 case FXFT_ENCODING_ADOBE_CUSTOM:
1732 return PDF_FindCode(PDFDocEncoding, unicode);
1733 case FXFT_ENCODING_MS_SYMBOL:
1734 return PDF_FindCode(MSSymbolEncoding, unicode);
1735 }
1736 return 0;
1737 }
PDF_UnicodesForPredefinedCharSet(int encoding)1738 const uint16_t* PDF_UnicodesForPredefinedCharSet(int encoding) {
1739 switch (encoding) {
1740 case PDFFONT_ENCODING_WINANSI:
1741 return AdobeWinAnsiEncoding;
1742 case PDFFONT_ENCODING_MACROMAN:
1743 return MacRomanEncoding;
1744 case PDFFONT_ENCODING_MACEXPERT:
1745 return MacExpertEncoding;
1746 case PDFFONT_ENCODING_STANDARD:
1747 return StandardEncoding;
1748 case PDFFONT_ENCODING_ADOBE_SYMBOL:
1749 return AdobeSymbolEncoding;
1750 case PDFFONT_ENCODING_ZAPFDINGBATS:
1751 return ZapfEncoding;
1752 case PDFFONT_ENCODING_PDFDOC:
1753 return PDFDocEncoding;
1754 case PDFFONT_ENCODING_MS_SYMBOL:
1755 return MSSymbolEncoding;
1756 }
1757 return nullptr;
1758 }
1759
PDF_UnicodeFromAdobeName(const char * name)1760 wchar_t PDF_UnicodeFromAdobeName(const char* name) {
1761 return (wchar_t)(FXFT_unicode_from_adobe_name(name) & 0x7FFFFFFF);
1762 }
1763
PDF_AdobeNameFromUnicode(wchar_t unicode)1764 ByteString PDF_AdobeNameFromUnicode(wchar_t unicode) {
1765 char glyph_name[64];
1766 FXFT_adobe_name_from_unicode(glyph_name, unicode);
1767 return ByteString(glyph_name);
1768 }
1769
PDF_CharNameFromPredefinedCharSet(int encoding,uint8_t charcode)1770 const char* PDF_CharNameFromPredefinedCharSet(int encoding, uint8_t charcode) {
1771 if (encoding == PDFFONT_ENCODING_PDFDOC) {
1772 if (charcode < 24)
1773 return nullptr;
1774
1775 charcode -= 24;
1776 } else {
1777 if (charcode < 32)
1778 return nullptr;
1779
1780 charcode -= 32;
1781 }
1782 switch (encoding) {
1783 case PDFFONT_ENCODING_WINANSI:
1784 return AdobeWinAnsiEncodingNames[charcode];
1785 case PDFFONT_ENCODING_MACROMAN:
1786 return MacRomanEncodingNames[charcode];
1787 case PDFFONT_ENCODING_MACEXPERT:
1788 return MacExpertEncodingNames[charcode];
1789 case PDFFONT_ENCODING_STANDARD:
1790 return StandardEncodingNames[charcode];
1791 case PDFFONT_ENCODING_ADOBE_SYMBOL:
1792 return AdobeSymbolEncodingNames[charcode];
1793 case PDFFONT_ENCODING_ZAPFDINGBATS:
1794 return ZapfEncodingNames[charcode];
1795 case PDFFONT_ENCODING_PDFDOC:
1796 return PDFDocEncodingNames[charcode];
1797 }
1798 return nullptr;
1799 }
1800
FT_UnicodeFromCharCode(int encoding,uint32_t charcode)1801 wchar_t FT_UnicodeFromCharCode(int encoding, uint32_t charcode) {
1802 switch (encoding) {
1803 case FXFT_ENCODING_UNICODE:
1804 return (uint16_t)charcode;
1805 case FXFT_ENCODING_ADOBE_STANDARD:
1806 return StandardEncoding[(uint8_t)charcode];
1807 case FXFT_ENCODING_ADOBE_EXPERT:
1808 return MacExpertEncoding[(uint8_t)charcode];
1809 case FXFT_ENCODING_ADOBE_LATIN_1:
1810 return AdobeWinAnsiEncoding[(uint8_t)charcode];
1811 case FXFT_ENCODING_APPLE_ROMAN:
1812 return MacRomanEncoding[(uint8_t)charcode];
1813 case PDFFONT_ENCODING_PDFDOC:
1814 return PDFDocEncoding[(uint8_t)charcode];
1815 }
1816 return 0;
1817 }
1818