/src/libreoffice/unotools/source/misc/fontcvt.cxx
Line | Count | Source |
1 | | /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ |
2 | | /* |
3 | | * This file is part of the LibreOffice project. |
4 | | * |
5 | | * This Source Code Form is subject to the terms of the Mozilla Public |
6 | | * License, v. 2.0. If a copy of the MPL was not distributed with this |
7 | | * file, You can obtain one at http://mozilla.org/MPL/2.0/. |
8 | | * |
9 | | * This file incorporates work covered by the following license notice: |
10 | | * |
11 | | * Licensed to the Apache Software Foundation (ASF) under one or more |
12 | | * contributor license agreements. See the NOTICE file distributed |
13 | | * with this work for additional information regarding copyright |
14 | | * ownership. The ASF licenses this file to you under the Apache |
15 | | * License, Version 2.0 (the "License"); you may not use this file |
16 | | * except in compliance with the License. You may obtain a copy of |
17 | | * the License at http://www.apache.org/licenses/LICENSE-2.0 . |
18 | | */ |
19 | | |
20 | | #include <sal/config.h> |
21 | | |
22 | | #include <rtl/ustrbuf.hxx> |
23 | | #include <sal/log.hxx> |
24 | | #include <unotools/fontcvt.hxx> |
25 | | #include <unotools/fontdefs.hxx> |
26 | | |
27 | | #include <cstddef> |
28 | | #include <map> |
29 | | #include <vector> |
30 | | |
31 | | //These conversion tables were designed for StarSymbol. OpenSymbol |
32 | | //originally didn't have the same code points as StarSymbol, and |
33 | | //then gained some extra code points, but there are still potentially |
34 | | //various holes in OpenSymbol which were filled by StarSymbol, i.e. |
35 | | //destination mapping points which are empty in OpenSymbol |
36 | | |
37 | | const sal_Unicode aStarBatsTab[224] = |
38 | | { |
39 | | // F020 |
40 | | 0x0020, 0x263a, 0x25cf, 0x274d, |
41 | | 0x25a0, 0x25a1, 0xE000, 0x2751, |
42 | | 0x2752, 0xE001, 0xE002, 0xE003, |
43 | | 0x2756, 0xE004, 0xE005, 0x27a2, |
44 | | // F030 |
45 | | 0xE006, 0x2794, 0x2713, 0x2612, |
46 | | 0x2611, 0x27b2, 0x261b, 0x270d, |
47 | | 0x270e, 0xE007, 0x2714, 0xE008, |
48 | | 0xE009, 0xE00A, 0x274f, 0x2750, |
49 | | // F040 |
50 | | 0xE00B, 0xE00C, 0xE00D, 0xE00E, |
51 | | 0x2722, 0x2723, 0x2724, 0x2725, |
52 | | 0x2733, 0x2734, 0x2735, 0x2736, |
53 | | 0x2737, 0x2738, 0x2739, 0x2717, |
54 | | // F050 |
55 | | 0x2718, 0x2719, 0x271a, 0x271b, |
56 | | 0x271c, 0x272b, 0x272c, 0x272d, |
57 | | 0x272e, 0x272f, 0x2730, 0, |
58 | | 0xE00F, 0x278a, 0x278b, 0x278c, |
59 | | // F060 |
60 | | 0x278d, 0x278e, 0x278f, 0x2790, |
61 | | 0x2791, 0x2792, 0x2793, 0xE010, |
62 | | 0x2780, 0x2781, 0x2782, 0x2783, |
63 | | 0x2784, 0x2785, 0x2786, 0x2787, |
64 | | // F070 |
65 | | 0x2788, 0x2789, 0xE011, 0xE012, |
66 | | 0x260e, 0xE013, 0xE014, 0xE015, |
67 | | 0xE016, 0xE017, 0xE018, 0xE019, |
68 | | 0xE01A, 0x261e, 0xE01B, 0, |
69 | | // F080 |
70 | | 0x20ac, 0, 0x201a, 0x0192, |
71 | | 0x201e, 0x2026, 0x2020, 0x2021, |
72 | | 0xE01c, 0x2030, 0x0160, 0x2039, |
73 | | 0x0152, 0, 0x017d, 0, |
74 | | // F090 |
75 | | 0, 0x2018, 0x2019, 0x201c, |
76 | | 0x201d, 0x2022, 0x2013, 0x2014, |
77 | | 0xE01d, 0x2122, 0x0161, 0x203a, |
78 | | 0x0153, 0, 0x017e, 0x0178, |
79 | | // F0A0 |
80 | | 0, 0x21e7, 0x21e8, 0x21e9, |
81 | | 0x21e6, 0xE01e, 0xE01f, 0x00a7, |
82 | | 0xE020, 0xE021, 0xE022, 0x00ab, |
83 | | 0xE023, 0x2639, 0xE024, 0xE025, |
84 | | // F0B0 |
85 | | 0xE026, 0xE027, 0xE028, 0x21e5, |
86 | | 0x21e4, 0x2192, 0x2193, 0x2190, |
87 | | 0x2191, 0xE029, 0xE02a, 0x00bb, |
88 | | 0xE02b, 0xE02c, 0xE02d, 0xE02e, |
89 | | // F0C0 |
90 | | 0xE02f, 0xE030, 0xE031, 0xE032, |
91 | | 0x25be, 0x25b4, 0x25bf, 0x25b5, |
92 | | 0xE033, 0xE034, 0xE035, 0x2702, |
93 | | 0x2708, 0x2721, 0x273f, 0x2744, |
94 | | // F0D0 |
95 | | 0x25d7, 0x2759, 0xE036, 0xE037, |
96 | | 0x2762, 0x2663, 0x2665, 0x2660, |
97 | | 0x2194, 0x2195, 0x2798, 0x279a, |
98 | | 0x27b8, 0, 0x00b6, 0, |
99 | | // F0E0 |
100 | | 0x00a2, 0x00a4, 0x00a5, 0xE038, |
101 | | 0x20a1, 0x20a2, 0x20a3, 0x20a4, |
102 | | 0x20a9, 0x20ab, 0x20a8, 0xE039, |
103 | | 0, 0, 0, 0, |
104 | | // F0F0 |
105 | | 0, 0, 0, 0, |
106 | | 0, 0, 0, 0, |
107 | | 0, 0, 0, 0, |
108 | | 0, 0, 0, 0xE03a |
109 | | }; |
110 | | |
111 | | const sal_Unicode aStarMathTab[224] = |
112 | | { |
113 | | // F020 |
114 | | 0x0020, 0x0021, 0x0022, 0x0023, |
115 | | 0xE080, 0x0025, 0x0026, 0x221e, |
116 | | 0x0028, 0x0029, 0x002a, 0x002b, |
117 | | 0x002c, 0x002d, 0x002e, 0x002f, |
118 | | // F030 |
119 | | 0x2224, 0x21d2, 0x21d0, 0x21d4, |
120 | | 0xE081, 0xE082, 0x00b0, 0, |
121 | | 0, 0, 0x003a, 0x003b, |
122 | | 0x003c, 0x003d, 0x003e, 0x00bf, |
123 | | // F040 |
124 | | 0x2260, 0xE083, 0x2212, 0x2217, |
125 | | 0x00d7, 0x22c5, 0x00f7, 0x00b1, |
126 | | 0x2213, 0x2295, 0x2296, 0x2297, |
127 | | 0x2298, 0x2299, 0x222a, 0x2229, |
128 | | // F050 |
129 | | 0xE084, 0xE085, 0x2264, 0x2265, |
130 | | 0xE086, 0xE087, 0x226a, 0x226b, |
131 | | 0x007e, 0x2243, 0x2248, 0x225d, |
132 | | 0x2261, 0x221d, 0x2202, 0x2282, |
133 | | // F060 |
134 | | 0x2283, 0x2286, 0x2287, 0x2284, |
135 | | 0x2285, 0x2288, 0x2289, 0x2208, |
136 | | 0x2209, 0xE089, 0x2203, 0x220d, |
137 | | 0x2135, 0x2111, 0x211c, 0x2118, |
138 | | // F070 |
139 | | 0xE08a, 0x2221, 0x2222, 0x2223, |
140 | | 0x2225, 0x22a5, 0xE08b, 0x22ef, |
141 | | 0x22ee, 0x22f0, 0x22f1, 0x22b6, |
142 | | 0x22b7, 0xE08c, 0x2216, 0x00ac, |
143 | | // F080 |
144 | | 0x222b, 0x222c, 0x222d, 0x222e, |
145 | | 0x222f, 0x2230, 0x221a, 0xE08d, |
146 | | 0xE08e, 0xE08f, 0x2210, 0x220f, |
147 | | 0x2211, 0x2207, 0x2200, 0xE090, |
148 | | // F090 |
149 | | 0xE091, 0xE092, 0xE093, 0xE094, |
150 | | 0xE095, 0xE096, 0xE097, 0xE098, |
151 | | 0x02d9, 0x00a8, 0xE09b, 0x02da, |
152 | | 0x2227, 0x2228, 0x220b, 0x2205, |
153 | | // F0A0 |
154 | | 0x007b, 0x007d, 0xe09e, 0xe09f, |
155 | | 0x2329, 0x232a, 0x005b, 0x005d, |
156 | | 0xE0a0, 0x22be, 0xE0a1, 0x2259, |
157 | | 0x2254, 0x2255, 0x21b3, 0x2197, |
158 | | // F0B0 |
159 | | 0x2198, 0x2245, 0x301a, 0x301b, |
160 | | 0x2373, 0xE0a5, 0xE0a6, 0x22a4, |
161 | | 0x2112, 0x2130, 0x2131, 0, |
162 | | 0xE0a7, 0xE0a8, 0xE0a9, 0xE0aa, |
163 | | // F0C0 |
164 | | 0x2308, 0x230a, 0x2309, 0x230b, |
165 | | 0, 0xe0ab, 0xe0ac, 0xe0ad, |
166 | | 0xe0ae, 0xe0af, 0xe0b0, 0xe0b1, |
167 | | 0xe0b2, 0xe0b3, 0xe0b4, 0xe0b5, |
168 | | // F0D0 |
169 | | 0xe0b6, 0xe0b7, 0xe0b8, 0xe0b9, |
170 | | 0xe0ba, 0xe0bb, 0xe0bc, 0xe0bd, |
171 | | 0xe0be, 0xe0bf, 0xe0c0, 0xe0c1, |
172 | | 0xe0c2, 0xe0c3, 0xe0c4, 0xe0c5, |
173 | | // F0E0 |
174 | | 0xe0c6, 0xe0c7, 0xe0c8, 0xe0c9, |
175 | | 0xe0ca, 0xe0cb, 0xe0cc, 0xe0cd, |
176 | | 0xe0ce, 0xe0cf, 0xe0d0, 0xe0d1, |
177 | | 0x03f1, 0xe0d3, 0xe0d4, 0xe0d5, |
178 | | // F0F0 |
179 | | 0x2113, 0xe0d6, 0x2107, 0x2127, |
180 | | 0x210a, 0xe0d9, 0x210f, 0x019b, |
181 | | 0xe0db, 0xe0dc, 0xe0dd, 0x2115, |
182 | | 0x2124, 0x211a, 0x211d, 0x2102 |
183 | | }; |
184 | | |
185 | | const sal_Unicode aWingDingsTab[224] = |
186 | | { |
187 | | // F020 |
188 | | 0x0020, 0xe400, 0xe401, 0xe402, |
189 | | 0xe403, 0xe404, 0xe405, 0xe406, |
190 | | 0xe407, 0xe408, 0xe409, 0xe40a, |
191 | | 0xe40b, 0xe40c, 0xe40d, 0xe40e, |
192 | | // F030 |
193 | | 0xe40f, 0xe410, 0xe411, 0xe412, |
194 | | 0xe413, 0xe414, 0xe415, 0xe416, |
195 | | 0xe417, 0xe418, 0xe419, 0xe41a, |
196 | | 0xe41b, 0xe41c, 0x2707, 0xe41d, |
197 | | // F040 |
198 | | 0xe41e, 0xe41f, 0xe420, 0xe421, |
199 | | 0x261c, 0xe423, 0x261d, 0x261f, |
200 | | 0x261f, 0xe424, 0xe425, 0xe426, |
201 | | 0xe427, 0xe428, 0xe429, 0xe42a, |
202 | | // F050 |
203 | | 0xe42b, 0xe42c, 0x263c, 0xe42d, |
204 | | 0xe42e, 0xe42f, 0xe430, 0xe431, |
205 | | 0xe432, 0xe433, 0x262a, 0x262f, |
206 | | 0x0950, 0xe434, 0x2648, 0x2649, |
207 | | // F060 |
208 | | 0x264a, 0x264b, 0x264c, 0x264d, |
209 | | 0x264e, 0x264f, 0x2650, 0x2651, |
210 | | 0x2652, 0x2653, 0xe435, 0xe436, |
211 | | 0xe437, 0xe438, 0xe439, 0xe43a, |
212 | | // F070 |
213 | | 0xe43b, 0xe43c, 0xe43d, 0xe43e, |
214 | | 0xe43f, 0xe440, 0xe441, 0xe442, |
215 | | 0xe443, 0x2353, 0x2318, 0xe444, |
216 | | 0xe445, 0xe446, 0xe447, 0, |
217 | | // F080 |
218 | | 0xe448, 0xe449, 0xe44a, 0xe44b, |
219 | | 0xe44c, 0xe44d, 0xe44e, 0xe44f, |
220 | | 0xe450, 0xe451, 0xe452, 0xe453, |
221 | | 0xe454, 0xe455, 0xe456, 0xe457, |
222 | | // F090 |
223 | | 0xe458, 0xe459, 0xe45a, 0xe45b, |
224 | | 0xe45c, 0xe45d, 0xe45e, 0xe45f, |
225 | | 0xe460, 0xe461, 0xe462, 0xe463, |
226 | | 0xe464, 0xe465, 0xe466, 0xe467, |
227 | | // F0a0 |
228 | | 0xe468, 0xe469, 0xe46a, 0xe46b, |
229 | | 0xe46c, 0xe46d, 0xe46e, 0xe46f, |
230 | | 0xe470, 0xe471, 0xe472, 0xe473, |
231 | | 0xe474, 0xe475, 0xe476, 0xe477, |
232 | | // F0b0 |
233 | | 0xe478, 0xe479, 0xe47a, 0xe47b, |
234 | | 0xe47c, 0xe47d, 0xe47e, 0xe47f, |
235 | | 0xe480, 0xe481, 0xe482, 0xe483, |
236 | | 0xe484, 0xe485, 0xe486, 0xe487, |
237 | | // F0c0 |
238 | | 0xe488, 0xe489, 0xe48a, 0xe48b, |
239 | | 0xe48c, 0xe48d, 0xe48e, 0xe48f, |
240 | | 0xe490, 0xe491, 0xe492, 0xe493, |
241 | | 0xe494, 0xe495, 0xe496, 0xe497, |
242 | | // F0d0 |
243 | | 0xe498, 0xe499, 0xe49a, 0xe49b, |
244 | | 0xe49c, 0x232b, 0x2326, 0xe49d, |
245 | | 0xe49e, 0xe49f, 0xe4a0, 0xe4a1, |
246 | | 0xe4a2, 0xe4a3, 0xe4a4, 0xe4a5, |
247 | | // F0e0 |
248 | | 0xe4a6, 0xe4a7, 0xe4a8, 0xe4a9, |
249 | | 0xe4aa, 0xe4ab, 0xe4ac, 0xe4ad, |
250 | | 0xe4ae, 0xe4af, 0xe4b0, 0xe4b1, |
251 | | 0xe4b2, 0xe4b3, 0xe4b4, 0xe4b5, |
252 | | // F0f0 |
253 | | 0xe4b6, 0xe4b7, 0xe4b8, 0xe4b9, |
254 | | 0xe4ba, 0xe4bb, 0xe4bc, 0xe4bd, |
255 | | 0xe4be, 0xe4bf, 0xe4c0, 0xe4c1, |
256 | | 0xe4c2, 0xe4c3, 0xe4c4, 0xe4c5 |
257 | | }; |
258 | | |
259 | | const sal_Unicode aWingDings2Tab[224] = |
260 | | { |
261 | | // F020 |
262 | | 0x0020, 0xe500, 0xe501, 0xe502, |
263 | | 0xe503, 0xe504, 0xe505, 0xe506, |
264 | | 0xe507, 0xe508, 0xe509, 0xe50a, |
265 | | 0xe50b, 0xe50c, 0xe50d, 0xe50e, |
266 | | // F030 |
267 | | 0xe50f, 0xe510, 0xe511, 0xe512, |
268 | | 0xe513, 0xe514, 0xe515, 0xe516, |
269 | | 0xe517, 0xe518, 0xe519, 0xe51a, |
270 | | 0xe51b, 0xe51c, 0xe51d, 0xe51e, |
271 | | // F040 |
272 | | 0xe51f, 0xe520, 0xe521, 0xe522, |
273 | | 0xe523, 0xe524, 0xe525, 0xe526, |
274 | | 0xe527, 0xe528, 0xe529, 0xe52a, |
275 | | 0xe52b, 0xe52c, 0xe52d, 0xe52e, |
276 | | // F050 |
277 | | 0xe52f, 0xe530, 0xe531, 0xe532, |
278 | | 0xe533, 0xe534, 0xe535, 0xe536, |
279 | | 0xe537, 0x203D, 0x203D, 0x203D, |
280 | | 0xe53b, 0xe53c, 0xe53d, 0xe53e, |
281 | | // F060 |
282 | | 0xe53f, 0xe540, 0xe541, 0xe542, |
283 | | 0xe543, 0xe544, 0xe545, 0xe546, |
284 | | 0xe547, 0x24EA, 0x2460, 0x2461, |
285 | | 0x2462, 0x2463, 0x2464, 0x2465, |
286 | | // F070 |
287 | | 0x2466, 0x2467, 0x2468, 0x2469, |
288 | | 0xE453, 0x278A, 0x278B, 0x278C, |
289 | | 0x278D, 0x278E, 0x278F, 0x2790, |
290 | | 0x2791, 0x2792, 0x2793, 0, |
291 | | // F080 |
292 | | 0x2609, 0x25cb, 0x263d, 0x263e, |
293 | | 0xe55d, 0xe55e, 0xe55f, 0xe560, |
294 | | 0xe561, 0xe562, 0xe563, 0xe564, |
295 | | 0xe565, 0xe566, 0xe567, 0xe568, |
296 | | // F090 |
297 | | 0xe569, 0xe56a, 0xe56b, 0xe56c, |
298 | | 0xe56d, 0xe56e, 0xe56f, 0xe570, |
299 | | 0xe571, 0xe572, 0xe573, 0xe574, |
300 | | 0xe575, 0, 0, 0xe578, |
301 | | // F0a0 |
302 | | 0xe579, 0xe57a, 0xe57b, 0xe57c, |
303 | | 0, 0, 0, 0, |
304 | | 0, 0, 0, 0xe584, |
305 | | 0xe585, 0, 0xe586, 0, |
306 | | // F0b0 |
307 | | 0, 0, 0, 0, |
308 | | 0xe58d, 0xe58e, 0xe58f, 0xe590, |
309 | | 0, 0, 0xe593, 0xe594, |
310 | | 0, 0, 0, 0xe587, |
311 | | // F0c0 |
312 | | 0xe599, 0xe59a, 0xe59b, 0xe59c, |
313 | | 0xe59d, 0xe59e, 0xe59f, 0xe5a0, |
314 | | 0xe5a1, 0xe5a2, 0xe5a3, 0xe5a4, |
315 | | 0xe5a5, 0xe5a6, 0xe5a7, 0xe5a8, |
316 | | // F0d0 |
317 | | 0xe5a9, 0xe5aa, 0xe5ab, 0xe5ac, |
318 | | 0xe5ad, 0xe5ae, 0xe5af, 0xe5b0, |
319 | | 0xe5b1, 0xe5b2, 0xe5b3, 0xe5b4, |
320 | | 0xe5b5, 0xe5b6, 0xe5b7, 0xe5b8, |
321 | | // F0e0 |
322 | | 0xe5b9, 0xe5ba, 0xe5bb, 0xe5bc, |
323 | | 0xe5bd, 0xe5be, 0xe5bf, 0xe5c0, |
324 | | 0xe5c1, 0xe5c2, 0xe5c3, 0xe5c4, |
325 | | 0xe5c5, 0xe5c6, 0xe5c7, 0xe5c8, |
326 | | // F0f0 |
327 | | 0xe5c9, 0, 0xe5cb, 0xe477, |
328 | | 0xe5cd, 0xe5ce, 0xe5cf, 0xe5d0, |
329 | | 0x203b, 0x2042, 0, 0, |
330 | | 0, 0, 0, 0 |
331 | | }; |
332 | | |
333 | | const sal_Unicode aWingDings3Tab[224] = |
334 | | { |
335 | | // F020 |
336 | | 0x0020, 0xe600, 0xe601, 0xe602, |
337 | | 0xe603, 0x2196, 0xe604, 0x2199, |
338 | | 0xe605, 0xe606, 0xe607, 0xe608, |
339 | | 0xe609, 0xe60a, 0xe60b, 0x21de, |
340 | | // F030 |
341 | | 0x21df, 0xe60c, 0xe60d, 0xe60e, |
342 | | 0x21e2, 0x21e1, 0x21e3, 0x21af, |
343 | | 0x21b5, 0xe60f, 0xe610, 0xe611, |
344 | | 0xe612, 0xe613, 0xe614, 0xe615, |
345 | | // F040 |
346 | | 0xe616, 0xe617, 0xe618, 0xe619, |
347 | | 0x21c4, 0x21c5, 0xe61a, 0xe61b, |
348 | | 0x21c7, 0x21c9, 0x21c8, 0x21ca, |
349 | | 0x21b6, 0x21b7, 0xe61c, 0xe61d, |
350 | | // F050 |
351 | | 0x21bb, 0x21ba, 0xe61e, 0x2324, |
352 | | 0x2303, 0x2325, 0x2334, 0xe61f, |
353 | | 0x21ea, 0xe620, 0xe621, 0xe622, |
354 | | 0xe623, 0xe624, 0xe625, 0xe626, |
355 | | // F060 |
356 | | 0xe627, 0xe628, 0xe629, 0xe62a, |
357 | | 0xe62b, 0xe62c, 0xe62d, 0xe62e, |
358 | | 0xe62f, 0xe630, 0xe631, 0xe632, |
359 | | 0xe633, 0xe634, 0xe635, 0xe636, |
360 | | // F070 |
361 | | 0xe637, 0xe638, 0x25b3, 0x25bd, |
362 | | 0x25c0, 0x25b6, 0x25c1, 0x25b7, |
363 | | 0x25e3, 0xe639, 0x25e4, 0x25e5, |
364 | | 0x25c2, 0x25b8, 0xe63a, 0, |
365 | | // F080 |
366 | | 0xe63b, 0xe63c, 0xe63d, 0xe63e, |
367 | | 0xe63f, 0xe640, 0xe641, 0xe642, |
368 | | 0xe643, 0xe644, 0xe645, 0xe646, |
369 | | 0xe647, 0xe648, 0xe649, 0xe64a, |
370 | | // F090 |
371 | | 0xe64b, 0xe64c, 0xe64d, 0xe64e, |
372 | | 0xe64f, 0xe650, 0xe651, 0xe652, |
373 | | 0xe653, 0xe654, 0xe655, 0xe656, |
374 | | 0xe657, 0xe658, 0xe659, 0xe65a, |
375 | | // F0a0 |
376 | | 0xe65b, 0xe65c, 0xe65d, 0xe65e, |
377 | | 0xe65f, 0xe660, 0xe661, 0xe662, |
378 | | 0xe663, 0xe664, 0xe665, 0xe666, |
379 | | 0xe667, 0xe668, 0xe669, 0xe66a, |
380 | | // F0b0 |
381 | | 0xe66b, 0xe66c, 0xe66d, 0xe66e, |
382 | | 0xe66f, 0xe670, 0xe671, 0xe672, |
383 | | 0xe673, 0xe674, 0xe675, 0xe676, |
384 | | 0xe677, 0xe678, 0xe679, 0xe67a, |
385 | | // F0c0 |
386 | | 0xe67b, 0xe67c, 0xe67d, 0xe67e, |
387 | | 0xe67f, 0xe680, 0xe681, 0xe682, |
388 | | 0xe683, 0xe684, 0xe685, 0xe686, |
389 | | 0xe687, 0xe688, 0xe689, 0xe68a, |
390 | | // F0d0 |
391 | | 0xe68b, 0xe68c, 0xe68d, 0xe68e, |
392 | | 0xe68f, 0xe690, 0xe691, 0xe692, |
393 | | 0xe693, 0xe694, 0xe695, 0xe696, |
394 | | 0xe697, 0xe698, 0xe699, 0xe69a, |
395 | | // F0e0 |
396 | | 0xe69b, 0xe69c, 0xe69d, 0xe69e, |
397 | | 0xe69f, 0xe6a0, 0xe6a1, 0xe6a2, |
398 | | 0xe6a3, 0xe6a4, 0xe6a5, 0xe6a6, |
399 | | 0xe6a7, 0xe6a8, 0xe6a9, 0xe6aa, |
400 | | // F0f0 |
401 | | 0xe6ab, 0, 0, 0, |
402 | | 0, 0, 0, 0, |
403 | | 0, 0, 0, 0, |
404 | | 0, 0, 0, 0 |
405 | | }; |
406 | | |
407 | | const sal_Unicode aWebDingsTab[224] = |
408 | | { |
409 | | // F020 |
410 | | 0x0020, 0xe300, 0xe301, 0xe302, |
411 | | 0xe303, 0xe304, 0xe305, 0xe306, |
412 | | 0xe307, 0xe308, 0xe309, 0xe30a, |
413 | | 0xe30b, 0xe30c, 0xe30d, 0xe30e, |
414 | | // F030 |
415 | | 0xe30f, 0xe310, 0xe311, 0xe312, |
416 | | 0xe313, 0xe314, 0xe315, 0xe316, |
417 | | 0xe317, 0xe318, 0xe319, 0xe31a, |
418 | | 0xe31b, 0xe31c, 0xe31d, 0xe31e, |
419 | | // F040 |
420 | | 0xe31f, 0xe320, 0xe321, 0xe322, |
421 | | 0xe323, 0xe324, 0xe325, 0xe326, |
422 | | 0xe327, 0xe328, 0xe329, 0xe32a, |
423 | | 0xe32b, 0xe32c, 0xe32d, 0xe32e, |
424 | | // F050 |
425 | | 0xe32f, 0xe330, 0xe331, 0xe332, |
426 | | 0xe333, 0xe334, 0xe335, 0xe336, |
427 | | 0xe337, 0xe338, 0xe339, 0xe33a, |
428 | | 0xe33b, 0xe33c, 0xe33d, 0xe33e, |
429 | | // F060 |
430 | | 0xe33f, 0xe340, 0xe341, 0xe342, |
431 | | 0xe343, 0xe344, 0xe345, 0xe346, |
432 | | 0xe347, 0xe348, 0xe349, 0xe34a, |
433 | | 0xe34b, 0xe34c, 0xe34d, 0xe34e, |
434 | | // F070 |
435 | | 0xe34f, 0xe350, 0xe351, 0xe352, |
436 | | 0xe353, 0xe354, 0xe355, 0xe356, |
437 | | 0xe357, 0xe358, 0xe359, 0xe35a, |
438 | | 0xe35b, 0xe35c, 0xe35d, 0, |
439 | | // F080 |
440 | | 0xe35e, 0xe35f, 0xe360, 0xe361, |
441 | | 0xe362, 0xe363, 0xe364, 0xe365, |
442 | | 0xe366, 0xe367, 0xe368, 0xe369, |
443 | | 0xe36a, 0xe36b, 0xe36c, 0xe36d, |
444 | | // F090 |
445 | | 0xe36e, 0xe36f, 0xe370, 0xe371, |
446 | | 0xe372, 0xe373, 0xe374, 0xe375, |
447 | | 0xe376, 0xe377, 0xe378, 0xe379, |
448 | | 0xe37a, 0xe37b, 0xe37c, 0xe37d, |
449 | | // F0a0 |
450 | | 0xe37e, 0xe37f, 0xe380, 0xe381, |
451 | | 0xe382, 0xe383, 0xe384, 0xe385, |
452 | | 0xe386, 0xe387, 0xe388, 0xe389, |
453 | | 0xe38a, 0xe38b, 0xe38c, 0xe38d, |
454 | | // F0b0 |
455 | | 0xe38e, 0xe38f, 0xe390, 0xe391, |
456 | | 0xe392, 0xe393, 0xe394, 0xe395, |
457 | | 0xe396, 0xe397, 0xe398, 0xe399, |
458 | | 0xe39a, 0xe39b, 0xe39c, 0xe39d, |
459 | | // F0c0 |
460 | | 0xe39e, 0xe39f, 0xe3a0, 0xe3a1, |
461 | | 0xe3a2, 0xe3a3, 0xe3a4, 0xe3a5, |
462 | | 0xe3a6, 0xe3a7, 0xe3a8, 0xe3a9, |
463 | | 0xe3aa, 0xe3ab, 0xe3ac, 0xe3ad, |
464 | | // F0d0 |
465 | | 0xe3ae, 0xe3af, 0xe3b0, 0xe3b1, |
466 | | 0xe3b2, 0xe3b3, 0xe3b4, 0xe3b5, |
467 | | 0xe3b6, 0xe3b7, 0xe3b8, 0xe3b9, |
468 | | 0xe3ba, 0xe3bb, 0xe3bc, 0xe3bd, |
469 | | // F0e0 |
470 | | 0xe3be, 0xe3bf, 0xe3c0, 0xe3c1, |
471 | | 0xe3c2, 0xe3c3, 0xe3c4, 0xe3c5, |
472 | | 0xe3c6, 0xe3c7, 0xe3c8, 0xe3c9, |
473 | | 0xe3ca, 0xe3cb, 0xe3cd, 0xe3ce, |
474 | | // F0f0 |
475 | | 0xe3cf, 0xe3d0, 0xe3d1, 0xe3d2, |
476 | | 0xe3d3, 0xe3d4, 0xe3d5, 0xe3d6, |
477 | | 0xe3d7, 0xe3d8, 0xe3d9, 0xe3da, |
478 | | 0xe3db, 0xe3dc, 0xe3dd, 0xe3de |
479 | | }; |
480 | | |
481 | | // See http://www.iana.org/assignments/character-sets/character-sets.xml |
482 | | // See ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/ADOBE/symbol.txt |
483 | | |
484 | | const sal_Unicode aAdobeSymbolTab[224] = |
485 | | { |
486 | | //TODO: |
487 | | // F020 |
488 | | 0x0020, 0xe100, 0xe101, 0xe102, |
489 | | 0xe103, 0xe104, 0xe16a, 0xe105, |
490 | | 0xe106, 0xe107, 0xe108, 0xe109, |
491 | | 0xe10a, 0xe10b, 0xe10c, 0xe10d, |
492 | | // F030 |
493 | | 0x0030, 0x0031, 0x0032, 0x0033, |
494 | | 0x0034, 0x0035, 0x0036, 0x0037, |
495 | | 0x0038, 0x0039, 0xe10e, 0xe10f, |
496 | | 0xe110, 0xe111, 0xe112, 0x003f, |
497 | | // F040 |
498 | | 0xe113, 0x0391, 0x0392, 0x03a7, |
499 | | 0x0394, 0x0395, 0x03a6, 0x0393, |
500 | | 0x0397, 0x0399, 0x03d1, 0x039a, |
501 | | 0x039b, 0x039c, 0x039d, 0x039f, |
502 | | // F050 |
503 | | 0x03a0, 0x0398, 0x03a1, 0x03a3, |
504 | | 0x03a4, 0x03a5, 0x03c2, 0x03a9, |
505 | | 0x039e, 0x03a8, 0x0396, 0xe114, |
506 | | 0x2234, 0xe115, 0xe116, 0x005f, |
507 | | // F060 |
508 | | 0x00af, 0x03b1, 0x03b2, 0x03c7, |
509 | | 0x03b4, 0x03b5, 0x03d5, 0x03b3, |
510 | | 0x03b7, 0x03b9, 0x03c6, 0x03ba, |
511 | | 0x03bb, 0x03bc, 0x03bd, 0x03bf, |
512 | | // F070 |
513 | | 0x03c0, 0x03b8, 0x03c1, 0x03c3, |
514 | | 0x03c4, 0x03c5, 0x03d6, 0x03c9, |
515 | | 0x03be, 0x03c8, 0x03b6, 0xe117, |
516 | | 0x007c, 0xe118, 0xe119, 0, |
517 | | // F080 |
518 | | 0, 0, 0, 0, |
519 | | 0, 0, 0, 0, |
520 | | 0, 0, 0, 0, |
521 | | 0, 0, 0, 0, |
522 | | // F090 |
523 | | 0, 0, 0, 0, |
524 | | 0, 0, 0, 0, |
525 | | 0, 0, 0, 0, |
526 | | 0, 0, 0, 0, |
527 | | // F0a0 |
528 | | 0xe11a, 0x03d2, 0x2032, 0xe11b, |
529 | | 0x2215, 0xe11c, 0xe11d, 0xe11e, |
530 | | 0x2666, 0xe11f, 0xe120, 0xe121, |
531 | | 0xe122, 0xe123, 0xe124, 0xe125, |
532 | | // F0b0 |
533 | | 0xe126, 0xe127, 0x2033, 0xe128, |
534 | | 0xe129, 0xe12a, 0xe12b, 0xe12c, |
535 | | 0xe12d, 0xe12e, 0xe12f, 0xe130, |
536 | | 0xe131, 0x2502, 0x2500, 0x21b2, |
537 | | // F0c0 |
538 | | 0xe132, 0xe133, 0xe134, 0xe135, |
539 | | 0xe136, 0xe137, 0xe138, 0xe139, |
540 | | 0xe13a, 0xe13b, 0xe13c, 0xe13d, |
541 | | 0xe13e, 0xe13f, 0xe140, 0xe141, |
542 | | // F0d0 |
543 | | 0x2220, 0xe142, 0x00ae, 0x00a9, |
544 | | 0xe143, 0xe144, 0xe145, 0xe146, |
545 | | 0xe147, 0xe148, 0xe149, 0xe14a, |
546 | | 0xe14b, 0x21d1, 0xe14c, 0x21d3, |
547 | | // F0e0 |
548 | | 0x25ca, 0xe14d, 0xe14e, 0xe14f, |
549 | | 0xe150, 0xe151, 0xf8eb, 0xf8ec, |
550 | | 0xf8ed, 0xf8ee, 0xf8ef, 0xf8f0, |
551 | | 0xf8f1, 0xf8f2, 0xf8f3, 0xf8f4, |
552 | | // F0f0 |
553 | | 0, 0x232a, 0x222b, 0x2320, |
554 | | 0xf8f5, 0x2321, 0xf8f6, 0xf8f7, |
555 | | 0xf8f8, 0xf8f9, 0xf8fa, 0xf8fb, |
556 | | 0xf8fc, 0xf8fd, 0xf8fe, 0, |
557 | | }; |
558 | | |
559 | | const sal_Unicode aMonotypeSortsTab[224] = |
560 | | { |
561 | | // F020 |
562 | | 0x0020, 0x2701, 0xe200, 0x2703, |
563 | | 0x2704, 0xe201, 0x2706, 0xe202, |
564 | | 0xe203, 0xe203, 0xe204, 0xe205, |
565 | | 0x270c, 0xe206, 0xe207, 0xe208, |
566 | | // F030 |
567 | | 0x2710, 0x2711, 0x2712, 0xe209, |
568 | | 0xe20a, 0x2715, 0x2716, 0xe20b, |
569 | | 0xe20c, 0xe20d, 0xe20e, 0xe20f, |
570 | | 0xe210, 0x271d, 0x271e, 0x271f, |
571 | | // F040 |
572 | | 0x2720, 0xe211, 0xe212, 0xe213, |
573 | | 0xe214, 0xe215, 0x2726, 0x2727, |
574 | | 0x2605, 0x2729, 0x272a, 0xe216, |
575 | | 0xe217, 0xe218, 0xe219, 0xe21a, |
576 | | // F050 |
577 | | 0xe21b, 0xe21c, 0x2732, 0xe21d, |
578 | | 0xe21e, 0xe21f, 0xe220, 0xe221, |
579 | | 0xe222, 0xe223, 0x273a, 0x273b, |
580 | | 0x273c, 0x273d, 0x273e, 0xe224, |
581 | | // F060 |
582 | | 0x2740, 0x2741, 0x2742, 0x2743, |
583 | | 0xe225, 0x2745, 0x2746, 0x2747, |
584 | | 0x2748, 0x2749, 0x274a, 0x274b, |
585 | | 0xe226, 0xe227, 0xe228, 0xe229, |
586 | | // F070 |
587 | | 0xe22a, 0xe22b, 0xe22c, 0x25b2, |
588 | | 0x25bc, 0xe22d, 0xe22e, 0xe22f, |
589 | | 0x2758, 0xe230, 0x275a, 0x275b, |
590 | | 0x275c, 0x275d, 0x275e, 0, |
591 | | // F080 |
592 | | 0xe231, 0xe232, 0xe233, 0xe234, |
593 | | 0xe235, 0xe236, 0xe237, 0xe238, |
594 | | 0xe239, 0xe23a, 0xe23b, 0xe23c, |
595 | | 0xe23d, 0xe23e, 0, 0, |
596 | | // F090 |
597 | | 0, 0, 0, 0, |
598 | | 0, 0, 0, 0, |
599 | | 0, 0, 0, 0, |
600 | | 0, 0, 0, 0, |
601 | | // F0a0 |
602 | | 0, 0xe23f, 0xe240, 0x2763, |
603 | | 0x2764, 0x2765, 0x2766, 0x2767, |
604 | | 0xe241, 0xe242, 0xe243, 0xe244, |
605 | | 0x2460, 0x2461, 0x2462, 0x2463, |
606 | | // F0b0 |
607 | | 0x2464, 0x2465, 0x2466, 0x2467, |
608 | | 0x2468, 0x2469, 0x2776, 0x2777, |
609 | | 0x2778, 0x2779, 0x277a, 0x277b, |
610 | | 0x277c, 0x277d, 0x277e, 0x277f, |
611 | | // F0c0 |
612 | | 0xe245, 0xe246, 0xe247, 0xe248, |
613 | | 0xe249, 0xe24a, 0xe24b, 0xe24c, |
614 | | 0xe24d, 0xe24e, 0xe24f, 0xe250, |
615 | | 0xe251, 0xe252, 0xe253, 0xe254, |
616 | | // F0d0 |
617 | | 0xe255, 0xe256, 0xe257, 0xe258, |
618 | | 0xe259, 0xe25a, 0xe25b, 0xe25c, |
619 | | 0xe25d, 0x2799, 0xe25e, 0x279b, |
620 | | 0x279c, 0x279d, 0x279e, 0x279f, |
621 | | // F0e0 |
622 | | 0x27a0, 0x27a1, 0xe25f, 0x27a3, |
623 | | 0x27a4, 0x27a5, 0x27a6, 0x27a7, |
624 | | 0x27a8, 0x27a9, 0x27aa, 0x27ab, |
625 | | 0x27ac, 0x27ad, 0x27ae, 0x27af, |
626 | | // F0f0 |
627 | | 0, 0x27b1, 0xe260, 0x27b3, |
628 | | 0x27b4, 0x27b5, 0x27b6, 0x27b7, |
629 | | 0xe261, 0x27b9, 0x27ba, 0x27bb, |
630 | | 0x27bc, 0x27bd, 0x27be, 0, |
631 | | }; |
632 | | |
633 | | const sal_Unicode aMTExtraTab[224] = |
634 | | { |
635 | | // F020 |
636 | | 0x0020, 0, 0, 0x0300, |
637 | | 0x0302, 0x0303, 0x0307, 0, |
638 | | 0x2323, 0x2322, 0, 0, |
639 | | 0, 0, 0, 0, |
640 | | // F030 |
641 | | 0, 0xEC00, 0xEC01, 0xEC02, |
642 | | 0xEC03, 0xEC0B, 0xEC04, 0xEC05, |
643 | | 0xEC06, 0, 0x223C, 0x2243, |
644 | | 0x22B2, 0x226A, 0x22B3, 0x226B, |
645 | | // F040 |
646 | | 0x225C, 0x2259, 0x2250, 0x2210, |
647 | | 0x019B, 0xEC0E, 0xEC0F, 0xEC10, |
648 | | 0xEC11, 0x2229, 0x2127, 0x2026, |
649 | | 0x22EF, 0x22EE, 0x22F0, 0x22F1, |
650 | | // F050 |
651 | | 0x2225, 0x2235, 0x2221, 0x2222, |
652 | | 0, 0x222A, 0x25B3, 0x25A1, |
653 | | 0x25AD, 0x25B1, 0x2197, 0x2199, |
654 | | 0xEB05, 0x2198, 0x2196, 0xEB06, |
655 | | // F060 |
656 | | 0x2035, 0x21A6, 0x2195, 0x21D5, |
657 | | 0x25CB, 0x2299, 0x227B, 0xE98F, |
658 | | 0x210F, 0xEE00, 0xEE01, 0, |
659 | | 0x2113, 0x2213, 0xFFFD, 0x2218, |
660 | | // F070 |
661 | | 0x227A, 0xEB1A, 0x20D7, 0x20D6, |
662 | | 0x20E1, 0xEB00, 0x20D1, 0x20D0, |
663 | | 0xEB19, 0, 0, 0xFE38, |
664 | | 0xEC0C, 0xFE37, 0xEC0D, 0, |
665 | | // F080 |
666 | | 0x21C4, 0xEB01, 0xEB02, 0x21CC, |
667 | | 0xEB03, 0xEB04, 0x21C0, 0x21BD, |
668 | | 0xF8E7, 0, 0, 0, |
669 | | 0, 0, 0, 0, |
670 | | // F090 |
671 | | 0, 0, 0, 0, |
672 | | 0, 0, 0, 0, |
673 | | 0, 0, 0, 0, |
674 | | 0, 0, 0, 0, |
675 | | // F0a0 |
676 | | 0, 0x211D, 0x2124, 0x2102, |
677 | | 0x211A, 0x2115, 0, 0x301A, |
678 | | 0x301B, 0xEC22, 0xEC23, 0xEC24, |
679 | | 0xEC25, 0xEC26, 0xEC27, 0, |
680 | | // F0b0 |
681 | | 0xEE04, 0xEE05, 0xEE06, 0, |
682 | | 0, 0xEE07, 0xEE08, 0xEE09, |
683 | | 0, 0, 0xEE0A, 0xEE0B, |
684 | | 0xEE0C, 0, 0, 0, |
685 | | // F0c0 |
686 | | 0xEE0D, 0xEE0E, 0xEE0F, 0xEE10, |
687 | | 0, 0, 0, 0, |
688 | | 0, 0, 0, 0, |
689 | | 0, 0, 0, 0, |
690 | | // F0d0 |
691 | | 0, 0xEE11, 0xEE12, 0xEE13, |
692 | | 0, 0xEE15, 0xEE16, 0, |
693 | | 0, 0, 0, 0, |
694 | | 0, 0, 0, 0, |
695 | | // F0e0 |
696 | | 0, 0, 0, 0, |
697 | | 0, 0, 0, 0xF8FF, |
698 | | 0x0160, 0x00DD, 0x00DE, 0x00D0, |
699 | | 0x0161, 0x00FD, 0x00FE, 0x00F0, |
700 | | // F0f0 |
701 | | 0xFB01, 0xFB02, 0x0131, 0x00B9, |
702 | | 0x00B2, 0x00B3, 0x00BD, 0x00BC, |
703 | | 0x00BE, 0x2044, 0x00A6, 0x02DD, |
704 | | 0x02D8, 0x02C7, 0x02DA, 0x02DB, |
705 | | }; |
706 | | |
707 | | const sal_Unicode aAdobeSymbolToAppleSymbolTab[224] = |
708 | | { |
709 | | // F020 |
710 | | 0x0020, 0x0021, 0x2200, 0x0023, |
711 | | 0x2203, 0x0025, 0x0026, 0x220D, |
712 | | 0x0028, 0x0029, 0x2217, 0x002B, |
713 | | 0x002C, 0x2212, 0x002E, 0x002F, |
714 | | // F030 |
715 | | 0x0030, 0x0031, 0x0032, 0x0033, |
716 | | 0x0034, 0x0035, 0x0036, 0x0037, |
717 | | 0x0038, 0x0039, 0x003A, 0x003B, |
718 | | 0x003C, 0x003D, 0x003E, 0x003F, |
719 | | // F040 |
720 | | 0x2245, 0x0391, 0x0392, 0x03A7, |
721 | | 0x0394, 0x0395, 0x03A6, 0x0393, |
722 | | 0x0397, 0x0399, 0x03D1, 0x039A, |
723 | | 0x039B, 0x039C, 0x039D, 0x039F, |
724 | | // F050 |
725 | | 0x03A0, 0x0398, 0x03A1, 0x03A3, |
726 | | 0x03A4, 0x03A5, 0x03C2, 0x03A9, |
727 | | 0x039E, 0x03A8, 0x0396, 0x005B, |
728 | | 0x2234, 0x005D, 0x22A5, 0x005F, |
729 | | // F060 |
730 | | 0xF8E5, 0x03B1, 0x03B2, 0x03C7, |
731 | | 0x03B4, 0x03B5, 0x03C6, 0x03B3, |
732 | | 0x03B7, 0x03B9, 0x03D5, 0x03BA, |
733 | | 0x03BB, 0x03BC, 0x03BD, 0x03BF, |
734 | | // F070 |
735 | | 0x03C0, 0x03B8, 0x03C1, 0x03C3, |
736 | | 0x03C4, 0x03C5, 0x03D6, 0x03C9, |
737 | | 0x03BE, 0x03C8, 0x03B6, 0x007B, |
738 | | 0x007C, 0x007D, 0x223C, 0x007F, |
739 | | // F080 |
740 | | 0x0080, 0x0081, 0x0082, 0x0083, |
741 | | 0x0084, 0x0085, 0x0086, 0x0087, |
742 | | 0x0088, 0x0089, 0x008A, 0x008B, |
743 | | 0x008C, 0x008D, 0x008E, 0x008F, |
744 | | // F090 |
745 | | 0x0090, 0x0091, 0x0092, 0x0093, |
746 | | 0x0094, 0x0095, 0x0096, 0x0097, |
747 | | 0x0098, 0x0099, 0x009A, 0x009B, |
748 | | 0x009C, 0x009D, 0x009E, 0x009F, |
749 | | // F0a0 |
750 | | 0x20AC, 0x03D2, 0x2032, 0x2264, |
751 | | 0x2044, 0x221E, 0x0192, 0x2663, |
752 | | 0x2666, 0x2665, 0x2660, 0x2194, |
753 | | 0x2190, 0x2191, 0x2192, 0x2193, |
754 | | // F0b0 |
755 | | 0x00B0, 0x00B1, 0x2033, 0x2065, |
756 | | 0x00D7, 0x221D, 0x2202, 0x2022, |
757 | | 0x00F7, 0x2260, 0x2261, 0x2248, |
758 | | 0x2026, 0x23D0, 0x23AF, 0x21B5, |
759 | | // F0c0 |
760 | | 0x2135, 0x2111, 0x211C, 0x2118, |
761 | | 0x2297, 0x2295, 0x2205, 0x2229, |
762 | | 0x222A, 0x2283, 0x2287, 0x2284, |
763 | | 0x2282, 0x2286, 0x2208, 0x2209, |
764 | | // F0d0 |
765 | | 0x2220, 0x2207, 0x00AE, 0x00A9, |
766 | | 0x2122, 0x220F, 0x221A, 0x22C5, |
767 | | 0x00AC, 0x2227, 0x2228, 0x21D4, |
768 | | 0x21D0, 0x21D1, 0x21D2, 0x21D3, |
769 | | // F0e0 |
770 | | 0x25CA, 0x3008, 0x00AE, 0x00A9, |
771 | | 0x2122, 0x2211, 0x239B, 0x239C, |
772 | | 0x239D, 0x23A1, 0x23A2, 0x23A3, |
773 | | 0x23A7, 0x23A8, 0x23A9, 0x23AA, |
774 | | // F0f0 |
775 | | 0xF8FF, 0x3009, 0x222B, 0x2320, |
776 | | 0x23AE, 0x2321, 0x239E, 0x239F, |
777 | | 0x23A0, 0x23A4, 0x23A5, 0x23A6, |
778 | | 0x23AB, 0x23AC, 0x23AD, 0x00FF |
779 | | }; |
780 | | |
781 | | static sal_Unicode ImplStarSymbolToStarBats( sal_Unicode c ) |
782 | 0 | { |
783 | 0 | switch ( c ) |
784 | 0 | { |
785 | 0 | case 0x00A2: c = 0xF0E0; break; |
786 | 0 | case 0x00A4: c = 0xF0E1; break; |
787 | 0 | case 0x00A5: c = 0xF0E2; break; |
788 | 0 | case 0x00A7: c = 0xF0A7; break; |
789 | 0 | case 0x00AB: c = 0xF0AB; break; |
790 | 0 | case 0x00B6: c = 0xF0DE; break; |
791 | 0 | case 0x00BB: c = 0xF0BB; break; |
792 | | |
793 | 0 | case 0x0152: c = 0xF08C; break; |
794 | 0 | case 0x0153: c = 0xF09C; break; |
795 | 0 | case 0x0160: c = 0xF08A; break; |
796 | 0 | case 0x0161: c = 0xF09A; break; |
797 | 0 | case 0x0178: c = 0xF09F; break; |
798 | 0 | case 0x017D: c = 0xF08E; break; |
799 | 0 | case 0x017E: c = 0xF09E; break; |
800 | | |
801 | 0 | case 0x0192: c = 0xF083; break; |
802 | 0 | case 0x02C6: c = 0xF088; break; |
803 | 0 | case 0x02DC: c = 0xF098; break; |
804 | 0 | case 0x2013: c = 0xF096; break; |
805 | 0 | case 0x2014: c = 0xF097; break; |
806 | 0 | case 0x2018: c = 0xF091; break; |
807 | | |
808 | 0 | case 0x2019: c = 0xF092; break; |
809 | 0 | case 0x201A: c = 0xF082; break; |
810 | 0 | case 0x201C: c = 0xF093; break; |
811 | 0 | case 0x201D: c = 0xF094; break; |
812 | 0 | case 0x201E: c = 0xF084; break; |
813 | 0 | case 0x2020: c = 0xF086; break; |
814 | | |
815 | 0 | case 0x2021: c = 0xF087; break; |
816 | 0 | case 0x2022: c = 0xF095; break; |
817 | 0 | case 0x2026: c = 0xF085; break; |
818 | 0 | case 0x2030: c = 0xF089; break; |
819 | 0 | case 0x2039: c = 0xF08B; break; |
820 | 0 | case 0x203A: c = 0xF09B; break; |
821 | | |
822 | 0 | case 0x20A1: c = 0xF0E4; break; |
823 | 0 | case 0x20A2: c = 0xF0E5; break; |
824 | 0 | case 0x20A3: c = 0xF0E6; break; |
825 | 0 | case 0x20A4: c = 0xF0E7; break; |
826 | 0 | case 0x20A8: c = 0xF0EA; break; |
827 | 0 | case 0x20A9: c = 0xF0E8; break; |
828 | 0 | case 0x20AB: c = 0xF0E9; break; |
829 | 0 | case 0x20AC: c = 0xF080; break; |
830 | | |
831 | 0 | case 0x2122: c = 0xF099; break; |
832 | 0 | case 0x2190: c = 0xF0B7; break; |
833 | 0 | case 0x2191: c = 0xF0B8; break; |
834 | 0 | case 0x2192: c = 0xF0B5; break; |
835 | 0 | case 0x2193: c = 0xF0B6; break; |
836 | 0 | case 0x2194: c = 0xF0D8; break; |
837 | 0 | case 0x2195: c = 0xF0D9; break; |
838 | | |
839 | 0 | case 0x21E4: c = 0xF0B4; break; |
840 | 0 | case 0x21E5: c = 0xF0B3; break; |
841 | 0 | case 0x21E6: c = 0xF0A4; break; |
842 | 0 | case 0x21E7: c = 0xF0B2; break; |
843 | 0 | case 0x21E8: c = 0xF0AF; break; |
844 | 0 | case 0x21E9: c = 0xF0A3; break; |
845 | | |
846 | 0 | case 0x25A0: c = 0xF024; break; |
847 | 0 | case 0x25A1: c = 0xF025; break; |
848 | 0 | case 0x25B4: c = 0xF0C5; break; |
849 | 0 | case 0x25B5: c = 0xF0C7; break; |
850 | 0 | case 0x25BE: c = 0xF0C4; break; |
851 | 0 | case 0x25BF: c = 0xF0C6; break; |
852 | 0 | case 0x25C6: c = 0xF043; break; |
853 | 0 | case 0x25CF: c = 0xF022; break; |
854 | 0 | case 0x25D7: c = 0xF0D0; break; |
855 | | |
856 | 0 | case 0x260E: c = 0xF074; break; |
857 | 0 | case 0x2611: c = 0xF034; break; |
858 | 0 | case 0x2612: c = 0xF033; break; |
859 | 0 | case 0x261B: c = 0xF036; break; |
860 | 0 | case 0x261E: c = 0xF07D; break; |
861 | 0 | case 0x2639: c = 0xF0AD; break; |
862 | 0 | case 0x263A: c = 0xF021; break; |
863 | | |
864 | 0 | case 0x2702: c = 0xF0CB; break; |
865 | 0 | case 0x2708: c = 0xF0CC; break; |
866 | 0 | case 0x270D: c = 0xF07E; break; |
867 | 0 | case 0x270E: c = 0xF038; break; |
868 | | |
869 | 0 | case 0x2713: c = 0xF039; break; |
870 | 0 | case 0x2714: c = 0xF03A; break; |
871 | 0 | case 0x2717: c = 0xF04F; break; |
872 | 0 | case 0x2718: c = 0xF050; break; |
873 | 0 | case 0x2719: c = 0xF051; break; |
874 | 0 | case 0x271A: c = 0xF052; break; |
875 | 0 | case 0x271B: c = 0xF053; break; |
876 | 0 | case 0x271C: c = 0xF054; break; |
877 | | |
878 | 0 | case 0x2721: c = 0xF0CD; break; |
879 | 0 | case 0x2722: c = 0xF044; break; |
880 | 0 | case 0x2723: c = 0xF045; break; |
881 | 0 | case 0x2724: c = 0xF046; break; |
882 | 0 | case 0x2725: c = 0xF047; break; |
883 | 0 | case 0x272B: c = 0xF055; break; |
884 | 0 | case 0x272C: c = 0xF056; break; |
885 | 0 | case 0x272D: c = 0xF057; break; |
886 | 0 | case 0x272E: c = 0xF058; break; |
887 | 0 | case 0x272F: c = 0xF059; break; |
888 | | |
889 | 0 | case 0x2730: c = 0xF05A; break; |
890 | 0 | case 0x2733: c = 0xF048; break; |
891 | 0 | case 0x2734: c = 0xF049; break; |
892 | 0 | case 0x2735: c = 0xF04A; break; |
893 | 0 | case 0x2736: c = 0xF04B; break; |
894 | 0 | case 0x2737: c = 0xF04C; break; |
895 | 0 | case 0x2738: c = 0xF04D; break; |
896 | 0 | case 0x2739: c = 0xF04E; break; |
897 | 0 | case 0x273F: c = 0xF0CE; break; |
898 | | |
899 | 0 | case 0x2744: c = 0xF0CF; break; |
900 | 0 | case 0x274D: c = 0xF023; break; |
901 | 0 | case 0x274F: c = 0xF03E; break; |
902 | 0 | case 0x2750: c = 0xF03F; break; |
903 | 0 | case 0x2751: c = 0xF027; break; |
904 | 0 | case 0x2752: c = 0xF028; break; |
905 | 0 | case 0x2756: c = 0xF02C; break; |
906 | 0 | case 0x2759: c = 0xF0D1; break; |
907 | 0 | case 0x2762: c = 0xF0D4; break; |
908 | | |
909 | 0 | case 0x2780: c = 0xF068; break; |
910 | 0 | case 0x2781: c = 0xF069; break; |
911 | 0 | case 0x2782: c = 0xF06A; break; |
912 | 0 | case 0x2783: c = 0xF06B; break; |
913 | 0 | case 0x2784: c = 0xF06C; break; |
914 | 0 | case 0x2785: c = 0xF06D; break; |
915 | 0 | case 0x2786: c = 0xF06E; break; |
916 | 0 | case 0x2787: c = 0xF06F; break; |
917 | 0 | case 0x2788: c = 0xF070; break; |
918 | 0 | case 0x2789: c = 0xF071; break; |
919 | 0 | case 0x278A: c = 0xF05D; break; |
920 | 0 | case 0x278B: c = 0xF05E; break; |
921 | 0 | case 0x278C: c = 0xF05F; break; |
922 | 0 | case 0x278D: c = 0xF060; break; |
923 | 0 | case 0x278E: c = 0xF061; break; |
924 | 0 | case 0x278F: c = 0xF062; break; |
925 | | |
926 | 0 | case 0x2790: c = 0xF063; break; |
927 | 0 | case 0x2791: c = 0xF064; break; |
928 | 0 | case 0x2792: c = 0xF065; break; |
929 | 0 | case 0x2793: c = 0xF066; break; |
930 | 0 | case 0x2794: c = 0xF031; break; |
931 | 0 | case 0x2798: c = 0xF0DA; break; |
932 | 0 | case 0x279A: c = 0xF0DB; break; |
933 | | |
934 | 0 | case 0x27A2: c = 0xF02F; break; |
935 | 0 | case 0x27B2: c = 0xF035; break; |
936 | 0 | case 0x27B8: c = 0xF0DC; break; |
937 | | |
938 | 0 | case 0xE000: c = 0xF000+38; break; |
939 | 0 | case 0xE001: c = 0xF000+41; break; |
940 | 0 | case 0xE002: c = 0xF000+42; break; |
941 | 0 | case 0xE003: c = 0xF000+43; break; |
942 | 0 | case 0xE004: c = 0xF000+45; break; |
943 | 0 | case 0xE005: c = 0xF000+46; break; |
944 | 0 | case 0xE006: c = 0xF000+48; break; |
945 | 0 | case 0xE007: c = 0xF000+57; break; |
946 | | |
947 | 0 | case 0xE008: c = 0xF000+59; break; |
948 | 0 | case 0xE009: c = 0xF000+60; break; |
949 | 0 | case 0xE00a: c = 0xF000+61; break; |
950 | 0 | case 0xE00b: c = 0xF000+64; break; |
951 | 0 | case 0xE00c: c = 0xF000+65; break; |
952 | 0 | case 0xE00d: c = 0xF000+66; break; |
953 | 0 | case 0xE00e: c = 0xF000+67; break; |
954 | 0 | case 0xE00f: c = 0xF000+92; break; |
955 | | |
956 | 0 | case 0xE010: c = 0xF000+103; break; |
957 | 0 | case 0xE011: c = 0xF000+114; break; |
958 | 0 | case 0xE012: c = 0xF000+115; break; |
959 | 0 | case 0xE013: c = 0xF000+117; break; |
960 | 0 | case 0xE014: c = 0xF000+118; break; |
961 | 0 | case 0xE015: c = 0xF000+119; break; |
962 | 0 | case 0xE016: c = 0xF000+120; break; |
963 | 0 | case 0xE017: c = 0xF000+121; break; |
964 | | |
965 | 0 | case 0xE018: c = 0xF000+122; break; |
966 | 0 | case 0xE019: c = 0xF000+123; break; |
967 | 0 | case 0xE01a: c = 0xF000+124; break; |
968 | 0 | case 0xE01b: c = 0xF000+126; break; |
969 | 0 | case 0xE01c: c = 0xF000+136; break; |
970 | 0 | case 0xE01d: c = 0xF000+155; break; |
971 | 0 | case 0xE01e: c = 0xF000+165; break; |
972 | 0 | case 0xE01f: c = 0xF000+166; break; |
973 | | |
974 | 0 | case 0xE020: c = 0xF000+168; break; |
975 | 0 | case 0xE021: c = 0xF000+169; break; |
976 | 0 | case 0xE022: c = 0xF000+170; break; |
977 | 0 | case 0xE023: c = 0xF000+172; break; |
978 | 0 | case 0xE024: c = 0xF000+174; break; |
979 | 0 | case 0xE025: c = 0xF000+175; break; |
980 | 0 | case 0xE026: c = 0xF000+176; break; |
981 | 0 | case 0xE027: c = 0xF000+177; break; |
982 | | |
983 | 0 | case 0xE028: c = 0xF000+178; break; |
984 | 0 | case 0xE029: c = 0xF000+185; break; |
985 | 0 | case 0xE02a: c = 0xF000+186; break; |
986 | 0 | case 0xE02b: c = 0xF000+188; break; |
987 | 0 | case 0xE02c: c = 0xF000+189; break; |
988 | 0 | case 0xE02d: c = 0xF000+190; break; |
989 | 0 | case 0xE02e: c = 0xF000+191; break; |
990 | 0 | case 0xE02f: c = 0xF000+192; break; |
991 | | |
992 | 0 | case 0xE030: c = 0xF000+193; break; |
993 | 0 | case 0xE031: c = 0xF000+194; break; |
994 | 0 | case 0xE032: c = 0xF000+195; break; |
995 | 0 | case 0xE033: c = 0xF000+200; break; |
996 | 0 | case 0xE034: c = 0xF000+201; break; |
997 | 0 | case 0xE035: c = 0xF000+202; break; |
998 | 0 | case 0xE036: c = 0xF000+210; break; |
999 | 0 | case 0xE037: c = 0xF000+211; break; |
1000 | | |
1001 | 0 | case 0xE038: c = 0xF000+227; break; |
1002 | 0 | case 0xE039: c = 0xF000+235; break; |
1003 | 0 | case 0xE03a: c = 0xF000+255; break; |
1004 | | |
1005 | 0 | default: c = 0; break; |
1006 | 0 | } |
1007 | | |
1008 | 0 | return c; |
1009 | 0 | } |
1010 | | |
1011 | | namespace { |
1012 | | |
1013 | | enum SymbolFont |
1014 | | { |
1015 | | Symbol=1, Wingdings=2, MonotypeSorts=4, Webdings=8, Wingdings2=16, |
1016 | | Wingdings3=32, MTExtra=64, TimesNewRoman=128 |
1017 | | }; |
1018 | | |
1019 | | } |
1020 | | |
1021 | | constexpr OUString aSymbolNames[] = |
1022 | | { |
1023 | | u"Symbol"_ustr, u"Wingdings"_ustr, u"Monotype Sorts"_ustr, u"Webdings"_ustr, u"Wingdings 2"_ustr, |
1024 | | u"Wingdings 3"_ustr, u"MT Extra"_ustr, u"Times New Roman"_ustr |
1025 | | }; |
1026 | | |
1027 | | namespace { |
1028 | | |
1029 | | struct SymbolEntry |
1030 | | { |
1031 | | sal_uInt8 cIndex; |
1032 | | enum SymbolFont eFont; |
1033 | | }; |
1034 | | |
1035 | | class StarSymbolToMSMultiFontImpl : public StarSymbolToMSMultiFont |
1036 | | { |
1037 | | private: |
1038 | | ::std::multimap<sal_Unicode, SymbolEntry> maMagicMap; |
1039 | | public: |
1040 | | explicit StarSymbolToMSMultiFontImpl(); |
1041 | | OUString ConvertChar(sal_Unicode &rChar) override; |
1042 | | }; |
1043 | | |
1044 | | struct ExtraTable { sal_Unicode cStar; sal_uInt8 cMS;}; |
1045 | | |
1046 | | } |
1047 | | |
1048 | | ExtraTable const aWingDingsExtraTab[] = |
1049 | | { |
1050 | | {0x25cf, 0x6C}, {0x2714, 0xFC}, {0x2717, 0xFB}, {0x2794, 0xE8}, |
1051 | | {0x27a2, 0xD8}, {0xe000, 0x6F}, {0xe001, 0x73}, {0xe002, 0x74}, |
1052 | | {0xe003, 0x75}, {0xe004, 0x77}, {0xe005, 0xA6}, {0xe006, 0xE0}, |
1053 | | {0xe007, 0xFC}, {0xe008, 0x6C}, {0xe009, 0x6D}, {0xe00a, 0x6E}, |
1054 | | {0xe00b, 0x72}, {0xe00c, 0x75}, {0xe00d, 0x76}, {0xe00e, 0x74}, |
1055 | | {0xe00f, 0x8B}, {0xe010, 0x80}, {0xe011, 0x2B}, {0xe012, 0x3A}, |
1056 | | {0xe013, 0x5D}, {0xe014, 0x29}, {0xe015, 0x3A}, {0xe016, 0x3C}, |
1057 | | {0xe017, 0x38}, {0xe018, 0x3A}, {0xe019, 0x2A}, {0xe01a, 0x2B}, |
1058 | | {0xe01b, 0x3F}, {0xe01c, 0x9F}, {0xe01d, 0x80}, {0xe01e, 0x8B}, |
1059 | | {0xe023, 0x4A}, {0xe025, 0xF0}, {0xe026, 0xF2}, {0xe027, 0xEF}, |
1060 | | {0xe028, 0xF1}, {0xe029, 0x52}, {0xe02a, 0x29}, {0xe02b, 0xE0}, |
1061 | | {0xe02c, 0xE2}, {0xe02d, 0xDF}, {0xe02e, 0xE1}, {0xe02f, 0xAC}, |
1062 | | {0xe030, 0xAD}, {0xe031, 0xAE}, {0xe032, 0x7C}, {0xe033, 0x43}, |
1063 | | {0xe034, 0x4D}, {0xe0aa, 0x71}, {0xe422, 0x44} |
1064 | | }; |
1065 | | |
1066 | | ExtraTable const aSymbolExtraTab2[] = |
1067 | | { |
1068 | | {0x0020, 0x20}, {0x00A0, 0x20}, {0x0021, 0x21}, {0x2200, 0x22}, |
1069 | | {0x0023, 0x23}, {0x2203, 0x24}, {0x0025, 0x25}, {0x0026, 0x26}, |
1070 | | {0x220B, 0x27}, {0x0028, 0x28}, {0x0029, 0x29}, {0x2217, 0x2A}, |
1071 | | {0x002B, 0x2B}, {0x002C, 0x2C}, {0x2212, 0x2D}, {0x002E, 0x2E}, |
1072 | | {0x002F, 0x2F}, {0x003A, 0x3A}, {0x003B, 0x3B}, {0x003C, 0x3C}, |
1073 | | {0x003D, 0x3D}, {0x003E, 0x3E}, {0x2245, 0x40}, {0x2206, 0x44}, |
1074 | | {0x2126, 0x57}, {0x005B, 0x5B}, {0x005D, 0x5D}, {0x22A5, 0x5E}, |
1075 | | {0x03C6, 0x66}, {0x03D5, 0x6A}, {0x00B5, 0x6D}, {0x007B, 0x7B}, |
1076 | | {0x007C, 0x7C}, {0x007D, 0x7D}, {0x223C, 0x7E}, {0x20AC, 0xA0}, |
1077 | | {0x2032, 0xA2}, {0x2264, 0xA3}, {0x2044, 0xA4}, {0x221E, 0xA5}, |
1078 | | {0x0192, 0xA6}, {0x2663, 0xA7}, {0x2665, 0xA9}, {0x2660, 0xAA}, |
1079 | | {0x2194, 0xAB}, {0x2190, 0xAC}, {0x2191, 0xAD}, {0x2192, 0xAE}, |
1080 | | {0x2193, 0xAF}, {0x00B0, 0xB0}, {0x00B1, 0xB1}, {0x2265, 0xB3}, |
1081 | | {0x00D7, 0xB4}, {0x221D, 0xB5}, {0x2202, 0xB6}, {0x2022, 0xB7}, |
1082 | | {0x00F7, 0xB8}, {0x2260, 0xB9}, {0x2261, 0xBA}, {0x2248, 0xBB}, |
1083 | | {0x2026, 0xBC}, {0x21B5, 0xBF}, {0x2135, 0xC0}, {0x2111, 0xC1}, |
1084 | | {0x211C, 0xC2}, {0x2118, 0xC3}, {0x2297, 0xC4}, {0x2295, 0xC5}, |
1085 | | {0x2205, 0xC6}, {0x2229, 0xC7}, {0x222A, 0xC8}, {0x2283, 0xC9}, |
1086 | | {0x2287, 0xCA}, {0x2284, 0xCB}, {0x2282, 0xCC}, {0x2286, 0xCD}, |
1087 | | {0x2208, 0xCE}, {0x2209, 0xCF}, {0x2207, 0xD1}, {0x220F, 0xD5}, |
1088 | | {0x221A, 0xD6}, {0x22C5, 0xD7}, {0x00AC, 0xD8}, {0x2227, 0xD9}, |
1089 | | {0x2228, 0xDA}, {0x21D4, 0xDB}, {0x21D0, 0xDC}, {0x21D2, 0xDE}, |
1090 | | {0x2329, 0xE1}, {0x2211, 0xE5}, {0x232A, 0xF1}, {0x222B, 0xF2}, |
1091 | | {0x2320, 0xF3}, {0x2321, 0xF5}, {0x2013, 0x2D} |
1092 | | }; |
1093 | | |
1094 | | ExtraTable const aSymbolExtraTab[] = |
1095 | | { |
1096 | | {0xe021, 0xD3}, {0xe024, 0xD2}, {0xe035, 0x20}, {0xe036, 0x28}, |
1097 | | {0xe037, 0x29}, {0xe039, 0x20}, {0xe083, 0x2B}, {0xe084, 0x3C}, |
1098 | | {0xe085, 0x3E}, {0xe086, 0xA3}, {0xe087, 0xB3}, {0xe089, 0xCE}, |
1099 | | {0xe08a, 0xA6}, {0xe08c, 0xAE}, {0xe08d, 0xD6}, {0xe08e, 0xD6}, |
1100 | | {0xe08f, 0xD6}, {0xe094, 0xA2}, {0xe09e, 0x28}, {0xe09f, 0x29}, |
1101 | | {0xe0a0, 0xD0}, {0xe0a6, 0xA2}, {0xe0a7, 0x7C}, {0xe0a8, 0x2F}, |
1102 | | {0xe0ab, 0x7C}, {0xe0ac, 0x47}, {0xe0ad, 0x44}, {0xe0ae, 0x51}, |
1103 | | {0xe0af, 0x4C}, {0xe0b0, 0x58}, {0xe0b1, 0x50}, {0xe0b2, 0x53}, |
1104 | | {0xe0b3, 0x55}, {0xe0b4, 0x46}, {0xe0b5, 0x59}, {0xe0b6, 0x57}, |
1105 | | {0xe0b7, 0x61}, {0xe0b8, 0x62}, {0xe0b9, 0x67}, {0xe0ba, 0x64}, |
1106 | | {0xe0bb, 0x65}, {0xe0bc, 0x7A}, {0xe0bd, 0x68}, {0xe0be, 0x71}, |
1107 | | {0xe0bf, 0x69}, {0xe0c0, 0x6B}, {0xe0c1, 0x6C}, {0xe0c2, 0x6D}, |
1108 | | {0xe0c3, 0x6E}, {0xe0c4, 0x78}, {0xe0c5, 0x6F}, {0xe0c6, 0x70}, |
1109 | | {0xe0c7, 0x72}, {0xe0c8, 0x73}, {0xe0c9, 0x74}, {0xe0ca, 0x75}, |
1110 | | {0xe0cb, 0x66}, {0xe0cc, 0x63}, {0xe0cd, 0x79}, {0xe0ce, 0x77}, |
1111 | | {0xe0cf, 0x65}, {0xe0d0, 0x4A}, {0xe0d1, 0x76}, {0xe0d3, 0x56}, |
1112 | | {0xe0d4, 0x6A}, {0xe0d5, 0xB6}, {0xe0d6, 0x69}, {0xe0db, 0xAC}, |
1113 | | {0xe0dc, 0xAD}, {0xe0dd, 0xAF} |
1114 | | }; |
1115 | | |
1116 | | ExtraTable const aTNRExtraTab[] = |
1117 | | { |
1118 | | {0xe021, 0xA9}, |
1119 | | {0xe022, 0x40}, |
1120 | | {0xe024, 0xAE}, |
1121 | | {0xe035, 0x20}, |
1122 | | {0xe036, '('}, |
1123 | | {0xe037, ')'}, |
1124 | | {0xe039, 0x20}, |
1125 | | {0xe03a, 0x80}, |
1126 | | {0xe080, 0x89}, |
1127 | | {0xe083, '+'}, |
1128 | | {0xe084, '<'}, |
1129 | | {0xe085, '>'}, |
1130 | | {0xe0a9, '\\'} |
1131 | | }; |
1132 | | |
1133 | | StarSymbolToMSMultiFontImpl::StarSymbolToMSMultiFontImpl() |
1134 | 0 | { |
1135 | 0 | struct ConvertTable |
1136 | 0 | { |
1137 | 0 | enum SymbolFont meFont; |
1138 | 0 | const sal_Unicode* pTab; |
1139 | 0 | }; |
1140 | | |
1141 | | //In order of preference |
1142 | 0 | static const ConvertTable aConservativeTable[] = |
1143 | 0 | { |
1144 | 0 | {Symbol, aAdobeSymbolTab}, |
1145 | 0 | {Wingdings, aWingDingsTab}, |
1146 | 0 | {MonotypeSorts, aMonotypeSortsTab}, |
1147 | 0 | {Webdings, aWebDingsTab}, |
1148 | 0 | {Wingdings2, aWingDings2Tab}, |
1149 | 0 | {Wingdings3, aWingDings3Tab}, |
1150 | 0 | {MTExtra, aMTExtraTab} |
1151 | 0 | }; |
1152 | |
|
1153 | 0 | struct ExtendedConvertTable |
1154 | 0 | { |
1155 | 0 | enum SymbolFont meFont; |
1156 | 0 | const ExtraTable *mpTable; |
1157 | 0 | size_t mnSize; |
1158 | 0 | ExtendedConvertTable(SymbolFont eFont, const ExtraTable *pTable, |
1159 | 0 | size_t nSize) |
1160 | 0 | : meFont(eFont), mpTable(pTable), mnSize(nSize) {} |
1161 | 0 | }; |
1162 | | |
1163 | | //Reverse map from a given starsymbol char to exact matches in ms symbol |
1164 | | //fonts. |
1165 | 0 | for (auto const & r: aConservativeTable) |
1166 | 0 | { |
1167 | 0 | SymbolEntry aEntry; |
1168 | 0 | aEntry.eFont = r.meFont; |
1169 | 0 | for (aEntry.cIndex = 0xFF; aEntry.cIndex >= 0x20; --aEntry.cIndex) |
1170 | 0 | { |
1171 | 0 | if (sal_Unicode cChar = r.pTab[aEntry.cIndex-0x20]) |
1172 | 0 | maMagicMap.emplace(cChar, aEntry); |
1173 | 0 | } |
1174 | 0 | } |
1175 | | |
1176 | | //In order of preference |
1177 | 0 | static const ExtendedConvertTable aAggressiveTable[] = |
1178 | 0 | { |
1179 | 0 | ExtendedConvertTable(Symbol, aSymbolExtraTab2, |
1180 | 0 | sizeof(aSymbolExtraTab2)), |
1181 | 0 | ExtendedConvertTable(Symbol, aSymbolExtraTab, |
1182 | 0 | sizeof(aSymbolExtraTab)), |
1183 | 0 | ExtendedConvertTable(Wingdings, aWingDingsExtraTab, |
1184 | 0 | sizeof(aWingDingsExtraTab)), |
1185 | 0 | ExtendedConvertTable(TimesNewRoman, aTNRExtraTab, |
1186 | 0 | sizeof(aTNRExtraTab)) |
1187 | 0 | }; |
1188 | | |
1189 | | //Allow extra conversions that are not perfect, but "good enough" |
1190 | 0 | for (auto const & r: aAggressiveTable) |
1191 | 0 | { |
1192 | 0 | SymbolEntry aEntry; |
1193 | 0 | aEntry.eFont = r.meFont; |
1194 | 0 | for (int j = r.mnSize / sizeof(r.mpTable[0]) - 1; j >=0; --j) |
1195 | 0 | { |
1196 | 0 | aEntry.cIndex = r.mpTable[j].cMS; |
1197 | 0 | maMagicMap.emplace(r.mpTable[j].cStar, aEntry); |
1198 | 0 | } |
1199 | 0 | } |
1200 | 0 | } |
1201 | | |
1202 | | static const OUString & SymbolFontToString(int nResult) |
1203 | 0 | { |
1204 | 0 | const OUString *ppName = aSymbolNames; |
1205 | 0 | int nI = Symbol; |
1206 | 0 | while (nI <= nResult) |
1207 | 0 | { |
1208 | 0 | if (!(nI & nResult)) |
1209 | 0 | nI = nI << 1; |
1210 | 0 | else |
1211 | 0 | break; |
1212 | 0 | ppName++; |
1213 | 0 | } |
1214 | 0 | return *ppName; |
1215 | 0 | } |
1216 | | |
1217 | | OUString StarSymbolToMSMultiFontImpl::ConvertChar(sal_Unicode &rChar) |
1218 | 0 | { |
1219 | 0 | OUString sRet; |
1220 | |
|
1221 | 0 | ::std::multimap<sal_Unicode, SymbolEntry>::const_iterator aResult = |
1222 | 0 | maMagicMap.find(rChar); |
1223 | |
|
1224 | 0 | if (aResult != maMagicMap.end()) |
1225 | 0 | { |
1226 | 0 | const SymbolEntry &rEntry = (*aResult).second; |
1227 | 0 | sRet = SymbolFontToString(rEntry.eFont); |
1228 | 0 | rChar = rEntry.cIndex; |
1229 | 0 | } |
1230 | |
|
1231 | 0 | return sRet; |
1232 | 0 | } |
1233 | | |
1234 | | StarSymbolToMSMultiFont *CreateStarSymbolToMSMultiFont() |
1235 | 0 | { |
1236 | 0 | return new StarSymbolToMSMultiFontImpl; |
1237 | 0 | } |
1238 | | |
1239 | | sal_Unicode ConvertChar::RecodeChar( sal_Unicode cChar ) const |
1240 | 0 | { |
1241 | 0 | sal_Unicode cRetVal = 0; |
1242 | 0 | if( mpCvtFunc ) |
1243 | 0 | { |
1244 | | // use a conversion function for recoding |
1245 | 0 | cRetVal = mpCvtFunc( cChar ); |
1246 | 0 | } |
1247 | 0 | else |
1248 | 0 | { |
1249 | | // use a conversion table for recoding |
1250 | 0 | sal_Unicode cIndex = cChar; |
1251 | | // allow symbol aliasing |
1252 | 0 | if( cIndex & 0xFF00 ) |
1253 | 0 | cIndex -= 0xF000; |
1254 | | // recode the symbol |
1255 | 0 | if( cIndex>=0x0020 && cIndex<=0x00FF ) |
1256 | 0 | { |
1257 | 0 | cRetVal = mpCvtTab[ cIndex - 0x0020 ]; |
1258 | |
|
1259 | 0 | if (!cRetVal && !maSubsFontName.isEmpty()) |
1260 | 0 | { |
1261 | 0 | if ( IsOpenSymbol( maSubsFontName ) ) |
1262 | 0 | { |
1263 | 0 | cRetVal = 0xE12C; |
1264 | 0 | SAL_WARN( "unotools.misc", "Forcing a bullet substitution from 0x" << |
1265 | 0 | OString::number(cChar, 16) << " to 0x" << |
1266 | 0 | OString::number(cRetVal, 16)); |
1267 | 0 | } |
1268 | 0 | } |
1269 | 0 | } |
1270 | 0 | } |
1271 | | |
1272 | 0 | return cRetVal ? cRetVal : cChar; |
1273 | 0 | } |
1274 | | |
1275 | | // recode the string assuming the character codes are symbol codes |
1276 | | // from a traditional symbol font (i.e. U+F020..U+F0FF) |
1277 | | void ConvertChar::RecodeString( OUString& rStr, sal_Int32 nIndex, sal_Int32 nLen ) const |
1278 | 0 | { |
1279 | 0 | sal_Int32 nLastIndex = nIndex + nLen; |
1280 | 0 | OUStringBuffer aTmpStr(rStr); |
1281 | |
|
1282 | 0 | if( nLastIndex > aTmpStr.getLength() ) |
1283 | 0 | nLastIndex = aTmpStr.getLength(); |
1284 | |
|
1285 | 0 | for(; nIndex < nLastIndex; ++nIndex ) |
1286 | 0 | { |
1287 | 0 | sal_Unicode cOrig = rStr[ nIndex ]; |
1288 | | // only recode symbols and their U+00xx aliases |
1289 | 0 | if( ((cOrig < 0x0020) || (cOrig > 0x00FF)) |
1290 | 0 | && ((cOrig < 0xF020) || (cOrig > 0xF0FF)) ) |
1291 | 0 | continue; |
1292 | | |
1293 | | // recode a symbol |
1294 | 0 | sal_Unicode cNew = RecodeChar( cOrig ); |
1295 | 0 | if( cOrig != cNew ) |
1296 | 0 | aTmpStr[ nIndex ] = cNew; |
1297 | 0 | } |
1298 | 0 | rStr = aTmpStr.makeStringAndClear(); |
1299 | 0 | } |
1300 | | |
1301 | | namespace { |
1302 | | |
1303 | | struct RecodeTable { const char* pOrgName; ConvertChar aCvt;}; |
1304 | | |
1305 | | } |
1306 | | |
1307 | | constexpr RecodeTable aStarSymbolRecodeTable[] = |
1308 | | { |
1309 | | // the first two entries must be StarMath and StarBats; do not reorder! |
1310 | | // reason: see CreateFontToSubsFontConverter method |
1311 | | {"starbats", {aStarBatsTab, u"StarSymbol"_ustr, nullptr}}, |
1312 | | {"starmath", {aStarMathTab, u"StarSymbol"_ustr, nullptr}}, |
1313 | | |
1314 | | {"symbol", {aAdobeSymbolTab, u"StarSymbol"_ustr, nullptr}}, |
1315 | | {"standardsymbols", {aAdobeSymbolTab, u"StarSymbol"_ustr, nullptr}}, |
1316 | | {"standardsymbolsl",{aAdobeSymbolTab, u"StarSymbol"_ustr, nullptr}}, |
1317 | | |
1318 | | {"monotypesorts", {aMonotypeSortsTab, u"StarSymbol"_ustr, nullptr}}, |
1319 | | // {"monotypesorts2", {aMonotypeSorts2Tab, u"StarSymbol"_ustr, NULL}} |
1320 | | {"zapfdingbats", {aMonotypeSortsTab, u"StarSymbol"_ustr, nullptr}}, //ZapfDingbats=MonotypeSorts-X? |
1321 | | {"itczapfdingbats", {aMonotypeSortsTab, u"StarSymbol"_ustr, nullptr}}, |
1322 | | {"dingbats", {aMonotypeSortsTab, u"StarSymbol"_ustr, nullptr}}, |
1323 | | |
1324 | | {"webdings", {aWebDingsTab, u"StarSymbol"_ustr, nullptr}}, |
1325 | | {"wingdings", {aWingDingsTab, u"StarSymbol"_ustr, nullptr}}, |
1326 | | {"wingdings2", {aWingDings2Tab, u"StarSymbol"_ustr, nullptr}}, |
1327 | | {"wingdings3", {aWingDings3Tab, u"StarSymbol"_ustr, nullptr}}, |
1328 | | {"mtextra", {aMTExtraTab, u"StarSymbol"_ustr, nullptr}} |
1329 | | }; |
1330 | | |
1331 | | const RecodeTable aAppleSymbolRecodeTable[] = { |
1332 | | {"symbol", {aAdobeSymbolToAppleSymbolTab, u"AppleSymbol"_ustr, nullptr}} |
1333 | | }; |
1334 | | |
1335 | | const ConvertChar aImplStarSymbolCvt = { nullptr, u"StarBats"_ustr, ImplStarSymbolToStarBats }; |
1336 | | |
1337 | | const ConvertChar* ConvertChar::GetRecodeData( std::u16string_view rOrgFontName, std::u16string_view rMapFontName ) |
1338 | 20.4k | { |
1339 | 20.4k | const ConvertChar* pCvt = nullptr; |
1340 | | |
1341 | | // clean up and lowercase font name |
1342 | 20.4k | OUString aOrgName( GetEnglishSearchFontName( rOrgFontName ) ); |
1343 | 20.4k | OUString aMapName( GetEnglishSearchFontName( rMapFontName ) ); |
1344 | | |
1345 | 20.4k | if( aMapName == "starsymbol" |
1346 | 20.4k | || aMapName == "opensymbol" ) |
1347 | 11.6k | { |
1348 | 11.6k | for (auto const & r: aStarSymbolRecodeTable) |
1349 | 121k | { |
1350 | 121k | if( aOrgName.equalsAscii( r.pOrgName ) ) |
1351 | 8.53k | { |
1352 | 8.53k | pCvt = &r.aCvt; |
1353 | 8.53k | break; |
1354 | 8.53k | } |
1355 | 121k | } |
1356 | 11.6k | } |
1357 | | //It's plausible that it's better to implement this |
1358 | | //as an additional encoding alongside the existing |
1359 | | //adobe-symbol to unicode conversion in rtl instead |
1360 | 8.77k | else if( aMapName == "applesymbol" ) |
1361 | 0 | { |
1362 | 0 | for (auto const & r: aAppleSymbolRecodeTable) |
1363 | 0 | { |
1364 | 0 | if( aOrgName.equalsAscii( r.pOrgName ) ) |
1365 | 0 | { |
1366 | 0 | pCvt = &r.aCvt; |
1367 | 0 | break; |
1368 | 0 | } |
1369 | 0 | } |
1370 | 0 | } |
1371 | 8.77k | else if( aMapName == "starbats" ) |
1372 | 0 | { |
1373 | 0 | if( aOrgName == "starsymbol" ) |
1374 | 0 | pCvt = &aImplStarSymbolCvt; |
1375 | 0 | else if( aOrgName == "opensymbol" ) |
1376 | 0 | pCvt = &aImplStarSymbolCvt; |
1377 | 0 | } |
1378 | | |
1379 | 20.4k | return pCvt; |
1380 | 20.4k | } |
1381 | | |
1382 | | FontToSubsFontConverter CreateFontToSubsFontConverter( std::u16string_view rOrgName, FontToSubsFontFlags nFlags ) |
1383 | 0 | { |
1384 | 0 | const ConvertChar* pCvt = nullptr; |
1385 | |
|
1386 | 0 | OUString aName = GetEnglishSearchFontName( rOrgName ); |
1387 | |
|
1388 | 0 | if ( nFlags == FontToSubsFontFlags::IMPORT ) |
1389 | 0 | { |
1390 | 0 | const std::size_t nEntries = 2; // only StarMath+StarBats |
1391 | 0 | for( std::size_t i = 0; i < nEntries; ++i ) |
1392 | 0 | { |
1393 | 0 | const RecodeTable& r = aStarSymbolRecodeTable[i]; |
1394 | 0 | if( aName.equalsAscii( r.pOrgName ) ) |
1395 | 0 | { |
1396 | 0 | pCvt = &r.aCvt; |
1397 | 0 | break; |
1398 | 0 | } |
1399 | 0 | } |
1400 | 0 | } |
1401 | 0 | else |
1402 | 0 | { |
1403 | | // TODO: only StarMath+StarBats |
1404 | 0 | if( aName == "starsymbol" ) |
1405 | 0 | pCvt = &aImplStarSymbolCvt; |
1406 | 0 | else if( aName == "opensymbol" ) |
1407 | 0 | pCvt = &aImplStarSymbolCvt; |
1408 | 0 | } |
1409 | |
|
1410 | 0 | return const_cast<ConvertChar *>(pCvt); |
1411 | 0 | } |
1412 | | |
1413 | | sal_Unicode ConvertFontToSubsFontChar( |
1414 | | FontToSubsFontConverter hConverter, sal_Unicode cChar ) |
1415 | 0 | { |
1416 | 0 | if ( hConverter ) |
1417 | 0 | return static_cast<ConvertChar*>(hConverter)->RecodeChar( cChar ); |
1418 | 0 | else |
1419 | 0 | return cChar; |
1420 | 0 | } |
1421 | | |
1422 | | OUString GetFontToSubsFontName( FontToSubsFontConverter hConverter ) |
1423 | 0 | { |
1424 | 0 | if ( !hConverter ) |
1425 | 0 | return OUString(); |
1426 | | |
1427 | 0 | return static_cast<ConvertChar*>(hConverter)->maSubsFontName; |
1428 | 0 | } |
1429 | | |
1430 | | /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |