2 * This file is part of the LibreOffice project.
4 * This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 * This file incorporates work covered by the following license notice:
10 * Licensed to the Apache Software Foundation (ASF) under one or more
11 * contributor license agreements. See the NOTICE file distributed
12 * with this work for additional information regarding copyright
13 * ownership. The ASF licenses this file to you under the Apache
14 * License, Version 2.0 (the "License"); you may not use this file
15 * except in compliance with the License. You may obtain a copy of
16 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
19 #include <sal/config.h>
21 #include "convertsimple.hxx"
22 #include "tenchelp.hxx"
24 /* ======================================================================= */
26 /* This file contain the tables for all 1 byte charsets, for the */
27 /* following scripts: asia (Thai, Vietnamese) and other exotic scripts */
29 /* ======================================================================= */
32 /* Windows/Dos Standard CharSet for Thai */
33 /* 1-Byte, 0x00-0x7F ASCII without exception */
34 /* Convert-Tables: mappings/vendors/micsft/pc/cp874.txt from 04/15/98 Version 2.00 */
35 /* Last-Changes from us: */
37 /* ----------------------------------------------------------------------- */
39 #define MS874UNI_START 0x80
40 #define MS874UNI_END 0xFB
41 sal_uInt16 const aImplMS874ToUniTab[MS874UNI_END - MS874UNI_START + 1] =
45 0x20AC, 0, 0, 0, 0, 0x2026, 0, 0, /* 0x80 */
46 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 */
47 0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */
48 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 */
49 0x00A0, 0x0E01, 0x0E02, 0x0E03, 0x0E04, 0x0E05, 0x0E06, 0x0E07, /* 0xA0 */
50 0x0E08, 0x0E09, 0x0E0A, 0x0E0B, 0x0E0C, 0x0E0D, 0x0E0E, 0x0E0F, /* 0xA0 */
51 0x0E10, 0x0E11, 0x0E12, 0x0E13, 0x0E14, 0x0E15, 0x0E16, 0x0E17, /* 0xB0 */
52 0x0E18, 0x0E19, 0x0E1A, 0x0E1B, 0x0E1C, 0x0E1D, 0x0E1E, 0x0E1F, /* 0xB0 */
53 0x0E20, 0x0E21, 0x0E22, 0x0E23, 0x0E24, 0x0E25, 0x0E26, 0x0E27, /* 0xC0 */
54 0x0E28, 0x0E29, 0x0E2A, 0x0E2B, 0x0E2C, 0x0E2D, 0x0E2E, 0x0E2F, /* 0xC0 */
55 0x0E30, 0x0E31, 0x0E32, 0x0E33, 0x0E34, 0x0E35, 0x0E36, 0x0E37, /* 0xD0 */
56 0x0E38, 0x0E39, 0x0E3A, 0, 0, 0, 0, 0x0E3F, /* 0xD0 */
57 0x0E40, 0x0E41, 0x0E42, 0x0E43, 0x0E44, 0x0E45, 0x0E46, 0x0E47, /* 0xE0 */
58 0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D, 0x0E4E, 0x0E4F, /* 0xE0 */
59 0x0E50, 0x0E51, 0x0E52, 0x0E53, 0x0E54, 0x0E55, 0x0E56, 0x0E57, /* 0xF0 */
60 0x0E58, 0x0E59, 0x0E5A, 0x0E5B /* 0xF0 */
63 /* ----------------------------------------------------------------------- */
65 #define MS874CHAR_START 0x0E01
66 #define MS874CHAR_END 0x0E5B
67 unsigned char const aImplMS874ToCharTab[MS874CHAR_END - MS874CHAR_START + 1] =
71 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, /* 0x0E00 */
72 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, /* 0x0E00 */
73 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, /* 0x0E10 */
74 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, /* 0x0E10 */
75 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x0E20 */
76 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, /* 0x0E20 */
77 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, /* 0x0E30 */
78 0xD8, 0xD9, 0xDA, 0, 0, 0, 0, 0xDF, /* 0x0E30 */
79 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x0E40 */
80 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, /* 0x0E40 */
81 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 0x0E50 */
82 0xF8, 0xF9, 0xFA, 0xFB /* 0x0E50 */
85 /* ----------------------------------------------------------------------- */
87 #define MS874TOCHARTABEX_COUNT 10
88 ImplUniCharTabData const aImplMS874ToCharTabEx[MS874TOCHARTABEX_COUNT] =
102 /* ----------------------------------------------------------------------- */
104 ImplByteConvertData const aImplMS874ByteCvtData =
110 aImplMS874ToCharTabEx,
111 MS874UNI_START, MS874UNI_END,
112 NOTABUNI_START, NOTABUNI_END,
113 MS874CHAR_START, MS874CHAR_END,
114 NOTABCHAR_START, NOTABCHAR_END,
115 MS874TOCHARTABEX_COUNT
118 /* ----------------------------------------------------------------------- */
120 ImplTextEncodingData const aImplMS874TextEncodingData
121 = { { &aImplMS874ByteCvtData,
122 sal::detail::textenc::convertCharToUnicode,
123 sal::detail::textenc::convertUnicodeToChar,
130 "iso8859-1", /* TODO! correct? */
136 RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
137 /* WIN/DOS/OS2, SCRIPT_THAI, pc code page 874, mac encoding 21 */
139 /* ======================================================================= */
143 * A good source of information is <http://www.inet.co.th/cyberclub/trin/
144 * thairef/index.html> as of 18 Mar 2002.
146 * Single byte encoding, from which MS874 is derived (although it is the other
147 * way around in this implementation):
149 * 0x00--9F map to U+0000--009F
150 * 0xA0 is questionable (unassigned or U+00A0 NO BREAK SPACE), to ease
151 * implementation, it maps to U+00A0
152 * 0xA1--DA map to U+0E01--0E3A (TIS 620, same for MS874)
153 * 0xDB--DE are unassigned (TIS 620, same for MS874)
154 * 0xDF--FB map to U+0E3F--0E5B (TIS 620, same for MS874)
155 * 0xFC--FF are unassigned (TIS 620, same for MS874)
158 ImplByteConvertData const aImplTis620ByteCvtData =
160 aImplMS874ToUniTab + (0xA0 - MS874UNI_START),
161 aImpl8090SameToUniTab,
163 aImpl8090SameToCharTab,
164 aImplMS874ToCharTabEx,
166 SAME8090UNI_START, SAME8090UNI_END,
167 MS874CHAR_START, MS874CHAR_END,
168 SAME8090CHAR_START, SAME8090CHAR_END,
172 ImplTextEncodingData const aImplTis620TextEncodingData
173 = { { &aImplTis620ByteCvtData,
174 sal::detail::textenc::convertCharToUnicode,
175 sal::detail::textenc::convertUnicodeToChar,
182 "iso8859-1", /* TODO! correct? */
188 RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
190 /* ======================================================================= */
193 /* Windows Standard CharSet for Vietnamease */
194 /* 1-Byte, 0x00-0x7F ASCII without exception */
195 /* Convert-Tables: mappings/vendors/micsft/windows/cp1258.txt from 04/15/98 Version 2.01 */
196 /* Last-Changes from us: */
198 /* ----------------------------------------------------------------------- */
200 #define MS1258UNI_START 0x80
201 #define MS1258UNI_END 0xFF
202 sal_uInt16 const aImplMS1258ToUniTab[MS1258UNI_END - MS1258UNI_START + 1] =
204 /* 0 1 2 3 4 5 6 7 */
205 /* 8 9 A B C D E F */
206 0x20AC, 0, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, /* 0x80 */
207 0x02C6, 0x2030, 0, 0x2039, 0x0152, 0, 0, 0, /* 0x80 */
208 0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, /* 0x90 */
209 0x02DC, 0x2122, 0, 0x203A, 0x0153, 0, 0, 0x0178, /* 0x90 */
210 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, /* 0xA0 */
211 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, /* 0xA0 */
212 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, /* 0xB0 */
213 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, /* 0xB0 */
214 0x00C0, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x00C5, 0x00C6, 0x00C7, /* 0xC0 */
215 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x0300, 0x00CD, 0x00CE, 0x00CF, /* 0xC0 */
216 0x0110, 0x00D1, 0x0309, 0x00D3, 0x00D4, 0x01A0, 0x00D6, 0x00D7, /* 0xD0 */
217 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x01AF, 0x0303, 0x00DF, /* 0xD0 */
218 0x00E0, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x00E5, 0x00E6, 0x00E7, /* 0xE0 */
219 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0301, 0x00ED, 0x00EE, 0x00EF, /* 0xE0 */
220 0x0111, 0x00F1, 0x0323, 0x00F3, 0x00F4, 0x01A1, 0x00F6, 0x00F7, /* 0xF0 */
221 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x01B0, 0x20AB, 0x00FF /* 0xF0 */
224 /* ----------------------------------------------------------------------- */
226 #define MS1258CHAR_START 0x00A0
227 #define MS1258CHAR_END 0x00FF
228 unsigned char const aImplMS1258ToCharTab[MS1258CHAR_END - MS1258CHAR_START + 1] =
230 /* 0 1 2 3 4 5 6 7 */
231 /* 8 9 A B C D E F */
232 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, /* 0x00A0 */
233 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, /* 0x00A0 */
234 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, /* 0x00B0 */
235 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, /* 0x00B0 */
236 0xC0, 0xC1, 0xC2, 0, 0xC4, 0xC5, 0xC6, 0xC7, /* 0x00C0 */
237 0xC8, 0xC9, 0xCA, 0xCB, 0, 0xCD, 0xCE, 0xCF, /* 0x00C0 */
238 0, 0xD1, 0, 0xD3, 0xD4, 0, 0xD6, 0xD7, /* 0x00D0 */
239 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0, 0, 0xDF, /* 0x00D0 */
240 0xE0, 0xE1, 0xE2, 0, 0xE4, 0xE5, 0xE6, 0xE7, /* 0x00E0 */
241 0xE8, 0xE9, 0xEA, 0xEB, 0, 0xED, 0xEE, 0xEF, /* 0x00E0 */
242 0, 0xF1, 0, 0xF3, 0xF4, 0, 0xF6, 0xF7, /* 0x00F0 */
243 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0, 0, 0xFF /* 0x00F0 */
246 /* ----------------------------------------------------------------------- */
248 /* The list of Vietnamese-relevant precomposed Unicode characters that map to
249 MS1258 base + combining modifier are derived from the information present at
250 <http://vietunicode.sourceforge.net/charset/>: */
251 #define MS1258TOCHARTABEX_COUNT 141
252 ImplUniCharTabData const aImplMS1258ToCharTabEx[MS1258TOCHARTABEX_COUNT] =
254 { 0x00C3, 0x41, 0xDE },
255 { 0x00CC, 0x49, 0xCC },
256 { 0x00D2, 0x4F, 0xCC },
257 { 0x00D5, 0x4F, 0xDE },
258 { 0x00DD, 0x59, 0xEC },
259 { 0x00E3, 0x61, 0xDE },
260 { 0x00EC, 0x69, 0xCC },
261 { 0x00F2, 0x6F, 0xCC },
262 { 0x00F5, 0x6F, 0xDE },
263 { 0x00FD, 0x79, 0xCC },
268 { 0x0128, 0x49, 0xDE },
269 { 0x0129, 0x69, 0xDE },
272 { 0x0168, 0x55, 0xDE },
273 { 0x0169, 0x75, 0xDE },
287 { 0x1EA0, 0x41, 0xF2 },
288 { 0x1EA1, 0x61, 0xF2 },
289 { 0x1EA2, 0x41, 0xD2 },
290 { 0x1EA3, 0x61, 0xD2 },
291 { 0x1EA4, 0xC2, 0xEC },
292 { 0x1EA5, 0xE2, 0xEC },
293 { 0x1EA6, 0xC2, 0xCC },
294 { 0x1EA7, 0xE2, 0xCC },
295 { 0x1EA8, 0xC2, 0xD2 },
296 { 0x1EA9, 0xE2, 0xD2 },
297 { 0x1EAA, 0xC2, 0xDE },
298 { 0x1EAB, 0xE2, 0xDE },
299 { 0x1EAC, 0xC2, 0xF2 },
300 { 0x1EAD, 0xE2, 0xF2 },
301 { 0x1EAE, 0xC3, 0xEC },
302 { 0x1EAF, 0xE3, 0xEC },
303 { 0x1EB0, 0xC3, 0xCC },
304 { 0x1EB1, 0xE3, 0xCC },
305 { 0x1EB2, 0xC3, 0xD2 },
306 { 0x1EB3, 0xE3, 0xD2 },
307 { 0x1EB4, 0xC3, 0xDE },
308 { 0x1EB5, 0xE3, 0xDE },
309 { 0x1EB6, 0xC3, 0xF2 },
310 { 0x1EB7, 0xE3, 0xF2 },
311 { 0x1EB8, 0x45, 0xF2 },
312 { 0x1EB9, 0x65, 0xF2 },
313 { 0x1EBA, 0x45, 0xD2 },
314 { 0x1EBB, 0x65, 0xD2 },
315 { 0x1EBC, 0x45, 0xDE },
316 { 0x1EBD, 0x65, 0xDE },
317 { 0x1EBE, 0xCA, 0xEC },
318 { 0x1EBF, 0xEA, 0xEC },
319 { 0x1EC0, 0xCA, 0xCC },
320 { 0x1EC1, 0xEA, 0xCC },
321 { 0x1EC2, 0xCA, 0xD2 },
322 { 0x1EC3, 0xEA, 0xD2 },
323 { 0x1EC4, 0xCA, 0xDE },
324 { 0x1EC5, 0xEA, 0xDE },
325 { 0x1EC6, 0xCA, 0xF2 },
326 { 0x1EC7, 0xEA, 0xF2 },
327 { 0x1EC8, 0x49, 0xD2 },
328 { 0x1EC9, 0x69, 0xD2 },
329 { 0x1ECA, 0x49, 0xF2 },
330 { 0x1ECB, 0x69, 0xF2 },
331 { 0x1ECC, 0x4F, 0xF2 },
332 { 0x1ECD, 0x6F, 0xF2 },
333 { 0x1ECE, 0x4F, 0xD2 },
334 { 0x1ECF, 0x6F, 0xD2 },
335 { 0x1ED0, 0xD4, 0xEC },
336 { 0x1ED1, 0xF4, 0xEC },
337 { 0x1ED2, 0xD4, 0xCC },
338 { 0x1ED3, 0xF4, 0xCC },
339 { 0x1ED4, 0xD4, 0xD2 },
340 { 0x1ED5, 0xF4, 0xD2 },
341 { 0x1ED6, 0xD4, 0xDE },
342 { 0x1ED7, 0xF4, 0xDE },
343 { 0x1ED8, 0xD4, 0xF2 },
344 { 0x1ED9, 0xF4, 0xF2 },
345 { 0x1EDA, 0xD5, 0xEC },
346 { 0x1EDB, 0xF5, 0xEC },
347 { 0x1EDC, 0xD5, 0xCC },
348 { 0x1EDD, 0xF5, 0xCC },
349 { 0x1EDE, 0xD5, 0xD2 },
350 { 0x1EDF, 0xF5, 0xD2 },
351 { 0x1EE0, 0xD5, 0xDE },
352 { 0x1EE1, 0xF5, 0xDE },
353 { 0x1EE2, 0xD5, 0xF2 },
354 { 0x1EE3, 0xF5, 0xF2 },
355 { 0x1EE4, 0x55, 0xF2 },
356 { 0x1EE5, 0x75, 0xF2 },
357 { 0x1EE6, 0x55, 0xD2 },
358 { 0x1EE7, 0x75, 0xD2 },
359 { 0x1EE8, 0xDD, 0xEC },
360 { 0x1EE9, 0xFD, 0xEC },
361 { 0x1EEA, 0xDD, 0xCC },
362 { 0x1EEB, 0xFD, 0xCC },
363 { 0x1EEC, 0xDD, 0xD2 },
364 { 0x1EED, 0xFD, 0xD2 },
365 { 0x1EEE, 0xDD, 0xDE },
366 { 0x1EEF, 0xFD, 0xDE },
367 { 0x1EF0, 0xDD, 0xF2 },
368 { 0x1EF1, 0xFD, 0xF2 },
369 { 0x1EF2, 0x59, 0xCC },
370 { 0x1EF3, 0x79, 0xCC },
371 { 0x1EF4, 0x59, 0xF2 },
372 { 0x1EF5, 0x79, 0xF2 },
373 { 0x1EF6, 0x59, 0xD2 },
374 { 0x1EF7, 0x79, 0xD2 },
375 { 0x1EF8, 0x59, 0xDE },
376 { 0x1EF9, 0x79, 0xDE },
397 /* ----------------------------------------------------------------------- */
399 ImplByteConvertData const aImplMS1258ByteCvtData =
403 aImplMS1258ToCharTab,
405 aImplMS1258ToCharTabEx,
406 MS1258UNI_START, MS1258UNI_END,
407 NOTABUNI_START, NOTABUNI_END,
408 MS1258CHAR_START, MS1258CHAR_END,
409 NOTABCHAR_START, NOTABCHAR_END,
410 MS1258TOCHARTABEX_COUNT
413 /* ----------------------------------------------------------------------- */
415 ImplTextEncodingData const aImplMS1258TextEncodingData
416 = { { &aImplMS1258ByteCvtData,
417 sal::detail::textenc::convertCharToUnicode,
418 sal::detail::textenc::convertUnicodeToChar,
425 "iso8859-1", /* TODO! correct? */
431 RTL_TEXTENCODING_INFO_ASCII | RTL_TEXTENCODING_INFO_MIME };
432 /* WIN, SCRIPT_VIETNAMESE, mac encoding 30 */