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