LCOV - code coverage report
Current view: top level - sal/textenc - tencinfo.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 92 288 31.9 %
Date: 2012-08-25 Functions: 10 14 71.4 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 60 242 24.8 %

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

Generated by: LCOV version 1.10