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 FX_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 FX_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 FX_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 FX_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 FX_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 FX_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 FX_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 FXSYS_memset(m_Unicodes, 0, sizeof(m_Unicodes));
1650 }
1651
CharCodeFromUnicode(FX_WCHAR unicode) const1652 int CPDF_FontEncoding::CharCodeFromUnicode(FX_WCHAR 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 FXSYS_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 FXSYS_memcmp(m_Unicodes, pAnother->m_Unicodes, sizeof(m_Unicodes)) ==
1672 0;
1673 }
1674
Realize(CFX_WeakPtr<CFX_ByteStringPool> pPool)1675 std::unique_ptr<CPDF_Object> CPDF_FontEncoding::Realize(
1676 CFX_WeakPtr<CFX_ByteStringPool> pPool) {
1677 int predefined = 0;
1678 for (int cs = PDFFONT_ENCODING_WINANSI; cs < PDFFONT_ENCODING_ZAPFDINGBATS;
1679 cs++) {
1680 const uint16_t* pSrc = PDF_UnicodesForPredefinedCharSet(cs);
1681 bool match = true;
1682 for (int i = 0; i < 256; ++i) {
1683 if (m_Unicodes[i] != pSrc[i]) {
1684 match = false;
1685 break;
1686 }
1687 }
1688 if (match) {
1689 predefined = cs;
1690 break;
1691 }
1692 }
1693 if (predefined) {
1694 if (predefined == PDFFONT_ENCODING_WINANSI)
1695 return pdfium::MakeUnique<CPDF_Name>(pPool, "WinAnsiEncoding");
1696 if (predefined == PDFFONT_ENCODING_MACROMAN)
1697 return pdfium::MakeUnique<CPDF_Name>(pPool, "MacRomanEncoding");
1698 if (predefined == PDFFONT_ENCODING_MACEXPERT)
1699 return pdfium::MakeUnique<CPDF_Name>(pPool, "MacExpertEncoding");
1700
1701 return nullptr;
1702 }
1703 const uint16_t* pStandard =
1704 PDF_UnicodesForPredefinedCharSet(PDFFONT_ENCODING_WINANSI);
1705 auto pDiff = pdfium::MakeUnique<CPDF_Array>();
1706 for (int i = 0; i < 256; i++) {
1707 if (pStandard[i] == m_Unicodes[i])
1708 continue;
1709
1710 pDiff->AddNew<CPDF_Number>(i);
1711 pDiff->AddNew<CPDF_Name>(PDF_AdobeNameFromUnicode(m_Unicodes[i]));
1712 }
1713
1714 auto pDict = pdfium::MakeUnique<CPDF_Dictionary>(pPool);
1715 pDict->SetNewFor<CPDF_Name>("BaseEncoding", "WinAnsiEncoding");
1716 pDict->SetFor("Differences", std::move(pDiff));
1717 return std::move(pDict);
1718 }
1719
FT_CharCodeFromUnicode(int encoding,FX_WCHAR unicode)1720 uint32_t FT_CharCodeFromUnicode(int encoding, FX_WCHAR unicode) {
1721 switch (encoding) {
1722 case FXFT_ENCODING_UNICODE:
1723 return unicode;
1724 case FXFT_ENCODING_ADOBE_STANDARD:
1725 return PDF_FindCode(StandardEncoding, unicode);
1726 case FXFT_ENCODING_ADOBE_EXPERT:
1727 return PDF_FindCode(MacExpertEncoding, unicode);
1728 case FXFT_ENCODING_ADOBE_LATIN_1:
1729 return PDF_FindCode(AdobeWinAnsiEncoding, unicode);
1730 case FXFT_ENCODING_APPLE_ROMAN:
1731 return PDF_FindCode(MacRomanEncoding, unicode);
1732 case FXFT_ENCODING_ADOBE_CUSTOM:
1733 return PDF_FindCode(PDFDocEncoding, unicode);
1734 case FXFT_ENCODING_MS_SYMBOL:
1735 return PDF_FindCode(MSSymbolEncoding, unicode);
1736 }
1737 return 0;
1738 }
PDF_UnicodesForPredefinedCharSet(int encoding)1739 const uint16_t* PDF_UnicodesForPredefinedCharSet(int encoding) {
1740 switch (encoding) {
1741 case PDFFONT_ENCODING_WINANSI:
1742 return AdobeWinAnsiEncoding;
1743 case PDFFONT_ENCODING_MACROMAN:
1744 return MacRomanEncoding;
1745 case PDFFONT_ENCODING_MACEXPERT:
1746 return MacExpertEncoding;
1747 case PDFFONT_ENCODING_STANDARD:
1748 return StandardEncoding;
1749 case PDFFONT_ENCODING_ADOBE_SYMBOL:
1750 return AdobeSymbolEncoding;
1751 case PDFFONT_ENCODING_ZAPFDINGBATS:
1752 return ZapfEncoding;
1753 case PDFFONT_ENCODING_PDFDOC:
1754 return PDFDocEncoding;
1755 case PDFFONT_ENCODING_MS_SYMBOL:
1756 return MSSymbolEncoding;
1757 }
1758 return nullptr;
1759 }
1760
PDF_UnicodeFromAdobeName(const FX_CHAR * name)1761 FX_WCHAR PDF_UnicodeFromAdobeName(const FX_CHAR* name) {
1762 return (FX_WCHAR)(FXFT_unicode_from_adobe_name(name) & 0x7FFFFFFF);
1763 }
1764
PDF_AdobeNameFromUnicode(FX_WCHAR unicode)1765 CFX_ByteString PDF_AdobeNameFromUnicode(FX_WCHAR unicode) {
1766 char glyph_name[64];
1767 FXFT_adobe_name_from_unicode(glyph_name, unicode);
1768 return CFX_ByteString(glyph_name);
1769 }
1770
PDF_CharNameFromPredefinedCharSet(int encoding,uint8_t charcode)1771 const FX_CHAR* PDF_CharNameFromPredefinedCharSet(int encoding,
1772 uint8_t charcode) {
1773 if (encoding == PDFFONT_ENCODING_PDFDOC) {
1774 if (charcode < 24)
1775 return nullptr;
1776
1777 charcode -= 24;
1778 } else {
1779 if (charcode < 32)
1780 return nullptr;
1781
1782 charcode -= 32;
1783 }
1784 switch (encoding) {
1785 case PDFFONT_ENCODING_WINANSI:
1786 return AdobeWinAnsiEncodingNames[charcode];
1787 case PDFFONT_ENCODING_MACROMAN:
1788 return MacRomanEncodingNames[charcode];
1789 case PDFFONT_ENCODING_MACEXPERT:
1790 return MacExpertEncodingNames[charcode];
1791 case PDFFONT_ENCODING_STANDARD:
1792 return StandardEncodingNames[charcode];
1793 case PDFFONT_ENCODING_ADOBE_SYMBOL:
1794 return AdobeSymbolEncodingNames[charcode];
1795 case PDFFONT_ENCODING_ZAPFDINGBATS:
1796 return ZapfEncodingNames[charcode];
1797 case PDFFONT_ENCODING_PDFDOC:
1798 return PDFDocEncodingNames[charcode];
1799 }
1800 return nullptr;
1801 }
1802
FT_UnicodeFromCharCode(int encoding,uint32_t charcode)1803 FX_WCHAR FT_UnicodeFromCharCode(int encoding, uint32_t charcode) {
1804 switch (encoding) {
1805 case FXFT_ENCODING_UNICODE:
1806 return (uint16_t)charcode;
1807 case FXFT_ENCODING_ADOBE_STANDARD:
1808 return StandardEncoding[(uint8_t)charcode];
1809 case FXFT_ENCODING_ADOBE_EXPERT:
1810 return MacExpertEncoding[(uint8_t)charcode];
1811 case FXFT_ENCODING_ADOBE_LATIN_1:
1812 return AdobeWinAnsiEncoding[(uint8_t)charcode];
1813 case FXFT_ENCODING_APPLE_ROMAN:
1814 return MacRomanEncoding[(uint8_t)charcode];
1815 case PDFFONT_ENCODING_PDFDOC:
1816 return PDFDocEncoding[(uint8_t)charcode];
1817 }
1818 return 0;
1819 }
1820