Changeset 70211 in webkit


Ignore:
Timestamp:
Oct 21, 2010 1:08:12 AM (13 years ago)
Author:
Martin Robinson
Message:

2010-10-21 Carlos Garcia Campos <cgarcia@igalia.com>

Reviewed by Martin Robinson.

[GTK] Replace encodings multi-dimensional array with calls to registrar method
https://bugs.webkit.org/show_bug.cgi?id=47990

  • platform/text/gtk/TextCodecGtk.cpp: (WebCore::isEncodingAvailable): (WebCore::registerEncodingNameIfAvailable): (WebCore::registerEncodingAliasIfAvailable): (WebCore::registerCodecIfAvailable): (WebCore::TextCodecGtk::registerBaseEncodingNames): (WebCore::TextCodecGtk::registerBaseCodecs): (WebCore::TextCodecGtk::registerExtendedEncodingNames): (WebCore::TextCodecGtk::registerExtendedCodecs): (WebCore::TextCodecGtk::createIConvDecoder): (WebCore::TextCodecGtk::createIConvEncoder):
  • platform/text/gtk/TextCodecGtk.h:
Location:
trunk/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r70209 r70211  
     12010-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        Reviewed by Martin Robinson.
     4
     5        [GTK] Replace encodings multi-dimensional array with calls to registrar method
     6        https://bugs.webkit.org/show_bug.cgi?id=47990
     7
     8        * platform/text/gtk/TextCodecGtk.cpp:
     9        (WebCore::isEncodingAvailable):
     10        (WebCore::registerEncodingNameIfAvailable):
     11        (WebCore::registerEncodingAliasIfAvailable):
     12        (WebCore::registerCodecIfAvailable):
     13        (WebCore::TextCodecGtk::registerBaseEncodingNames):
     14        (WebCore::TextCodecGtk::registerBaseCodecs):
     15        (WebCore::TextCodecGtk::registerExtendedEncodingNames):
     16        (WebCore::TextCodecGtk::registerExtendedCodecs):
     17        (WebCore::TextCodecGtk::createIConvDecoder):
     18        (WebCore::TextCodecGtk::createIConvEncoder):
     19        * platform/text/gtk/TextCodecGtk.h:
     20
    1212010-10-20  Sheriff Bot  <webkit.review.bot@gmail.com>
    222
  • trunk/WebCore/platform/text/gtk/TextCodecGtk.cpp

    r56825 r70211  
    4646
    4747#if (G_BYTE_ORDER == G_BIG_ENDIAN)
    48     const gchar* WebCore::TextCodecGtk::m_internalEncodingName = "UTF-16BE";
    49 #else 
    50     const gchar* WebCore::TextCodecGtk::m_internalEncodingName = "UTF-16LE";
     48static const gchar* internalEncodingName = "UTF-16BE";
     49#else
     50static const gchar* internalEncodingName = "UTF-16LE";
    5151#endif
    52 
    53 
    54 // We're specifying the list of text codecs and their aliases here.
    55 // For each codec the first entry is the canonical name, remaining ones are used as aliases.
    56 // Each alias list must be terminated by a 0.
    57 
    58 // Unicode
    59 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_UTF_8            = { "UTF-8", 0 };
    60 
    61 // Western
    62 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_ISO_8859_1       = { "ISO-8859-1", "CP819", "IBM819", "ISO-IR-100", "ISO8859-1", "ISO_8859-1", "ISO_8859-1:1987",  "L1", "LATIN1", "CSISOLATIN1", 0 };
    63 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_MACROMAN         = { "MACROMAN", "MAC", "MACINTOSH", "CSMACINTOSH", 0 };
    64 
    65 // Japanese
    66 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_SHIFT_JIS        = { "Shift_JIS", "MS_KANJI", "SHIFT-JIS", "SJIS", "CSSHIFTJIS", 0 };
    67     TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_EUC_JP       = { "EUC-JP", "EUC_JP", "EUCJP", "EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE", "CSEUCPKDFMTJAPANESE", 0 };
    68 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_ISO_2022_JP      = { "ISO-2022-JP", 0 };
    69 
    70 // Traditional Chinese
    71 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_BIG5             = { "BIG5", "BIG-5", "BIG-FIVE", "BIG5", "BIGFIVE", "CN-BIG5", "CSBIG5", 0 };
    72 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_BIG5_HKSCS       = { "BIG5-HKSCS", "BIG5-HKSCS:2004", "BIG5HKSCS", 0 };
    73 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_CP950            = { "CP950", 0 };
    74 
    75 // Korean
    76 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_ISO_2022_KR      = { "ISO-2022-KR", "CSISO2022KR", 0 };
    77 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_CP949            = { "CP949", "UHC", 0 };
    78 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_EUC_KR           = { "EUC-KR", "CSEUCKR", 0 };
    79 
    80 // Arabic
    81 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_ISO_8859_6       = { "ISO-8859-6", "ARABIC", "ASMO-708", "ECMA-114", "ISO-IR-127", "ISO8859-6", "ISO_8859-6", "ISO_8859-6:1987", "CSISOLATINARABIC", 0 };
    82 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_CP1256           = { "windows-1256", "CP1256", "MS-ARAB", 0 }; // rearranged, windows-1256 now declared the canonical name and put to lowercase to fix /fast/encoding/ahram-org-eg.html test case
    83 
    84 // Hebrew
    85 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_ISO_8859_8       = { "ISO-8859-8", "HEBREW", "ISO-8859-8", "ISO-IR-138", "ISO8859-8", "ISO_8859-8", "ISO_8859-8:1988", "CSISOLATINHEBREW", 0 };
    86 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_CP1255           = { "windows-1255", "CP1255", "MS-HEBR", 0 }; // rearranged, moved windows-1255 as canonical and lowercased, fixing /fast/encoding/meta-charset.html
    87 
    88 // Greek
    89 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_ISO_8859_7       = { "ISO-8859-7", "ECMA-118", "ELOT_928", "GREEK", "GREEK8", "ISO-IR-126", "ISO8859-7", "ISO_8859-7", "ISO_8859-7:1987", "ISO_8859-7:2003", "CSI", 0 };
    90 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_CP869            = { "CP869", "869", "CP-GR", "IBM869", "CSIBM869", 0 };
    91 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_WINDOWS_1253     = { "WINDOWS-1253", 0 };
    92 
    93 // Cyrillic
    94 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_ISO_8859_5       = { "ISO-8859-5", "CYRILLIC", "ISO-IR-144", "ISO8859-5", "ISO_8859-5", "ISO_8859-5:1988", "CSISOLATINCYRILLIC", 0 };
    95 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_KOI8_R           = { "KOI8-R", "CSKOI8R", 0 };
    96 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_CP866            = { "CP866", "866", "IBM866", "CSIBM866", 0 };
    97 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_KOI8_U           = { "KOI8-U", 0 };
    98 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_WINDOWS_1251     = { "windows-1251", "CP1251", 0 }; // CP1251 added to pass /fast/encoding/charset-cp1251.html
    99 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_MACCYRILLIC      = { "mac-cyrillic", "MACCYRILLIC", "x-mac-cyrillic", 0 };
    100 
    101 // Thai
    102 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_CP874            = { "CP874", "WINDOWS-874", 0 };
    103 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_TIS_620          = { "TIS-620", 0 };
    104 
    105 // Simplified Chinese
    106 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_GBK              = { "GBK", 0 };
    107 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_HZ               = { "HZ", "HZ-GB-2312", 0 };
    108 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_GB18030          = { "GB18030", 0 };
    109 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_EUC_CN           = { "EUC-CN", "EUCCN", "GB2312", "CN-GB", "CSGB2312", "EUC_CN", 0 };
    110 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_2312_80          = { "GB_2312-80", "CHINESE", "csISO58GB231280", "GB2312.1980-0", "ISO-IR-58" };
    111 
    112 // Central European
    113 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_ISO_8859_2       = { "ISO-8859-2", "ISO-IR-101", "ISO8859-2", "ISO_8859-2", "ISO_8859-2:1987", "L2", "LATIN2", "CSISOLATIN2", 0 };
    114 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_CP1250           = { "CP1250", "MS-EE", "WINDOWS-1250", 0 };
    115 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_MACCENTRALEUROPE = { "MAC-CENTRALEUROPE", 0 };
    116 
    117 // Vietnamese
    118 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_CP1258           = { "CP1258", "WINDOWS-1258", 0 };
    119 
    120 // Turkish
    121 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_CP1254           = { "CP1254", "MS-TURK", "WINDOWS-1254", 0 };
    122 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_ISO_8859_9       = { "ISO-8859-9", "ISO-IR-148", "ISO8859-9", "ISO_8859-9", "ISO_8859-9:1989", "L5", "LATIN5", "CSISOLATIN5", 0 };
    123 
    124 // Baltic
    125 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_CP1257           = { "CP1257", "WINBALTRIM", "WINDOWS-1257", 0 };
    126 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_ISO_8859_4       = { "ISO-8859-4", "ISO-IR-110", "ISO8859-4", "ISO_8859-4", "ISO_8859-4:1988", "L4", "LATIN4", "CSISOLATIN4", 0 };
    127 
    128 gconstpointer const TextCodecGtk::m_iconvBaseCodecList[] = {
    129     // Unicode
    130     &m_codecAliases_UTF_8,
    131 
    132     // Western
    133     &m_codecAliases_ISO_8859_1
    134 };
    135 
    136 gconstpointer const TextCodecGtk::m_iconvExtendedCodecList[] =
    137 {
    138     // Western
    139     &m_codecAliases_MACROMAN,
    140 
    141     // Japanese
    142     &m_codecAliases_SHIFT_JIS,
    143     &m_codecAliases_EUC_JP,
    144     &m_codecAliases_ISO_2022_JP,
    145 
    146     // Simplified Chinese
    147     &m_codecAliases_BIG5,
    148     &m_codecAliases_BIG5_HKSCS,
    149     &m_codecAliases_CP950,
    150 
    151     // Korean
    152     &m_codecAliases_ISO_2022_KR,
    153     &m_codecAliases_CP949,
    154     &m_codecAliases_EUC_KR,
    155 
    156     // Arabic
    157     &m_codecAliases_ISO_8859_6,
    158     &m_codecAliases_CP1256,
    159    
    160     // Hebrew
    161     &m_codecAliases_ISO_8859_8,
    162     &m_codecAliases_CP1255,
    163    
    164     // Greek
    165     &m_codecAliases_ISO_8859_7,
    166     &m_codecAliases_CP869,
    167     &m_codecAliases_WINDOWS_1253,
    168    
    169     // Cyrillic
    170     &m_codecAliases_ISO_8859_5,
    171     &m_codecAliases_KOI8_R,
    172     &m_codecAliases_CP866,
    173     &m_codecAliases_KOI8_U,
    174     &m_codecAliases_WINDOWS_1251,
    175     &m_codecAliases_MACCYRILLIC,
    176    
    177     // Thai
    178     &m_codecAliases_CP874,
    179     &m_codecAliases_TIS_620,
    180    
    181     // Traditional Chinese
    182     &m_codecAliases_GBK,
    183     &m_codecAliases_HZ,
    184     &m_codecAliases_GB18030,
    185     &m_codecAliases_EUC_CN,
    186     &m_codecAliases_2312_80,
    187    
    188     // Central European
    189     &m_codecAliases_ISO_8859_2,
    190     &m_codecAliases_CP1250,
    191     &m_codecAliases_MACCENTRALEUROPE,
    192    
    193     // Vietnamese
    194     &m_codecAliases_CP1258,
    195    
    196     // Turkish
    197     &m_codecAliases_CP1254,
    198     &m_codecAliases_ISO_8859_9,
    199    
    200     // Baltic
    201     &m_codecAliases_CP1257,
    202     &m_codecAliases_ISO_8859_4
    203 };
    20452
    20553
     
    21260}
    21361
    214 gboolean TextCodecGtk::isEncodingAvailable(const gchar* encName)
     62static bool isEncodingAvailable(const gchar* encodingName)
    21563{
    21664    GIConv tester;
    21765    // test decoding
    218     tester = g_iconv_open(m_internalEncodingName, encName);
     66    tester = g_iconv_open(internalEncodingName, encodingName);
    21967    if (tester == reinterpret_cast<GIConv>(-1)) {
    22068        return false;
     
    22270        g_iconv_close(tester);
    22371        // test encoding
    224         tester = g_iconv_open(encName, m_internalEncodingName);
     72        tester = g_iconv_open(encodingName, internalEncodingName);
    22573        if (tester == reinterpret_cast<GIConv>(-1)) {
    22674            return false;
     
    23280}
    23381
    234 void TextCodecGtk::registerEncodingNames(EncodingNameRegistrar registrar, bool extended)
    235 {
    236     const void* const* encodingList;
    237     unsigned int listLength = 0;
    238     if (extended) {
    239         encodingList = m_iconvExtendedCodecList;
    240         listLength = sizeof(m_iconvExtendedCodecList)/sizeof(gpointer);
    241     } else {
    242         encodingList = m_iconvBaseCodecList;
    243         listLength = sizeof(m_iconvBaseCodecList)/sizeof(gpointer);
    244     }
    245 
    246     for (unsigned int i = 0; i < listLength; ++i) {
    247         codecAliasList *codecAliases = static_cast<codecAliasList*>(encodingList[i]);
    248        
    249         // Our convention is, the first entry in codecAliases is the canonical name,
    250         // see above in the list of declarations.
    251         // Probe GLib for this one first. If it's not available, we skip the whole group of aliases.
    252 
    253         int codecCount = 0;
    254         const char *canonicalName;
    255         canonicalName = (*codecAliases)[codecCount];
    256 
    257         if (!isEncodingAvailable(canonicalName))
    258             continue;
     82static bool registerEncodingNameIfAvailable(EncodingNameRegistrar registrar, const char* canonicalName)
     83{
     84    if (isEncodingAvailable(canonicalName)) {
    25985        registrar(canonicalName, canonicalName);
    260 
    261         const char *currentAlias;
    262         while ((currentAlias = (*codecAliases)[++codecCount])) {
    263             if (isEncodingAvailable(currentAlias))
    264                 registrar(currentAlias, canonicalName);
    265         }
    266 
    267     }
    268 }
    269 
    270 void TextCodecGtk::registerCodecs(TextCodecRegistrar registrar, bool extended)
    271 {
    272     const void* const* encodingList;
    273     unsigned int listLength = 0;
    274     if (extended) {
    275         encodingList = m_iconvExtendedCodecList;
    276         listLength = sizeof(m_iconvExtendedCodecList)/sizeof(gpointer);
    277     } else {
    278         encodingList = m_iconvBaseCodecList;
    279         listLength = sizeof(m_iconvBaseCodecList)/sizeof(gpointer);
    280     }
    281 
    282     for (unsigned int i = 0; i < listLength; ++i) {
    283         codecAliasList *codecAliases = static_cast<codecAliasList*>(encodingList[i]);
    284         // by convention, the first "alias" should be the canonical name, see the definition of the alias lists
    285         const gchar *codecName = (*codecAliases)[0];
    286         if (isEncodingAvailable(codecName))
    287             registrar(codecName, newTextCodecGtk, 0);
    288     }
     86        return true;
     87    }
     88
     89    return false;
     90}
     91
     92static void registerEncodingAliasIfAvailable(EncodingNameRegistrar registrar, const char* canonicalName, const char* aliasName)
     93{
     94    if (isEncodingAvailable(aliasName))
     95        registrar(aliasName, canonicalName);
     96}
     97
     98static void registerCodecIfAvailable(TextCodecRegistrar registrar, const char* codecName)
     99{
     100    if (isEncodingAvailable(codecName))
     101        registrar(codecName, newTextCodecGtk, 0);
    289102}
    290103
    291104void TextCodecGtk::registerBaseEncodingNames(EncodingNameRegistrar registrar)
    292105{
    293     registerEncodingNames(registrar, false);
     106    // Unicode
     107    registerEncodingNameIfAvailable(registrar, "UTF-8");
     108
     109    // Western
     110    if (registerEncodingNameIfAvailable(registrar, "ISO-8859-1")) {
     111        registerEncodingAliasIfAvailable(registrar, "ISO-8859-1", "CP819");
     112        registerEncodingAliasIfAvailable(registrar, "ISO-8859-1", "IBM819");
     113        registerEncodingAliasIfAvailable(registrar, "ISO-8859-1", "ISO-IR-100");
     114        registerEncodingAliasIfAvailable(registrar, "ISO-8859-1", "ISO8859-1");
     115        registerEncodingAliasIfAvailable(registrar, "ISO-8859-1", "ISO_8859-1");
     116        registerEncodingAliasIfAvailable(registrar, "ISO-8859-1", "ISO_8859-1:1987");
     117        registerEncodingAliasIfAvailable(registrar, "ISO-8859-1", "L1");
     118        registerEncodingAliasIfAvailable(registrar, "ISO-8859-1", "LATIN1");
     119        registerEncodingAliasIfAvailable(registrar, "ISO-8859-1", "CSISOLATIN1");
     120    }
    294121}
    295122
    296123void TextCodecGtk::registerBaseCodecs(TextCodecRegistrar registrar)
    297124{
    298     registerCodecs(registrar, false);
     125    // Unicode
     126    registerCodecIfAvailable(registrar, "UTF-8");
     127
     128    // Western
     129    registerCodecIfAvailable(registrar, "ISO-8859-1");
    299130}
    300131
    301132void TextCodecGtk::registerExtendedEncodingNames(EncodingNameRegistrar registrar)
    302133{
    303     registerEncodingNames(registrar, true);
     134    // Western
     135    if (registerEncodingNameIfAvailable(registrar, "MACROMAN")) {
     136        registerEncodingAliasIfAvailable(registrar, "MACROMAN", "MAC");
     137        registerEncodingAliasIfAvailable(registrar, "MACROMAN", "MACINTOSH");
     138        registerEncodingAliasIfAvailable(registrar, "MACROMAN", "CSMACINTOSH");
     139    }
     140
     141    // Japanese
     142    if (registerEncodingNameIfAvailable(registrar, "Shift_JIS")) {
     143        registerEncodingAliasIfAvailable(registrar, "Shift_JIS", "MS_KANJI");
     144        registerEncodingAliasIfAvailable(registrar, "Shift_JIS", "SHIFT-JIS");
     145        registerEncodingAliasIfAvailable(registrar, "Shift_JIS", "SJIS");
     146        registerEncodingAliasIfAvailable(registrar, "Shift_JIS", "CSSHIFTJIS");
     147    }
     148    if (registerEncodingNameIfAvailable(registrar, "EUC-JP")) {
     149        registerEncodingAliasIfAvailable(registrar, "EUC-JP", "EUC_JP");
     150        registerEncodingAliasIfAvailable(registrar, "EUC-JP", "EUCJP");
     151        registerEncodingAliasIfAvailable(registrar, "EUC-JP", "EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE");
     152        registerEncodingAliasIfAvailable(registrar, "EUC-JP", "CSEUCPKDFMTJAPANESE");
     153    }
     154    registerEncodingNameIfAvailable(registrar, "ISO-2022-JP");
     155
     156    // Traditional Chinese
     157    if (registerEncodingNameIfAvailable(registrar, "BIG5")) {
     158        registerEncodingAliasIfAvailable(registrar, "BIG5", "BIG-5");
     159        registerEncodingAliasIfAvailable(registrar, "BIG5", "BIG-FIVE");
     160        registerEncodingAliasIfAvailable(registrar, "BIG5", "BIGFIVE");
     161        registerEncodingAliasIfAvailable(registrar, "BIG5", "CN-BIG5");
     162        registerEncodingAliasIfAvailable(registrar, "BIG5", "CSBIG5");
     163    }
     164    if (registerEncodingNameIfAvailable(registrar, "BIG5-HKSCS")) {
     165        registerEncodingAliasIfAvailable(registrar, "BIG5-HKSCS", "BIG5-HKSCS:2004");
     166        registerEncodingAliasIfAvailable(registrar, "BIG5-HKSCS", "BIG5HKSCS");
     167    }
     168    registerEncodingNameIfAvailable(registrar, "CP950");
     169
     170    // Korean
     171    if (registerEncodingNameIfAvailable(registrar, "ISO-2022-KR"))
     172        registerEncodingAliasIfAvailable(registrar, "ISO-2022-KR", "CSISO2022KR");
     173    if (registerEncodingNameIfAvailable(registrar, "CP949"))
     174        registerEncodingAliasIfAvailable(registrar, "CP949", "UHC");
     175    if (registerEncodingNameIfAvailable(registrar, "EUC-KR"))
     176        registerEncodingAliasIfAvailable(registrar, "EUC-KR", "CSEUCKR");
     177
     178    // Arabic
     179    if (registerEncodingNameIfAvailable(registrar, "ISO-8859-6")) {
     180        registerEncodingAliasIfAvailable(registrar, "ISO-8859-6", "ARABIC");
     181        registerEncodingAliasIfAvailable(registrar, "ISO-8859-6", "ASMO-708");
     182        registerEncodingAliasIfAvailable(registrar, "ISO-8859-6", "ECMA-114");
     183        registerEncodingAliasIfAvailable(registrar, "ISO-8859-6", "ISO-IR-127");
     184        registerEncodingAliasIfAvailable(registrar, "ISO-8859-6", "ISO8859-6");
     185        registerEncodingAliasIfAvailable(registrar, "ISO-8859-6", "ISO_8859-6");
     186        registerEncodingAliasIfAvailable(registrar, "ISO-8859-6", "ISO_8859-6:1987");
     187        registerEncodingAliasIfAvailable(registrar, "ISO-8859-6", "CSISOLATINARABIC");
     188    }
     189    // rearranged, windows-1256 now declared the canonical name and put to lowercase to fix /fast/encoding/ahram-org-eg.html test case
     190    if (registerEncodingNameIfAvailable(registrar, "windows-1256")) {
     191        registerEncodingAliasIfAvailable(registrar, "windows-1256", "CP1256");
     192        registerEncodingAliasIfAvailable(registrar, "windows-1256", "MS-ARAB");
     193    }
     194
     195    // Hebrew
     196    if (registerEncodingNameIfAvailable(registrar, "ISO-8859-8")) {
     197        registerEncodingAliasIfAvailable(registrar, "ISO-8859-8", "HEBREW");
     198        registerEncodingAliasIfAvailable(registrar, "ISO-8859-8", "ISO-8859-8");
     199        registerEncodingAliasIfAvailable(registrar, "ISO-8859-8", "ISO-IR-138");
     200        registerEncodingAliasIfAvailable(registrar, "ISO-8859-8", "ISO8859-8");
     201        registerEncodingAliasIfAvailable(registrar, "ISO-8859-8", "ISO_8859-8");
     202        registerEncodingAliasIfAvailable(registrar, "ISO-8859-8", "ISO_8859-8:1988");
     203        registerEncodingAliasIfAvailable(registrar, "ISO-8859-8", "CSISOLATINHEBREW");
     204    }
     205    // rearranged, moved windows-1255 as canonical and lowercased, fixing /fast/encoding/meta-charset.html
     206    if (registerEncodingNameIfAvailable(registrar, "windows-1255")) {
     207        registerEncodingAliasIfAvailable(registrar, "windows-1255", "CP1255");
     208        registerEncodingAliasIfAvailable(registrar, "windows-1255", "MS-HEBR");
     209    }
     210
     211    // Greek
     212    if (registerEncodingNameIfAvailable(registrar, "ISO-8859-7")) {
     213        registerEncodingAliasIfAvailable(registrar, "ISO-8859-7", "ECMA-118");
     214        registerEncodingAliasIfAvailable(registrar, "ISO-8859-7", "ELOT_928");
     215        registerEncodingAliasIfAvailable(registrar, "ISO-8859-7", "GREEK");
     216        registerEncodingAliasIfAvailable(registrar, "ISO-8859-7", "GREEK8");
     217        registerEncodingAliasIfAvailable(registrar, "ISO-8859-7", "ISO-IR-126");
     218        registerEncodingAliasIfAvailable(registrar, "ISO-8859-7", "ISO8859-7");
     219        registerEncodingAliasIfAvailable(registrar, "ISO-8859-7", "ISO_8859-7");
     220        registerEncodingAliasIfAvailable(registrar, "ISO-8859-7", "ISO_8859-7:1987");
     221        registerEncodingAliasIfAvailable(registrar, "ISO-8859-7", "ISO_8859-7:2003");
     222        registerEncodingAliasIfAvailable(registrar, "ISO-8859-7", "CSI");
     223    }
     224    if (registerEncodingNameIfAvailable(registrar, "CP869")) {
     225        registerEncodingAliasIfAvailable(registrar, "CP869", "869");
     226        registerEncodingAliasIfAvailable(registrar, "CP869", "CP-GR");
     227        registerEncodingAliasIfAvailable(registrar, "CP869", "IBM869");
     228        registerEncodingAliasIfAvailable(registrar, "CP869", "CSIBM869");
     229    }
     230    registerEncodingNameIfAvailable(registrar, "WINDOWS-1253");
     231
     232    // Cyrillic
     233    if (registerEncodingNameIfAvailable(registrar, "ISO-8859-5")) {
     234        registerEncodingAliasIfAvailable(registrar, "ISO-8859-5", "CYRILLIC");
     235        registerEncodingAliasIfAvailable(registrar, "ISO-8859-5", "ISO-IR-144");
     236        registerEncodingAliasIfAvailable(registrar, "ISO-8859-5", "ISO8859-5");
     237        registerEncodingAliasIfAvailable(registrar, "ISO-8859-5", "ISO_8859-5");
     238        registerEncodingAliasIfAvailable(registrar, "ISO-8859-5", "ISO_8859-5:1988");
     239        registerEncodingAliasIfAvailable(registrar, "ISO-8859-5", "CSISOLATINCYRILLIC");
     240    }
     241    if (registerEncodingNameIfAvailable(registrar, "KOI8-R"))
     242        registerEncodingAliasIfAvailable(registrar, "KOI8-R", "CSKOI8R");
     243    if (registerEncodingNameIfAvailable(registrar, "CP866")) {
     244        registerEncodingAliasIfAvailable(registrar, "CP866", "866");
     245        registerEncodingAliasIfAvailable(registrar, "CP866", "IBM866");
     246        registerEncodingAliasIfAvailable(registrar, "CP866", "CSIBM866");
     247    }
     248    registerEncodingNameIfAvailable(registrar, "KOI8-U");
     249    // CP1251 added to pass /fast/encoding/charset-cp1251.html
     250    if (registerEncodingNameIfAvailable(registrar, "windows-1251"))
     251        registerEncodingAliasIfAvailable(registrar, "windows-1251", "CP1251");
     252    if (registerEncodingNameIfAvailable(registrar, "mac-cyrillic")) {
     253        registerEncodingAliasIfAvailable(registrar, "mac-cyrillic", "MACCYRILLIC");
     254        registerEncodingAliasIfAvailable(registrar, "mac-cyrillic", "x-mac-cyrillic");
     255    }
     256
     257    // Thai
     258    if (registerEncodingNameIfAvailable(registrar, "CP874"))
     259        registerEncodingAliasIfAvailable(registrar, "CP874", "WINDOWS-874");
     260    registerEncodingNameIfAvailable(registrar, "TIS-620");
     261
     262    // Simplified Chinese
     263    registerEncodingNameIfAvailable(registrar, "GBK");
     264    if (registerEncodingNameIfAvailable(registrar, "HZ"))
     265        registerEncodingAliasIfAvailable(registrar, "HZ", "HZ-GB-2312");
     266    registerEncodingNameIfAvailable(registrar, "GB18030");
     267    if (registerEncodingNameIfAvailable(registrar, "EUC-CN")) {
     268        registerEncodingAliasIfAvailable(registrar, "EUC-CN", "EUCCN");
     269        registerEncodingAliasIfAvailable(registrar, "EUC-CN", "GB2312");
     270        registerEncodingAliasIfAvailable(registrar, "EUC-CN", "CN-GB");
     271        registerEncodingAliasIfAvailable(registrar, "EUC-CN", "CSGB2312");
     272        registerEncodingAliasIfAvailable(registrar, "EUC-CN", "EUC_CN");
     273    }
     274    if (registerEncodingNameIfAvailable(registrar, "GB_2312-80")) {
     275        registerEncodingAliasIfAvailable(registrar, "GB_2312-80", "CHINESE");
     276        registerEncodingAliasIfAvailable(registrar, "GB_2312-80", "csISO58GB231280");
     277        registerEncodingAliasIfAvailable(registrar, "GB_2312-80", "GB2312.1980-0");
     278        registerEncodingAliasIfAvailable(registrar, "GB_2312-80", "ISO-IR-58");
     279    }
     280
     281    // Central European
     282    if (registerEncodingNameIfAvailable(registrar, "ISO-8859-2")) {
     283        registerEncodingAliasIfAvailable(registrar, "ISO-8859-2", "ISO-IR-101");
     284        registerEncodingAliasIfAvailable(registrar, "ISO-8859-2", "ISO8859-2");
     285        registerEncodingAliasIfAvailable(registrar, "ISO-8859-2", "ISO_8859-2");
     286        registerEncodingAliasIfAvailable(registrar, "ISO-8859-2", "ISO_8859-2:1987");
     287        registerEncodingAliasIfAvailable(registrar, "ISO-8859-2", "L2");
     288        registerEncodingAliasIfAvailable(registrar, "ISO-8859-2", "LATIN2");
     289        registerEncodingAliasIfAvailable(registrar, "ISO-8859-2", "CSISOLATIN2");
     290    }
     291    if (registerEncodingNameIfAvailable(registrar, "CP1250")) {
     292        registerEncodingAliasIfAvailable(registrar, "CP1250", "MS-EE");
     293        registerEncodingAliasIfAvailable(registrar, "CP1250", "WINDOWS-1250");
     294    }
     295    registerEncodingNameIfAvailable(registrar, "MAC-CENTRALEUROPE");
     296
     297    // Vietnamese
     298    if (registerEncodingNameIfAvailable(registrar, "CP1258"))
     299        registerEncodingAliasIfAvailable(registrar, "CP1258", "WINDOWS-1258");
     300
     301    // Turkish
     302    if (registerEncodingNameIfAvailable(registrar, "CP1254")) {
     303        registerEncodingAliasIfAvailable(registrar, "CP1254", "MS-TURK");
     304        registerEncodingAliasIfAvailable(registrar, "CP1254", "WINDOWS-1254");
     305    }
     306    if (registerEncodingNameIfAvailable(registrar, "ISO-8859-9")) {
     307        registerEncodingAliasIfAvailable(registrar, "ISO-8859-9", "ISO-IR-148");
     308        registerEncodingAliasIfAvailable(registrar, "ISO-8859-9", "ISO8859-9");
     309        registerEncodingAliasIfAvailable(registrar, "ISO-8859-9", "ISO_8859-9");
     310        registerEncodingAliasIfAvailable(registrar, "ISO-8859-9", "ISO_8859-9:1989");
     311        registerEncodingAliasIfAvailable(registrar, "ISO-8859-9", "L5");
     312        registerEncodingAliasIfAvailable(registrar, "ISO-8859-9", "LATIN5");
     313        registerEncodingAliasIfAvailable(registrar, "ISO-8859-9", "CSISOLATIN5");
     314    }
     315
     316    // Baltic
     317    if (registerEncodingNameIfAvailable(registrar, "CP1257")) {
     318        registerEncodingAliasIfAvailable(registrar, "CP1257", "WINBALTRIM");
     319        registerEncodingAliasIfAvailable(registrar, "CP1257", "WINDOWS-1257");
     320    }
     321    if (registerEncodingNameIfAvailable(registrar, "ISO-8859-4")) {
     322        registerEncodingAliasIfAvailable(registrar, "ISO-8859-4", "ISO-IR-110");
     323        registerEncodingAliasIfAvailable(registrar, "ISO-8859-4", "ISO8859-4");
     324        registerEncodingAliasIfAvailable(registrar, "ISO-8859-4", "ISO_8859-4");
     325        registerEncodingAliasIfAvailable(registrar, "ISO-8859-4", "ISO_8859-4:1988");
     326        registerEncodingAliasIfAvailable(registrar, "ISO-8859-4", "L4");
     327        registerEncodingAliasIfAvailable(registrar, "ISO-8859-4", "LATIN4");
     328        registerEncodingAliasIfAvailable(registrar, "ISO-8859-4", "CSISOLATIN4");
     329    }
    304330}
    305331
    306332void TextCodecGtk::registerExtendedCodecs(TextCodecRegistrar registrar)
    307333{
    308     registerCodecs(registrar, true);
     334    // Western
     335    registerCodecIfAvailable(registrar, "MACROMAN");
     336
     337    // Japanese
     338    registerCodecIfAvailable(registrar, "Shift_JIS");
     339    registerCodecIfAvailable(registrar, "EUC-JP");
     340    registerCodecIfAvailable(registrar, "ISO-2022-JP");
     341
     342    // Traditional Chinese
     343    registerCodecIfAvailable(registrar, "BIG5");
     344    registerCodecIfAvailable(registrar, "BIG5-HKSCS");
     345    registerCodecIfAvailable(registrar, "CP950");
     346
     347    // Korean
     348    registerCodecIfAvailable(registrar, "ISO-2022-KR");
     349    registerCodecIfAvailable(registrar, "CP949");
     350    registerCodecIfAvailable(registrar, "EUC-KR");
     351
     352    // Arabic
     353    registerCodecIfAvailable(registrar, "ISO-8859-6");
     354    // rearranged, windows-1256 now declared the canonical name and put to lowercase to fix /fast/encoding/ahram-org-eg.html test case
     355    registerCodecIfAvailable(registrar, "windows-1256");
     356
     357    // Hebrew
     358    registerCodecIfAvailable(registrar, "ISO-8859-8");
     359    // rearranged, moved windows-1255 as canonical and lowercased, fixing /fast/encoding/meta-charset.html
     360    registerCodecIfAvailable(registrar, "windows-1255");
     361
     362    // Greek
     363    registerCodecIfAvailable(registrar, "ISO-8859-7");
     364    registerCodecIfAvailable(registrar, "CP869");
     365    registerCodecIfAvailable(registrar, "WINDOWS-1253");
     366
     367    // Cyrillic
     368    registerCodecIfAvailable(registrar, "ISO-8859-5");
     369    registerCodecIfAvailable(registrar, "KOI8-R");
     370    registerCodecIfAvailable(registrar, "CP866");
     371    registerCodecIfAvailable(registrar, "KOI8-U");
     372    // CP1251 added to pass /fast/encoding/charset-cp1251.html
     373    registerCodecIfAvailable(registrar, "windows-1251");
     374    registerCodecIfAvailable(registrar, "mac-cyrillic");
     375
     376    // Thai
     377    registerCodecIfAvailable(registrar, "CP874");
     378    registerCodecIfAvailable(registrar, "TIS-620");
     379
     380    // Simplified Chinese
     381    registerCodecIfAvailable(registrar, "GBK");
     382    registerCodecIfAvailable(registrar, "HZ");
     383    registerCodecIfAvailable(registrar, "GB18030");
     384    registerCodecIfAvailable(registrar, "EUC-CN");
     385    registerCodecIfAvailable(registrar, "GB_2312-80");
     386
     387    // Central European
     388    registerCodecIfAvailable(registrar, "ISO-8859-2");
     389    registerCodecIfAvailable(registrar, "CP1250");
     390    registerCodecIfAvailable(registrar, "MAC-CENTRALEUROPE");
     391
     392    // Vietnamese
     393    registerCodecIfAvailable(registrar, "CP1258");
     394
     395    // Turkish
     396    registerCodecIfAvailable(registrar, "CP1254");
     397    registerCodecIfAvailable(registrar, "ISO-8859-9");
     398
     399    // Baltic
     400    registerCodecIfAvailable(registrar, "CP1257");
     401    registerCodecIfAvailable(registrar, "ISO-8859-4");
    309402}
    310403
     
    333426    ASSERT(m_iconvDecoder == reinterpret_cast<GIConv>(-1));
    334427
    335     m_iconvDecoder = g_iconv_open(m_internalEncodingName, m_encoding.name());
     428    m_iconvDecoder = g_iconv_open(internalEncodingName, m_encoding.name());
    336429}
    337430
     
    340433    ASSERT(m_iconvDecoder == reinterpret_cast<GIConv>(-1));
    341434
    342     m_iconvEncoder = g_iconv_open(m_encoding.name(), m_internalEncodingName);
     435    m_iconvEncoder = g_iconv_open(m_encoding.name(), internalEncodingName);
    343436}
    344437
  • trunk/WebCore/platform/text/gtk/TextCodecGtk.h

    r50508 r70211  
    5454        void createIConvEncoder() const;
    5555
    56         static void registerEncodingNames(EncodingNameRegistrar registrar, bool extended);       
    57         static void registerCodecs(TextCodecRegistrar registrar, bool extended);
    58         static gboolean isEncodingAvailable(const gchar*);
    59 
    6056        TextEncoding m_encoding;
    6157        size_t m_numBufferedBytes;
     
    6359        mutable GIConv m_iconvDecoder;
    6460        mutable GIConv m_iconvEncoder;
    65 
    66         static const gchar* m_internalEncodingName;
    67 
    68         typedef const gchar* const codecAliasList[];
    69 
    70         // Unicode
    71         static codecAliasList m_codecAliases_UTF_8;
    72 
    73         // Western
    74         static codecAliasList m_codecAliases_ISO_8859_1;
    75         static codecAliasList m_codecAliases_MACROMAN;
    76 
    77         // Japanese
    78         static codecAliasList m_codecAliases_SHIFT_JIS;
    79         static codecAliasList m_codecAliases_EUC_JP;
    80         static codecAliasList m_codecAliases_ISO_2022_JP;
    81 
    82         // Traditional Chinese
    83         static codecAliasList m_codecAliases_BIG5;
    84         static codecAliasList m_codecAliases_BIG5_HKSCS;
    85         static codecAliasList m_codecAliases_CP950;
    86 
    87         // Korean
    88         static codecAliasList m_codecAliases_ISO_2022_KR;
    89         static codecAliasList m_codecAliases_CP949;
    90         static codecAliasList m_codecAliases_EUC_KR;
    91 
    92         // Arabic
    93         static codecAliasList m_codecAliases_ISO_8859_6;
    94         static codecAliasList m_codecAliases_CP1256;
    95 
    96         // Hebrew
    97         static codecAliasList m_codecAliases_ISO_8859_8;
    98         static codecAliasList m_codecAliases_CP1255;
    99 
    100         // Greek
    101         static codecAliasList m_codecAliases_ISO_8859_7;
    102         static codecAliasList m_codecAliases_CP869;
    103         static codecAliasList m_codecAliases_WINDOWS_1253;
    104 
    105         // Cyrillic
    106         static codecAliasList m_codecAliases_ISO_8859_5;
    107         static codecAliasList m_codecAliases_KOI8_R;
    108         static codecAliasList m_codecAliases_CP866;
    109         static codecAliasList m_codecAliases_KOI8_U;
    110         static codecAliasList m_codecAliases_WINDOWS_1251;
    111         static codecAliasList m_codecAliases_MACCYRILLIC;
    112 
    113         // Thai
    114         static codecAliasList m_codecAliases_CP874;
    115         static codecAliasList m_codecAliases_TIS_620;
    116 
    117         // Simplified Chinese
    118         static codecAliasList m_codecAliases_GBK;
    119         static codecAliasList m_codecAliases_HZ;
    120         static codecAliasList m_codecAliases_GB18030;
    121         static codecAliasList m_codecAliases_EUC_CN;
    122         static codecAliasList m_codecAliases_2312_80;
    123 
    124         // Central European
    125         static codecAliasList m_codecAliases_ISO_8859_2;
    126         static codecAliasList m_codecAliases_CP1250;
    127         static codecAliasList m_codecAliases_MACCENTRALEUROPE;
    128 
    129         // Vietnamese
    130         static codecAliasList m_codecAliases_CP1258;
    131 
    132         // Turkish
    133         static codecAliasList m_codecAliases_CP1254;
    134         static codecAliasList m_codecAliases_ISO_8859_9;
    135 
    136         // Baltic
    137         static codecAliasList m_codecAliases_CP1257;
    138         static codecAliasList m_codecAliases_ISO_8859_4;
    139 
    140         static gconstpointer const m_iconvBaseCodecList[];
    141         static gconstpointer const m_iconvExtendedCodecList[];
    142 
    14361    };
    14462
Note: See TracChangeset for help on using the changeset viewer.