/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: */ |