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