Coverage Report

Created: 2026-09-28 10:59

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libreoffice/sal/textenc/tencinfo.cxx
Line
Count
Source
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
/*
3
 * This file is part of the LibreOffice project.
4
 *
5
 * This Source Code Form is subject to the terms of the Mozilla Public
6
 * License, v. 2.0. If a copy of the MPL was not distributed with this
7
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
 *
9
 * This file incorporates work covered by the following license notice:
10
 *
11
 *   Licensed to the Apache Software Foundation (ASF) under one or more
12
 *   contributor license agreements. See the NOTICE file distributed
13
 *   with this work for additional information regarding copyright
14
 *   ownership. The ASF licenses this file to you under the Apache
15
 *   License, Version 2.0 (the "License"); you may not use this file
16
 *   except in compliance with the License. You may obtain a copy of
17
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18
 */
19
20
#include <sal/config.h>
21
22
#include <algorithm>
23
#include <span>
24
#include <string_view>
25
26
#include <rtl/character.hxx>
27
#include <rtl/tencinfo.h>
28
29
#include "gettextencodingdata.hxx"
30
#include "tenchelp.hxx"
31
32
sal_Bool SAL_CALL rtl_isOctetTextEncoding(rtl_TextEncoding nEncoding)
33
159k
{
34
159k
    return
35
159k
        nEncoding > RTL_TEXTENCODING_DONTKNOW
36
156k
        && nEncoding != 9 // RTL_TEXTENCODING_SYSTEM
37
156k
        && nEncoding <= RTL_TEXTENCODING_MAZOVIA; // always update this!
38
159k
}
39
40
/* ======================================================================= */
41
42
namespace {
43
44
struct ImplStrCharsetDef
45
{
46
    std::string_view mpCharsetStr;
47
    rtl_TextEncoding        meTextEncoding;
48
};
49
50
struct ImplStrFirstPartCharsetDef
51
{
52
    std::string_view mpCharsetStr;
53
    std::span<const ImplStrCharsetDef> mpSecondPartTab;
54
};
55
56
}
57
58
/* ======================================================================= */
59
60
sal_Bool SAL_CALL rtl_getTextEncodingInfo( rtl_TextEncoding eTextEncoding, rtl_TextEncodingInfo* pEncInfo )
61
15.4M
{
62
15.4M
    const ImplTextEncodingData* pData;
63
64
15.4M
    pData = Impl_getTextEncodingData( eTextEncoding );
65
15.4M
    if ( !pData )
66
0
    {
67
        /* HACK: For not implemented encoding, because not all
68
           calls handle the errors */
69
0
        if ( pEncInfo->StructSize < 5 )
70
0
            return false;
71
0
        pEncInfo->MinimumCharSize = 1;
72
73
0
        if ( pEncInfo->StructSize < 6 )
74
0
            return true;
75
0
        pEncInfo->MaximumCharSize = 1;
76
77
0
        if ( pEncInfo->StructSize < 7 )
78
0
            return true;
79
0
        pEncInfo->AverageCharSize = 1;
80
81
0
        if ( pEncInfo->StructSize < 12 )
82
0
            return true;
83
0
        pEncInfo->Flags = 0;
84
85
0
        return false;
86
0
    }
87
88
15.4M
    if ( pEncInfo->StructSize < 5 )
89
0
        return false;
90
15.4M
    pEncInfo->MinimumCharSize = pData->mnMinCharSize;
91
92
15.4M
    if ( pEncInfo->StructSize < 6 )
93
0
        return true;
94
15.4M
    pEncInfo->MaximumCharSize = pData->mnMaxCharSize;
95
96
15.4M
    if ( pEncInfo->StructSize < 7 )
97
0
        return true;
98
15.4M
    pEncInfo->AverageCharSize = pData->mnAveCharSize;
99
100
15.4M
    if ( pEncInfo->StructSize < 12 )
101
0
        return true;
102
15.4M
    pEncInfo->Flags = pData->mnInfoFlags;
103
104
15.4M
    return true;
105
15.4M
}
106
107
/* ======================================================================= */
108
109
rtl_TextEncoding SAL_CALL rtl_getTextEncodingFromWindowsCharset( sal_uInt8 nWinCharset )
110
943k
{
111
943k
    rtl_TextEncoding eTextEncoding;
112
113
943k
    switch ( nWinCharset )
114
943k
    {
115
572k
        case 0:     eTextEncoding = RTL_TEXTENCODING_MS_1252; break;    /* ANSI_CHARSET */
116
55.1k
        case 2:     eTextEncoding = RTL_TEXTENCODING_SYMBOL; break;     /* SYMBOL_CHARSET */
117
1.29k
        case 77:    eTextEncoding = RTL_TEXTENCODING_APPLE_ROMAN; break;/* MAC_CHARSET */
118
66.1k
        case 128:   eTextEncoding = RTL_TEXTENCODING_MS_932; break;     /* SHIFTJIS_CHARSET */
119
11.2k
        case 129:   eTextEncoding = RTL_TEXTENCODING_MS_949; break;     /* HANGEUL_CHARSET */
120
467
        case 130:   eTextEncoding = RTL_TEXTENCODING_MS_1361; break;    /* JOHAB_CHARSET */
121
4.61k
        case 134:   eTextEncoding = RTL_TEXTENCODING_MS_936; break;     /* GB2312_CHARSET */
122
3.76k
        case 136:   eTextEncoding = RTL_TEXTENCODING_MS_950; break;     /* CHINESEBIG5_CHARSET */
123
693
        case 161:   eTextEncoding = RTL_TEXTENCODING_MS_1253; break;    /* GREEK_CHARSET */
124
2.66k
        case 162:   eTextEncoding = RTL_TEXTENCODING_MS_1254; break;    /* TURKISH_CHARSET */
125
475
        case 163:   eTextEncoding = RTL_TEXTENCODING_MS_1258; break;    /* VIETNAMESE_CHARSET !!! */
126
4.21k
        case 177:   eTextEncoding = RTL_TEXTENCODING_MS_1255; break;    /* HEBREW_CHARSET */
127
606
        case 178:   eTextEncoding = RTL_TEXTENCODING_MS_1256; break;    /* ARABIC_CHARSET */
128
1.29k
        case 186:   eTextEncoding = RTL_TEXTENCODING_MS_1257; break;    /* BALTIC_CHARSET */
129
12.9k
        case 204:   eTextEncoding = RTL_TEXTENCODING_MS_1251; break;    /* RUSSIAN_CHARSET */
130
3.00k
        case 222:   eTextEncoding = RTL_TEXTENCODING_MS_874; break;     /* THAI_CHARSET */
131
7.96k
        case 238:   eTextEncoding = RTL_TEXTENCODING_MS_1250; break;    /* EASTEUROPE_CHARSET */
132
23.7k
        case 255:   eTextEncoding = RTL_TEXTENCODING_IBM_850; break;    /* OEM_CHARSET */
133
170k
        default:    eTextEncoding = RTL_TEXTENCODING_DONTKNOW; break;
134
943k
    }
135
136
943k
    return eTextEncoding;
137
943k
}
138
139
/* ----------------------------------------------------------------------- */
140
141
rtl_TextEncoding SAL_CALL rtl_getTextEncodingFromUnixCharset( const char* pUnixCharset )
142
0
{
143
    /* See <ftp://ftp.x.org/pub/DOCS/registry>, section 14 ("Font Charset
144
     * (Registry and Encoding) Names").
145
     */
146
147
    /* All Identifiers in the tables are lower case The function search */
148
    /* for the first matching string in the tables. */
149
    /* Sort order: unique (first 14, then 1), important */
150
151
0
    static constexpr ImplStrCharsetDef aUnixCharsetISOTab[] =
152
0
    {
153
0
        { "15", RTL_TEXTENCODING_ISO_8859_15 },
154
0
        { "14", RTL_TEXTENCODING_ISO_8859_14 },
155
0
        { "13", RTL_TEXTENCODING_ISO_8859_13 },
156
0
        { "11", RTL_TEXTENCODING_TIS_620 },
157
0
        { "10", RTL_TEXTENCODING_ISO_8859_10 },
158
0
        { "1", RTL_TEXTENCODING_ISO_8859_1 },
159
0
        { "2", RTL_TEXTENCODING_ISO_8859_2 },
160
0
        { "3", RTL_TEXTENCODING_ISO_8859_3 },
161
0
        { "4", RTL_TEXTENCODING_ISO_8859_4 },
162
0
        { "5", RTL_TEXTENCODING_ISO_8859_5 },
163
0
        { "6", RTL_TEXTENCODING_ISO_8859_6 },
164
0
        { "7", RTL_TEXTENCODING_ISO_8859_7 },
165
0
        { "8", RTL_TEXTENCODING_ISO_8859_8 },
166
0
        { "9", RTL_TEXTENCODING_ISO_8859_9 },
167
0
    };
168
169
0
    static constexpr ImplStrCharsetDef aUnixCharsetADOBETab[] =
170
0
    {
171
0
        { "fontspecific", RTL_TEXTENCODING_SYMBOL },
172
0
    };
173
174
0
    static constexpr ImplStrCharsetDef aUnixCharsetMSTab[] =
175
0
    {
176
0
        { "1252", RTL_TEXTENCODING_MS_1252 },
177
0
        { "1250", RTL_TEXTENCODING_MS_1250 },
178
0
        { "1251", RTL_TEXTENCODING_MS_1251 },
179
0
        { "1253", RTL_TEXTENCODING_MS_1253 },
180
0
        { "1254", RTL_TEXTENCODING_MS_1254 },
181
0
        { "1255", RTL_TEXTENCODING_MS_1255 },
182
0
        { "1256", RTL_TEXTENCODING_MS_1256 },
183
0
        { "1257", RTL_TEXTENCODING_MS_1257 },
184
0
        { "1258", RTL_TEXTENCODING_MS_1258 },
185
0
        { "932", RTL_TEXTENCODING_MS_932 },
186
0
        { "936", RTL_TEXTENCODING_MS_936 },
187
0
        { "949", RTL_TEXTENCODING_MS_949 },
188
0
        { "950", RTL_TEXTENCODING_MS_950 },
189
0
        { "1361", RTL_TEXTENCODING_MS_1361 },
190
0
        { "cp1252", RTL_TEXTENCODING_MS_1252 },
191
0
        { "cp1250", RTL_TEXTENCODING_MS_1250 },
192
0
        { "cp1251", RTL_TEXTENCODING_MS_1251 },
193
0
        { "cp1253", RTL_TEXTENCODING_MS_1253 },
194
0
        { "cp1254", RTL_TEXTENCODING_MS_1254 },
195
0
        { "cp1255", RTL_TEXTENCODING_MS_1255 },
196
0
        { "cp1256", RTL_TEXTENCODING_MS_1256 },
197
0
        { "cp1257", RTL_TEXTENCODING_MS_1257 },
198
0
        { "cp1258", RTL_TEXTENCODING_MS_1258 },
199
0
        { "cp932", RTL_TEXTENCODING_MS_932 },
200
0
        { "cp936", RTL_TEXTENCODING_MS_936 },
201
0
        { "cp949", RTL_TEXTENCODING_MS_949 },
202
0
        { "cp950", RTL_TEXTENCODING_MS_950 },
203
0
        { "cp1361", RTL_TEXTENCODING_MS_1361 },
204
0
    };
205
206
0
    static constexpr ImplStrCharsetDef aUnixCharsetIBMTab[] =
207
0
    {
208
0
        { "437", RTL_TEXTENCODING_IBM_437 },
209
0
        { "850", RTL_TEXTENCODING_IBM_850 },
210
0
        { "860", RTL_TEXTENCODING_IBM_860 },
211
0
        { "861", RTL_TEXTENCODING_IBM_861 },
212
0
        { "863", RTL_TEXTENCODING_IBM_863 },
213
0
        { "865", RTL_TEXTENCODING_IBM_865 },
214
0
        { "737", RTL_TEXTENCODING_IBM_737 },
215
0
        { "775", RTL_TEXTENCODING_IBM_775 },
216
0
        { "852", RTL_TEXTENCODING_IBM_852 },
217
0
        { "855", RTL_TEXTENCODING_IBM_855 },
218
0
        { "857", RTL_TEXTENCODING_IBM_857 },
219
0
        { "862", RTL_TEXTENCODING_IBM_862 },
220
0
        { "864", RTL_TEXTENCODING_IBM_864 },
221
0
        { "866", RTL_TEXTENCODING_IBM_866 },
222
0
        { "869", RTL_TEXTENCODING_IBM_869 },
223
0
        { "874", RTL_TEXTENCODING_MS_874 },
224
0
        { "1004", RTL_TEXTENCODING_MS_1252 },
225
0
        { "65400", RTL_TEXTENCODING_SYMBOL },
226
0
    };
227
228
0
    static constexpr ImplStrCharsetDef aUnixCharsetKOI8Tab[] =
229
0
    {
230
0
        { "r", RTL_TEXTENCODING_KOI8_R },
231
0
        { "u", RTL_TEXTENCODING_KOI8_U },
232
0
    };
233
234
0
    static constexpr ImplStrCharsetDef aUnixCharsetJISX0208Tab[] =
235
0
    {
236
0
        { {}, RTL_TEXTENCODING_JIS_X_0208 }
237
0
    };
238
239
0
    static constexpr ImplStrCharsetDef aUnixCharsetJISX0201Tab[] =
240
0
    {
241
0
        { {}, RTL_TEXTENCODING_JIS_X_0201 }
242
0
    };
243
244
0
    static constexpr ImplStrCharsetDef aUnixCharsetJISX0212Tab[] =
245
0
    {
246
0
        { {}, RTL_TEXTENCODING_JIS_X_0212 }
247
0
    };
248
249
0
    static constexpr ImplStrCharsetDef aUnixCharsetGBTab[] =
250
0
    {
251
0
        { {}, RTL_TEXTENCODING_GB_2312 }
252
0
    };
253
254
0
    static constexpr ImplStrCharsetDef aUnixCharsetGBKTab[] =
255
0
    {
256
0
        { {}, RTL_TEXTENCODING_GBK }
257
0
    };
258
259
0
    static constexpr ImplStrCharsetDef aUnixCharsetBIG5Tab[] =
260
0
    {
261
0
        { {}, RTL_TEXTENCODING_BIG5 }
262
0
    };
263
264
0
    static constexpr ImplStrCharsetDef aUnixCharsetKSC56011987Tab[] =
265
0
    {
266
0
        { {}, RTL_TEXTENCODING_EUC_KR }
267
0
    };
268
269
0
    static constexpr ImplStrCharsetDef aUnixCharsetKSC56011992Tab[] =
270
0
    {
271
0
        { {}, RTL_TEXTENCODING_MS_1361 }
272
0
    };
273
274
0
    static constexpr ImplStrCharsetDef aUnixCharsetISO10646Tab[] =
275
0
    {
276
0
        { {}, RTL_TEXTENCODING_UNICODE }
277
0
    };
278
279
0
    static constexpr ImplStrCharsetDef aUnixCharsetUNICODETab[] =
280
0
    {
281
/* Currently every Unicode Encoding is for us Unicode */
282
/*        { "fontspecific", RTL_TEXTENCODING_UNICODE }, */
283
0
        { {}, RTL_TEXTENCODING_UNICODE }
284
0
    };
285
286
0
    static constexpr ImplStrCharsetDef aUnixCharsetSymbolTab[] =
287
0
    {
288
0
        { {}, RTL_TEXTENCODING_SYMBOL }
289
0
    };
290
291
    /* See <http://cvs.freedesktop.org/xorg/xc/fonts/encodings/iso8859-11.enc?
292
       rev=1.1.1.1>: */
293
0
    static constexpr ImplStrCharsetDef aUnixCharsetTIS620Tab[] =
294
0
    {
295
0
        { "0", RTL_TEXTENCODING_TIS_620 },
296
0
        { "2529", RTL_TEXTENCODING_TIS_620 },
297
0
        { "2533", RTL_TEXTENCODING_TIS_620 },
298
0
    };
299
0
    static constexpr ImplStrCharsetDef aUnixCharsetTIS6202529Tab[] =
300
0
    {
301
0
        { "1", RTL_TEXTENCODING_TIS_620 },
302
0
    };
303
0
    static constexpr ImplStrCharsetDef aUnixCharsetTIS6202533Tab[] =
304
0
    {
305
0
        { "0", RTL_TEXTENCODING_TIS_620 },
306
0
        { "1", RTL_TEXTENCODING_TIS_620 },
307
0
    };
308
309
0
    static constexpr ImplStrFirstPartCharsetDef aUnixCharsetFirstPartTab[] =
310
0
    {
311
0
        { "iso8859", aUnixCharsetISOTab },
312
0
        { "adobe", aUnixCharsetADOBETab },
313
0
        { "ansi", aUnixCharsetMSTab },
314
0
        { "microsoft", aUnixCharsetMSTab },
315
0
        { "ibm", aUnixCharsetIBMTab },
316
0
        { "koi8", aUnixCharsetKOI8Tab },
317
0
        { "jisx0208", aUnixCharsetJISX0208Tab },
318
0
        { "jisx0208.1983", aUnixCharsetJISX0208Tab },
319
0
        { "jisx0201", aUnixCharsetJISX0201Tab },
320
0
        { "jisx0201.1976", aUnixCharsetJISX0201Tab },
321
0
        { "jisx0212", aUnixCharsetJISX0212Tab },
322
0
        { "jisx0212.1990", aUnixCharsetJISX0212Tab },
323
0
        { "gb2312", aUnixCharsetGBTab },
324
0
        { "gbk", aUnixCharsetGBKTab },
325
0
        { "big5", aUnixCharsetBIG5Tab },
326
0
        { "iso10646", aUnixCharsetISO10646Tab },
327
/*      { "unicode", aUnixCharsetUNICODETab }, */ /* fonts contain only default chars */
328
0
        { "sunolcursor", aUnixCharsetSymbolTab },
329
0
        { "sunolglyph", aUnixCharsetSymbolTab },
330
0
        { "iso10646", aUnixCharsetUNICODETab },
331
0
        { "ksc5601.1987", aUnixCharsetKSC56011987Tab },
332
0
        { "ksc5601.1992", aUnixCharsetKSC56011992Tab },
333
0
        { "tis620.2529", aUnixCharsetTIS6202529Tab },
334
0
        { "tis620.2533", aUnixCharsetTIS6202533Tab },
335
0
        { "tis620", aUnixCharsetTIS620Tab },
336
/*        { "sunudcja.1997",  },        */
337
/*        { "sunudcko.1997",  },        */
338
/*        { "sunudczh.1997",  },        */
339
/*        { "sunudczhtw.1997",  },      */
340
0
    };
341
342
0
    const std::string_view charset(pUnixCharset);
343
0
    const size_t dashPos = charset.find('-');
344
0
    if (dashPos == std::string_view::npos)
345
0
        return RTL_TEXTENCODING_DONTKNOW;
346
347
    /* found part separator */
348
    /* Alloc Buffer and map to lower case */
349
0
    char buf1[20]; // more than enough to compare the longest prefix here, which is 14 chars
350
0
    std::string_view part1 = charset.substr(0, std::min(dashPos, size_t(20)));
351
0
    std::transform(part1.begin(), part1.end(), buf1, rtl::toAsciiLowerCase<unsigned char>);
352
0
    part1 = { buf1, part1.size() };
353
354
0
    char buf2[20]; // more than enough to compare the longest postfix here, which is 13 chars
355
0
    std::string_view part2 = charset.substr(dashPos + 1, 20);
356
0
    std::transform(part2.begin(), part2.end(), buf2, rtl::toAsciiLowerCase<unsigned char>);
357
0
    part2 = { buf2, part2.size() };
358
359
    /* Search for the part tab */
360
0
    for (const auto& rFirstPartData : aUnixCharsetFirstPartTab)
361
0
    {
362
0
        if (part1.starts_with(rFirstPartData.mpCharsetStr))
363
0
        {
364
            /* Search for the charset in the second part tab */
365
0
            for (const auto& rData : rFirstPartData.mpSecondPartTab)
366
0
                if (part2.starts_with(rData.mpCharsetStr)) // empty mpCharsetStr matches always
367
0
                    return rData.meTextEncoding;
368
369
0
            return RTL_TEXTENCODING_DONTKNOW;
370
0
        }
371
0
    }
372
373
0
    return RTL_TEXTENCODING_DONTKNOW;
374
0
}
375
376
/* ----------------------------------------------------------------------- */
377
378
rtl_TextEncoding SAL_CALL rtl_getTextEncodingFromMimeCharset( const char* pMimeCharset )
379
60.2k
{
380
    /* All Identifiers are in lower case and contain only alphanumeric */
381
    /* characters. The function search for the first equal string in */
382
    /* the table. In this table are only the most used mime types. */
383
    /* Sort order: important */
384
60.2k
    static constexpr ImplStrCharsetDef aVIPMimeCharsetTab[] =
385
60.2k
    {
386
60.2k
        { "usascii", RTL_TEXTENCODING_ASCII_US },
387
60.2k
        { "utf8", RTL_TEXTENCODING_UTF8 },
388
60.2k
        { "utf7", RTL_TEXTENCODING_UTF7 },
389
60.2k
        { "iso88591", RTL_TEXTENCODING_ISO_8859_1 },
390
60.2k
        { "iso88592", RTL_TEXTENCODING_ISO_8859_2 },
391
60.2k
        { "iso88593", RTL_TEXTENCODING_ISO_8859_3 },
392
60.2k
        { "iso88594", RTL_TEXTENCODING_ISO_8859_4 },
393
60.2k
        { "iso88595", RTL_TEXTENCODING_ISO_8859_5 },
394
60.2k
        { "iso88596", RTL_TEXTENCODING_ISO_8859_6 },
395
60.2k
        { "iso88597", RTL_TEXTENCODING_ISO_8859_7 },
396
60.2k
        { "iso88598", RTL_TEXTENCODING_ISO_8859_8 },
397
60.2k
        { "iso88599", RTL_TEXTENCODING_ISO_8859_9 },
398
60.2k
        { "iso885910", RTL_TEXTENCODING_ISO_8859_10 },
399
60.2k
        { "iso885913", RTL_TEXTENCODING_ISO_8859_13 },
400
60.2k
        { "iso885914", RTL_TEXTENCODING_ISO_8859_14 },
401
60.2k
        { "iso885915", RTL_TEXTENCODING_ISO_8859_15 },
402
60.2k
        { "iso2022jp", RTL_TEXTENCODING_ISO_2022_JP },
403
60.2k
        { "iso2022jp2", RTL_TEXTENCODING_ISO_2022_JP },
404
60.2k
        { "iso2022cn", RTL_TEXTENCODING_ISO_2022_CN },
405
60.2k
        { "iso2022cnext", RTL_TEXTENCODING_ISO_2022_CN },
406
60.2k
        { "iso2022kr", RTL_TEXTENCODING_ISO_2022_KR },
407
60.2k
        { "eucjp", RTL_TEXTENCODING_EUC_JP },
408
60.2k
        { "shiftjis", RTL_TEXTENCODING_SHIFT_JIS },
409
60.2k
        { "mskanji", RTL_TEXTENCODING_MS_932 },
410
60.2k
        { "gb2312", RTL_TEXTENCODING_GB_2312 },
411
60.2k
        { "cngb", RTL_TEXTENCODING_GB_2312 },
412
60.2k
        { "big5", RTL_TEXTENCODING_BIG5 },
413
60.2k
        { "cnbig5", RTL_TEXTENCODING_BIG5 },
414
60.2k
        { "cngb12345", RTL_TEXTENCODING_GBT_12345 },
415
60.2k
        { "euckr", RTL_TEXTENCODING_EUC_KR },
416
60.2k
        { "koi8r", RTL_TEXTENCODING_KOI8_R },
417
60.2k
        { "windows1252", RTL_TEXTENCODING_MS_1252 },
418
60.2k
        { "windows1250", RTL_TEXTENCODING_MS_1250 },
419
60.2k
        { "windows1251", RTL_TEXTENCODING_MS_1251 },
420
60.2k
        { "windows1253", RTL_TEXTENCODING_MS_1253 },
421
60.2k
        { "windows1254", RTL_TEXTENCODING_MS_1254 },
422
60.2k
        { "windows1255", RTL_TEXTENCODING_MS_1255 },
423
60.2k
        { "windows1256", RTL_TEXTENCODING_MS_1256 },
424
60.2k
        { "windows1257", RTL_TEXTENCODING_MS_1257 },
425
60.2k
        { "windows1258", RTL_TEXTENCODING_MS_1258 },
426
60.2k
    };
427
428
    /* All Identifiers are in lower case and contain only alphanumeric */
429
    /* characters. The function search for the first matching string in */
430
    /* the table. */
431
    /* Sort order: unique (first iso885914, then iso88591), important */
432
60.2k
    static constexpr ImplStrCharsetDef aMimeCharsetTab[] =
433
60.2k
    {
434
60.2k
        { "unicode11utf7", RTL_TEXTENCODING_UTF7 },
435
60.2k
        { "caunicode11utf7", RTL_TEXTENCODING_UTF7 },
436
60.2k
        { "iso88591windows30", RTL_TEXTENCODING_ISO_8859_1 },
437
60.2k
        { "iso88591win", RTL_TEXTENCODING_MS_1252 },
438
60.2k
        { "iso88592win", RTL_TEXTENCODING_MS_1250 },
439
60.2k
        { "iso88599win", RTL_TEXTENCODING_MS_1254 },
440
60.2k
        { "iso885915", RTL_TEXTENCODING_ISO_8859_15 },
441
60.2k
        { "iso885914", RTL_TEXTENCODING_ISO_8859_14 },
442
60.2k
        { "iso885913", RTL_TEXTENCODING_ISO_8859_13 },
443
60.2k
        { "iso885911", RTL_TEXTENCODING_TIS_620 },
444
            /* This is no official MIME character set name, but it might be in
445
               use in Thailand. */
446
60.2k
        { "iso885910", RTL_TEXTENCODING_ISO_8859_10 },
447
60.2k
        { "iso88591", RTL_TEXTENCODING_ISO_8859_1 },
448
60.2k
        { "iso88592", RTL_TEXTENCODING_ISO_8859_2 },
449
60.2k
        { "iso88593", RTL_TEXTENCODING_ISO_8859_3 },
450
60.2k
        { "iso88594", RTL_TEXTENCODING_ISO_8859_4 },
451
60.2k
        { "iso88595", RTL_TEXTENCODING_ISO_8859_5 },
452
60.2k
        { "iso88596", RTL_TEXTENCODING_ISO_8859_6 },
453
60.2k
        { "iso88597", RTL_TEXTENCODING_ISO_8859_7 },
454
60.2k
        { "iso88598", RTL_TEXTENCODING_ISO_8859_8 },
455
60.2k
        { "iso88599", RTL_TEXTENCODING_ISO_8859_9 },
456
60.2k
        { "isoir100", RTL_TEXTENCODING_ISO_8859_1 },
457
60.2k
        { "latin1", RTL_TEXTENCODING_ISO_8859_1 },
458
60.2k
        { "l1", RTL_TEXTENCODING_ISO_8859_1 },
459
60.2k
        { "cp819", RTL_TEXTENCODING_ISO_8859_1 },
460
60.2k
        { "ibm819", RTL_TEXTENCODING_ISO_8859_1 },
461
60.2k
        { "csisolatin1", RTL_TEXTENCODING_ISO_8859_1 },
462
60.2k
        { "isoir101", RTL_TEXTENCODING_ISO_8859_2 },
463
60.2k
        { "latin2", RTL_TEXTENCODING_ISO_8859_2 },
464
60.2k
        { "l2", RTL_TEXTENCODING_ISO_8859_2 },
465
60.2k
        { "csisolatin2", RTL_TEXTENCODING_ISO_8859_2 },
466
60.2k
        { "isoir109", RTL_TEXTENCODING_ISO_8859_3 },
467
60.2k
        { "latin3", RTL_TEXTENCODING_ISO_8859_3 },
468
60.2k
        { "l3", RTL_TEXTENCODING_ISO_8859_3 },
469
60.2k
        { "csisolatin3", RTL_TEXTENCODING_ISO_8859_3 },
470
60.2k
        { "isoir110", RTL_TEXTENCODING_ISO_8859_4 },
471
60.2k
        { "latin4", RTL_TEXTENCODING_ISO_8859_4 },
472
60.2k
        { "l4", RTL_TEXTENCODING_ISO_8859_4 },
473
60.2k
        { "csisolatin4", RTL_TEXTENCODING_ISO_8859_4 },
474
60.2k
        { "isoir144", RTL_TEXTENCODING_ISO_8859_5 },
475
60.2k
        { "cyrillicasian", RTL_TEXTENCODING_PT154 },
476
60.2k
        { "cyrillic", RTL_TEXTENCODING_ISO_8859_5 },
477
60.2k
        { "csisolatincyrillic", RTL_TEXTENCODING_ISO_8859_5 },
478
60.2k
        { "isoir127", RTL_TEXTENCODING_ISO_8859_6 },
479
60.2k
        { "arabic", RTL_TEXTENCODING_ISO_8859_6 },
480
60.2k
        { "csisolatinarabic", RTL_TEXTENCODING_ISO_8859_6 },
481
60.2k
        { "ecma114", RTL_TEXTENCODING_ISO_8859_6 },
482
60.2k
        { "asmo708", RTL_TEXTENCODING_ISO_8859_6 },
483
60.2k
        { "isoir126", RTL_TEXTENCODING_ISO_8859_7 },
484
60.2k
        { "greek", RTL_TEXTENCODING_ISO_8859_7 },
485
60.2k
        { "csisolatingreek", RTL_TEXTENCODING_ISO_8859_7 },
486
60.2k
        { "elot928", RTL_TEXTENCODING_ISO_8859_7 },
487
60.2k
        { "ecma118", RTL_TEXTENCODING_ISO_8859_7 },
488
60.2k
        { "isoir138", RTL_TEXTENCODING_ISO_8859_8 },
489
60.2k
        { "hebrew", RTL_TEXTENCODING_ISO_8859_8 },
490
60.2k
        { "csisolatinhebrew", RTL_TEXTENCODING_ISO_8859_8 },
491
60.2k
        { "isoir148", RTL_TEXTENCODING_ISO_8859_9 },
492
60.2k
        { "latin5", RTL_TEXTENCODING_ISO_8859_9 },
493
60.2k
        { "l5", RTL_TEXTENCODING_ISO_8859_9 },
494
60.2k
        { "csisolatin5", RTL_TEXTENCODING_ISO_8859_9 },
495
60.2k
        { "cswindows30latin1", RTL_TEXTENCODING_ISO_8859_1 },
496
60.2k
        { "cswindows30latin1", RTL_TEXTENCODING_ISO_8859_1 },
497
60.2k
        { "cswindows31latin1", RTL_TEXTENCODING_MS_1252 },
498
60.2k
        { "cswindows31latin2", RTL_TEXTENCODING_MS_1250 },
499
60.2k
        { "cswindows31latin5", RTL_TEXTENCODING_MS_1254 },
500
60.2k
        { "iso10646us", RTL_TEXTENCODING_ASCII_US },
501
60.2k
        { "iso646irv", RTL_TEXTENCODING_ASCII_US },
502
60.2k
        { "cskoi8r", RTL_TEXTENCODING_KOI8_R },
503
60.2k
        { "ibm437", RTL_TEXTENCODING_IBM_437 },
504
60.2k
        { "cp437", RTL_TEXTENCODING_IBM_437 },
505
60.2k
        { "437", RTL_TEXTENCODING_IBM_437 },
506
60.2k
        { "cspc8codepage437", RTL_TEXTENCODING_IBM_437 },
507
60.2k
        { "ansix34", RTL_TEXTENCODING_ASCII_US },
508
60.2k
        { "ibm367", RTL_TEXTENCODING_ASCII_US },
509
60.2k
        { "cp367", RTL_TEXTENCODING_ASCII_US },
510
60.2k
        { "csascii", RTL_TEXTENCODING_ASCII_US },
511
60.2k
        { "ibm775", RTL_TEXTENCODING_IBM_775 },
512
60.2k
        { "cp775", RTL_TEXTENCODING_IBM_775 },
513
60.2k
        { "cspc775baltic", RTL_TEXTENCODING_IBM_775 },
514
60.2k
        { "ibm850", RTL_TEXTENCODING_IBM_850 },
515
60.2k
        { "cp850", RTL_TEXTENCODING_IBM_850 },
516
60.2k
        { "850", RTL_TEXTENCODING_IBM_850 },
517
60.2k
        { "cspc850multilingual", RTL_TEXTENCODING_IBM_850 },
518
/*        { "ibm851", RTL_TEXTENCODING_IBM_851 }, */
519
/*        { "cp851", RTL_TEXTENCODING_IBM_851 }, */
520
/*        { "851", RTL_TEXTENCODING_IBM_851 }, */
521
/*        { "csibm851", RTL_TEXTENCODING_IBM_851 }, */
522
60.2k
        { "ibm852", RTL_TEXTENCODING_IBM_852 },
523
60.2k
        { "cp852", RTL_TEXTENCODING_IBM_852 },
524
60.2k
        { "852", RTL_TEXTENCODING_IBM_852 },
525
60.2k
        { "cspcp852", RTL_TEXTENCODING_IBM_852 },
526
60.2k
        { "ibm855", RTL_TEXTENCODING_IBM_855 },
527
60.2k
        { "cp855", RTL_TEXTENCODING_IBM_855 },
528
60.2k
        { "855", RTL_TEXTENCODING_IBM_855 },
529
60.2k
        { "csibm855", RTL_TEXTENCODING_IBM_855 },
530
60.2k
        { "ibm857", RTL_TEXTENCODING_IBM_857 },
531
60.2k
        { "cp857", RTL_TEXTENCODING_IBM_857 },
532
60.2k
        { "857", RTL_TEXTENCODING_IBM_857 },
533
60.2k
        { "csibm857", RTL_TEXTENCODING_IBM_857 },
534
60.2k
        { "ibm860", RTL_TEXTENCODING_IBM_860 },
535
60.2k
        { "cp860", RTL_TEXTENCODING_IBM_860 },
536
60.2k
        { "860", RTL_TEXTENCODING_IBM_860 },
537
60.2k
        { "csibm860", RTL_TEXTENCODING_IBM_860 },
538
60.2k
        { "ibm861", RTL_TEXTENCODING_IBM_861 },
539
60.2k
        { "cp861", RTL_TEXTENCODING_IBM_861 },
540
60.2k
        { "861", RTL_TEXTENCODING_IBM_861 },
541
60.2k
        { "csis", RTL_TEXTENCODING_IBM_861 },
542
60.2k
        { "csibm861", RTL_TEXTENCODING_IBM_861 },
543
60.2k
        { "ibm862", RTL_TEXTENCODING_IBM_862 },
544
60.2k
        { "cp862", RTL_TEXTENCODING_IBM_862 },
545
60.2k
        { "862", RTL_TEXTENCODING_IBM_862 },
546
60.2k
        { "cspc862latinhebrew", RTL_TEXTENCODING_IBM_862 },
547
60.2k
        { "ibm863", RTL_TEXTENCODING_IBM_863 },
548
60.2k
        { "cp863", RTL_TEXTENCODING_IBM_863 },
549
60.2k
        { "863", RTL_TEXTENCODING_IBM_863 },
550
60.2k
        { "csibm863", RTL_TEXTENCODING_IBM_863 },
551
60.2k
        { "ibm864", RTL_TEXTENCODING_IBM_864 },
552
60.2k
        { "cp864", RTL_TEXTENCODING_IBM_864 },
553
60.2k
        { "864", RTL_TEXTENCODING_IBM_864 },
554
60.2k
        { "csibm864", RTL_TEXTENCODING_IBM_864 },
555
60.2k
        { "ibm865", RTL_TEXTENCODING_IBM_865 },
556
60.2k
        { "cp865", RTL_TEXTENCODING_IBM_865 },
557
60.2k
        { "865", RTL_TEXTENCODING_IBM_865 },
558
60.2k
        { "csibm865", RTL_TEXTENCODING_IBM_865 },
559
60.2k
        { "ibm866", RTL_TEXTENCODING_IBM_866 },
560
60.2k
        { "cp866", RTL_TEXTENCODING_IBM_866 },
561
60.2k
        { "866", RTL_TEXTENCODING_IBM_866 },
562
60.2k
        { "csibm866", RTL_TEXTENCODING_IBM_866 },
563
/*        { "ibm868", RTL_TEXTENCODING_IBM_868 }, */
564
/*        { "cp868", RTL_TEXTENCODING_IBM_868 }, */
565
/*        { "cpar", RTL_TEXTENCODING_IBM_868 }, */
566
/*        { "csibm868", RTL_TEXTENCODING_IBM_868 }, */
567
60.2k
        { "ibm869", RTL_TEXTENCODING_IBM_869 },
568
60.2k
        { "cp869", RTL_TEXTENCODING_IBM_869 },
569
60.2k
        { "869", RTL_TEXTENCODING_IBM_869 },
570
60.2k
        { "cpgr", RTL_TEXTENCODING_IBM_869 },
571
60.2k
        { "csibm869", RTL_TEXTENCODING_IBM_869 },
572
60.2k
        { "ibm869", RTL_TEXTENCODING_IBM_869 },
573
60.2k
        { "cp869", RTL_TEXTENCODING_IBM_869 },
574
60.2k
        { "869", RTL_TEXTENCODING_IBM_869 },
575
60.2k
        { "cpgr", RTL_TEXTENCODING_IBM_869 },
576
60.2k
        { "csibm869", RTL_TEXTENCODING_IBM_869 },
577
60.2k
        { "mac", RTL_TEXTENCODING_APPLE_ROMAN },
578
60.2k
        { "csmacintosh", RTL_TEXTENCODING_APPLE_ROMAN },
579
60.2k
        { "shiftjis", RTL_TEXTENCODING_SHIFT_JIS },
580
60.2k
        { "mskanji", RTL_TEXTENCODING_MS_932 },
581
60.2k
        { "csshiftjis", RTL_TEXTENCODING_SHIFT_JIS },
582
60.2k
        { "jisx0208", RTL_TEXTENCODING_JIS_X_0208 },
583
60.2k
        { "jisc62261983", RTL_TEXTENCODING_JIS_X_0208 },
584
60.2k
        { "csiso87jisx0208", RTL_TEXTENCODING_JIS_X_0208 },
585
60.2k
        { "isoir86", RTL_TEXTENCODING_JIS_X_0208 },
586
60.2k
        { "x0208", RTL_TEXTENCODING_JIS_X_0208 },
587
60.2k
        { "jisx0201", RTL_TEXTENCODING_JIS_X_0201 },
588
60.2k
        { "cshalfwidthkatakana", RTL_TEXTENCODING_JIS_X_0201 },
589
60.2k
        { "x0201", RTL_TEXTENCODING_JIS_X_0201 },
590
60.2k
        { "jisx0212", RTL_TEXTENCODING_JIS_X_0212 },
591
60.2k
        { "csiso159jisx0212", RTL_TEXTENCODING_JIS_X_0212 },
592
60.2k
        { "isoir159", RTL_TEXTENCODING_JIS_X_0208 },
593
60.2k
        { "x0212", RTL_TEXTENCODING_JIS_X_0212 },
594
60.2k
        { "isoir6", RTL_TEXTENCODING_ASCII_US },
595
60.2k
        { "xsjis", RTL_TEXTENCODING_SHIFT_JIS },
596
60.2k
        { "sjis", RTL_TEXTENCODING_SHIFT_JIS },
597
60.2k
        { "ascii", RTL_TEXTENCODING_ASCII_US },
598
60.2k
        { "us", RTL_TEXTENCODING_ASCII_US },
599
60.2k
        { "gb180302000", RTL_TEXTENCODING_GB_18030 },
600
            /* This is no actual MIME character set name, it is only in here
601
               for backwards compatibility (before "GB18030" was officially
602
               registered with IANA, this code contained some guesses of what
603
               would become official names for GB18030). */
604
60.2k
        { "gb18030", RTL_TEXTENCODING_GB_18030 },
605
60.2k
        { "big5hkscs", RTL_TEXTENCODING_BIG5_HKSCS },
606
60.2k
        { "tis620", RTL_TEXTENCODING_TIS_620 },
607
60.2k
        { "gbk", RTL_TEXTENCODING_GBK },
608
60.2k
        { "cp936", RTL_TEXTENCODING_GBK },
609
60.2k
        { "ms936", RTL_TEXTENCODING_GBK },
610
60.2k
        { "windows936", RTL_TEXTENCODING_GBK },
611
60.2k
        { "cp874", RTL_TEXTENCODING_MS_874 },
612
            /* This is no official MIME character set name, but it might be in
613
               use in Thailand. */
614
60.2k
        { "ms874", RTL_TEXTENCODING_MS_874 },
615
            /* This is no official MIME character set name, but it might be in
616
               use in Thailand. */
617
60.2k
        { "windows874", RTL_TEXTENCODING_MS_874 },
618
            /* This is no official MIME character set name, but it might be in
619
               use in Thailand. */
620
60.2k
        { "koi8u", RTL_TEXTENCODING_KOI8_U },
621
60.2k
        { "cpis", RTL_TEXTENCODING_IBM_861 },
622
60.2k
        { "ksc56011987", RTL_TEXTENCODING_MS_949 },
623
60.2k
        { "isoir149", RTL_TEXTENCODING_MS_949 },
624
60.2k
        { "ksc56011989", RTL_TEXTENCODING_MS_949 },
625
60.2k
        { "ksc5601", RTL_TEXTENCODING_MS_949 },
626
60.2k
        { "korean", RTL_TEXTENCODING_MS_949 },
627
60.2k
        { "csksc56011987", RTL_TEXTENCODING_MS_949 },
628
            /* Map KS_C_5601-1987 and aliases to MS-949 instead of EUC-KR, as
629
               this character set identifier seems to be prominently used by MS
630
               to stand for KS C 5601 plus MS-949 extensions */
631
60.2k
        { "latin9", RTL_TEXTENCODING_ISO_8859_15 },
632
60.2k
        { "adobestandardencoding", RTL_TEXTENCODING_ADOBE_STANDARD },
633
60.2k
        { "csadobestandardencoding", RTL_TEXTENCODING_ADOBE_STANDARD },
634
60.2k
        { "adobesymbolencoding", RTL_TEXTENCODING_ADOBE_SYMBOL },
635
60.2k
        { "cshppsmath", RTL_TEXTENCODING_ADOBE_SYMBOL },
636
60.2k
        { "ptcp154", RTL_TEXTENCODING_PT154 },
637
60.2k
        { "csptcp154", RTL_TEXTENCODING_PT154 },
638
60.2k
        { "pt154", RTL_TEXTENCODING_PT154 },
639
60.2k
        { "cp154", RTL_TEXTENCODING_PT154 },
640
60.2k
        { "xisciide", RTL_TEXTENCODING_ISCII_DEVANAGARI },
641
            /* This is not an official MIME character set name, but is in use by
642
               various windows APIs. */
643
60.2k
    };
644
645
    /* Alloc Buffer and map to lower case and remove non alphanumeric chars */
646
60.2k
    char buf[30]; // more than enough to compare the longest encoding name here, which is 23 chars
647
60.2k
    auto end = std::begin(buf);
648
617k
    for (const char* p = pMimeCharset; *p && end != std::end(buf); ++p)
649
556k
        if (rtl::isAsciiAlphanumeric<unsigned char>(*p))
650
366k
            *end++ = rtl::toAsciiLowerCase<unsigned char>(*p);
651
60.2k
    std::string_view charset(buf, end);
652
653
    /* Search for equal in the VIP table */
654
60.2k
    for (const auto& rData : aVIPMimeCharsetTab)
655
637k
        if (charset == rData.mpCharsetStr)
656
49.0k
            return rData.meTextEncoding;
657
658
    /* Search for matching in the mime table */
659
11.1k
    for (const auto& rData : aMimeCharsetTab)
660
1.50M
        if (charset.starts_with(rData.mpCharsetStr))
661
8.24k
            return rData.meTextEncoding;
662
663
2.92k
    return RTL_TEXTENCODING_DONTKNOW;
664
11.1k
}
665
666
/* ======================================================================= */
667
668
sal_uInt8 SAL_CALL rtl_getBestWindowsCharsetFromTextEncoding( rtl_TextEncoding eTextEncoding )
669
0
{
670
0
    const ImplTextEncodingData* pData = Impl_getTextEncodingData( eTextEncoding );
671
0
    if ( pData )
672
0
        return pData->mnBestWindowsCharset;
673
0
    return 1;
674
0
}
675
676
/* ----------------------------------------------------------------------- */
677
678
const char* SAL_CALL rtl_getBestUnixCharsetFromTextEncoding( rtl_TextEncoding eTextEncoding  )
679
0
{
680
0
    const ImplTextEncodingData* pData = Impl_getTextEncodingData( eTextEncoding );
681
0
    if ( pData )
682
0
        return pData->mpBestUnixCharset;
683
0
    if( eTextEncoding == RTL_TEXTENCODING_UNICODE )
684
0
        return "iso10646-1";
685
0
    return nullptr;
686
0
}
687
688
/* ----------------------------------------------------------------------- */
689
690
char const * SAL_CALL rtl_getMimeCharsetFromTextEncoding(rtl_TextEncoding
691
                                                             nEncoding)
692
0
{
693
0
    ImplTextEncodingData const * p = Impl_getTextEncodingData(nEncoding);
694
0
    return p && (p->mnInfoFlags & RTL_TEXTENCODING_INFO_MIME) != 0 ?
695
0
               p->mpBestMimeCharset : nullptr;
696
0
}
697
698
const char* SAL_CALL rtl_getBestMimeCharsetFromTextEncoding( rtl_TextEncoding eTextEncoding )
699
29.5k
{
700
29.5k
    const ImplTextEncodingData* pData = Impl_getTextEncodingData( eTextEncoding );
701
29.5k
    if ( pData )
702
29.5k
        return pData->mpBestMimeCharset;
703
0
    return nullptr;
704
29.5k
}
705
706
/* The following two functions are based on <http://www.sharmahd.com/tm/
707
   codepages.html>, <http://msdn.microsoft.com/workshop/author/dhtml/reference/
708
   charsets/charset4.asp>, and <http://www.iana.org/assignments/character-sets>.
709
 */
710
711
rtl_TextEncoding SAL_CALL
712
rtl_getTextEncodingFromWindowsCodePage(sal_uInt32 nCodePage)
713
46.8k
{
714
46.8k
    switch (nCodePage)
715
46.8k
    {
716
984
    case 42: return RTL_TEXTENCODING_SYMBOL;
717
87
    case 437: return RTL_TEXTENCODING_IBM_437;
718
88
    case 708: return RTL_TEXTENCODING_ISO_8859_6;
719
81
    case 737: return RTL_TEXTENCODING_IBM_737;
720
68
    case 775: return RTL_TEXTENCODING_IBM_775;
721
215
    case 850: return RTL_TEXTENCODING_IBM_850;
722
73
    case 852: return RTL_TEXTENCODING_IBM_852;
723
122
    case 855: return RTL_TEXTENCODING_IBM_855;
724
160
    case 857: return RTL_TEXTENCODING_IBM_857;
725
247
    case 860: return RTL_TEXTENCODING_IBM_860;
726
240
    case 861: return RTL_TEXTENCODING_IBM_861;
727
70
    case 862: return RTL_TEXTENCODING_IBM_862;
728
51
    case 863: return RTL_TEXTENCODING_IBM_863;
729
489
    case 864: return RTL_TEXTENCODING_IBM_864;
730
88
    case 865: return RTL_TEXTENCODING_IBM_865;
731
298
    case 866: return RTL_TEXTENCODING_IBM_866;
732
120
    case 869: return RTL_TEXTENCODING_IBM_869;
733
202
    case 874: return RTL_TEXTENCODING_MS_874;
734
1.20k
    case 932: return RTL_TEXTENCODING_MS_932;
735
967
    case 936: return RTL_TEXTENCODING_MS_936;
736
254
    case 949: return RTL_TEXTENCODING_MS_949;
737
398
    case 950: return RTL_TEXTENCODING_MS_950;
738
1.28k
    case 1250: return RTL_TEXTENCODING_MS_1250;
739
2.55k
    case 1251: return RTL_TEXTENCODING_MS_1251;
740
17.2k
    case 1252: return RTL_TEXTENCODING_MS_1252;
741
402
    case 1253: return RTL_TEXTENCODING_MS_1253;
742
616
    case 1254: return RTL_TEXTENCODING_MS_1254;
743
1.19k
    case 1255: return RTL_TEXTENCODING_MS_1255;
744
316
    case 1256: return RTL_TEXTENCODING_MS_1256;
745
530
    case 1257: return RTL_TEXTENCODING_MS_1257;
746
641
    case 1258: return RTL_TEXTENCODING_MS_1258;
747
66
    case 1361: return RTL_TEXTENCODING_MS_1361;
748
950
    case 10000: return RTL_TEXTENCODING_APPLE_ROMAN;
749
126
    case 10001: return RTL_TEXTENCODING_APPLE_JAPANESE;
750
91
    case 10002: return RTL_TEXTENCODING_APPLE_CHINTRAD;
751
232
    case 10003: return RTL_TEXTENCODING_APPLE_KOREAN;
752
273
    case 10004: return RTL_TEXTENCODING_APPLE_ARABIC;
753
130
    case 10005: return RTL_TEXTENCODING_APPLE_HEBREW;
754
93
    case 10006: return RTL_TEXTENCODING_APPLE_GREEK;
755
69
    case 10007: return RTL_TEXTENCODING_APPLE_CYRILLIC;
756
82
    case 10008: return RTL_TEXTENCODING_APPLE_CHINSIMP;
757
202
    case 10010: return RTL_TEXTENCODING_APPLE_ROMANIAN;
758
88
    case 10017: return RTL_TEXTENCODING_APPLE_UKRAINIAN;
759
67
    case 10029: return RTL_TEXTENCODING_APPLE_CENTEURO;
760
69
    case 10079: return RTL_TEXTENCODING_APPLE_ICELAND;
761
94
    case 10081: return RTL_TEXTENCODING_APPLE_TURKISH;
762
80
    case 10082: return RTL_TEXTENCODING_APPLE_CROATIAN;
763
133
    case 20127: return RTL_TEXTENCODING_ASCII_US;
764
69
    case 20866: return RTL_TEXTENCODING_KOI8_R;
765
71
    case 21866: return RTL_TEXTENCODING_KOI8_U;
766
89
    case 28591: return RTL_TEXTENCODING_ISO_8859_1;
767
86
    case 28592: return RTL_TEXTENCODING_ISO_8859_2;
768
73
    case 28593: return RTL_TEXTENCODING_ISO_8859_3;
769
110
    case 28594: return RTL_TEXTENCODING_ISO_8859_4;
770
100
    case 28595: return RTL_TEXTENCODING_ISO_8859_5;
771
140
    case 28596: return RTL_TEXTENCODING_ISO_8859_6;
772
74
    case 28597: return RTL_TEXTENCODING_ISO_8859_7;
773
150
    case 28598: return RTL_TEXTENCODING_ISO_8859_8;
774
96
    case 28599: return RTL_TEXTENCODING_ISO_8859_9;
775
71
    case 28605: return RTL_TEXTENCODING_ISO_8859_15;
776
85
    case 50220: return RTL_TEXTENCODING_ISO_2022_JP;
777
75
    case 50225: return RTL_TEXTENCODING_ISO_2022_KR;
778
0
    case 51932: return RTL_TEXTENCODING_EUC_JP;
779
0
    case 51936: return RTL_TEXTENCODING_EUC_CN;
780
445
    case 51949: return RTL_TEXTENCODING_EUC_KR;
781
0
    case 57002: return RTL_TEXTENCODING_ISCII_DEVANAGARI;
782
562
    case 65000: return RTL_TEXTENCODING_UTF7;
783
6.13k
    case 65001: return RTL_TEXTENCODING_UTF8;
784
4.24k
    default: return RTL_TEXTENCODING_DONTKNOW;
785
46.8k
    }
786
46.8k
}
787
788
sal_uInt32 SAL_CALL
789
rtl_getWindowsCodePageFromTextEncoding(rtl_TextEncoding nEncoding)
790
0
{
791
0
    switch (nEncoding)
792
0
    {
793
0
    case RTL_TEXTENCODING_SYMBOL: return 42;
794
0
    case RTL_TEXTENCODING_IBM_437: return 437;
795
 /* case RTL_TEXTENCODING_ISO_8859_6: return 708; */
796
0
    case RTL_TEXTENCODING_IBM_737: return 737;
797
0
    case RTL_TEXTENCODING_IBM_775: return 775;
798
0
    case RTL_TEXTENCODING_IBM_850: return 850;
799
0
    case RTL_TEXTENCODING_IBM_852: return 852;
800
0
    case RTL_TEXTENCODING_IBM_855: return 855;
801
0
    case RTL_TEXTENCODING_IBM_857: return 857;
802
0
    case RTL_TEXTENCODING_IBM_860: return 860;
803
0
    case RTL_TEXTENCODING_IBM_861: return 861;
804
0
    case RTL_TEXTENCODING_IBM_862: return 862;
805
0
    case RTL_TEXTENCODING_IBM_863: return 863;
806
0
    case RTL_TEXTENCODING_IBM_864: return 864;
807
0
    case RTL_TEXTENCODING_IBM_865: return 865;
808
0
    case RTL_TEXTENCODING_IBM_866: return 866;
809
0
    case RTL_TEXTENCODING_IBM_869: return 869;
810
0
    case RTL_TEXTENCODING_MS_874: return 874;
811
0
    case RTL_TEXTENCODING_MS_932: return 932;
812
0
    case RTL_TEXTENCODING_MS_936: return 936;
813
0
    case RTL_TEXTENCODING_MS_949: return 949;
814
0
    case RTL_TEXTENCODING_MS_950: return 950;
815
0
    case RTL_TEXTENCODING_MS_1250: return 1250;
816
0
    case RTL_TEXTENCODING_MS_1251: return 1251;
817
0
    case RTL_TEXTENCODING_MS_1252: return 1252;
818
0
    case RTL_TEXTENCODING_MS_1253: return 1253;
819
0
    case RTL_TEXTENCODING_MS_1254: return 1254;
820
0
    case RTL_TEXTENCODING_MS_1255: return 1255;
821
0
    case RTL_TEXTENCODING_MS_1256: return 1256;
822
0
    case RTL_TEXTENCODING_MS_1257: return 1257;
823
0
    case RTL_TEXTENCODING_MS_1258: return 1258;
824
0
    case RTL_TEXTENCODING_MS_1361: return 1361;
825
0
    case RTL_TEXTENCODING_APPLE_ROMAN: return 10000;
826
0
    case RTL_TEXTENCODING_APPLE_JAPANESE: return 10001;
827
0
    case RTL_TEXTENCODING_APPLE_CHINTRAD: return 10002;
828
0
    case RTL_TEXTENCODING_APPLE_KOREAN: return 10003;
829
0
    case RTL_TEXTENCODING_APPLE_ARABIC: return 10004;
830
0
    case RTL_TEXTENCODING_APPLE_HEBREW: return 10005;
831
0
    case RTL_TEXTENCODING_APPLE_GREEK: return 10006;
832
0
    case RTL_TEXTENCODING_APPLE_CYRILLIC: return 10007;
833
0
    case RTL_TEXTENCODING_APPLE_CHINSIMP: return 10008;
834
0
    case RTL_TEXTENCODING_APPLE_ROMANIAN: return 10010;
835
0
    case RTL_TEXTENCODING_APPLE_UKRAINIAN: return 10017;
836
0
    case RTL_TEXTENCODING_APPLE_CENTEURO: return 10029;
837
0
    case RTL_TEXTENCODING_APPLE_ICELAND: return 10079;
838
0
    case RTL_TEXTENCODING_APPLE_TURKISH: return 10081;
839
0
    case RTL_TEXTENCODING_APPLE_CROATIAN: return 10082;
840
0
    case RTL_TEXTENCODING_ASCII_US: return 20127;
841
0
    case RTL_TEXTENCODING_KOI8_R: return 20866;
842
0
    case RTL_TEXTENCODING_KOI8_U: return 21866;
843
0
    case RTL_TEXTENCODING_ISO_8859_1: return 28591;
844
0
    case RTL_TEXTENCODING_ISO_8859_2: return 28592;
845
0
    case RTL_TEXTENCODING_ISO_8859_3: return 28593;
846
0
    case RTL_TEXTENCODING_ISO_8859_4: return 28594;
847
0
    case RTL_TEXTENCODING_ISO_8859_5: return 28595;
848
0
    case RTL_TEXTENCODING_ISO_8859_6: return 28596;
849
0
    case RTL_TEXTENCODING_ISO_8859_7: return 28597;
850
0
    case RTL_TEXTENCODING_ISO_8859_8: return 28598;
851
0
    case RTL_TEXTENCODING_ISO_8859_9: return 28599;
852
0
    case RTL_TEXTENCODING_ISO_8859_15: return 28605;
853
0
    case RTL_TEXTENCODING_ISO_2022_JP: return 50220;
854
0
    case RTL_TEXTENCODING_ISO_2022_KR: return 50225;
855
0
    case RTL_TEXTENCODING_EUC_JP: return 51932;
856
0
    case RTL_TEXTENCODING_EUC_CN: return 51936;
857
0
    case RTL_TEXTENCODING_EUC_KR: return 51949;
858
0
    case RTL_TEXTENCODING_ISCII_DEVANAGARI: return 57002;
859
0
    case RTL_TEXTENCODING_UTF7: return 65000;
860
0
    case RTL_TEXTENCODING_UTF8: return 65001;
861
0
    default: return 0;
862
0
    }
863
0
}
864
865
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */