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