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