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