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 <config_locales.h>
21
22 #include <sal/config.h>
23
24 #include <cstddef>
25 #include <cstring>
26
27 #include <cppunit/TestFixture.h>
28 #include <cppunit/extensions/HelperMacros.h>
29
30 #include <o3tl/cppunittraitshelper.hxx>
31 #include <rtl/string.hxx>
32 #include <rtl/ustring.hxx>
33 #include <rtl/tencinfo.h>
34 #include <rtl/textcvt.h>
35 #include <rtl/textenc.h>
36 #include <sal/types.h>
37 #include <sal/macros.h>
38 #include <osl/diagnose.h>
39
40 namespace {
41
42 struct SingleByteCharSet {
43 rtl_TextEncoding m_nEncoding;
44 sal_Unicode m_aMap[256];
45 };
46
testSingleByteCharSet(SingleByteCharSet const & rSet)47 void testSingleByteCharSet(SingleByteCharSet const & rSet) {
48 char aText[256];
49 sal_Unicode aUnicode[256];
50 sal_Size nNumber = 0;
51 for (int i = 0; i < 256; ++i) {
52 if (rSet.m_aMap[i] != 0xFFFF) {
53 aText[nNumber++] = static_cast< char >(i);
54 }
55 }
56 {
57 rtl_TextToUnicodeConverter aConverter
58 = rtl_createTextToUnicodeConverter(rSet.m_nEncoding);
59 CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter(" + OUString::number(rSet.m_nEncoding) + ") failed"),
60 RTL_TEXTENCODING_UTF8).getStr(),
61 aConverter != nullptr);
62 rtl_TextToUnicodeContext aContext
63 = rtl_createTextToUnicodeContext(aConverter);
64 CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr);
65 sal_Size nSize;
66 sal_uInt32 nInfo;
67 sal_Size nConverted;
68 nSize = rtl_convertTextToUnicode(
69 aConverter, aContext, aText, nNumber, aUnicode, nNumber,
70 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
71 | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
72 | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR),
73 &nInfo, &nConverted);
74 CPPUNIT_ASSERT_EQUAL(nNumber, nSize);
75 CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), nInfo);
76 CPPUNIT_ASSERT_EQUAL(nNumber, nConverted);
77 rtl_destroyTextToUnicodeContext(aConverter, aContext);
78 rtl_destroyTextToUnicodeConverter(aConverter);
79 }
80 {
81 int j = 0;
82 for (int i = 0; i < 256; ++i) {
83 if (rSet.m_aMap[i] != 0xFFFF && aUnicode[j] != rSet.m_aMap[i]) {
84 CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("rSet.m_aMap[" + OUString::number(i) + "] == " +
85 OUString::number(rSet.m_aMap[i], 16)),
86 RTL_TEXTENCODING_UTF8).getStr(),
87 u'\xFFFF', rSet.m_aMap[i]);
88 CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("aUnicode[" + OUString::number(j) + "] == " +
89 OUString::number(aUnicode[j], 16) +
90 ", rSet.m_aMap[" + OUString::number(i) + "] == " +
91 OUString::number(rSet.m_aMap[i], 16)),
92 RTL_TEXTENCODING_UTF8).getStr(),
93 rSet.m_aMap[i], aUnicode[j]);
94 }
95 if (rSet.m_aMap[i] != 0xFFFF)
96 j++;
97 }
98 }
99 if (rSet.m_nEncoding == RTL_TEXTENCODING_ASCII_US) {
100 nNumber = 128;
101 }
102 {
103 rtl_UnicodeToTextConverter aConverter
104 = rtl_createUnicodeToTextConverter(rSet.m_nEncoding);
105 CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rSet.m_nEncoding)) + ") failed"),
106 RTL_TEXTENCODING_UTF8).getStr(),
107 aConverter != nullptr);
108 rtl_UnicodeToTextContext aContext
109 = rtl_createUnicodeToTextContext(aConverter);
110 CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr);
111 sal_Size nSize;
112 sal_uInt32 nInfo;
113 sal_Size nConverted;
114 nSize = rtl_convertUnicodeToText(
115 aConverter, aContext, aUnicode, nNumber, aText, nNumber,
116 (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR
117 | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR),
118 &nInfo, &nConverted);
119 CPPUNIT_ASSERT_EQUAL(nNumber, nSize);
120 CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), nInfo);
121 CPPUNIT_ASSERT_EQUAL(nNumber, nConverted);
122 rtl_destroyUnicodeToTextContext(aConverter, aContext);
123 rtl_destroyUnicodeToTextConverter(aConverter);
124 }
125 {
126 int j = 0;
127 for (int i = 0; i < 256; ++i) {
128 if (rSet.m_aMap[i] != 0xFFFF
129 && aText[j] != static_cast< char >(i))
130 {
131 CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("rSet.m_aMap[" + OUString::number(i) + "] == " +
132 OUString::number(rSet.m_aMap[i], 16)),
133 RTL_TEXTENCODING_UTF8).getStr(),
134 u'\xFFFF', rSet.m_aMap[i]);
135 CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("aText[" + OUString::number(j) + "] == " +
136 OUString::number(i, 16)),
137 RTL_TEXTENCODING_UTF8).getStr(),
138 static_cast< char >(i), aText[j]);
139 }
140 if (rSet.m_aMap[i] != 0xFFFF)
141 j++;
142 }
143 }
144 for (int i = 0; i < 256; ++i) {
145 if (rSet.m_aMap[i] == 0xFFFF) {
146 aText[0] = static_cast< char >(i);
147 rtl_TextToUnicodeConverter aConverter
148 = rtl_createTextToUnicodeConverter(rSet.m_nEncoding);
149 CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rSet.m_nEncoding)) + ") failed"),
150 RTL_TEXTENCODING_UTF8).getStr(),
151 aConverter != nullptr);
152 rtl_TextToUnicodeContext aContext
153 = rtl_createTextToUnicodeContext(aConverter);
154 CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr);
155 sal_Size nSize;
156 sal_uInt32 nInfo;
157 sal_Size nConverted;
158 nSize = rtl_convertTextToUnicode(
159 aConverter, aContext, aText, 1, aUnicode, 1,
160 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
161 | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
162 | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR),
163 &nInfo, &nConverted);
164
165 sal_uInt32 nExpectedInfo = (RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_UNDEFINED);
166
167 CPPUNIT_ASSERT_EQUAL(sal_Size(0), nSize);
168 CPPUNIT_ASSERT_EQUAL(nExpectedInfo, nInfo);
169 CPPUNIT_ASSERT_EQUAL(sal_Size(1), nConverted);
170
171 rtl_destroyTextToUnicodeContext(aConverter, aContext);
172 rtl_destroyTextToUnicodeConverter(aConverter);
173 }
174 }
175 }
176
177 int const TEST_STRING_SIZE = 1000;
178
179 struct ComplexCharSetTest {
180 rtl_TextEncoding m_nEncoding;
181 char const * m_pText;
182 sal_Size m_nTextSize;
183 sal_Unicode m_aUnicode[TEST_STRING_SIZE];
184 sal_Size m_nUnicodeSize;
185 bool m_bNoContext;
186 bool m_bForward;
187 bool m_bReverse;
188 bool m_bGlobalSignature;
189 sal_uInt32 m_nReverseUndefined;
190 };
191
doComplexCharSetTest(ComplexCharSetTest const & rTest)192 void doComplexCharSetTest(ComplexCharSetTest const & rTest) {
193 if (rTest.m_bForward) {
194 sal_Unicode aUnicode[TEST_STRING_SIZE];
195 rtl_TextToUnicodeConverter aConverter
196 = rtl_createTextToUnicodeConverter(rTest.m_nEncoding);
197 CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding)) + ") failed"),
198 RTL_TEXTENCODING_UTF8).getStr(),
199 aConverter != nullptr);
200 rtl_TextToUnicodeContext aContext
201 = rtl_createTextToUnicodeContext(aConverter);
202 CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr);
203 sal_Size nSize;
204 sal_uInt32 nInfo;
205 sal_Size nConverted;
206 nSize = rtl_convertTextToUnicode(
207 aConverter, aContext,
208 reinterpret_cast< char const * >(rTest.m_pText),
209 rTest.m_nTextSize, aUnicode, TEST_STRING_SIZE,
210 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
211 | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
212 | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR
213 | RTL_TEXTTOUNICODE_FLAGS_FLUSH
214 | (rTest.m_bGlobalSignature ?
215 RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE : 0)),
216 &nInfo, &nConverted);
217 CPPUNIT_ASSERT_EQUAL(rTest.m_nUnicodeSize, nSize);
218 CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), nInfo);
219 CPPUNIT_ASSERT_EQUAL(rTest.m_nTextSize, nConverted);
220
221 rtl_destroyTextToUnicodeContext(aConverter, aContext);
222 rtl_destroyTextToUnicodeConverter(aConverter);
223
224 for (sal_Size i = 0; i < rTest.m_nUnicodeSize; ++i) {
225 CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("aUnicode[" + OUString::number(i) + "] == " +
226 OUString::number(aUnicode[i], 16) +
227 ", rTest.m_aUnicode[" + OUString::number(i) + "] == " +
228 OUString::number(rTest.m_aUnicode[i], 16)),
229 RTL_TEXTENCODING_UTF8).getStr(),
230 rTest.m_aUnicode[i], aUnicode[i]);
231 }
232 }
233 if (rTest.m_bForward) {
234 sal_Unicode aUnicode[TEST_STRING_SIZE];
235 rtl_TextToUnicodeConverter aConverter
236 = rtl_createTextToUnicodeConverter(rTest.m_nEncoding);
237 CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding)) + ") failed"),
238 RTL_TEXTENCODING_UTF8).getStr(),
239 aConverter != nullptr);
240 rtl_TextToUnicodeContext aContext
241 = rtl_createTextToUnicodeContext(aConverter);
242 CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr);
243 if (aContext != reinterpret_cast<rtl_TextToUnicodeContext>(1)) {
244 sal_Size nInput = 0;
245 sal_Size nOutput = 0;
246 for (bool bFlush = true; nInput < rTest.m_nTextSize || bFlush;) {
247 sal_Size nSrcBytes = 1;
248 sal_uInt32 nFlags
249 = (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
250 | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
251 | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR
252 | (rTest.m_bGlobalSignature ?
253 RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE : 0));
254 if (nInput >= rTest.m_nTextSize) {
255 nSrcBytes = 0;
256 nFlags |= RTL_TEXTTOUNICODE_FLAGS_FLUSH;
257 bFlush = false;
258 }
259 sal_uInt32 nInfo;
260 sal_Size nConverted;
261 sal_Size nSize = rtl_convertTextToUnicode(
262 aConverter, aContext,
263 reinterpret_cast< char const * >(rTest.m_pText + nInput),
264 nSrcBytes, aUnicode + nOutput, TEST_STRING_SIZE - nOutput,
265 nFlags, &nInfo, &nConverted);
266 nOutput += nSize;
267 nInput += nConverted;
268 CPPUNIT_ASSERT_EQUAL(sal_uInt32(0),
269 (nInfo & ~RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL));
270 }
271 CPPUNIT_ASSERT_EQUAL(rTest.m_nUnicodeSize, nOutput);
272 CPPUNIT_ASSERT_EQUAL(rTest.m_nTextSize, nInput);
273
274 for (sal_Size i = 0; i < rTest.m_nUnicodeSize; ++i) {
275 CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("aUnicode[" + OUString::number(i) + "] == " +
276 OUString::number(aUnicode[i], 16) +
277 ", rTest.m_aUnicode[" + OUString::number(i) + "] == " +
278 OUString::number(rTest.m_aUnicode[i], 16)),
279 RTL_TEXTENCODING_UTF8).getStr(),
280 rTest.m_aUnicode[i], aUnicode[i]);
281 }
282 }
283 rtl_destroyTextToUnicodeContext(aConverter, aContext);
284 rtl_destroyTextToUnicodeConverter(aConverter);
285 }
286 if (rTest.m_bNoContext && rTest.m_bForward) {
287 sal_Unicode aUnicode[TEST_STRING_SIZE] = { 0, };
288 int nSize = 0;
289 rtl_TextToUnicodeConverter aConverter
290 = rtl_createTextToUnicodeConverter(rTest.m_nEncoding);
291 CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding)) + ") failed"),
292 RTL_TEXTENCODING_UTF8).getStr(),
293 aConverter != nullptr);
294 for (sal_Size i = 0;;) {
295 if (i == rTest.m_nTextSize) {
296 goto done;
297 }
298 char c1 = rTest.m_pText[i++];
299 sal_Unicode aUC[2];
300 sal_uInt32 nInfo = 0;
301 sal_Size nCvtBytes;
302 sal_Size nChars = rtl_convertTextToUnicode(
303 aConverter, nullptr, &c1, 1, aUC, 2,
304 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
305 | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
306 | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR
307 | (rTest.m_bGlobalSignature ?
308 RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE : 0)),
309 &nInfo, &nCvtBytes);
310 if ((nInfo & RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL) != 0) {
311 char sBuffer[10];
312 sBuffer[0] = c1;
313 sal_uInt16 nLen = 1;
314 while ((nInfo & RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL) != 0
315 && nLen < 10)
316 {
317 if (i == rTest.m_nTextSize) {
318 goto done;
319 }
320 c1 = rTest.m_pText[i++];
321 sBuffer[nLen++] = c1;
322 nChars = rtl_convertTextToUnicode(
323 aConverter, nullptr, sBuffer, nLen, aUC, 2,
324 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
325 | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
326 | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR
327 | (rTest.m_bGlobalSignature ?
328 RTL_TEXTTOUNICODE_FLAGS_GLOBAL_SIGNATURE : 0)),
329 &nInfo, &nCvtBytes);
330 }
331 if (nChars == 1 && nInfo == 0) {
332 OSL_ASSERT(nCvtBytes == nLen);
333 aUnicode[nSize++] = aUC[0];
334 } else if (nChars == 2 && nInfo == 0) {
335 OSL_ASSERT(nCvtBytes == nLen);
336 aUnicode[nSize++] = aUC[0];
337 aUnicode[nSize++] = aUC[1];
338 } else {
339 OSL_ASSERT(
340 (nInfo & RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL) == 0
341 && nChars == 0 && nInfo != 0);
342 aUnicode[nSize++] = sBuffer[0];
343 i -= nLen - 1;
344 }
345 } else if (nChars == 1 && nInfo == 0) {
346 OSL_ASSERT(nCvtBytes == 1);
347 aUnicode[nSize++] = aUC[0];
348 } else if (nChars == 2 && nInfo == 0) {
349 OSL_ASSERT(nCvtBytes == 1);
350 aUnicode[nSize++] = aUC[0];
351 aUnicode[nSize++] = aUC[1];
352 } else {
353 OSL_ASSERT(nChars == 0 && nInfo != 0);
354 aUnicode[nSize++] = c1;
355 }
356 }
357 done:
358 rtl_destroyTextToUnicodeConverter(aConverter);
359 for (sal_Size i = 0; i < rTest.m_nUnicodeSize; ++i) {
360 CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("aUnicode[" + OUString::number(i) + "] == " +
361 OUString::number(aUnicode[i], 16) +
362 ", rTest.m_aUnicode[" + OUString::number(i) + "] == " +
363 OUString::number(rTest.m_aUnicode[i], 16)),
364 RTL_TEXTENCODING_UTF8).getStr(),
365 rTest.m_aUnicode[i], aUnicode[i]);
366 }
367 }
368 if (rTest.m_bReverse) {
369 char aText[TEST_STRING_SIZE];
370 rtl_UnicodeToTextConverter aConverter
371 = rtl_createUnicodeToTextConverter(rTest.m_nEncoding);
372 CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding)) + ") failed"),
373 RTL_TEXTENCODING_UTF8).getStr(),
374 aConverter != nullptr);
375 rtl_UnicodeToTextContext aContext
376 = rtl_createUnicodeToTextContext(aConverter);
377 CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", aContext != nullptr);
378 sal_Size nSize;
379 sal_uInt32 nInfo;
380 sal_Size nConverted;
381 nSize = rtl_convertUnicodeToText(
382 aConverter, aContext, rTest.m_aUnicode, rTest.m_nUnicodeSize, aText,
383 TEST_STRING_SIZE,
384 (rTest.m_nReverseUndefined | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR
385 | RTL_UNICODETOTEXT_FLAGS_FLUSH
386 | (rTest.m_bGlobalSignature ?
387 RTL_UNICODETOTEXT_FLAGS_GLOBAL_SIGNATURE : 0)),
388 &nInfo, &nConverted);
389 CPPUNIT_ASSERT_EQUAL(rTest.m_nTextSize, nSize);
390 if (nInfo != 0)
391 {
392 CPPUNIT_ASSERT_EQUAL(RTL_UNICODETOTEXT_INFO_UNDEFINED, nInfo);
393 CPPUNIT_ASSERT_MESSAGE("rTest.m_nReverseUndefined should not be RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR",
394 rTest.m_nReverseUndefined != RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR);
395 }
396 CPPUNIT_ASSERT_EQUAL(rTest.m_nUnicodeSize, nConverted);
397 rtl_destroyUnicodeToTextContext(aConverter, aContext);
398 rtl_destroyUnicodeToTextConverter(aConverter);
399 for (sal_Size i = 0; i < rTest.m_nTextSize; ++i) {
400 CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("aText[" + OUString::number(i) + "] == " +
401 OUString::number(aText[i], 16) +
402 ", rTest.m_pText[" + OUString::number(i) + "] == " +
403 OUString::number(rTest.m_pText[i], 16)),
404 RTL_TEXTENCODING_UTF8).getStr(),
405 rTest.m_pText[i], aText[i]);
406 }
407 }
408 }
409
doComplexCharSetCutTest(ComplexCharSetTest const & rTest)410 void doComplexCharSetCutTest(ComplexCharSetTest const & rTest) {
411 if (rTest.m_bNoContext) {
412 sal_Unicode aUnicode[TEST_STRING_SIZE];
413 rtl_TextToUnicodeConverter aConverter
414 = rtl_createTextToUnicodeConverter(rTest.m_nEncoding);
415 CPPUNIT_ASSERT_MESSAGE(OUStringToOString(OUString("rtl_createTextToUnicodeConverter(" + OUString::createFromAscii(rtl_getMimeCharsetFromTextEncoding(rTest.m_nEncoding)) + ") failed"),
416 RTL_TEXTENCODING_UTF8).getStr(),
417 aConverter != nullptr);
418 sal_Size nSize;
419 sal_uInt32 nInfo;
420 sal_Size nConverted;
421 nSize = rtl_convertTextToUnicode(
422 aConverter, nullptr, reinterpret_cast< char const * >(rTest.m_pText),
423 rTest.m_nTextSize, aUnicode, TEST_STRING_SIZE,
424 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
425 | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
426 | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR),
427 &nInfo, &nConverted);
428
429 CPPUNIT_ASSERT_EQUAL(rTest.m_nUnicodeSize, nSize);
430 if (nInfo != RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL)
431 {
432 CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL,
433 nInfo);
434 }
435 CPPUNIT_ASSERT_MESSAGE("nConverted should be less than rTest.m_nTextSize", nConverted < rTest.m_nTextSize);
436
437 rtl_destroyTextToUnicodeConverter(aConverter);
438 for (sal_Size i = 0; i < nSize; ++i) {
439 CPPUNIT_ASSERT_EQUAL_MESSAGE(OUStringToOString(OUString("aUnicode[" + OUString::number(i) + "] == " +
440 OUString::number(aUnicode[i], 16) +
441 ", rTest.m_aUnicode[" + OUString::number(i) + "] == " +
442 OUString::number(rTest.m_aUnicode[i], 16)),
443 RTL_TEXTENCODING_UTF8).getStr(),
444 rTest.m_aUnicode[i], aUnicode[i]);
445 }
446 }
447 }
448
449 class Test: public CppUnit::TestFixture {
450 public:
451 void testSingleByte();
452
453 void testComplex();
454
455 void testComplexCut();
456
457 void testInvalidUtf7();
458
459 void testInvalidUtf8();
460
461 void testInvalidUnicode();
462
463 void testSRCBUFFERTOSMALL();
464
465 void testMime();
466
467 void testWindows();
468
469 void testInfo();
470
471 CPPUNIT_TEST_SUITE(Test);
472 CPPUNIT_TEST(testSingleByte);
473 CPPUNIT_TEST(testComplex);
474 CPPUNIT_TEST(testComplexCut);
475 CPPUNIT_TEST(testInvalidUtf7);
476 CPPUNIT_TEST(testInvalidUtf8);
477 CPPUNIT_TEST(testInvalidUnicode);
478 CPPUNIT_TEST(testSRCBUFFERTOSMALL);
479 CPPUNIT_TEST(testMime);
480 CPPUNIT_TEST(testWindows);
481 CPPUNIT_TEST(testInfo);
482 CPPUNIT_TEST_SUITE_END();
483 };
484
testSingleByte()485 void Test::testSingleByte() {
486 static SingleByteCharSet const data[]
487 = { { RTL_TEXTENCODING_MS_1250,
488 { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
489 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
490 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
491 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
492 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
493 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
494 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
495 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
496 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
497 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
498 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
499 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
500 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
501 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
502 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
503 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
504 0x20AC,0xFFFF,0x201A,0xFFFF,0x201E,0x2026,0x2020,0x2021,
505 0xFFFF,0x2030,0x0160,0x2039,0x015A,0x0164,0x017D,0x0179,
506 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
507 0xFFFF,0x2122,0x0161,0x203A,0x015B,0x0165,0x017E,0x017A,
508 0x00A0,0x02C7,0x02D8,0x0141,0x00A4,0x0104,0x00A6,0x00A7,
509 0x00A8,0x00A9,0x015E,0x00AB,0x00AC,0x00AD,0x00AE,0x017B,
510 0x00B0,0x00B1,0x02DB,0x0142,0x00B4,0x00B5,0x00B6,0x00B7,
511 0x00B8,0x0105,0x015F,0x00BB,0x013D,0x02DD,0x013E,0x017C,
512 0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7,
513 0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E,
514 0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7,
515 0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF,
516 0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7,
517 0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F,
518 0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7,
519 0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9 } },
520 { RTL_TEXTENCODING_MS_1251,
521 { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
522 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
523 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
524 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
525 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
526 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
527 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
528 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
529 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
530 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
531 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
532 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
533 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
534 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
535 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
536 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
537 0x0402,0x0403,0x201A,0x0453,0x201E,0x2026,0x2020,0x2021,
538 0x20AC,0x2030,0x0409,0x2039,0x040A,0x040C,0x040B,0x040F,
539 0x0452,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
540 0xFFFF,0x2122,0x0459,0x203A,0x045A,0x045C,0x045B,0x045F,
541 0x00A0,0x040E,0x045E,0x0408,0x00A4,0x0490,0x00A6,0x00A7,
542 0x0401,0x00A9,0x0404,0x00AB,0x00AC,0x00AD,0x00AE,0x0407,
543 0x00B0,0x00B1,0x0406,0x0456,0x0491,0x00B5,0x00B6,0x00B7,
544 0x0451,0x2116,0x0454,0x00BB,0x0458,0x0405,0x0455,0x0457,
545 0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417,
546 0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F,
547 0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427,
548 0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F,
549 0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437,
550 0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F,
551 0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447,
552 0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F } },
553 { RTL_TEXTENCODING_MS_1252,
554 { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
555 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
556 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
557 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
558 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
559 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
560 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
561 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
562 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
563 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
564 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
565 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
566 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
567 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
568 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
569 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
570 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,
571 0x02C6,0x2030,0x0160,0x2039,0x0152,0xFFFF,0x017D,0xFFFF,
572 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
573 0x02DC,0x2122,0x0161,0x203A,0x0153,0xFFFF,0x017E,0x0178,
574 0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
575 0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
576 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
577 0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,
578 0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,
579 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
580 0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7,
581 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF,
582 0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,
583 0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
584 0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7,
585 0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x00FF } },
586 { RTL_TEXTENCODING_MS_1253,
587 { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
588 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
589 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
590 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
591 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
592 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
593 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
594 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
595 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
596 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
597 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
598 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
599 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
600 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
601 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
602 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
603 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,
604 0xFFFF,0x2030,0xFFFF,0x2039,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
605 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
606 0xFFFF,0x2122,0xFFFF,0x203A,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
607 0x00A0,0x0385,0x0386,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
608 0x00A8,0x00A9,0xFFFF,0x00AB,0x00AC,0x00AD,0x00AE,0x2015,
609 0x00B0,0x00B1,0x00B2,0x00B3,0x0384,0x00B5,0x00B6,0x00B7,
610 0x0388,0x0389,0x038A,0x00BB,0x038C,0x00BD,0x038E,0x038F,
611 0x0390,0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397,
612 0x0398,0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F,
613 0x03A0,0x03A1,0xFFFF,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7,
614 0x03A8,0x03A9,0x03AA,0x03AB,0x03AC,0x03AD,0x03AE,0x03AF,
615 0x03B0,0x03B1,0x03B2,0x03B3,0x03B4,0x03B5,0x03B6,0x03B7,
616 0x03B8,0x03B9,0x03BA,0x03BB,0x03BC,0x03BD,0x03BE,0x03BF,
617 0x03C0,0x03C1,0x03C2,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,
618 0x03C8,0x03C9,0x03CA,0x03CB,0x03CC,0x03CD,0x03CE,0xFFFF } },
619 { RTL_TEXTENCODING_MS_1254,
620 { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
621 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
622 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
623 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
624 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
625 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
626 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
627 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
628 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
629 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
630 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
631 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
632 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
633 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
634 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
635 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
636 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,
637 0x02C6,0x2030,0x0160,0x2039,0x0152,0xFFFF,0xFFFF,0xFFFF,
638 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
639 0x02DC,0x2122,0x0161,0x203A,0x0153,0xFFFF,0xFFFF,0x0178,
640 0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
641 0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
642 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
643 0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,
644 0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,
645 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
646 0x011E,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7,
647 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x0130,0x015E,0x00DF,
648 0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,
649 0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
650 0x011F,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7,
651 0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x0131,0x015F,0x00FF } },
652 { RTL_TEXTENCODING_APPLE_ROMAN,
653 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
654 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
655 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
656 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
657 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
658 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
659 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
660 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
661 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
662 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
663 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
664 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
665 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
666 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
667 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
668 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E, 0x7F,
669 0x00C4,0x00C5,0x00C7,0x00C9,0x00D1,0x00D6,0x00DC,0x00E1,
670 0x00E0,0x00E2,0x00E4,0x00E3,0x00E5,0x00E7,0x00E9,0x00E8,
671 0x00EA,0x00EB,0x00ED,0x00EC,0x00EE,0x00EF,0x00F1,0x00F3,
672 0x00F2,0x00F4,0x00F6,0x00F5,0x00FA,0x00F9,0x00FB,0x00FC,
673 0x2020,0x00B0,0x00A2,0x00A3,0x00A7,0x2022,0x00B6,0x00DF,
674 0x00AE,0x00A9,0x2122,0x00B4,0x00A8,0x2260,0x00C6,0x00D8,
675 0x221E,0x00B1,0x2264,0x2265,0x00A5,0x00B5,0x2202,0x2211,
676 0x220F,0x03C0,0x222B,0x00AA,0x00BA,0x03A9,0x00E6,0x00F8,
677 0x00BF,0x00A1,0x00AC,0x221A,0x0192,0x2248,0x2206,0x00AB,
678 0x00BB,0x2026,0x00A0,0x00C0,0x00C3,0x00D5,0x0152,0x0153,
679 0x2013,0x2014,0x201C,0x201D,0x2018,0x2019,0x00F7,0x25CA,
680 0x00FF,0x0178,0x2044,0x20AC,0x2039,0x203A,0xFB01,0xFB02,
681 0x2021,0x00B7,0x201A,0x201E,0x2030,0x00C2,0x00CA,0x00C1,
682 0x00CB,0x00C8,0x00CD,0x00CE,0x00CF,0x00CC,0x00D3,0x00D4,
683 0xF8FF,0x00D2,0x00DA,0x00DB,0x00D9,0x0131,0x02C6,0x02DC,
684 0x00AF,0x02D8,0x02D9,0x02DA,0x00B8,0x02DD,0x02DB,0x02C7 } },
685 { RTL_TEXTENCODING_IBM_437,
686 { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
687 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
688 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
689 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
690 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
691 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
692 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
693 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
694 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
695 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
696 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
697 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
698 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
699 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
700 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
701 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
702 0x00c7,0x00fc,0x00e9,0x00e2,0x00e4,0x00e0,0x00e5,0x00e7,
703 0x00ea,0x00eb,0x00e8,0x00ef,0x00ee,0x00ec,0x00c4,0x00c5,
704 0x00c9,0x00e6,0x00c6,0x00f4,0x00f6,0x00f2,0x00fb,0x00f9,
705 0x00ff,0x00d6,0x00dc,0x00a2,0x00a3,0x00a5,0x20a7,0x0192,
706 0x00e1,0x00ed,0x00f3,0x00fa,0x00f1,0x00d1,0x00aa,0x00ba,
707 0x00bf,0x2310,0x00ac,0x00bd,0x00bc,0x00a1,0x00ab,0x00bb,
708 0x2591,0x2592,0x2593,0x2502,0x2524,0x2561,0x2562,0x2556,
709 0x2555,0x2563,0x2551,0x2557,0x255d,0x255c,0x255b,0x2510,
710 0x2514,0x2534,0x252c,0x251c,0x2500,0x253c,0x255e,0x255f,
711 0x255a,0x2554,0x2569,0x2566,0x2560,0x2550,0x256c,0x2567,
712 0x2568,0x2564,0x2565,0x2559,0x2558,0x2552,0x2553,0x256b,
713 0x256a,0x2518,0x250c,0x2588,0x2584,0x258c,0x2590,0x2580,
714 0x03b1,0x00df,0x0393,0x03c0,0x03a3,0x03c3,0x00b5,0x03c4,
715 0x03a6,0x0398,0x03a9,0x03b4,0x221e,0x03c6,0x03b5,0x2229,
716 0x2261,0x00b1,0x2265,0x2264,0x2320,0x2321,0x00f7,0x2248,
717 0x00b0,0x2219,0x00b7,0x221a,0x207f,0x00b2,0x25a0,0x00a0 } },
718
719 { RTL_TEXTENCODING_ASCII_US,
720 { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
721 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
722 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
723 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
724 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
725 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
726 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
727 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
728 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
729 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
730 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
731 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
732 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
733 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
734 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
735 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
736 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021, // !
737 0x02C6,0x2030,0x0160,0x2039,0x0152,0xFFFF,0x017D,0xFFFF, // !
738 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, // !
739 0x02DC,0x2122,0x0161,0x203A,0x0153,0xFFFF,0x017E,0x0178, // !
740 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
741 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
742 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
743 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
744 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
745 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
746 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
747 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
748 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
749 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
750 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
751 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF } },
752 { RTL_TEXTENCODING_ISO_8859_1,
753 { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
754 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
755 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
756 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
757 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
758 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
759 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
760 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
761 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
762 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
763 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
764 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
765 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
766 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
767 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
768 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
769 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
770 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
771 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
772 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
773 0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
774 0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
775 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
776 0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,
777 0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,
778 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
779 0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7,
780 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF,
781 0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,
782 0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
783 0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7,
784 0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x00FF } },
785 { RTL_TEXTENCODING_ISO_8859_2,
786 { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
787 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
788 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
789 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
790 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
791 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
792 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
793 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
794 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
795 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
796 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
797 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
798 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
799 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
800 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
801 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
802 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
803 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
804 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
805 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
806 0x00A0,0x0104,0x02D8,0x0141,0x00A4,0x013D,0x015A,0x00A7,
807 0x00A8,0x0160,0x015E,0x0164,0x0179,0x00AD,0x017D,0x017B,
808 0x00B0,0x0105,0x02DB,0x0142,0x00B4,0x013E,0x015B,0x02C7,
809 0x00B8,0x0161,0x015F,0x0165,0x017A,0x02DD,0x017E,0x017C,
810 0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7,
811 0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E,
812 0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7,
813 0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF,
814 0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7,
815 0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F,
816 0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7,
817 0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9 } },
818 { RTL_TEXTENCODING_ISO_8859_3,
819 { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
820 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
821 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
822 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
823 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
824 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
825 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
826 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
827 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
828 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
829 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
830 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
831 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
832 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
833 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
834 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
835 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
836 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
837 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
838 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
839 0x00A0,0x0126,0x02D8,0x00A3,0x00A4,0xFFFF,0x0124,0x00A7,
840 0x00A8,0x0130,0x015E,0x011E,0x0134,0x00AD,0xFFFF,0x017B,
841 0x00B0,0x0127,0x00B2,0x00B3,0x00B4,0x00B5,0x0125,0x00B7,
842 0x00B8,0x0131,0x015F,0x011F,0x0135,0x00BD,0xFFFF,0x017C,
843 0x00C0,0x00C1,0x00C2,0xFFFF,0x00C4,0x010A,0x0108,0x00C7,
844 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
845 0xFFFF,0x00D1,0x00D2,0x00D3,0x00D4,0x0120,0x00D6,0x00D7,
846 0x011C,0x00D9,0x00DA,0x00DB,0x00DC,0x016C,0x015C,0x00DF,
847 0x00E0,0x00E1,0x00E2,0xFFFF,0x00E4,0x010B,0x0109,0x00E7,
848 0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
849 0xFFFF,0x00F1,0x00F2,0x00F3,0x00F4,0x0121,0x00F6,0x00F7,
850 0x011D,0x00F9,0x00FA,0x00FB,0x00FC,0x016D,0x015D,0x02D9 } },
851
852 { RTL_TEXTENCODING_ISO_8859_6,
853 { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
854 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
855 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
856 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
857 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
858 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
859 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
860 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
861 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
862 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
863 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
864 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
865 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
866 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
867 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
868 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
869 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
870 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
871 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
872 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
873 0x00A0,0xFFFF,0xFFFF,0xFFFF,0x00A4,0xFFFF,0xFFFF,0xFFFF,
874 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x060C,0x00AD,0xFFFF,0xFFFF,
875 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
876 0xFFFF,0xFFFF,0xFFFF,0x061B,0xFFFF,0xFFFF,0xFFFF,0x061F,
877 0xFFFF,0x0621,0x0622,0x0623,0x0624,0x0625,0x0626,0x0627,
878 0x0628,0x0629,0x062A,0x062B,0x062C,0x062D,0x062E,0x062F,
879 0x0630,0x0631,0x0632,0x0633,0x0634,0x0635,0x0636,0x0637,
880 0x0638,0x0639,0x063A,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
881 0x0640,0x0641,0x0642,0x0643,0x0644,0x0645,0x0646,0x0647,
882 0x0648,0x0649,0x064A,0x064B,0x064C,0x064D,0x064E,0x064F,
883 0x0650,0x0651,0x0652,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
884 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF } },
885
886 { RTL_TEXTENCODING_ISO_8859_8,
887 { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
888 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
889 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
890 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
891 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
892 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
893 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
894 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
895 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
896 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
897 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
898 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
899 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
900 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
901 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
902 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
903 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
904 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
905 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
906 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
907 0x00A0,0xFFFF,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
908 0x00A8,0x00A9,0x00D7,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
909 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
910 0x00B8,0x00B9,0x00F7,0x00BB,0x00BC,0x00BD,0x00BE,0xFFFF,
911 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
912 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
913 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
914 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x2017,
915 0x05D0,0x05D1,0x05D2,0x05D3,0x05D4,0x05D5,0x05D6,0x05D7,
916 0x05D8,0x05D9,0x05DA,0x05DB,0x05DC,0x05DD,0x05DE,0x05DF,
917 0x05E0,0x05E1,0x05E2,0x05E3,0x05E4,0x05E5,0x05E6,0x05E7,
918 0x05E8,0x05E9,0x05EA,0xFFFF,0xFFFF,0x200E,0x200F,0xFFFF } },
919
920 { RTL_TEXTENCODING_TIS_620,
921 { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
922 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
923 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
924 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
925 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
926 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
927 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
928 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
929 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
930 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
931 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
932 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
933 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
934 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
935 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
936 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
937 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
938 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
939 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
940 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
941 0x00A0,0x0E01,0x0E02,0x0E03,0x0E04,0x0E05,0x0E06,0x0E07, // !
942 0x0E08,0x0E09,0x0E0A,0x0E0B,0x0E0C,0x0E0D,0x0E0E,0x0E0F,
943 0x0E10,0x0E11,0x0E12,0x0E13,0x0E14,0x0E15,0x0E16,0x0E17,
944 0x0E18,0x0E19,0x0E1A,0x0E1B,0x0E1C,0x0E1D,0x0E1E,0x0E1F,
945 0x0E20,0x0E21,0x0E22,0x0E23,0x0E24,0x0E25,0x0E26,0x0E27,
946 0x0E28,0x0E29,0x0E2A,0x0E2B,0x0E2C,0x0E2D,0x0E2E,0x0E2F,
947 0x0E30,0x0E31,0x0E32,0x0E33,0x0E34,0x0E35,0x0E36,0x0E37,
948 0x0E38,0x0E39,0x0E3A,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x0E3F,
949 0x0E40,0x0E41,0x0E42,0x0E43,0x0E44,0x0E45,0x0E46,0x0E47,
950 0x0E48,0x0E49,0x0E4A,0x0E4B,0x0E4C,0x0E4D,0x0E4E,0x0E4F,
951 0x0E50,0x0E51,0x0E52,0x0E53,0x0E54,0x0E55,0x0E56,0x0E57,
952 0x0E58,0x0E59,0x0E5A,0x0E5B,0xFFFF,0xFFFF,0xFFFF,0xFFFF } },
953 { RTL_TEXTENCODING_MS_874,
954 { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
955 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
956 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
957 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
958 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
959 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
960 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
961 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
962 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
963 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
964 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
965 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
966 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
967 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
968 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
969 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
970 0x20AC,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x2026,0xFFFF,0xFFFF,
971 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
972 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
973 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
974 0x00A0,0x0E01,0x0E02,0x0E03,0x0E04,0x0E05,0x0E06,0x0E07,
975 0x0E08,0x0E09,0x0E0A,0x0E0B,0x0E0C,0x0E0D,0x0E0E,0x0E0F,
976 0x0E10,0x0E11,0x0E12,0x0E13,0x0E14,0x0E15,0x0E16,0x0E17,
977 0x0E18,0x0E19,0x0E1A,0x0E1B,0x0E1C,0x0E1D,0x0E1E,0x0E1F,
978 0x0E20,0x0E21,0x0E22,0x0E23,0x0E24,0x0E25,0x0E26,0x0E27,
979 0x0E28,0x0E29,0x0E2A,0x0E2B,0x0E2C,0x0E2D,0x0E2E,0x0E2F,
980 0x0E30,0x0E31,0x0E32,0x0E33,0x0E34,0x0E35,0x0E36,0x0E37,
981 0x0E38,0x0E39,0x0E3A,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x0E3F,
982 0x0E40,0x0E41,0x0E42,0x0E43,0x0E44,0x0E45,0x0E46,0x0E47,
983 0x0E48,0x0E49,0x0E4A,0x0E4B,0x0E4C,0x0E4D,0x0E4E,0x0E4F,
984 0x0E50,0x0E51,0x0E52,0x0E53,0x0E54,0x0E55,0x0E56,0x0E57,
985 0x0E58,0x0E59,0x0E5A,0x0E5B,0xFFFF,0xFFFF,0xFFFF,0xFFFF } },
986 { RTL_TEXTENCODING_MS_1255,
987 { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
988 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
989 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
990 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
991 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
992 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
993 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
994 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
995 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
996 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
997 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
998 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
999 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
1000 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
1001 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
1002 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
1003 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,
1004 0x02C6,0x2030,0xFFFF,0x2039,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1005 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
1006 0x02DC,0x2122,0xFFFF,0x203A,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1007 0x00A0,0x00A1,0x00A2,0x00A3,0x20AA,0x00A5,0x00A6,0x00A7,
1008 0x00A8,0x00A9,0x00D7,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
1009 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
1010 0x00B8,0x00B9,0x00F7,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,
1011 0x05B0,0x05B1,0x05B2,0x05B3,0x05B4,0x05B5,0x05B6,0x05B7,
1012 0x05B8,0x05B9,0xFFFF,0x05BB,0x05BC,0x05BD,0x05BE,0x05BF,
1013 0x05C0,0x05C1,0x05C2,0x05C3,0x05F0,0x05F1,0x05F2,0x05F3,
1014 0x05F4,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1015 0x05D0,0x05D1,0x05D2,0x05D3,0x05D4,0x05D5,0x05D6,0x05D7,
1016 0x05D8,0x05D9,0x05DA,0x05DB,0x05DC,0x05DD,0x05DE,0x05DF,
1017 0x05E0,0x05E1,0x05E2,0x05E3,0x05E4,0x05E5,0x05E6,0x05E7,
1018 0x05E8,0x05E9,0x05EA,0xFFFF,0xFFFF,0x200E,0x200F,0xFFFF } },
1019 { RTL_TEXTENCODING_MS_1256,
1020 { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
1021 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
1022 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
1023 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
1024 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
1025 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
1026 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
1027 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
1028 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
1029 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
1030 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
1031 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
1032 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
1033 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
1034 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
1035 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
1036 0x20AC,0x067E,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,
1037 0x02C6,0x2030,0x0679,0x2039,0x0152,0x0686,0x0698,0x0688,
1038 0x06AF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
1039 0x06A9,0x2122,0x0691,0x203A,0x0153,0x200C,0x200D,0x06BA,
1040 0x00A0,0x060C,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
1041 0x00A8,0x00A9,0x06BE,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
1042 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
1043 0x00B8,0x00B9,0x061B,0x00BB,0x00BC,0x00BD,0x00BE,0x061F,
1044 0x06C1,0x0621,0x0622,0x0623,0x0624,0x0625,0x0626,0x0627,
1045 0x0628,0x0629,0x062A,0x062B,0x062C,0x062D,0x062E,0x062F,
1046 0x0630,0x0631,0x0632,0x0633,0x0634,0x0635,0x0636,0x00D7,
1047 0x0637,0x0638,0x0639,0x063A,0x0640,0x0641,0x0642,0x0643,
1048 0x00E0,0x0644,0x00E2,0x0645,0x0646,0x0647,0x0648,0x00E7,
1049 0x00E8,0x00E9,0x00EA,0x00EB,0x0649,0x064A,0x00EE,0x00EF,
1050 0x064B,0x064C,0x064D,0x064E,0x00F4,0x064F,0x0650,0x00F7,
1051 0x0651,0x00F9,0x0652,0x00FB,0x00FC,0x200E,0x200F,0x06D2 } },
1052 { RTL_TEXTENCODING_MS_1257,
1053 { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
1054 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
1055 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
1056 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
1057 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
1058 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
1059 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
1060 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
1061 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
1062 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
1063 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
1064 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
1065 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
1066 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
1067 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
1068 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
1069 0x20AC,0xFFFF,0x201A,0xFFFF,0x201E,0x2026,0x2020,0x2021,
1070 0xFFFF,0x2030,0xFFFF,0x2039,0xFFFF,0x00A8,0x02C7,0x00B8,
1071 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
1072 0xFFFF,0x2122,0xFFFF,0x203A,0xFFFF,0x00AF,0x02DB,0xFFFF,
1073 0x00A0,0xFFFF,0x00A2,0x00A3,0x00A4,0xFFFF,0x00A6,0x00A7,
1074 0x00D8,0x00A9,0x0156,0x00AB,0x00AC,0x00AD,0x00AE,0x00C6,
1075 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
1076 0x00F8,0x00B9,0x0157,0x00BB,0x00BC,0x00BD,0x00BE,0x00E6,
1077 0x0104,0x012E,0x0100,0x0106,0x00C4,0x00C5,0x0118,0x0112,
1078 0x010C,0x00C9,0x0179,0x0116,0x0122,0x0136,0x012A,0x013B,
1079 0x0160,0x0143,0x0145,0x00D3,0x014C,0x00D5,0x00D6,0x00D7,
1080 0x0172,0x0141,0x015A,0x016A,0x00DC,0x017B,0x017D,0x00DF,
1081 0x0105,0x012F,0x0101,0x0107,0x00E4,0x00E5,0x0119,0x0113,
1082 0x010D,0x00E9,0x017A,0x0117,0x0123,0x0137,0x012B,0x013C,
1083 0x0161,0x0144,0x0146,0x00F3,0x014D,0x00F5,0x00F6,0x00F7,
1084 0x0173,0x0142,0x015B,0x016B,0x00FC,0x017C,0x017E,0x02D9 } },
1085 { RTL_TEXTENCODING_MS_1258,
1086 { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
1087 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
1088 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
1089 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
1090 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
1091 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
1092 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
1093 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
1094 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
1095 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
1096 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
1097 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
1098 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
1099 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
1100 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
1101 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
1102 0x20AC,0xFFFF,0x201A,0x0192,0x201E,0x2026,0x2020,0x2021,
1103 0x02C6,0x2030,0xFFFF,0x2039,0x0152,0xFFFF,0xFFFF,0xFFFF,
1104 0xFFFF,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
1105 0x02DC,0x2122,0xFFFF,0x203A,0x0153,0xFFFF,0xFFFF,0x0178,
1106 0x00A0,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
1107 0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
1108 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
1109 0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,
1110 0x00C0,0x00C1,0x00C2,0x0102,0x00C4,0x00C5,0x00C6,0x00C7,
1111 0x00C8,0x00C9,0x00CA,0x00CB,0x0300,0x00CD,0x00CE,0x00CF,
1112 0x0110,0x00D1,0x0309,0x00D3,0x00D4,0x01A0,0x00D6,0x00D7,
1113 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x01AF,0x0303,0x00DF,
1114 0x00E0,0x00E1,0x00E2,0x0103,0x00E4,0x00E5,0x00E6,0x00E7,
1115 0x00E8,0x00E9,0x00EA,0x00EB,0x0301,0x00ED,0x00EE,0x00EF,
1116 0x0111,0x00F1,0x0323,0x00F3,0x00F4,0x01A1,0x00F6,0x00F7,
1117 0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x01B0,0x20AB,0x00FF } },
1118 { RTL_TEXTENCODING_KOI8_U, // RFC 2319
1119 { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
1120 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
1121 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
1122 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
1123 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
1124 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
1125 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
1126 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
1127 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
1128 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
1129 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
1130 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
1131 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
1132 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
1133 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
1134 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
1135 0x2500,0x2502,0x250C,0x2510,0x2514,0x2518,0x251C,0x2524,
1136 0x252C,0x2534,0x253C,0x2580,0x2584,0x2588,0x258C,0x2590,
1137 0x2591,0x2592,0x2593,0x2320,0x25A0,0x2219,0x221A,0x2248,
1138 0x2264,0x2265,0x00A0,0x2321,0x00B0,0x00B2,0x00B7,0x00F7,
1139 0x2550,0x2551,0x2552,0x0451,0x0454,0x2554,0x0456,0x0457,
1140 0x2557,0x2558,0x2559,0x255A,0x255B,0x0491,0x255D,0x255E,
1141 0x255F,0x2560,0x2561,0x0401,0x0404,0x2563,0x0406,0x0407,
1142 0x2566,0x2567,0x2568,0x2569,0x256A,0x0490,0x256C,0x00A9,
1143 0x044E,0x0430,0x0431,0x0446,0x0434,0x0435,0x0444,0x0433,
1144 0x0445,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,
1145 0x043F,0x044F,0x0440,0x0441,0x0442,0x0443,0x0436,0x0432,
1146 0x044C,0x044B,0x0437,0x0448,0x044D,0x0449,0x0447,0x044A,
1147 0x042E,0x0410,0x0411,0x0426,0x0414,0x0415,0x0424,0x0413,
1148 0x0425,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,
1149 0x041F,0x042F,0x0420,0x0421,0x0422,0x0423,0x0416,0x0412,
1150 0x042C,0x042B,0x0417,0x0428,0x042D,0x0429,0x0427,0x042A } },
1151 { RTL_TEXTENCODING_ADOBE_STANDARD,
1152 { 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1153 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1154 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1155 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1156 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x2019,
1157 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
1158 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
1159 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
1160 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
1161 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
1162 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
1163 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
1164 0x2018,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
1165 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
1166 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
1167 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0xFFFF,
1168 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1169 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1170 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1171 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1172 0xFFFF,0x00A1,0x00A2,0x00A3,0x2215,0x00A5,0x0192,0x00A7,
1173 0x00A4,0x0027,0x201C,0x00AB,0x2039,0x203A,0xFB01,0xFB02,
1174 0xFFFF,0x2013,0x2020,0x2021,0x00B7,0xFFFF,0x00B6,0x2022,
1175 0x201A,0x201E,0x201D,0x00BB,0x2026,0x2030,0xFFFF,0x00BF,
1176 0xFFFF,0x0060,0x00B4,0x02C6,0x02DC,0x00AF,0x02D8,0x02D9,
1177 0x00A8,0xFFFF,0x02DA,0x00B8,0xFFFF,0x02DD,0x02DB,0x02C7,
1178 0x2014,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1179 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1180 0xFFFF,0x00C6,0xFFFF,0x00AA,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1181 0x0141,0x00D8,0x0152,0x00BA,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1182 0xFFFF,0x00E6,0xFFFF,0xFFFF,0xFFFF,0x0131,0xFFFF,0xFFFF,
1183 0x0142,0x00F8,0x0153,0x00DF,0xFFFF,0xFFFF,0xFFFF,0xFFFF } },
1184 { RTL_TEXTENCODING_ADOBE_SYMBOL,
1185 { 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1186 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1187 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1188 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1189 0x0020,0x0021,0x2200,0x0023,0x2203,0x0025,0x0026,0x220B,
1190 0x0028,0x0029,0x2217,0x002B,0x002C,0x2212,0x002E,0x002F,
1191 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
1192 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
1193 0x2245,0x0391,0x0392,0x03A7,0x0394,0x0395,0x03A6,0x0393,
1194 0x0397,0x0399,0x03D1,0x039A,0x039B,0x039C,0x039D,0x039F,
1195 0x03A0,0x0398,0x03A1,0x03A3,0x03A4,0x03A5,0x03C2,0x03A9,
1196 0x039E,0x03A8,0x0396,0x005B,0x2234,0x005D,0x22A5,0x005F,
1197 0xF8E5,0x03B1,0x03B2,0x03C7,0x03B4,0x03B5,0x03C6,0x03B3,
1198 0x03B7,0x03B9,0x03D5,0x03BA,0x03BB,0x03BC,0x03BD,0x03BF,
1199 0x03C0,0x03B8,0x03C1,0x03C3,0x03C4,0x03C5,0x03D6,0x03C9,
1200 0x03BE,0x03C8,0x03B6,0x007B,0x007C,0x007D,0x223C,0xFFFF,
1201 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1202 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1203 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1204 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1205 0x20AC,0x03D2,0x2032,0x2264,0x2215,0x221E,0x0192,0x2663,
1206 0x2666,0x2665,0x2660,0x2194,0x2190,0x2191,0x2192,0x2193,
1207 0x00B0,0x00B1,0x2033,0x2265,0x00D7,0x221D,0x2202,0x2022,
1208 0x00F7,0x2260,0x2261,0x2248,0x2026,0x23AF,0x23D0,0x21B5,
1209 0x2135,0x2111,0x211C,0x2118,0x2297,0x2295,0x2205,0x2229,
1210 0x222A,0x2283,0x2287,0x2284,0x2282,0x2286,0x2208,0x2209,
1211 0x2220,0x2207,0xF6DA,0xF6D9,0xF6DB,0x220F,0x221A,0x22C5,
1212 0x00AC,0x2227,0x2228,0x21D4,0x21D0,0x21D1,0x21D2,0x21D3,
1213 0x25CA,0x2329,0xF8E8,0xF8E9,0xF8EA,0x2211,0x239B,0x239C,
1214 0x239D,0x23A1,0x23A2,0x23A3,0x23A7,0x23A8,0x23A9,0x23AA,
1215 0xFFFF,0x232A,0x222B,0x2320,0x23AE,0x2321,0x239E,0x239F,
1216 0x23A0,0x23A4,0x23A5,0x23A6,0x23AB,0x23AC,0x23AD,0xFFFF } },
1217 { RTL_TEXTENCODING_ADOBE_DINGBATS,
1218 { 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1219 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1220 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1221 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1222 // 20
1223 0x0020,0x2701,0x2702,0x2703,0x2704,0x260E,0x2706,0x2707,
1224 0x2708,0x2709,0x261B,0x261E,0x270C,0x270D,0x270E,0x270F,
1225 0x2710,0x2711,0x2712,0x2713,0x2714,0x2715,0x2716,0x2717,
1226 0x2718,0x2719,0x271A,0x271B,0x271C,0x271D,0x271E,0x271F,
1227 // 40
1228 0x2720,0x2721,0x2722,0x2723,0x2724,0x2725,0x2726,0x2727,
1229 0x2605,0x2729,0x272A,0x272B,0x272C,0x272D,0x272E,0x272F,
1230 0x2730,0x2731,0x2732,0x2733,0x2734,0x2735,0x2736,0x2737,
1231 0x2738,0x2739,0x273A,0x273B,0x273C,0x273D,0x273E,0x273F,
1232 // 60
1233 0x2740,0x2741,0x2742,0x2743,0x2744,0x2745,0x2746,0x2747,
1234 0x2748,0x2749,0x274A,0x274B,0x25CF,0x274D,0x25A0,0x274F,
1235 0x2750,0x2751,0x2752,0x25B2,0x25BC,0x25C6,0x2756,0x25D7,
1236 0x2758,0x2759,0x275A,0x275B,0x275C,0x275D,0x275E,0xFFFF,
1237 // 80
1238 0xF8D7,0xF8D8,0xF8D9,0xF8DA,0xF8DB,0xF8DC,0xF8DD,0xF8DE,
1239 0xF8DF,0xF8E0,0xF8E1,0xF8E2,0xF8E3,0xF8E4,0xFFFF,0xFFFF,
1240 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1241 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
1242 // A0
1243 0xFFFF,0x2761,0x2762,0x2763,0x2764,0x2765,0x2766,0x2767,
1244 0x2663,0x2666,0x2665,0x2660,0x2460,0x2461,0x2462,0x2463,
1245 0x2464,0x2465,0x2466,0x2467,0x2468,0x2469,0x2776,0x2777,
1246 0x2778,0x2779,0x277A,0x277B,0x277C,0x277D,0x277E,0x277F,
1247 // C0
1248 0x2780,0x2781,0x2782,0x2783,0x2784,0x2785,0x2786,0x2787,
1249 0x2788,0x2789,0x278A,0x278B,0x278C,0x278D,0x278E,0x278F,
1250 0x2790,0x2791,0x2792,0x2793,0x2794,0x2795,0x2796,0x2797,
1251 0x2798,0x2799,0x279A,0x279B,0x279C,0x279D,0x279E,0x279F,
1252 // E0
1253 0x27A0,0x27A1,0x27A2,0x27A3,0x27A4,0x27A5,0x27A6,0x27A7,
1254 0x27A8,0x27A9,0x27AA,0x27AB,0x27AC,0x27AD,0x27AE,0x27AF,
1255 0xFFFF,0x27B1,0x27B2,0x27B3,0x27B4,0x27B5,0x27B6,0x27B7,
1256 0x27B8,0x27B9,0x27BA,0x27BB,0x27BC,0x27BD,0x27BE,0xFFFF } },
1257 { RTL_TEXTENCODING_PT154,
1258 { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
1259 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
1260 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
1261 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
1262 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
1263 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
1264 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
1265 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
1266 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
1267 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
1268 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
1269 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
1270 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
1271 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
1272 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
1273 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
1274 0x0496,0x0492,0x04EE,0x0493,0x201E,0x2026,0x04B6,0x04AE,
1275 0x04B2,0x04AF,0x04A0,0x04E2,0x04A2,0x049A,0x04BA,0x04B8,
1276 0x0497,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
1277 0x04B3,0x04B7,0x04A1,0x04E3,0x04A3,0x049B,0x04BB,0x04B9,
1278 0x00A0,0x040E,0x045E,0x0408,0x04E8,0x0498,0x04B0,0x00A7,
1279 0x0401,0x00A9,0x04D8,0x00AB,0x00AC,0x04EF,0x00AE,0x049C,
1280 0x00B0,0x04B1,0x0406,0x0456,0x0499,0x04E9,0x00B6,0x00B7,
1281 0x0451,0x2116,0x04D9,0x00BB,0x0458,0x04AA,0x04AB,0x049D,
1282 0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417,
1283 0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,0x041F,
1284 0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427,
1285 0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,0x042F,
1286 0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437,
1287 0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E,0x043F,
1288 0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447,
1289 0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E,0x044F } } };
1290 for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) {
1291 testSingleByteCharSet(data[i]);
1292 }
1293 }
1294
testComplex()1295 void Test::testComplex() {
1296 static ComplexCharSetTest const data[]
1297 = { { RTL_TEXTENCODING_ASCII_US,
1298 RTL_CONSTASCII_STRINGPARAM("\x01\"3De$~"),
1299 { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E },
1300 7,
1301 true,
1302 true,
1303 true,
1304 false,
1305 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1306 #if WITH_LOCALE_ALL || WITH_LOCALE_zh
1307 { RTL_TEXTENCODING_EUC_CN,
1308 RTL_CONSTASCII_STRINGPARAM("\x01\"3De$~\xA1\xB9\xF0\xC5"),
1309 { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E,
1310 0x300D,0x9E4B },
1311 9,
1312 true,
1313 true,
1314 true,
1315 false,
1316 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1317 { RTL_TEXTENCODING_EUC_TW,
1318 RTL_CONSTASCII_STRINGPARAM(
1319 "\x01\"3De$~\xC5\xF0\x8E\xA4\xDC\xD9"),
1320 { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E,
1321 0x4ED9,0xD87E,0xDD68 },
1322 10,
1323 true,
1324 true,
1325 true,
1326 false,
1327 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1328 { RTL_TEXTENCODING_GB_18030,
1329 RTL_CONSTASCII_STRINGPARAM("\x01\"3De$~"),
1330 { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E },
1331 7,
1332 true,
1333 true,
1334 true,
1335 false,
1336 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1337 { RTL_TEXTENCODING_GB_18030,
1338 RTL_CONSTASCII_STRINGPARAM("\x81\x40\xFE\xFE"),
1339 { 0x4E02,0xE4C5 },
1340 2,
1341 true,
1342 true,
1343 true,
1344 false,
1345 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1346 { RTL_TEXTENCODING_GB_18030,
1347 RTL_CONSTASCII_STRINGPARAM(
1348 "\x81\x30\xB1\x33\x81\x30\xD3\x30\x81\x36\xA5\x31"),
1349 { 0x028A,0x0452,0x200F },
1350 3,
1351 true,
1352 true,
1353 true,
1354 false,
1355 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1356 { RTL_TEXTENCODING_GB_18030,
1357 RTL_CONSTASCII_STRINGPARAM(
1358 "\xFE\x50\xFE\x51\xFE\x52\xFE\x53\xFE\x54\xFE\x55\xFE\x56"
1359 "\xFE\x57\xFE\x58\xFE\x59\xFE\x5A\xFE\x5B\xFE\x5C\xFE\x5D"
1360 "\xFE\x5E\xFE\x5F\xFE\x60\xFE\x61\xFE\x62\xFE\x63\xFE\x64"
1361 "\xFE\x65\xFE\x66\xFE\x67\xFE\x68\xFE\x69\xFE\x6A\xFE\x6B"
1362 "\xFE\x6C\xFE\x6D\xFE\x6E\xFE\x6F\xFE\x70\xFE\x71\xFE\x72"
1363 "\xFE\x73\xFE\x74\xFE\x75\xFE\x76\xFE\x77\xFE\x78\xFE\x79"
1364 "\xFE\x7A\xFE\x7B\xFE\x7C\xFE\x7D\xFE\x7E\xFE\x80\xFE\x81"
1365 "\xFE\x82\xFE\x83\xFE\x84\xFE\x85\xFE\x86\xFE\x87\xFE\x88"
1366 "\xFE\x89\xFE\x8A\xFE\x8B\xFE\x8C\xFE\x8D\xFE\x8E\xFE\x8F"
1367 "\xFE\x90\xFE\x91\xFE\x92\xFE\x93\xFE\x94\xFE\x95\xFE\x96"
1368 "\xFE\x97\xFE\x98\xFE\x99\xFE\x9A\xFE\x9B\xFE\x9C\xFE\x9D"
1369 "\xFE\x9E\xFE\x9F\xFE\xA0"),
1370 { 0x2E81,0xE816,0xE817,0xE818,0x2E84,0x3473,0x3447,0x2E88,
1371 0x2E8B,0xE81E,0x359E,0x361A,0x360E,0x2E8C,0x2E97,0x396E,
1372 0x3918,0xE826,0x39CF,0x39DF,0x3A73,0x39D0,0xE82B,0xE82C,
1373 0x3B4E,0x3C6E,0x3CE0,0x2EA7,0xE831,0xE832,0x2EAA,0x4056,
1374 0x415F,0x2EAE,0x4337,0x2EB3,0x2EB6,0x2EB7,0xE83B,0x43B1,
1375 0x43AC,0x2EBB,0x43DD,0x44D6,0x4661,0x464C,0xE843,0x4723,
1376 0x4729,0x477C,0x478D,0x2ECA,0x4947,0x497A,0x497D,0x4982,
1377 0x4983,0x4985,0x4986,0x499F,0x499B,0x49B7,0x49B6,0xE854,
1378 0xE855,0x4CA3,0x4C9F,0x4CA0,0x4CA1,0x4C77,0x4CA2,0x4D13,
1379 0x4D14,0x4D15,0x4D16,0x4D17,0x4D18,0x4D19,0x4DAE,0xE864 },
1380 80,
1381 true,
1382 true,
1383 false,
1384 false,
1385 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1386 #endif
1387 #if WITH_LOCALE_ALL || WITH_LOCALE_ja
1388 { RTL_TEXTENCODING_ISO_2022_JP,
1389 RTL_CONSTASCII_STRINGPARAM("\x01\"3De$\\~"),
1390 { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x005C,0x007E },
1391 8,
1392 false,
1393 true,
1394 true,
1395 false,
1396 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1397 { RTL_TEXTENCODING_ISO_2022_JP,
1398 RTL_CONSTASCII_STRINGPARAM("\x1B(B\x01\"3De$\\~"),
1399 { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x005C,0x007E },
1400 8,
1401 false,
1402 true,
1403 false,
1404 false,
1405 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1406 { RTL_TEXTENCODING_ISO_2022_JP,
1407 RTL_CONSTASCII_STRINGPARAM("\x1B(J\x01\"3De$\\~"),
1408 { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x00A5,0x00AF },
1409 8,
1410 false,
1411 true,
1412 false,
1413 false,
1414 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1415 { RTL_TEXTENCODING_ISO_2022_JP,
1416 RTL_CONSTASCII_STRINGPARAM("\x1B$B\x26\x21\x27\x71\x1B(B"),
1417 { 0x0391,0x044F },
1418 2,
1419 false,
1420 true,
1421 true,
1422 false,
1423 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1424 #endif
1425 #if WITH_LOCALE_ALL || WITH_LOCALE_ko
1426 { RTL_TEXTENCODING_ISO_2022_KR,
1427 RTL_CONSTASCII_STRINGPARAM("\x1B$)C\x01\"3De$\\~"),
1428 { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x005C,0x007E },
1429 8,
1430 false,
1431 true,
1432 true,
1433 false,
1434 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1435 { RTL_TEXTENCODING_ISO_2022_KR,
1436 RTL_CONSTASCII_STRINGPARAM(
1437 "\x1B$)C\x0E\x25\x21\x0F\x0D\x0Ax\x0E\x48\x7E\x0F"),
1438 { 0x2170,0x000D,0x000A,0x0078,0xD79D },
1439 5,
1440 false,
1441 true,
1442 true,
1443 false,
1444 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1445 #endif
1446 #if WITH_LOCALE_ALL || WITH_LOCALE_zh
1447 { RTL_TEXTENCODING_ISO_2022_CN,
1448 RTL_CONSTASCII_STRINGPARAM(
1449 "\x01\"3De$\\~\x1B$)G\x0E\x45\x70\x1B$*H\x1BN\x22\x22"
1450 "\x45\x70\x0F\x1B$)A\x0E\x26\x21\x0F"),
1451 { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x005C,0x007E,
1452 0x4ED9,0x531F,0x4ED9,0x0391 },
1453 12,
1454 false,
1455 true,
1456 false,
1457 false,
1458 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1459 { RTL_TEXTENCODING_ISO_2022_CN,
1460 RTL_CONSTASCII_STRINGPARAM(
1461 "\x01\"3De$\\~\x1B$)A\x0E\x26\x21\x1B$*H\x1BN\x22\x22"
1462 "\x26\x21\x0F\x0D\x0A\x1B$)A\x0E\x26\x21\x0F"),
1463 { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x005C,0x007E,
1464 0x0391,0x531F,0x0391,0x000D,0x000A,0x0391 },
1465 14,
1466 false,
1467 true,
1468 true,
1469 false,
1470 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1471 #endif
1472 // The following does not work as long as Big5-HKSCS maps to
1473 // Unicode PUA instead of Plane 2. Use the next two tests
1474 // instead:
1475 // { RTL_TEXTENCODING_BIG5_HKSCS,
1476 // RTL_CONSTASCII_STRINGPARAM(
1477 // "\x01\"3De$~\x88\x56\xF9\xFE\xFA\x5E\xA1\x40\xF9\xD5"),
1478 // { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E,0x0100,
1479 // 0xFFED,0xD849,0xDD13,0x3000,0x9F98 },
1480 // 13,
1481 // true,
1482 // true,
1483 // true,
1484 // false,
1485 // RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1486 #if WITH_LOCALE_ALL || WITH_LOCALE_zh
1487 { RTL_TEXTENCODING_BIG5_HKSCS,
1488 RTL_CONSTASCII_STRINGPARAM(
1489 "\x01\"3De$~\x88\x56\xF9\xFE\xFA\x5E\xA1\x40\xF9\xD5"),
1490 { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E,0x0100,
1491 0xFFED,0xE01E,0x3000,0x9F98 },
1492 12,
1493 true,
1494 true,
1495 true,
1496 false,
1497 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1498 { RTL_TEXTENCODING_BIG5_HKSCS,
1499 RTL_CONSTASCII_STRINGPARAM(
1500 "\x01\"3De$~\x88\x56\xF9\xFE\xFA\x5E\xA1\x40\xF9\xD5"),
1501 { 0x0001,0x0022,0x0033,0x0044,0x0065,0x0024,0x007E,0x0100,
1502 0xFFED,0xD849,0xDD13,0x3000,0x9F98 },
1503 13,
1504 true,
1505 false,
1506 true,
1507 false,
1508 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1509 { RTL_TEXTENCODING_BIG5_HKSCS,
1510 RTL_CONSTASCII_STRINGPARAM(
1511 "\xC6\xA1\xC6\xCF\xC6\xD3\xC6\xD5\xC6\xD7\xC6\xDE\xC6\xDF"
1512 "\xC6\xFE\xC7\x40\xC7\x7E\xC7\xA1\xC7\xFE"),
1513 { 0x2460,0xF6E0,0xF6E4,0xF6E6,0xF6E8,0xF6EF,0xF6F0,0x3058,
1514 0x3059,0x30A4,0x30A5,0x041A },
1515 12,
1516 true,
1517 true,
1518 true,
1519 false,
1520 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1521 { RTL_TEXTENCODING_BIG5_HKSCS,
1522 RTL_CONSTASCII_STRINGPARAM("\x81\x40\x84\xFE"),
1523 { 0xEEB8,0xF12B },
1524 2,
1525 true,
1526 true,
1527 true,
1528 false,
1529 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1530 { RTL_TEXTENCODING_BIG5_HKSCS,
1531 RTL_CONSTASCII_STRINGPARAM(
1532 "\x81\x40\x8D\xFE\x8E\x40\xA0\xFE\xC6\xA1\xC8\xFE\xFA\x40"
1533 "\xFE\xFE"),
1534 { 0xEEB8,0xF6B0,0xE311,0xEEB7,0xF6B1,0xF848,0xE000,0xE310 },
1535 8,
1536 true,
1537 false,
1538 true,
1539 false,
1540 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1541 { RTL_TEXTENCODING_BIG5_HKSCS,
1542 RTL_CONSTASCII_STRINGPARAM("\xAD\xC5\x94\x55"),
1543 { 0x5029,0x7250 },
1544 2,
1545 true,
1546 true,
1547 true,
1548 false,
1549 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1550 { RTL_TEXTENCODING_BIG5_HKSCS,
1551 RTL_CONSTASCII_STRINGPARAM("\xFA\x5F\xA0\xE4"),
1552 { 0x5029,0x7250 },
1553 2,
1554 true,
1555 true,
1556 false,
1557 false,
1558 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1559 { RTL_TEXTENCODING_BIG5_HKSCS,
1560 RTL_CONSTASCII_STRINGPARAM("\xA0\x40\xA0\x7E\xA0\xA1\xA0\xFE"),
1561 { 0xEE1B,0xEE59,0xEE5A,0xEEB7 },
1562 4,
1563 true,
1564 false,
1565 true,
1566 false,
1567 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1568 { RTL_TEXTENCODING_BIG5,
1569 RTL_CONSTASCII_STRINGPARAM("\xA1\x45"),
1570 { 0x2027 },
1571 1,
1572 true,
1573 true,
1574 true,
1575 false,
1576 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1577 { RTL_TEXTENCODING_BIG5,
1578 RTL_CONSTASCII_STRINGPARAM(
1579 "\xC6\xCF\xC6\xD3\xC6\xD5\xC6\xD7\xC6\xDE\xC6\xDF"),
1580 { 0x306B,0x306F,0x3071,0x3073,0x307A,0x307B },
1581 6,
1582 true,
1583 true,
1584 true,
1585 false,
1586 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1587 { RTL_TEXTENCODING_BIG5,
1588 RTL_CONSTASCII_STRINGPARAM(
1589 "\xC7\xFD\xC7\xFE\xC8\x40\xC8\x7E\xC8\xA1\xC8\xFE"),
1590 { 0xF7AA,0xF7AB,0xF7AC,0xF7EA,0xF7EB,0xF848 },
1591 6,
1592 true,
1593 true,
1594 true,
1595 false,
1596 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1597 { RTL_TEXTENCODING_BIG5,
1598 RTL_CONSTASCII_STRINGPARAM("\xA0\x40\xA0\x7E\xA0\xA1\xA0\xFE"),
1599 { 0xEE1B,0xEE59,0xEE5A,0xEEB7 },
1600 4,
1601 true,
1602 true,
1603 true,
1604 false,
1605 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1606 #endif
1607 { RTL_TEXTENCODING_MS_950,
1608 RTL_CONSTASCII_STRINGPARAM(
1609 "\xC6\xA1\xC6\xFE\xC7\x40\xC7\x7E\xC7\xA1\xC7\xFE\xC8\x40"
1610 "\xC8\x7E\xC8\xA1\xC8\xFE"),
1611 { 0xF6B1,0xF70E,0xF70F,0xF74D,0xF74E,0xF7AB,0xF7AC,0xF7EA,
1612 0xF7EB,0xF848 },
1613 10,
1614 true,
1615 true,
1616 true,
1617 false,
1618 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1619 { RTL_TEXTENCODING_MS_950,
1620 RTL_CONSTASCII_STRINGPARAM("\xA0\x40\xA0\x7E\xA0\xA1\xA0\xFE"),
1621 { 0xEE1B,0xEE59,0xEE5A,0xEEB7 },
1622 4,
1623 true,
1624 true,
1625 true,
1626 false,
1627 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1628
1629 // Test Unicode beyond BMP:
1630
1631 // FIXME The second m_bForward test (requiring a context) does not
1632 // work for UTF7:
1633 // { RTL_TEXTENCODING_UTF7,
1634 // RTL_CONSTASCII_STRINGPARAM("+2EndEw-"),
1635 // { 0xD849,0xDD13 },
1636 // 2,
1637 // true,
1638 // true,
1639 // true,
1640 // false,
1641 // RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1642 { RTL_TEXTENCODING_UTF8,
1643 RTL_CONSTASCII_STRINGPARAM("\xF0\xA2\x94\x93"),
1644 { 0xD849,0xDD13 },
1645 2,
1646 true,
1647 true,
1648 true,
1649 false,
1650 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1651 #if WITH_LOCALE_ALL || WITH_LOCALE_zh
1652 { RTL_TEXTENCODING_GB_18030,
1653 RTL_CONSTASCII_STRINGPARAM("\x95\x39\xC5\x37"),
1654 { 0xD849,0xDD13 },
1655 2,
1656 true,
1657 true,
1658 true,
1659 false,
1660 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1661 { RTL_TEXTENCODING_BIG5_HKSCS,
1662 RTL_CONSTASCII_STRINGPARAM("\xFA\x5E"),
1663 { 0xD849,0xDD13 },
1664 2,
1665 true,
1666 false,
1667 true,
1668 false,
1669 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1670
1671 // Test GBK (aka CP936):
1672
1673 { RTL_TEXTENCODING_GBK,
1674 RTL_CONSTASCII_STRINGPARAM("\xFD\x7C\xC1\xFA\xFD\x9B"),
1675 { 0x9F76,0x9F99,0x9FA5 },
1676 3,
1677 true,
1678 true,
1679 true,
1680 false,
1681 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1682 #endif
1683 { RTL_TEXTENCODING_MS_936,
1684 RTL_CONSTASCII_STRINGPARAM("\xFD\x7C\xC1\xFA\xFD\x9B"),
1685 { 0x9F76,0x9F99,0x9FA5 },
1686 3,
1687 true,
1688 true,
1689 true,
1690 false,
1691 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1692 #if WITH_LOCALE_ALL || WITH_LOCALE_zh
1693 { RTL_TEXTENCODING_GBK,
1694 RTL_CONSTASCII_STRINGPARAM(
1695 "\xFE\x50\xFE\x54\xFE\x55\xFE\x56"
1696 "\xFE\x57\xFE\x58\xFE\x5A\xFE\x5B\xFE\x5C\xFE\x5D"
1697 "\xFE\x5E\xFE\x5F\xFE\x60\xFE\x62\xFE\x63\xFE\x64"
1698 "\xFE\x65\xFE\x68\xFE\x69\xFE\x6A\xFE\x6B"
1699 "\xFE\x6E\xFE\x6F\xFE\x70\xFE\x71\xFE\x72"
1700 "\xFE\x73\xFE\x74\xFE\x75\xFE\x77\xFE\x78\xFE\x79"
1701 "\xFE\x7A\xFE\x7B\xFE\x7C\xFE\x7D\xFE\x80\xFE\x81"
1702 "\xFE\x82\xFE\x83\xFE\x84\xFE\x85\xFE\x86\xFE\x87\xFE\x88"
1703 "\xFE\x89\xFE\x8A\xFE\x8B\xFE\x8C\xFE\x8D\xFE\x8E\xFE\x8F"
1704 "\xFE\x92\xFE\x93\xFE\x94\xFE\x95\xFE\x96"
1705 "\xFE\x97\xFE\x98\xFE\x99\xFE\x9A\xFE\x9B\xFE\x9C\xFE\x9D"
1706 "\xFE\x9E\xFE\x9F"),
1707 { 0x2E81,0x2E84,0x3473,0x3447,0x2E88,0x2E8B,0x359E,0x361A,
1708 0x360E,0x2E8C,0x2E97,0x396E,0x3918,0x39CF,0x39DF,0x3A73,
1709 0x39D0,0x3B4E,0x3C6E,0x3CE0,0x2EA7,0x2EAA,0x4056,0x415F,
1710 0x2EAE,0x4337,0x2EB3,0x2EB6,0x2EB7,0x43B1,0x43AC,0x2EBB,
1711 0x43DD,0x44D6,0x4661,0x464C,0x4723,0x4729,0x477C,0x478D,
1712 0x2ECA,0x4947,0x497A,0x497D,0x4982,0x4983,0x4985,0x4986,
1713 0x499F,0x499B,0x49B7,0x49B6,0x4CA3,0x4C9F,0x4CA0,0x4CA1,
1714 0x4C77,0x4CA2,0x4D13,0x4D14,0x4D15,0x4D16,0x4D17,0x4D18,
1715 0x4D19,0x4DAE },
1716 66,
1717 true,
1718 true,
1719 true,
1720 false,
1721 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1722 #endif
1723 #if WITH_LOCALE_ALL || WITH_LOCALE_ja
1724 { RTL_TEXTENCODING_EUC_JP,
1725 RTL_CONSTASCII_STRINGPARAM("?"),
1726 { 0xFF0D },
1727 1,
1728 true,
1729 false,
1730 true,
1731 false,
1732 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_QUESTIONMARK },
1733 #endif
1734 // Test of "JIS X 0208 row 13" (taken from CP932; added to
1735 // ISO-2022-JP and EUC-JP; 74 of the 83 characters introduce
1736 // mappings to new Unicode characters):
1737 { RTL_TEXTENCODING_MS_932,
1738 RTL_CONSTASCII_STRINGPARAM(
1739 "\x87\x40\x87\x41\x87\x42\x87\x43\x87\x44\x87\x45\x87\x46"
1740 "\x87\x47\x87\x48\x87\x49\x87\x4A\x87\x4B\x87\x4C\x87\x4D"
1741 "\x87\x4E\x87\x4F\x87\x50\x87\x51\x87\x52\x87\x53\x87\x54"
1742 "\x87\x55\x87\x56\x87\x57\x87\x58\x87\x59\x87\x5A\x87\x5B"
1743 "\x87\x5C\x87\x5D\x87\x5F\x87\x60\x87\x61\x87\x62\x87\x63"
1744 "\x87\x64\x87\x65\x87\x66\x87\x67\x87\x68\x87\x69\x87\x6A"
1745 "\x87\x6B\x87\x6C\x87\x6D\x87\x6E\x87\x6F\x87\x70\x87\x71"
1746 "\x87\x72\x87\x73\x87\x74\x87\x75\x87\x7E\x87\x80\x87\x81"
1747 "\x87\x82\x87\x83\x87\x84\x87\x85\x87\x86\x87\x87\x87\x88"
1748 "\x87\x89\x87\x8A\x87\x8B\x87\x8C\x87\x8D\x87\x8E\x87\x8F"
1749 "\x87\x90\x87\x91\x87\x92\x87\x93\x87\x94\x87\x95\x87\x96"
1750 "\x87\x97\x87\x98\x87\x99\x87\x9A\x87\x9B\x87\x9C"),
1751 { 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468,
1752 0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,0x2470,0x2471,
1753 0x2472,0x2473,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,
1754 0x2167,0x2168,0x2169,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327,
1755 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,
1756 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x337B,
1757 0x301D,0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7,
1758 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x2252,0x2261,
1759 0x222B,0x222E,0x2211,0x221A,0x22A5,0x2220,0x221F,0x22BF,0x2235,
1760 0x2229,0x222A },
1761 83,
1762 true,
1763 true,
1764 false,
1765 false,
1766 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1767 #if WITH_LOCALE_ALL || WITH_LOCALE_ja
1768 { RTL_TEXTENCODING_SHIFT_JIS,
1769 RTL_CONSTASCII_STRINGPARAM("\x00\xFA\x6F\xFA\x71"),
1770 {0x0000, 0x4F92, 0x4F9A},
1771 3,
1772 true,
1773 true,
1774 true,
1775 false,
1776 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1777 { RTL_TEXTENCODING_SHIFT_JIS,
1778 RTL_CONSTASCII_STRINGPARAM(
1779 "\x87\x40\x87\x41\x87\x42\x87\x43\x87\x44\x87\x45\x87\x46"
1780 "\x87\x47\x87\x48\x87\x49\x87\x4A\x87\x4B\x87\x4C\x87\x4D"
1781 "\x87\x4E\x87\x4F\x87\x50\x87\x51\x87\x52\x87\x53\x87\x54"
1782 "\x87\x55\x87\x56\x87\x57\x87\x58\x87\x59\x87\x5A\x87\x5B"
1783 "\x87\x5C\x87\x5D\x87\x5F\x87\x60\x87\x61\x87\x62\x87\x63"
1784 "\x87\x64\x87\x65\x87\x66\x87\x67\x87\x68\x87\x69\x87\x6A"
1785 "\x87\x6B\x87\x6C\x87\x6D\x87\x6E\x87\x6F\x87\x70\x87\x71"
1786 "\x87\x72\x87\x73\x87\x74\x87\x75\x87\x7E\x87\x80\x87\x81"
1787 "\x87\x82\x87\x83\x87\x84\x87\x85\x87\x86\x87\x87\x87\x88"
1788 "\x87\x89\x87\x8A\x87\x8B\x87\x8C\x87\x8D\x87\x8E\x87\x8F"
1789 "\x87\x90\x87\x91\x87\x92\x87\x93\x87\x94\x87\x95\x87\x96"
1790 "\x87\x97\x87\x98\x87\x99\x87\x9A\x87\x9B\x87\x9C"),
1791 { 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468,
1792 0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,0x2470,0x2471,
1793 0x2472,0x2473,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,
1794 0x2167,0x2168,0x2169,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327,
1795 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,
1796 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x337B,
1797 0x301D,0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7,
1798 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x2252,0x2261,
1799 0x222B,0x222E,0x2211,0x221A,0x22A5,0x2220,0x221F,0x22BF,0x2235,
1800 0x2229,0x222A },
1801 83,
1802 true,
1803 true,
1804 false,
1805 false,
1806 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1807 { RTL_TEXTENCODING_ISO_2022_JP,
1808 RTL_CONSTASCII_STRINGPARAM(
1809 "\x1B$B\x2D\x21\x2D\x22\x2D\x23\x2D\x24\x2D\x25\x2D\x26"
1810 "\x2D\x27\x2D\x28\x2D\x29\x2D\x2A\x2D\x2B\x2D\x2C\x2D\x2D"
1811 "\x2D\x2E\x2D\x2F\x2D\x30\x2D\x31\x2D\x32\x2D\x33\x2D\x34"
1812 "\x2D\x35\x2D\x36\x2D\x37\x2D\x38\x2D\x39\x2D\x3A\x2D\x3B"
1813 "\x2D\x3C\x2D\x3D\x2D\x3E\x2D\x40\x2D\x41\x2D\x42\x2D\x43"
1814 "\x2D\x44\x2D\x45\x2D\x46\x2D\x47\x2D\x48\x2D\x49\x2D\x4A"
1815 "\x2D\x4B\x2D\x4C\x2D\x4D\x2D\x4E\x2D\x4F\x2D\x50\x2D\x51"
1816 "\x2D\x52\x2D\x53\x2D\x54\x2D\x55\x2D\x56\x2D\x5F\x2D\x60"
1817 "\x2D\x61\x2D\x62\x2D\x63\x2D\x64\x2D\x65\x2D\x66\x2D\x67"
1818 "\x2D\x68\x2D\x69\x2D\x6A\x2D\x6B\x2D\x6C\x2D\x6D\x2D\x6E"
1819 "\x2D\x6F\x2D\x70\x2D\x71\x2D\x72\x2D\x73\x2D\x74\x2D\x75"
1820 "\x2D\x76\x2D\x77\x2D\x78\x2D\x79\x2D\x7A\x2D\x7B\x2D\x7C"
1821 "\x1B(B"),
1822 { 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468,
1823 0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,0x2470,0x2471,
1824 0x2472,0x2473,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,
1825 0x2167,0x2168,0x2169,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327,
1826 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,
1827 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x337B,
1828 0x301D,0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7,
1829 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x2252,0x2261,
1830 0x222B,0x222E,0x2211,0x221A,0x22A5,0x2220,0x221F,0x22BF,0x2235,
1831 0x2229,0x222A },
1832 83,
1833 false,
1834 true,
1835 false,
1836 false,
1837 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1838 { RTL_TEXTENCODING_ISO_2022_JP,
1839 RTL_CONSTASCII_STRINGPARAM(
1840 "\x1B$B\x2D\x21\x2D\x22\x2D\x23\x2D\x24\x2D\x25\x2D\x26"
1841 "\x2D\x27\x2D\x28\x2D\x29\x2D\x2A\x2D\x2B\x2D\x2C\x2D\x2D"
1842 "\x2D\x2E\x2D\x2F\x2D\x30\x2D\x31\x2D\x32\x2D\x33\x2D\x34"
1843 "\x2D\x35\x2D\x36\x2D\x37\x2D\x38\x2D\x39\x2D\x3A\x2D\x3B"
1844 "\x2D\x3C\x2D\x3D\x2D\x3E\x2D\x40\x2D\x41\x2D\x42\x2D\x43"
1845 "\x2D\x44\x2D\x45\x2D\x46\x2D\x47\x2D\x48\x2D\x49\x2D\x4A"
1846 "\x2D\x4B\x2D\x4C\x2D\x4D\x2D\x4E\x2D\x4F\x2D\x50\x2D\x51"
1847 "\x2D\x52\x2D\x53\x2D\x54\x2D\x55\x2D\x56\x2D\x5F\x2D\x60"
1848 "\x2D\x61\x2D\x62\x2D\x63\x2D\x64\x2D\x65\x2D\x66\x2D\x67"
1849 "\x2D\x68\x2D\x69\x2D\x6A\x2D\x6B\x2D\x6C\x2D\x6D\x2D\x6E"
1850 "\x2D\x6F\x2D\x73\x2D\x74\x2D\x78\x2D\x79\x1B(B"),
1851 { 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468,
1852 0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,0x2470,0x2471,
1853 0x2472,0x2473,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,
1854 0x2167,0x2168,0x2169,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327,
1855 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,
1856 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x337B,
1857 0x301D,0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7,
1858 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x222E,0x2211,
1859 0x221F,0x22BF },
1860 74,
1861 false,
1862 true,
1863 true,
1864 false,
1865 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1866 { RTL_TEXTENCODING_EUC_JP,
1867 RTL_CONSTASCII_STRINGPARAM(
1868 "\xAD\xA1\xAD\xA2\xAD\xA3\xAD\xA4\xAD\xA5\xAD\xA6\xAD\xA7"
1869 "\xAD\xA8\xAD\xA9\xAD\xAA\xAD\xAB\xAD\xAC\xAD\xAD\xAD\xAE"
1870 "\xAD\xAF\xAD\xB0\xAD\xB1\xAD\xB2\xAD\xB3\xAD\xB4\xAD\xB5"
1871 "\xAD\xB6\xAD\xB7\xAD\xB8\xAD\xB9\xAD\xBA\xAD\xBB\xAD\xBC"
1872 "\xAD\xBD\xAD\xBE\xAD\xC0\xAD\xC1\xAD\xC2\xAD\xC3\xAD\xC4"
1873 "\xAD\xC5\xAD\xC6\xAD\xC7\xAD\xC8\xAD\xC9\xAD\xCA\xAD\xCB"
1874 "\xAD\xCC\xAD\xCD\xAD\xCE\xAD\xCF\xAD\xD0\xAD\xD1\xAD\xD2"
1875 "\xAD\xD3\xAD\xD4\xAD\xD5\xAD\xD6\xAD\xDF\xAD\xE0\xAD\xE1"
1876 "\xAD\xE2\xAD\xE3\xAD\xE4\xAD\xE5\xAD\xE6\xAD\xE7\xAD\xE8"
1877 "\xAD\xE9\xAD\xEA\xAD\xEB\xAD\xEC\xAD\xED\xAD\xEE\xAD\xEF"
1878 "\xAD\xF0\xAD\xF1\xAD\xF2\xAD\xF3\xAD\xF4\xAD\xF5\xAD\xF6"
1879 "\xAD\xF7\xAD\xF8\xAD\xF9\xAD\xFA\xAD\xFB\xAD\xFC"),
1880 { 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468,
1881 0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,0x2470,0x2471,
1882 0x2472,0x2473,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,
1883 0x2167,0x2168,0x2169,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327,
1884 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,
1885 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x337B,
1886 0x301D,0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7,
1887 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x2252,0x2261,
1888 0x222B,0x222E,0x2211,0x221A,0x22A5,0x2220,0x221F,0x22BF,0x2235,
1889 0x2229,0x222A },
1890 83,
1891 true,
1892 true,
1893 false,
1894 false,
1895 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1896 { RTL_TEXTENCODING_EUC_JP,
1897 RTL_CONSTASCII_STRINGPARAM(
1898 "\xAD\xA1\xAD\xA2\xAD\xA3\xAD\xA4\xAD\xA5\xAD\xA6\xAD\xA7"
1899 "\xAD\xA8\xAD\xA9\xAD\xAA\xAD\xAB\xAD\xAC\xAD\xAD\xAD\xAE"
1900 "\xAD\xAF\xAD\xB0\xAD\xB1\xAD\xB2\xAD\xB3\xAD\xB4\xAD\xB5"
1901 "\xAD\xB6\xAD\xB7\xAD\xB8\xAD\xB9\xAD\xBA\xAD\xBB\xAD\xBC"
1902 "\xAD\xBD\xAD\xBE\xAD\xC0\xAD\xC1\xAD\xC2\xAD\xC3\xAD\xC4"
1903 "\xAD\xC5\xAD\xC6\xAD\xC7\xAD\xC8\xAD\xC9\xAD\xCA\xAD\xCB"
1904 "\xAD\xCC\xAD\xCD\xAD\xCE\xAD\xCF\xAD\xD0\xAD\xD1\xAD\xD2"
1905 "\xAD\xD3\xAD\xD4\xAD\xD5\xAD\xD6\xAD\xDF\xAD\xE0\xAD\xE1"
1906 "\xAD\xE2\xAD\xE3\xAD\xE4\xAD\xE5\xAD\xE6\xAD\xE7\xAD\xE8"
1907 "\xAD\xE9\xAD\xEA\xAD\xEB\xAD\xEC\xAD\xED\xAD\xEE\xAD\xEF"
1908 "\xAD\xF3\xAD\xF4\xAD\xF8\xAD\xF9"),
1909 { 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468,
1910 0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,0x2470,0x2471,
1911 0x2472,0x2473,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,
1912 0x2167,0x2168,0x2169,0x3349,0x3314,0x3322,0x334D,0x3318,0x3327,
1913 0x3303,0x3336,0x3351,0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,
1914 0x333B,0x339C,0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x337B,
1915 0x301D,0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7,
1916 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x222E,0x2211,
1917 0x221F,0x22BF },
1918 74,
1919 true,
1920 true,
1921 true,
1922 false,
1923 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1924
1925 { RTL_TEXTENCODING_EUC_JP,
1926 RTL_CONSTASCII_STRINGPARAM("\xB9\xF5"),
1927 { 0x9ED2 },
1928 1,
1929 true,
1930 true,
1931 true,
1932 false,
1933 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1934 #endif
1935 // Test ISO-8859-x/MS-125x range 0x80--9F:
1936
1937 { RTL_TEXTENCODING_ISO_8859_1,
1938 RTL_CONSTASCII_STRINGPARAM(
1939 "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
1940 "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
1941 "\x9E\x9F"),
1942 { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
1943 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
1944 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
1945 0x009B,0x009C,0x009D,0x009E,0x009F },
1946 32,
1947 true,
1948 true,
1949 true,
1950 false,
1951 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1952 { RTL_TEXTENCODING_ISO_8859_2,
1953 RTL_CONSTASCII_STRINGPARAM(
1954 "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
1955 "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
1956 "\x9E\x9F"),
1957 { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
1958 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
1959 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
1960 0x009B,0x009C,0x009D,0x009E,0x009F },
1961 32,
1962 true,
1963 true,
1964 true,
1965 false,
1966 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1967 { RTL_TEXTENCODING_ISO_8859_3,
1968 RTL_CONSTASCII_STRINGPARAM(
1969 "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
1970 "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
1971 "\x9E\x9F"),
1972 { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
1973 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
1974 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
1975 0x009B,0x009C,0x009D,0x009E,0x009F },
1976 32,
1977 true,
1978 true,
1979 true,
1980 false,
1981 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1982 { RTL_TEXTENCODING_ISO_8859_4,
1983 RTL_CONSTASCII_STRINGPARAM(
1984 "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
1985 "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
1986 "\x9E\x9F"),
1987 { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
1988 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
1989 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
1990 0x009B,0x009C,0x009D,0x009E,0x009F },
1991 32,
1992 true,
1993 true,
1994 true,
1995 false,
1996 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
1997 { RTL_TEXTENCODING_ISO_8859_5,
1998 RTL_CONSTASCII_STRINGPARAM(
1999 "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
2000 "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
2001 "\x9E\x9F"),
2002 { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
2003 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
2004 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
2005 0x009B,0x009C,0x009D,0x009E,0x009F },
2006 32,
2007 true,
2008 true,
2009 true,
2010 false,
2011 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2012 { RTL_TEXTENCODING_ISO_8859_6,
2013 RTL_CONSTASCII_STRINGPARAM(
2014 "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
2015 "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
2016 "\x9E\x9F"),
2017 { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
2018 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
2019 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
2020 0x009B,0x009C,0x009D,0x009E,0x009F },
2021 32,
2022 true,
2023 true,
2024 true,
2025 false,
2026 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2027 { RTL_TEXTENCODING_ISO_8859_7,
2028 RTL_CONSTASCII_STRINGPARAM(
2029 "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
2030 "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
2031 "\x9E\x9F"),
2032 { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
2033 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
2034 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
2035 0x009B,0x009C,0x009D,0x009E,0x009F },
2036 32,
2037 true,
2038 true,
2039 true,
2040 false,
2041 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2042 { RTL_TEXTENCODING_ISO_8859_8,
2043 RTL_CONSTASCII_STRINGPARAM(
2044 "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
2045 "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
2046 "\x9E\x9F"),
2047 { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
2048 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
2049 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
2050 0x009B,0x009C,0x009D,0x009E,0x009F },
2051 32,
2052 true,
2053 true,
2054 true,
2055 false,
2056 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2057 { RTL_TEXTENCODING_ISO_8859_9,
2058 RTL_CONSTASCII_STRINGPARAM(
2059 "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
2060 "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
2061 "\x9E\x9F"),
2062 { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
2063 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
2064 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
2065 0x009B,0x009C,0x009D,0x009E,0x009F },
2066 32,
2067 true,
2068 true,
2069 true,
2070 false,
2071 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2072 { RTL_TEXTENCODING_ISO_8859_14,
2073 RTL_CONSTASCII_STRINGPARAM(
2074 "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
2075 "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
2076 "\x9E\x9F"),
2077 { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
2078 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
2079 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
2080 0x009B,0x009C,0x009D,0x009E,0x009F },
2081 32,
2082 true,
2083 true,
2084 true,
2085 false,
2086 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2087 { RTL_TEXTENCODING_ISO_8859_15,
2088 RTL_CONSTASCII_STRINGPARAM(
2089 "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E"
2090 "\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D"
2091 "\x9E\x9F"),
2092 { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
2093 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
2094 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
2095 0x009B,0x009C,0x009D,0x009E,0x009F },
2096 32,
2097 true,
2098 true,
2099 true,
2100 false,
2101 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2102 { RTL_TEXTENCODING_MS_874,
2103 RTL_CONSTASCII_STRINGPARAM(""),
2104 { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
2105 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
2106 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
2107 0x009B,0x009C,0x009D,0x009E,0x009F },
2108 32,
2109 true,
2110 false,
2111 true,
2112 false,
2113 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
2114 { RTL_TEXTENCODING_MS_1250,
2115 RTL_CONSTASCII_STRINGPARAM(""),
2116 { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
2117 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
2118 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
2119 0x009B,0x009C,0x009D,0x009E,0x009F },
2120 32,
2121 true,
2122 false,
2123 true,
2124 false,
2125 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
2126 { RTL_TEXTENCODING_MS_1251,
2127 RTL_CONSTASCII_STRINGPARAM(""),
2128 { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
2129 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
2130 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
2131 0x009B,0x009C,0x009D,0x009E,0x009F },
2132 32,
2133 true,
2134 false,
2135 true,
2136 false,
2137 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
2138 { RTL_TEXTENCODING_MS_1252,
2139 RTL_CONSTASCII_STRINGPARAM(""),
2140 { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
2141 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
2142 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
2143 0x009B,0x009C,0x009D,0x009E,0x009F },
2144 32,
2145 true,
2146 false,
2147 true,
2148 false,
2149 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
2150 { RTL_TEXTENCODING_MS_1253,
2151 RTL_CONSTASCII_STRINGPARAM(""),
2152 { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
2153 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
2154 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
2155 0x009B,0x009C,0x009D,0x009E,0x009F },
2156 32,
2157 true,
2158 false,
2159 true,
2160 false,
2161 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
2162 { RTL_TEXTENCODING_MS_1254,
2163 RTL_CONSTASCII_STRINGPARAM(""),
2164 { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
2165 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
2166 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
2167 0x009B,0x009C,0x009D,0x009E,0x009F },
2168 32,
2169 true,
2170 false,
2171 true,
2172 false,
2173 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
2174 { RTL_TEXTENCODING_MS_1255,
2175 RTL_CONSTASCII_STRINGPARAM(""),
2176 { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
2177 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
2178 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
2179 0x009B,0x009C,0x009D,0x009E,0x009F },
2180 32,
2181 true,
2182 false,
2183 true,
2184 false,
2185 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
2186 { RTL_TEXTENCODING_MS_1256,
2187 RTL_CONSTASCII_STRINGPARAM(""),
2188 { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
2189 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
2190 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
2191 0x009B,0x009C,0x009D,0x009E,0x009F },
2192 32,
2193 true,
2194 false,
2195 true,
2196 false,
2197 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
2198 { RTL_TEXTENCODING_MS_1257,
2199 RTL_CONSTASCII_STRINGPARAM(""),
2200 { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
2201 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
2202 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
2203 0x009B,0x009C,0x009D,0x009E,0x009F },
2204 32,
2205 true,
2206 false,
2207 true,
2208 false,
2209 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
2210 { RTL_TEXTENCODING_MS_1258,
2211 RTL_CONSTASCII_STRINGPARAM(""),
2212 { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,0x0088,
2213 0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,
2214 0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,0x0098,0x0099,0x009A,
2215 0x009B,0x009C,0x009D,0x009E,0x009F },
2216 32,
2217 true,
2218 false,
2219 true,
2220 false,
2221 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
2222 { RTL_TEXTENCODING_MS_949,
2223 RTL_CONSTASCII_STRINGPARAM(
2224 "\xB0\xA1\xB0\xA2\x81\x41\x81\x42\xB0\xA3\x81\x43\x81\x44"
2225 "\xB0\xA4\xB0\xA5\xB0\xA6\xB0\xA7\x81\x45\x81\x46\x81\x47"
2226 "\x81\x48\x81\x49\xB0\xA8\xB0\xA9\xB0\xAA\xB0\xAB\xB0\xAC"
2227 "\xB0\xAD\xB0\xAE\xB0\xAF\x81\x4A\xB0\xB0\xB0\xB1\xB0\xB2"),
2228 { 0xAC00,0xAC01,0xAC02,0xAC03,0xAC04,0xAC05,0xAC06,0xAC07,0xAC08,
2229 0xAC09,0xAC0A,0xAC0B,0xAC0C,0xAC0D,0xAC0E,0xAC0F,0xAC10,0xAC11,
2230 0xAC12,0xAC13,0xAC14,0xAC15,0xAC16,0xAC17,0xAC18,0xAC19,0xAC1A,
2231 0xAC1B },
2232 28,
2233 true,
2234 true,
2235 true,
2236 false,
2237 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2238 { RTL_TEXTENCODING_MS_949,
2239 RTL_CONSTASCII_STRINGPARAM(
2240 "\xC9\xA1\xC9\xA2\xC9\xA3\xC9\xFC\xC9\xFD\xC9\xFE"
2241 "\xFE\xA1\xFE\xA2\xFE\xA3\xFE\xFC\xFE\xFD\xFE\xFE"),
2242 { 0xE000,0xE001,0xE002,0xE05B,0xE05C,0xE05D,
2243 0xE05E,0xE05F,0xE060,0xE0B9,0xE0BA,0xE0BB },
2244 12,
2245 true,
2246 true,
2247 true,
2248 false,
2249 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2250 #if WITH_LOCALE_ALL || WITH_LOCALE_ko
2251 { RTL_TEXTENCODING_EUC_KR,
2252 RTL_CONSTASCII_STRINGPARAM(
2253 "\xB0\xA1\xB0\xA2" "\xB0\xA3"
2254 "\xB0\xA4\xB0\xA5\xB0\xA6\xB0\xA7"
2255 "\xB0\xA8\xB0\xA9\xB0\xAA\xB0\xAB\xB0\xAC"
2256 "\xB0\xAD\xB0\xAE\xB0\xAF" "\xB0\xB0\xB0\xB1\xB0\xB2"),
2257 { 0xAC00,0xAC01, 0xAC04, 0xAC07,0xAC08,
2258 0xAC09,0xAC0A, 0xAC10,0xAC11,
2259 0xAC12,0xAC13,0xAC14,0xAC15,0xAC16,0xAC17, 0xAC19,0xAC1A,
2260 0xAC1B },
2261 18,
2262 true,
2263 true,
2264 true,
2265 false,
2266 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2267 { RTL_TEXTENCODING_EUC_KR,
2268 RTL_CONSTASCII_STRINGPARAM(
2269 "\xB0\xA1\xB0\xA2" "\xB0\xA3"
2270 "\xB0\xA4\xB0\xA5\xB0\xA6\xB0\xA7"
2271 "\xB0\xA8\xB0\xA9\xB0\xAA\xB0\xAB\xB0\xAC"
2272 "\xB0\xAD\xB0\xAE\xB0\xAF" "\xB0\xB0\xB0\xB1\xB0\xB2"),
2273 { 0xAC00,0xAC01,0xAC02,0xAC03,0xAC04,0xAC05,0xAC06,0xAC07,0xAC08,
2274 0xAC09,0xAC0A,0xAC0B,0xAC0C,0xAC0D,0xAC0E,0xAC0F,0xAC10,0xAC11,
2275 0xAC12,0xAC13,0xAC14,0xAC15,0xAC16,0xAC17,0xAC18,0xAC19,0xAC1A,
2276 0xAC1B },
2277 28,
2278 true,
2279 false,
2280 true,
2281 false,
2282 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
2283 { RTL_TEXTENCODING_EUC_KR,
2284 RTL_CONSTASCII_STRINGPARAM(
2285 "\xC9\xA1\xC9\xA2\xC9\xA3\xC9\xFC\xC9\xFD\xC9\xFE"
2286 "\xFE\xA1\xFE\xA2\xFE\xA3\xFE\xFC\xFE\xFD\xFE\xFE"),
2287 { 0xE000,0xE001,0xE002,0xE05B,0xE05C,0xE05D,
2288 0xE05E,0xE05F,0xE060,0xE0B9,0xE0BA,0xE0BB },
2289 12,
2290 true,
2291 true,
2292 true,
2293 false,
2294 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2295 #endif
2296 // Test UTF-8:
2297
2298 { RTL_TEXTENCODING_UTF8,
2299 RTL_CONSTASCII_STRINGPARAM("\x00"),
2300 { 0x0000 },
2301 1,
2302 false,
2303 true,
2304 true,
2305 false,
2306 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2307 { RTL_TEXTENCODING_UTF8,
2308 RTL_CONSTASCII_STRINGPARAM("\xEF\xBB\xBF"),
2309 { 0xFEFF },
2310 1,
2311 false,
2312 true,
2313 true,
2314 false,
2315 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2316 { RTL_TEXTENCODING_UTF8,
2317 RTL_CONSTASCII_STRINGPARAM("\xEF\xBB\xBF\xEF\xBB\xBF"),
2318 { 0xFEFF,0xFEFF },
2319 2,
2320 false,
2321 true,
2322 true,
2323 false,
2324 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2325 { RTL_TEXTENCODING_UTF8,
2326 RTL_CONSTASCII_STRINGPARAM("\xEF\xBB\xBF"),
2327 { 0 },
2328 0,
2329 false,
2330 true,
2331 true,
2332 true,
2333 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2334 { RTL_TEXTENCODING_UTF8,
2335 RTL_CONSTASCII_STRINGPARAM("\xEF\xBB\xBF\xEF\xBB\xBF"),
2336 { 0xFEFF },
2337 1,
2338 false,
2339 true,
2340 true,
2341 true,
2342 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2343 { RTL_TEXTENCODING_UTF8,
2344 RTL_CONSTASCII_STRINGPARAM("\x01\x02\x7E\x7F"),
2345 { 0x0001,0x0002,0x007E,0x007F },
2346 4,
2347 false,
2348 true,
2349 true,
2350 false,
2351 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2352 { RTL_TEXTENCODING_UTF8,
2353 RTL_CONSTASCII_STRINGPARAM("\xEF\xBF\xBF"),
2354 {0xFFFF},
2355 1,
2356 false,
2357 true,
2358 true,
2359 false,
2360 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2361
2362 // Test Java UTF-8:
2363
2364 { RTL_TEXTENCODING_JAVA_UTF8,
2365 RTL_CONSTASCII_STRINGPARAM(
2366 "\xEF\xBB\xBF\xC0\x80\x01\x20\x41\x7F\xED\xA0\x80"
2367 "\xED\xB0\x80"),
2368 { 0xFEFF,0x0000,0x0001,0x0020,0x0041,0x007F,0xD800,0xDC00 },
2369 8,
2370 false,
2371 true,
2372 true,
2373 true,
2374 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2375
2376 #if WITH_LOCALE_ALL || WITH_LOCALE_ja
2377 // Bug #112949#:
2378 { RTL_TEXTENCODING_SHIFT_JIS,
2379 RTL_CONSTASCII_STRINGPARAM("\x81\x63"),
2380 { 0x2026 },
2381 1,
2382 false,
2383 true,
2384 true,
2385 false,
2386 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2387 { RTL_TEXTENCODING_SHIFT_JIS,
2388 RTL_CONSTASCII_STRINGPARAM("\xA0\xFD\xFE\xFF"),
2389 { 0x00A0, 0x00A9, 0x2122, 0x2026 },
2390 4,
2391 false,
2392 true,
2393 false,
2394 false,
2395 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2396 { RTL_TEXTENCODING_SHIFT_JIS,
2397 RTL_CONSTASCII_STRINGPARAM(""),
2398 { 0x00A0, 0x00A9, 0x2122 },
2399 3,
2400 false,
2401 false,
2402 true,
2403 false,
2404 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
2405 #endif
2406 { RTL_TEXTENCODING_MS_932,
2407 RTL_CONSTASCII_STRINGPARAM("\x81\x63"),
2408 { 0x2026 },
2409 1,
2410 false,
2411 true,
2412 true,
2413 false,
2414 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2415 { RTL_TEXTENCODING_MS_932,
2416 RTL_CONSTASCII_STRINGPARAM("\xA0\xFD\xFE\xFF"),
2417 { 0x00A0, 0x00A9, 0x2122, 0x2026 },
2418 4,
2419 false,
2420 true,
2421 false,
2422 false,
2423 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2424 { RTL_TEXTENCODING_MS_932,
2425 RTL_CONSTASCII_STRINGPARAM(""),
2426 { 0x00A0, 0x00A9, 0x2122 },
2427 3,
2428 false,
2429 false,
2430 true,
2431 false,
2432 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_IGNORE },
2433 { RTL_TEXTENCODING_APPLE_JAPANESE,
2434 RTL_CONSTASCII_STRINGPARAM("\xA0\xFD\xFE\x81\x63"),
2435 { 0x00A0, 0x00A9, 0x2122, 0x2026 },
2436 4,
2437 false,
2438 true,
2439 true,
2440 false,
2441 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2442 { RTL_TEXTENCODING_APPLE_JAPANESE,
2443 RTL_CONSTASCII_STRINGPARAM("\xFF"),
2444 { 0x2026 },
2445 1,
2446 false,
2447 true,
2448 false,
2449 false,
2450 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2451
2452 { RTL_TEXTENCODING_ADOBE_STANDARD,
2453 RTL_CONSTASCII_STRINGPARAM("\x20\x2D\xA4\xB4\xC5"),
2454 { 0x0020, 0x002D, 0x2215, 0x00B7, 0x00AF },
2455 5,
2456 false,
2457 true,
2458 true,
2459 false,
2460 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2461 { RTL_TEXTENCODING_ADOBE_STANDARD,
2462 RTL_CONSTASCII_STRINGPARAM("\x20\x2D\xA4\xB4\xC5"),
2463 { 0x00A0, 0x00AD, 0x2044, 0x2219, 0x02C9 },
2464 5,
2465 false,
2466 false,
2467 true,
2468 false,
2469 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2470
2471 { RTL_TEXTENCODING_ADOBE_SYMBOL,
2472 RTL_CONSTASCII_STRINGPARAM("\x20\x44\x57\x6D\xA4"),
2473 { 0x0020, 0x0394, 0x03A9, 0x03BC, 0x2215 },
2474 5,
2475 false,
2476 true,
2477 true,
2478 false,
2479 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2480 { RTL_TEXTENCODING_ADOBE_SYMBOL,
2481 RTL_CONSTASCII_STRINGPARAM("\x20\x44\x57\x6D\xA4"),
2482 { 0x00A0, 0x2206, 0x2126, 0x00B5, 0x2044 },
2483 5,
2484 false,
2485 false,
2486 true,
2487 false,
2488 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2489
2490 #if WITH_LOCALE_ALL || WITH_LOCALE_ja
2491 // Bug #i62310#:
2492 { RTL_TEXTENCODING_SHIFT_JIS,
2493 RTL_CONSTASCII_STRINGPARAM(
2494 "\xF0\x40\xF0\x7E\xF0\x80\xF0\xFC\xF1\x40\xF9\xFC"),
2495 { 0xE000, 0xE03E, 0xE03F, 0xE0BB, 0xE0BC, 0xE757 },
2496 6,
2497 true,
2498 true,
2499 true,
2500 false,
2501 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2502 #endif
2503 // Bug #i73103#:
2504 { RTL_TEXTENCODING_MS_1258,
2505 RTL_CONSTASCII_STRINGPARAM(
2506 "\xC0\x41\xDE\xE3\xD2\xD4\xEC\xFD\xF2"),
2507 { 0x00C0, 0x0041, 0x0303, 0x0103, 0x0309, 0x00D4, 0x0301, 0x01B0,
2508 0x0323 },
2509 9,
2510 true,
2511 true,
2512 true,
2513 false,
2514 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2515 { RTL_TEXTENCODING_MS_1258,
2516 RTL_CONSTASCII_STRINGPARAM(
2517 "\xC0\x41\xDE\xE3\xD2\xD4\xEC\xFD\xF2"),
2518 { 0x00C0, 0x00C3, 0x1EB3, 0x1ED0, 0x1EF1 },
2519 5,
2520 false,
2521 false,
2522 true,
2523 false,
2524 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2525 #if WITH_LOCALE_ALL || WITH_LOCALE_FOR_SCRIPT_Deva
2526 { RTL_TEXTENCODING_ISCII_DEVANAGARI,
2527 RTL_CONSTASCII_STRINGPARAM(
2528 "\xD7\xE6\x20\xD4\xCF\xE8\xD6\x20"
2529 "\xC8\xD8\xD1\xE1\x20\xB3\xCA\xDC"
2530 "\xCF\xC4\xDA\xD7\x20\xD8\xDB\xA2"
2531 "\xC4\xDE\x20\xB1\xCF\x20\xCC\xDD"
2532 "\xD7\xD1\xCC\xDA\xC6\x20\xC4\xE5"
2533 "\xC6\xE5\xA2\x20\xB3\xE1\x20\xB3"
2534 "\xBD\xE8\xBD\xCF\xC8\xC6\x20\xB3"
2535 "\xE5\x20\xC9\xBD\xB3\xDA\xCF\x20"
2536 "\xB8\xDD\xB3\xE1\x20\xC3\xE1\x20"
2537 "\xEA"),
2538 { 0x0938, 0x094C, 0x0020, 0x0935, 0x0930, 0x094D, 0x0937, 0x0020,
2539 0x092A, 0x0939, 0x0932, 0x0947, 0x0020, 0x0915, 0x092C, 0x0940,
2540 0x0930, 0x0926, 0x093E, 0x0938, 0x0020, 0x0939, 0x093F, 0x0902,
2541 0x0926, 0x0942, 0x0020, 0x0914, 0x0930, 0x0020, 0x092E, 0x0941,
2542 0x0938, 0x0932, 0x092E, 0x093E, 0x0928, 0x0020, 0x0926, 0x094B,
2543 0x0928, 0x094B, 0x0902, 0x0020, 0x0915, 0x0947, 0x0020, 0x0915,
2544 0x091F, 0x094D, 0x091F, 0x0930, 0x092A, 0x0928, 0x0020, 0x0915,
2545 0x094B, 0x0020, 0x092B, 0x091F, 0x0915, 0x093E, 0x0930, 0x0020,
2546 0x091A, 0x0941, 0x0915, 0x0947, 0x0020, 0x0925, 0x0947, 0x0020,
2547 0x0964 },
2548 73,
2549 false,
2550 true,
2551 true,
2552 false,
2553 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2554 { RTL_TEXTENCODING_ISCII_DEVANAGARI,
2555 RTL_CONSTASCII_STRINGPARAM("\xE8\xE8\xE8\xE9\xA1\xE9\xEA\xE9"),
2556 { 0x094D, 0x200C, 0x094D, 0x200D, 0x0950, 0x93D },
2557 6,
2558 false,
2559 true,
2560 true,
2561 false,
2562 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR }
2563 #endif
2564 };
2565 for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) {
2566 doComplexCharSetTest(data[i]);
2567 }
2568 }
2569
testComplexCut()2570 void Test::testComplexCut() {
2571 #if WITH_LOCALE_ALL || WITH_LOCALE_ja || WITH_LOCALE_zh
2572 static ComplexCharSetTest const data[]
2573 = {
2574 #if WITH_LOCALE_ALL || WITH_LOCALE_ja
2575 { RTL_TEXTENCODING_EUC_JP,
2576 RTL_CONSTASCII_STRINGPARAM("\xA1"),
2577 { 0 },
2578 0,
2579 true,
2580 true,
2581 false,
2582 false,
2583 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2584 { RTL_TEXTENCODING_EUC_JP,
2585 RTL_CONSTASCII_STRINGPARAM("\x8E"),
2586 { 0 },
2587 0,
2588 true,
2589 true,
2590 false,
2591 false,
2592 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2593 { RTL_TEXTENCODING_EUC_JP,
2594 RTL_CONSTASCII_STRINGPARAM("\x8F"),
2595 { 0 },
2596 0,
2597 true,
2598 true,
2599 false,
2600 false,
2601 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2602 { RTL_TEXTENCODING_EUC_JP,
2603 RTL_CONSTASCII_STRINGPARAM("\x8F\xA1"),
2604 { 0 },
2605 0,
2606 true,
2607 true,
2608 false,
2609 false,
2610 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2611 #endif
2612 #if WITH_LOCALE_ALL || WITH_LOCALE_zh
2613 { RTL_TEXTENCODING_EUC_CN,
2614 RTL_CONSTASCII_STRINGPARAM("\xA1"),
2615 { 0 },
2616 0,
2617 true,
2618 true,
2619 false,
2620 false,
2621 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2622 #endif
2623 /* ,
2624 { RTL_TEXTENCODING_EUC_TW,
2625 RTL_CONSTASCII_STRINGPARAM("\xA1"),
2626 { 0 },
2627 0,
2628 true,
2629 true,
2630 false,
2631 false,
2632 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2633 { RTL_TEXTENCODING_EUC_TW,
2634 RTL_CONSTASCII_STRINGPARAM("\x8E"),
2635 { 0 },
2636 0,
2637 true,
2638 true,
2639 false,
2640 false,
2641 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2642 { RTL_TEXTENCODING_EUC_TW,
2643 RTL_CONSTASCII_STRINGPARAM("\x8E\xA1"),
2644 { 0 },
2645 0,
2646 true,
2647 true,
2648 false,
2649 false,
2650 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR },
2651 { RTL_TEXTENCODING_EUC_TW,
2652 RTL_CONSTASCII_STRINGPARAM("\x8E\xA1\xA1"),
2653 { 0 },
2654 0,
2655 true,
2656 true,
2657 false,
2658 false,
2659 RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR } */ };
2660 for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) {
2661 doComplexCharSetCutTest(data[i]);
2662 }
2663 #endif
2664 }
2665
testInvalidUtf7()2666 void Test::testInvalidUtf7() {
2667 auto const converter = rtl_createTextToUnicodeConverter(RTL_TEXTENCODING_UTF7);
2668 CPPUNIT_ASSERT(converter != nullptr);
2669 sal_Unicode buf[TEST_STRING_SIZE];
2670 sal_uInt32 info;
2671 sal_Size converted;
2672 auto const size = rtl_convertTextToUnicode(
2673 converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\x80"), buf, TEST_STRING_SIZE,
2674 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
2675 | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
2676 &info, &converted);
2677 CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
2678 CPPUNIT_ASSERT_EQUAL(OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
2679 CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
2680 CPPUNIT_ASSERT_EQUAL(sal_Size(1), converted);
2681 rtl_destroyTextToUnicodeConverter(converter);
2682 }
2683
testInvalidUtf8()2684 void Test::testInvalidUtf8() {
2685 // UTF-8, invalid bytes:
2686 {
2687 auto const converter = rtl_createTextToUnicodeConverter(
2688 RTL_TEXTENCODING_UTF8);
2689 CPPUNIT_ASSERT(converter != nullptr);
2690 sal_Unicode buf[TEST_STRING_SIZE];
2691 sal_uInt32 info;
2692 sal_Size converted;
2693 auto const size = rtl_convertTextToUnicode(
2694 converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\x80\xBF\xFE\xFF"),
2695 buf, TEST_STRING_SIZE,
2696 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
2697 | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
2698 | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
2699 | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
2700 &info, &converted);
2701 CPPUNIT_ASSERT_EQUAL(sal_Size(4), size);
2702 CPPUNIT_ASSERT_EQUAL(
2703 OUString(u"\uFFFD\uFFFD\uFFFD\uFFFD"),
2704 OUString(buf, sal_Int32(size)));
2705 CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
2706 CPPUNIT_ASSERT_EQUAL(sal_Size(4), converted);
2707 rtl_destroyTextToUnicodeConverter(converter);
2708 }
2709 // UTF-8, non-shortest two-byte sequence:
2710 {
2711 auto const converter = rtl_createTextToUnicodeConverter(
2712 RTL_TEXTENCODING_UTF8);
2713 CPPUNIT_ASSERT(converter != nullptr);
2714 sal_Unicode buf[TEST_STRING_SIZE];
2715 sal_uInt32 info;
2716 sal_Size converted;
2717 auto const size = rtl_convertTextToUnicode(
2718 converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xC0\x80"),
2719 buf, TEST_STRING_SIZE,
2720 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
2721 | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
2722 | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
2723 | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
2724 &info, &converted);
2725 CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
2726 CPPUNIT_ASSERT_EQUAL(
2727 OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
2728 CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
2729 CPPUNIT_ASSERT_EQUAL(sal_Size(2), converted);
2730 rtl_destroyTextToUnicodeConverter(converter);
2731 }
2732 // UTF-8, cut two-byte sequence:
2733 {
2734 auto const converter = rtl_createTextToUnicodeConverter(
2735 RTL_TEXTENCODING_UTF8);
2736 CPPUNIT_ASSERT(converter != nullptr);
2737 sal_Unicode buf[TEST_STRING_SIZE];
2738 sal_uInt32 info;
2739 sal_Size converted;
2740 auto const size = rtl_convertTextToUnicode(
2741 converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xC0"), buf,
2742 TEST_STRING_SIZE,
2743 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
2744 | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
2745 | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR),
2746 &info, &converted);
2747 CPPUNIT_ASSERT_EQUAL(sal_Size(0), size);
2748 CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOSMALL, info);
2749 CPPUNIT_ASSERT(converted <= 1);
2750 rtl_destroyTextToUnicodeConverter(converter);
2751 }
2752 // UTF-8, non-shortest three-byte sequence:
2753 {
2754 auto const converter = rtl_createTextToUnicodeConverter(
2755 RTL_TEXTENCODING_UTF8);
2756 CPPUNIT_ASSERT(converter != nullptr);
2757 sal_Unicode buf[TEST_STRING_SIZE];
2758 sal_uInt32 info;
2759 sal_Size converted;
2760 auto const size = rtl_convertTextToUnicode(
2761 converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xE0\x9F\xBF"),
2762 buf, TEST_STRING_SIZE,
2763 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
2764 | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
2765 | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
2766 | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
2767 &info, &converted);
2768 CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
2769 CPPUNIT_ASSERT_EQUAL(
2770 OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
2771 CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
2772 CPPUNIT_ASSERT_EQUAL(sal_Size(3), converted);
2773 rtl_destroyTextToUnicodeConverter(converter);
2774 }
2775 // UTF-8, cut three-byte sequence:
2776 {
2777 auto const converter = rtl_createTextToUnicodeConverter(
2778 RTL_TEXTENCODING_UTF8);
2779 CPPUNIT_ASSERT(converter != nullptr);
2780 sal_Unicode buf[TEST_STRING_SIZE];
2781 sal_uInt32 info;
2782 sal_Size converted;
2783 auto const size = rtl_convertTextToUnicode(
2784 converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xE0\x80"), buf,
2785 TEST_STRING_SIZE,
2786 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
2787 | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
2788 | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR),
2789 &info, &converted);
2790 CPPUNIT_ASSERT_EQUAL(sal_Size(0), size);
2791 CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOSMALL, info);
2792 CPPUNIT_ASSERT(converted <= 2);
2793 rtl_destroyTextToUnicodeConverter(converter);
2794 }
2795 // UTF-8, cut three-byte sequence followed by more:
2796 {
2797 auto const converter = rtl_createTextToUnicodeConverter(
2798 RTL_TEXTENCODING_UTF8);
2799 CPPUNIT_ASSERT(converter != nullptr);
2800 sal_Unicode buf[TEST_STRING_SIZE];
2801 sal_uInt32 info;
2802 sal_Size converted;
2803 auto const size = rtl_convertTextToUnicode(
2804 converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xE0\x80."), buf,
2805 TEST_STRING_SIZE,
2806 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
2807 | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
2808 | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
2809 | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
2810 &info, &converted);
2811 CPPUNIT_ASSERT_EQUAL(sal_Size(2), size);
2812 CPPUNIT_ASSERT_EQUAL(
2813 OUString(u"\uFFFD."), OUString(buf, sal_Int32(size)));
2814 CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
2815 CPPUNIT_ASSERT_EQUAL(sal_Size(3), converted);
2816 rtl_destroyTextToUnicodeConverter(converter);
2817 }
2818 // UTF-8, surrogates:
2819 {
2820 auto const converter = rtl_createTextToUnicodeConverter(
2821 RTL_TEXTENCODING_UTF8);
2822 CPPUNIT_ASSERT(converter != nullptr);
2823 sal_Unicode buf[TEST_STRING_SIZE];
2824 sal_uInt32 info;
2825 sal_Size converted;
2826 auto const size = rtl_convertTextToUnicode(
2827 converter, nullptr,
2828 RTL_CONSTASCII_STRINGPARAM("\xED\xA0\x80\xED\xB0\x80"), buf,
2829 TEST_STRING_SIZE,
2830 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
2831 | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
2832 | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
2833 | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
2834 &info, &converted);
2835 CPPUNIT_ASSERT_EQUAL(sal_Size(2), size);
2836 CPPUNIT_ASSERT_EQUAL(
2837 OUString(u"\uFFFD\uFFFD"), OUString(buf, sal_Int32(size)));
2838 CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
2839 CPPUNIT_ASSERT_EQUAL(sal_Size(6), converted);
2840 rtl_destroyTextToUnicodeConverter(converter);
2841 }
2842 // UTF-8, non-shortest four-byte sequence:
2843 {
2844 auto const converter = rtl_createTextToUnicodeConverter(
2845 RTL_TEXTENCODING_UTF8);
2846 CPPUNIT_ASSERT(converter != nullptr);
2847 sal_Unicode buf[TEST_STRING_SIZE];
2848 sal_uInt32 info;
2849 sal_Size converted;
2850 auto const size = rtl_convertTextToUnicode(
2851 converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xF0\x8F\xBF\xBF"),
2852 buf, TEST_STRING_SIZE,
2853 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
2854 | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
2855 | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
2856 | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
2857 &info, &converted);
2858 CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
2859 CPPUNIT_ASSERT_EQUAL(
2860 OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
2861 CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
2862 CPPUNIT_ASSERT_EQUAL(sal_Size(4), converted);
2863 rtl_destroyTextToUnicodeConverter(converter);
2864 }
2865 // UTF-8, too-large four-byte sequence:
2866 {
2867 auto const converter = rtl_createTextToUnicodeConverter(
2868 RTL_TEXTENCODING_UTF8);
2869 CPPUNIT_ASSERT(converter != nullptr);
2870 sal_Unicode buf[TEST_STRING_SIZE];
2871 sal_uInt32 info;
2872 sal_Size converted;
2873 auto const size = rtl_convertTextToUnicode(
2874 converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\xF4\x90\x80\x80"),
2875 buf, TEST_STRING_SIZE,
2876 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
2877 | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
2878 | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
2879 | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
2880 &info, &converted);
2881 CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
2882 CPPUNIT_ASSERT_EQUAL(
2883 OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
2884 CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
2885 CPPUNIT_ASSERT_EQUAL(sal_Size(4), converted);
2886 rtl_destroyTextToUnicodeConverter(converter);
2887 }
2888 // UTF-8, five-byte sequence:
2889 {
2890 auto const converter = rtl_createTextToUnicodeConverter(
2891 RTL_TEXTENCODING_UTF8);
2892 CPPUNIT_ASSERT(converter != nullptr);
2893 sal_Unicode buf[TEST_STRING_SIZE];
2894 sal_uInt32 info;
2895 sal_Size converted;
2896 auto const size = rtl_convertTextToUnicode(
2897 converter, nullptr,
2898 RTL_CONSTASCII_STRINGPARAM("\xFB\xBF\xBF\xBF\xBF"),
2899 buf, TEST_STRING_SIZE,
2900 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
2901 | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
2902 | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
2903 | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
2904 &info, &converted);
2905 CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
2906 CPPUNIT_ASSERT_EQUAL(
2907 OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
2908 CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
2909 CPPUNIT_ASSERT_EQUAL(sal_Size(5), converted);
2910 rtl_destroyTextToUnicodeConverter(converter);
2911 }
2912 // UTF-8, six-byte sequence:
2913 {
2914 auto const converter = rtl_createTextToUnicodeConverter(
2915 RTL_TEXTENCODING_UTF8);
2916 CPPUNIT_ASSERT(converter != nullptr);
2917 sal_Unicode buf[TEST_STRING_SIZE];
2918 sal_uInt32 info;
2919 sal_Size converted;
2920 auto const size = rtl_convertTextToUnicode(
2921 converter, nullptr,
2922 RTL_CONSTASCII_STRINGPARAM("\xFD\xBF\xBF\xBF\xBF\xBF"),
2923 buf, TEST_STRING_SIZE,
2924 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
2925 | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
2926 | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
2927 | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
2928 &info, &converted);
2929 CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
2930 CPPUNIT_ASSERT_EQUAL(
2931 OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
2932 CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
2933 CPPUNIT_ASSERT_EQUAL(sal_Size(6), converted);
2934 rtl_destroyTextToUnicodeConverter(converter);
2935 }
2936 // Java UTF-8, U+0000:
2937 {
2938 auto const converter = rtl_createTextToUnicodeConverter(
2939 RTL_TEXTENCODING_JAVA_UTF8);
2940 CPPUNIT_ASSERT(converter != nullptr);
2941 sal_Unicode buf[TEST_STRING_SIZE];
2942 sal_uInt32 info;
2943 sal_Size converted;
2944 auto const size = rtl_convertTextToUnicode(
2945 converter, nullptr, RTL_CONSTASCII_STRINGPARAM("\0"), buf,
2946 TEST_STRING_SIZE,
2947 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
2948 | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
2949 | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
2950 | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
2951 &info, &converted);
2952 CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
2953 CPPUNIT_ASSERT_EQUAL(
2954 OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
2955 CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
2956 CPPUNIT_ASSERT_EQUAL(sal_Size(1), converted);
2957 rtl_destroyTextToUnicodeConverter(converter);
2958 }
2959 // Java UTF-8, U+10000:
2960 {
2961 auto const converter = rtl_createTextToUnicodeConverter(
2962 RTL_TEXTENCODING_JAVA_UTF8);
2963 CPPUNIT_ASSERT(converter != nullptr);
2964 constexpr OStringLiteral input(u8"\U00010000");
2965 sal_Unicode buf[TEST_STRING_SIZE];
2966 sal_uInt32 info;
2967 sal_Size converted;
2968 auto const size = rtl_convertTextToUnicode(
2969 converter, nullptr, input.getStr(), input.getLength(), buf,
2970 TEST_STRING_SIZE,
2971 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
2972 | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
2973 | RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT
2974 | RTL_TEXTTOUNICODE_FLAGS_FLUSH),
2975 &info, &converted);
2976 CPPUNIT_ASSERT_EQUAL(sal_Size(1), size);
2977 CPPUNIT_ASSERT_EQUAL(
2978 OUString(u"\uFFFD"), OUString(buf, sal_Int32(size)));
2979 CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_INVALID, info);
2980 CPPUNIT_ASSERT_EQUAL(sal_Size(4), converted);
2981 rtl_destroyTextToUnicodeConverter(converter);
2982 }
2983 }
2984
testInvalidUnicode()2985 void Test::testInvalidUnicode() {
2986 auto const converter = rtl_createUnicodeToTextConverter(RTL_TEXTENCODING_UTF8);
2987 CPPUNIT_ASSERT(converter != nullptr);
2988 sal_Unicode const input[] = {0xDC00}; // lone low surrogate
2989 char buf[TEST_STRING_SIZE];
2990 sal_uInt32 info;
2991 sal_Size converted;
2992 auto const size = rtl_convertUnicodeToText(
2993 converter, nullptr, input, SAL_N_ELEMENTS(input), buf, TEST_STRING_SIZE,
2994 (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR | RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR
2995 | RTL_UNICODETOTEXT_FLAGS_FLUSH),
2996 &info, &converted);
2997 CPPUNIT_ASSERT_EQUAL(sal_Size(0), size);
2998 CPPUNIT_ASSERT_EQUAL(RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_INVALID, info);
2999 CPPUNIT_ASSERT_EQUAL(sal_Size(1), converted);
3000 rtl_destroyTextToUnicodeConverter(converter);
3001 }
3002
testSRCBUFFERTOSMALL()3003 void Test::testSRCBUFFERTOSMALL() {
3004 rtl_TextToUnicodeConverter cv = rtl_createTextToUnicodeConverter(
3005 RTL_TEXTENCODING_EUC_JP);
3006 CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeConverter(EUC-JP) failed",
3007 cv != nullptr);
3008 rtl_TextToUnicodeContext cx = rtl_createTextToUnicodeContext(cv);
3009 CPPUNIT_ASSERT_MESSAGE("rtl_createTextToUnicodeContext failed", cx != nullptr);
3010 char src = '\xA1';
3011 sal_Unicode dst[10];
3012 sal_uInt32 info;
3013 sal_Size cvt;
3014 CPPUNIT_ASSERT_EQUAL(
3015 sal_Size(0),
3016 rtl_convertTextToUnicode(
3017 cv, cx, &src, 1, dst, SAL_N_ELEMENTS(dst),
3018 (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR |
3019 RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR |
3020 RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR),
3021 &info, &cvt));
3022 CPPUNIT_ASSERT_EQUAL(RTL_TEXTTOUNICODE_INFO_SRCBUFFERTOOSMALL, info);
3023 CPPUNIT_ASSERT(cvt <= 1);
3024 rtl_destroyTextToUnicodeContext(cv, cx);
3025 rtl_destroyTextToUnicodeConverter(cv);
3026 }
3027
testMime()3028 void Test::testMime() {
3029 struct Data {
3030 char const * mime;
3031 rtl_TextEncoding encoding;
3032 bool reverse;
3033 };
3034 static Data const data[] = {
3035 { "GBK", RTL_TEXTENCODING_GBK, false },
3036 { "CP936", RTL_TEXTENCODING_GBK, false },
3037 { "MS936", RTL_TEXTENCODING_GBK, false },
3038 { "windows-936", RTL_TEXTENCODING_GBK, false },
3039
3040 { "GB18030", RTL_TEXTENCODING_GB_18030, false },
3041
3042 { "TIS-620", RTL_TEXTENCODING_TIS_620, true },
3043 { "ISO-8859-11", RTL_TEXTENCODING_TIS_620, false }, // not registered
3044
3045 { "CP874", RTL_TEXTENCODING_MS_874, false }, // not registered
3046 { "MS874", RTL_TEXTENCODING_MS_874, false }, // not registered
3047 { "windows-874", RTL_TEXTENCODING_MS_874, true }, // not registered
3048
3049 { "ISO_8859-8:1988", RTL_TEXTENCODING_ISO_8859_8, false },
3050 { "iso-ir-138", RTL_TEXTENCODING_ISO_8859_8, false },
3051 { "ISO_8859-8", RTL_TEXTENCODING_ISO_8859_8, false },
3052 { "ISO-8859-8", RTL_TEXTENCODING_ISO_8859_8, true },
3053 { "hebrew", RTL_TEXTENCODING_ISO_8859_8, false },
3054 { "csISOLatinHebrew", RTL_TEXTENCODING_ISO_8859_8, false },
3055
3056 { "windows-1255", RTL_TEXTENCODING_MS_1255, true },
3057
3058 { "IBM862", RTL_TEXTENCODING_IBM_862, true },
3059 { "cp862", RTL_TEXTENCODING_IBM_862, false },
3060 { "862", RTL_TEXTENCODING_IBM_862, false },
3061 { "csPC862LatinHebrew", RTL_TEXTENCODING_IBM_862, false },
3062
3063 { "ISO_8859-6:1987", RTL_TEXTENCODING_ISO_8859_6, false },
3064 { "iso-ir-127", RTL_TEXTENCODING_ISO_8859_6, false },
3065 { "ISO_8859-6", RTL_TEXTENCODING_ISO_8859_6, false },
3066 { "ISO-8859-6", RTL_TEXTENCODING_ISO_8859_6, true },
3067 { "ECMA-114", RTL_TEXTENCODING_ISO_8859_6, false },
3068 { "ASMO-708", RTL_TEXTENCODING_ISO_8859_6, false },
3069 { "arabic", RTL_TEXTENCODING_ISO_8859_6, false },
3070 { "csISOLatinArabic", RTL_TEXTENCODING_ISO_8859_6, false },
3071
3072 { "windows-1256", RTL_TEXTENCODING_MS_1256, true },
3073
3074 { "IBM864", RTL_TEXTENCODING_IBM_864, true },
3075 { "cp864", RTL_TEXTENCODING_IBM_864, false },
3076 { "csIBM864", RTL_TEXTENCODING_IBM_864, false },
3077
3078 { "KOI8-R", RTL_TEXTENCODING_KOI8_R, false },
3079 { "csKOI8R", RTL_TEXTENCODING_KOI8_R, false },
3080 { "koi8-r", RTL_TEXTENCODING_KOI8_R, true },
3081
3082 { "KOI8-U", RTL_TEXTENCODING_KOI8_U, true },
3083
3084 { "IBM860", RTL_TEXTENCODING_IBM_860, true },
3085 { "cp860", RTL_TEXTENCODING_IBM_860, false },
3086 { "860", RTL_TEXTENCODING_IBM_860, false },
3087 { "csIBM860", RTL_TEXTENCODING_IBM_860, false },
3088
3089 { "IBM861", RTL_TEXTENCODING_IBM_861, true },
3090 { "cp861", RTL_TEXTENCODING_IBM_861, false },
3091 { "861", RTL_TEXTENCODING_IBM_861, false },
3092 { "cp-is", RTL_TEXTENCODING_IBM_861, false },
3093 { "csIBM861", RTL_TEXTENCODING_IBM_861, false },
3094
3095 { "IBM863", RTL_TEXTENCODING_IBM_863, true },
3096 { "cp863", RTL_TEXTENCODING_IBM_863, false },
3097 { "863", RTL_TEXTENCODING_IBM_863, false },
3098 { "csIBM863", RTL_TEXTENCODING_IBM_863, false },
3099
3100 { "IBM865", RTL_TEXTENCODING_IBM_865, true },
3101 { "cp865", RTL_TEXTENCODING_IBM_865, false },
3102 { "865", RTL_TEXTENCODING_IBM_865, false },
3103 { "csIBM865", RTL_TEXTENCODING_IBM_865, false },
3104
3105 { "Latin-9", RTL_TEXTENCODING_ISO_8859_15, false },
3106
3107 { "KS_C_5601-1987", RTL_TEXTENCODING_MS_949, false },
3108 { "iso-ir-149", RTL_TEXTENCODING_MS_949, false },
3109 { "KS_C_5601-1989", RTL_TEXTENCODING_MS_949, false },
3110 { "KSC_5601", RTL_TEXTENCODING_MS_949, false },
3111 { "korean", RTL_TEXTENCODING_MS_949, false },
3112 { "csKSC56011987", RTL_TEXTENCODING_MS_949, false },
3113 { nullptr, RTL_TEXTENCODING_MS_949, true },
3114
3115 { "Adobe-Standard-Encoding", RTL_TEXTENCODING_ADOBE_STANDARD, false },
3116 { "csAdobeStandardEncoding", RTL_TEXTENCODING_ADOBE_STANDARD, false },
3117 { "Adobe-Symbol-Encoding", RTL_TEXTENCODING_ADOBE_SYMBOL, false },
3118 { "csHPPSMath", RTL_TEXTENCODING_ADOBE_SYMBOL, false },
3119
3120 { "PTCP154", RTL_TEXTENCODING_PT154, true },
3121 { "csPTCP154", RTL_TEXTENCODING_PT154, false },
3122 { "PT154", RTL_TEXTENCODING_PT154, false },
3123 { "CP154", RTL_TEXTENCODING_PT154, false },
3124 { "Cyrillic-Asian", RTL_TEXTENCODING_PT154, false }
3125 };
3126 for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) {
3127 if (data[i].mime == nullptr) {
3128 OSL_ASSERT(data[i].reverse);
3129 CPPUNIT_ASSERT_EQUAL(
3130 static_cast< char const * >(nullptr),
3131 rtl_getMimeCharsetFromTextEncoding(data[i].encoding));
3132 } else {
3133 CPPUNIT_ASSERT_EQUAL(
3134 data[i].encoding,
3135 rtl_getTextEncodingFromMimeCharset(data[i].mime));
3136 if (data[i].reverse) {
3137 CPPUNIT_ASSERT_EQUAL(
3138 OString(data[i].mime),
3139 OString(
3140 rtl_getMimeCharsetFromTextEncoding(data[i].encoding)));
3141 }
3142 }
3143 }
3144 }
3145
testWindows()3146 void Test::testWindows() {
3147 struct Data {
3148 sal_uInt32 codePage;
3149 rtl_TextEncoding encoding;
3150 bool reverse;
3151 };
3152 static Data const data[] = {
3153 { 42, RTL_TEXTENCODING_SYMBOL, true },
3154 { 437, RTL_TEXTENCODING_IBM_437, true },
3155 { 708, RTL_TEXTENCODING_ISO_8859_6, false },
3156 { 737, RTL_TEXTENCODING_IBM_737, true },
3157 { 775, RTL_TEXTENCODING_IBM_775, true },
3158 { 850, RTL_TEXTENCODING_IBM_850, true },
3159 { 852, RTL_TEXTENCODING_IBM_852, true },
3160 { 855, RTL_TEXTENCODING_IBM_855, true },
3161 { 857, RTL_TEXTENCODING_IBM_857, true },
3162 { 860, RTL_TEXTENCODING_IBM_860, true },
3163 { 861, RTL_TEXTENCODING_IBM_861, true },
3164 { 862, RTL_TEXTENCODING_IBM_862, true },
3165 { 863, RTL_TEXTENCODING_IBM_863, true },
3166 { 864, RTL_TEXTENCODING_IBM_864, true },
3167 { 865, RTL_TEXTENCODING_IBM_865, true },
3168 { 866, RTL_TEXTENCODING_IBM_866, true },
3169 { 869, RTL_TEXTENCODING_IBM_869, true },
3170 { 874, RTL_TEXTENCODING_MS_874, true },
3171 { 932, RTL_TEXTENCODING_MS_932, true },
3172 { 936, RTL_TEXTENCODING_MS_936, true },
3173 { 949, RTL_TEXTENCODING_MS_949, true },
3174 { 950, RTL_TEXTENCODING_MS_950, true },
3175 { 1250, RTL_TEXTENCODING_MS_1250, true },
3176 { 1251, RTL_TEXTENCODING_MS_1251, true },
3177 { 1252, RTL_TEXTENCODING_MS_1252, true },
3178 { 1253, RTL_TEXTENCODING_MS_1253, true },
3179 { 1254, RTL_TEXTENCODING_MS_1254, true },
3180 { 1255, RTL_TEXTENCODING_MS_1255, true },
3181 { 1256, RTL_TEXTENCODING_MS_1256, true },
3182 { 1257, RTL_TEXTENCODING_MS_1257, true },
3183 { 1258, RTL_TEXTENCODING_MS_1258, true },
3184 { 1361, RTL_TEXTENCODING_MS_1361, true },
3185 { 10000, RTL_TEXTENCODING_APPLE_ROMAN, true },
3186 { 10001, RTL_TEXTENCODING_APPLE_JAPANESE, true },
3187 { 10002, RTL_TEXTENCODING_APPLE_CHINTRAD, true },
3188 { 10003, RTL_TEXTENCODING_APPLE_KOREAN, true },
3189 { 10004, RTL_TEXTENCODING_APPLE_ARABIC, true },
3190 { 10005, RTL_TEXTENCODING_APPLE_HEBREW, true },
3191 { 10006, RTL_TEXTENCODING_APPLE_GREEK, true },
3192 { 10007, RTL_TEXTENCODING_APPLE_CYRILLIC, true },
3193 { 10008, RTL_TEXTENCODING_APPLE_CHINSIMP, true },
3194 { 10010, RTL_TEXTENCODING_APPLE_ROMANIAN, true },
3195 { 10017, RTL_TEXTENCODING_APPLE_UKRAINIAN, true },
3196 { 10029, RTL_TEXTENCODING_APPLE_CENTEURO, true },
3197 { 10079, RTL_TEXTENCODING_APPLE_ICELAND, true },
3198 { 10081, RTL_TEXTENCODING_APPLE_TURKISH, true },
3199 { 10082, RTL_TEXTENCODING_APPLE_CROATIAN, true },
3200 { 20127, RTL_TEXTENCODING_ASCII_US, true },
3201 { 20866, RTL_TEXTENCODING_KOI8_R, true },
3202 { 21866, RTL_TEXTENCODING_KOI8_U, true },
3203 { 28591, RTL_TEXTENCODING_ISO_8859_1, true },
3204 { 28592, RTL_TEXTENCODING_ISO_8859_2, true },
3205 { 28593, RTL_TEXTENCODING_ISO_8859_3, true },
3206 { 28594, RTL_TEXTENCODING_ISO_8859_4, true },
3207 { 28595, RTL_TEXTENCODING_ISO_8859_5, true },
3208 { 28596, RTL_TEXTENCODING_ISO_8859_6, true },
3209 { 28597, RTL_TEXTENCODING_ISO_8859_7, true },
3210 { 28598, RTL_TEXTENCODING_ISO_8859_8, true },
3211 { 28599, RTL_TEXTENCODING_ISO_8859_9, true },
3212 { 28605, RTL_TEXTENCODING_ISO_8859_15, true },
3213 { 50220, RTL_TEXTENCODING_ISO_2022_JP, true },
3214 { 50225, RTL_TEXTENCODING_ISO_2022_KR, true },
3215 { 51932, RTL_TEXTENCODING_EUC_JP, true },
3216 { 51936, RTL_TEXTENCODING_EUC_CN, true },
3217 { 51949, RTL_TEXTENCODING_EUC_KR, true },
3218 { 65000, RTL_TEXTENCODING_UTF7, true },
3219 { 65001, RTL_TEXTENCODING_UTF8, true },
3220 { 1200, RTL_TEXTENCODING_DONTKNOW, false }, // UTF_16LE
3221 { 1201, RTL_TEXTENCODING_DONTKNOW, false }, // UTF_16LE
3222 { 0, RTL_TEXTENCODING_DONTKNOW, true },
3223 { 0, RTL_TEXTENCODING_UCS4, true },
3224 { 0, RTL_TEXTENCODING_UCS2, true },
3225 { 57002, RTL_TEXTENCODING_ISCII_DEVANAGARI, true }
3226 };
3227 for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) {
3228 OSL_ASSERT(data[i].codePage != 0 || data[i].reverse);
3229 if (data[i].codePage != 0) {
3230 CPPUNIT_ASSERT_EQUAL(
3231 data[i].encoding,
3232 rtl_getTextEncodingFromWindowsCodePage(data[i].codePage));
3233 }
3234 if (data[i].reverse) {
3235 CPPUNIT_ASSERT_EQUAL(
3236 data[i].codePage,
3237 rtl_getWindowsCodePageFromTextEncoding(data[i].encoding));
3238 }
3239 }
3240 }
3241
testInfo()3242 void Test::testInfo() {
3243 struct Data {
3244 rtl_TextEncoding encoding;
3245 sal_uInt32 flag;
3246 bool value;
3247 };
3248 static Data const data[] = {
3249 #if WITH_LOCALE_ALL || WITH_LOCALE_ja
3250 { RTL_TEXTENCODING_APPLE_JAPANESE, RTL_TEXTENCODING_INFO_ASCII, false },
3251 { RTL_TEXTENCODING_EUC_JP, RTL_TEXTENCODING_INFO_ASCII, true },
3252 { RTL_TEXTENCODING_ISO_2022_JP, RTL_TEXTENCODING_INFO_CONTEXT, true },
3253 { RTL_TEXTENCODING_ISO_2022_JP, RTL_TEXTENCODING_INFO_ASCII, false },
3254 { RTL_TEXTENCODING_SHIFT_JIS, RTL_TEXTENCODING_INFO_ASCII, false },
3255 #endif
3256 #if WITH_LOCALE_ALL || WITH_LOCALE_ko
3257 { RTL_TEXTENCODING_APPLE_KOREAN, RTL_TEXTENCODING_INFO_ASCII, false },
3258 { RTL_TEXTENCODING_EUC_KR, RTL_TEXTENCODING_INFO_ASCII, true },
3259 { RTL_TEXTENCODING_ISO_2022_KR, RTL_TEXTENCODING_INFO_CONTEXT, true },
3260 { RTL_TEXTENCODING_ISO_2022_KR, RTL_TEXTENCODING_INFO_ASCII, false },
3261 #endif
3262 #if WITH_LOCALE_ALL || WITH_LOCALE_zh
3263 { RTL_TEXTENCODING_APPLE_CHINTRAD, RTL_TEXTENCODING_INFO_ASCII, false },
3264 { RTL_TEXTENCODING_BIG5, RTL_TEXTENCODING_INFO_ASCII, false },
3265 { RTL_TEXTENCODING_BIG5_HKSCS, RTL_TEXTENCODING_INFO_ASCII, false },
3266 { RTL_TEXTENCODING_EUC_CN, RTL_TEXTENCODING_INFO_ASCII, true },
3267 { RTL_TEXTENCODING_EUC_TW, RTL_TEXTENCODING_INFO_ASCII, true },
3268 { RTL_TEXTENCODING_GBK, RTL_TEXTENCODING_INFO_ASCII, false },
3269 { RTL_TEXTENCODING_GB_18030, RTL_TEXTENCODING_INFO_ASCII, false },
3270 { RTL_TEXTENCODING_GB_18030, RTL_TEXTENCODING_INFO_UNICODE, true },
3271 { RTL_TEXTENCODING_ISO_2022_CN, RTL_TEXTENCODING_INFO_CONTEXT, true },
3272 { RTL_TEXTENCODING_ISO_2022_CN, RTL_TEXTENCODING_INFO_ASCII, false },
3273 #endif
3274 #if WITH_LOCALE_ALL || WITH_LOCALE_FOR_SCRIPT_Deva
3275 { RTL_TEXTENCODING_ISCII_DEVANAGARI, RTL_TEXTENCODING_INFO_ASCII, true },
3276 { RTL_TEXTENCODING_ISCII_DEVANAGARI, RTL_TEXTENCODING_INFO_MIME, false },
3277 #endif
3278 { RTL_TEXTENCODING_MS_1361, RTL_TEXTENCODING_INFO_ASCII, false },
3279 { RTL_TEXTENCODING_MS_874, RTL_TEXTENCODING_INFO_ASCII, true },
3280 { RTL_TEXTENCODING_MS_932, RTL_TEXTENCODING_INFO_ASCII, false },
3281 { RTL_TEXTENCODING_MS_936, RTL_TEXTENCODING_INFO_ASCII, false },
3282 { RTL_TEXTENCODING_MS_949, RTL_TEXTENCODING_INFO_ASCII, false },
3283 { RTL_TEXTENCODING_MS_950, RTL_TEXTENCODING_INFO_ASCII, false },
3284 { RTL_TEXTENCODING_KOI8_R, RTL_TEXTENCODING_INFO_ASCII, true },
3285 { RTL_TEXTENCODING_KOI8_R, RTL_TEXTENCODING_INFO_MIME, true },
3286 { RTL_TEXTENCODING_KOI8_U, RTL_TEXTENCODING_INFO_ASCII, true },
3287 { RTL_TEXTENCODING_KOI8_U, RTL_TEXTENCODING_INFO_MIME, true },
3288 { RTL_TEXTENCODING_IBM_860, RTL_TEXTENCODING_INFO_MIME, true },
3289 { RTL_TEXTENCODING_IBM_861, RTL_TEXTENCODING_INFO_MIME, true },
3290 { RTL_TEXTENCODING_IBM_863, RTL_TEXTENCODING_INFO_MIME, true },
3291 { RTL_TEXTENCODING_IBM_865, RTL_TEXTENCODING_INFO_MIME, true },
3292 { RTL_TEXTENCODING_ADOBE_STANDARD, RTL_TEXTENCODING_INFO_ASCII, false },
3293 { RTL_TEXTENCODING_ADOBE_STANDARD, RTL_TEXTENCODING_INFO_MIME, true },
3294 { RTL_TEXTENCODING_ADOBE_STANDARD, RTL_TEXTENCODING_INFO_SYMBOL, false },
3295 { RTL_TEXTENCODING_ADOBE_SYMBOL, RTL_TEXTENCODING_INFO_ASCII, false },
3296 { RTL_TEXTENCODING_ADOBE_SYMBOL, RTL_TEXTENCODING_INFO_MIME, true },
3297 { RTL_TEXTENCODING_ADOBE_SYMBOL, RTL_TEXTENCODING_INFO_SYMBOL, true },
3298 { RTL_TEXTENCODING_PT154, RTL_TEXTENCODING_INFO_ASCII, true },
3299 { RTL_TEXTENCODING_PT154, RTL_TEXTENCODING_INFO_MIME, true }
3300 };
3301 for (std::size_t i = 0; i < SAL_N_ELEMENTS(data); ++i) {
3302 rtl_TextEncodingInfo info;
3303 info.StructSize = sizeof info;
3304 CPPUNIT_ASSERT(rtl_getTextEncodingInfo(data[i].encoding, &info));
3305 CPPUNIT_ASSERT_EQUAL(data[i].value, ((info.Flags & data[i].flag) != 0));
3306 }
3307 }
3308
3309 CPPUNIT_TEST_SUITE_REGISTRATION(Test);
3310
3311 }
3312
3313 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
3314