Changeset 70211 in webkit
- Timestamp:
- Oct 21, 2010 1:08:12 AM (13 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r70209 r70211 1 2010-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 1 21 2010-10-20 Sheriff Bot <webkit.review.bot@gmail.com> 2 22 -
trunk/WebCore/platform/text/gtk/TextCodecGtk.cpp
r56825 r70211 46 46 47 47 #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";48 static const gchar* internalEncodingName = "UTF-16BE"; 49 #else 50 static const gchar* internalEncodingName = "UTF-16LE"; 51 51 #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 // Unicode59 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_UTF_8 = { "UTF-8", 0 };60 61 // Western62 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 // Japanese66 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 Chinese71 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 // Korean76 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 // Arabic81 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 case83 84 // Hebrew85 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.html87 88 // Greek89 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 // Cyrillic94 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.html99 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_MACCYRILLIC = { "mac-cyrillic", "MACCYRILLIC", "x-mac-cyrillic", 0 };100 101 // Thai102 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_CP874 = { "CP874", "WINDOWS-874", 0 };103 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_TIS_620 = { "TIS-620", 0 };104 105 // Simplified Chinese106 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 European113 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 // Vietnamese118 TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_CP1258 = { "CP1258", "WINDOWS-1258", 0 };119 120 // Turkish121 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 // Baltic125 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 // Unicode130 &m_codecAliases_UTF_8,131 132 // Western133 &m_codecAliases_ISO_8859_1134 };135 136 gconstpointer const TextCodecGtk::m_iconvExtendedCodecList[] =137 {138 // Western139 &m_codecAliases_MACROMAN,140 141 // Japanese142 &m_codecAliases_SHIFT_JIS,143 &m_codecAliases_EUC_JP,144 &m_codecAliases_ISO_2022_JP,145 146 // Simplified Chinese147 &m_codecAliases_BIG5,148 &m_codecAliases_BIG5_HKSCS,149 &m_codecAliases_CP950,150 151 // Korean152 &m_codecAliases_ISO_2022_KR,153 &m_codecAliases_CP949,154 &m_codecAliases_EUC_KR,155 156 // Arabic157 &m_codecAliases_ISO_8859_6,158 &m_codecAliases_CP1256,159 160 // Hebrew161 &m_codecAliases_ISO_8859_8,162 &m_codecAliases_CP1255,163 164 // Greek165 &m_codecAliases_ISO_8859_7,166 &m_codecAliases_CP869,167 &m_codecAliases_WINDOWS_1253,168 169 // Cyrillic170 &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 // Thai178 &m_codecAliases_CP874,179 &m_codecAliases_TIS_620,180 181 // Traditional Chinese182 &m_codecAliases_GBK,183 &m_codecAliases_HZ,184 &m_codecAliases_GB18030,185 &m_codecAliases_EUC_CN,186 &m_codecAliases_2312_80,187 188 // Central European189 &m_codecAliases_ISO_8859_2,190 &m_codecAliases_CP1250,191 &m_codecAliases_MACCENTRALEUROPE,192 193 // Vietnamese194 &m_codecAliases_CP1258,195 196 // Turkish197 &m_codecAliases_CP1254,198 &m_codecAliases_ISO_8859_9,199 200 // Baltic201 &m_codecAliases_CP1257,202 &m_codecAliases_ISO_8859_4203 };204 52 205 53 … … 212 60 } 213 61 214 gboolean TextCodecGtk::isEncodingAvailable(const gchar* encName)62 static bool isEncodingAvailable(const gchar* encodingName) 215 63 { 216 64 GIConv tester; 217 65 // test decoding 218 tester = g_iconv_open( m_internalEncodingName, encName);66 tester = g_iconv_open(internalEncodingName, encodingName); 219 67 if (tester == reinterpret_cast<GIConv>(-1)) { 220 68 return false; … … 222 70 g_iconv_close(tester); 223 71 // test encoding 224 tester = g_iconv_open(enc Name, m_internalEncodingName);72 tester = g_iconv_open(encodingName, internalEncodingName); 225 73 if (tester == reinterpret_cast<GIConv>(-1)) { 226 74 return false; … … 232 80 } 233 81 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; 82 static bool registerEncodingNameIfAvailable(EncodingNameRegistrar registrar, const char* canonicalName) 83 { 84 if (isEncodingAvailable(canonicalName)) { 259 85 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 92 static void registerEncodingAliasIfAvailable(EncodingNameRegistrar registrar, const char* canonicalName, const char* aliasName) 93 { 94 if (isEncodingAvailable(aliasName)) 95 registrar(aliasName, canonicalName); 96 } 97 98 static void registerCodecIfAvailable(TextCodecRegistrar registrar, const char* codecName) 99 { 100 if (isEncodingAvailable(codecName)) 101 registrar(codecName, newTextCodecGtk, 0); 289 102 } 290 103 291 104 void TextCodecGtk::registerBaseEncodingNames(EncodingNameRegistrar registrar) 292 105 { 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 } 294 121 } 295 122 296 123 void TextCodecGtk::registerBaseCodecs(TextCodecRegistrar registrar) 297 124 { 298 registerCodecs(registrar, false); 125 // Unicode 126 registerCodecIfAvailable(registrar, "UTF-8"); 127 128 // Western 129 registerCodecIfAvailable(registrar, "ISO-8859-1"); 299 130 } 300 131 301 132 void TextCodecGtk::registerExtendedEncodingNames(EncodingNameRegistrar registrar) 302 133 { 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 } 304 330 } 305 331 306 332 void TextCodecGtk::registerExtendedCodecs(TextCodecRegistrar registrar) 307 333 { 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"); 309 402 } 310 403 … … 333 426 ASSERT(m_iconvDecoder == reinterpret_cast<GIConv>(-1)); 334 427 335 m_iconvDecoder = g_iconv_open( m_internalEncodingName, m_encoding.name());428 m_iconvDecoder = g_iconv_open(internalEncodingName, m_encoding.name()); 336 429 } 337 430 … … 340 433 ASSERT(m_iconvDecoder == reinterpret_cast<GIConv>(-1)); 341 434 342 m_iconvEncoder = g_iconv_open(m_encoding.name(), m_internalEncodingName);435 m_iconvEncoder = g_iconv_open(m_encoding.name(), internalEncodingName); 343 436 } 344 437 -
trunk/WebCore/platform/text/gtk/TextCodecGtk.h
r50508 r70211 54 54 void createIConvEncoder() const; 55 55 56 static void registerEncodingNames(EncodingNameRegistrar registrar, bool extended);57 static void registerCodecs(TextCodecRegistrar registrar, bool extended);58 static gboolean isEncodingAvailable(const gchar*);59 60 56 TextEncoding m_encoding; 61 57 size_t m_numBufferedBytes; … … 63 59 mutable GIConv m_iconvDecoder; 64 60 mutable GIConv m_iconvEncoder; 65 66 static const gchar* m_internalEncodingName;67 68 typedef const gchar* const codecAliasList[];69 70 // Unicode71 static codecAliasList m_codecAliases_UTF_8;72 73 // Western74 static codecAliasList m_codecAliases_ISO_8859_1;75 static codecAliasList m_codecAliases_MACROMAN;76 77 // Japanese78 static codecAliasList m_codecAliases_SHIFT_JIS;79 static codecAliasList m_codecAliases_EUC_JP;80 static codecAliasList m_codecAliases_ISO_2022_JP;81 82 // Traditional Chinese83 static codecAliasList m_codecAliases_BIG5;84 static codecAliasList m_codecAliases_BIG5_HKSCS;85 static codecAliasList m_codecAliases_CP950;86 87 // Korean88 static codecAliasList m_codecAliases_ISO_2022_KR;89 static codecAliasList m_codecAliases_CP949;90 static codecAliasList m_codecAliases_EUC_KR;91 92 // Arabic93 static codecAliasList m_codecAliases_ISO_8859_6;94 static codecAliasList m_codecAliases_CP1256;95 96 // Hebrew97 static codecAliasList m_codecAliases_ISO_8859_8;98 static codecAliasList m_codecAliases_CP1255;99 100 // Greek101 static codecAliasList m_codecAliases_ISO_8859_7;102 static codecAliasList m_codecAliases_CP869;103 static codecAliasList m_codecAliases_WINDOWS_1253;104 105 // Cyrillic106 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 // Thai114 static codecAliasList m_codecAliases_CP874;115 static codecAliasList m_codecAliases_TIS_620;116 117 // Simplified Chinese118 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 European125 static codecAliasList m_codecAliases_ISO_8859_2;126 static codecAliasList m_codecAliases_CP1250;127 static codecAliasList m_codecAliases_MACCENTRALEUROPE;128 129 // Vietnamese130 static codecAliasList m_codecAliases_CP1258;131 132 // Turkish133 static codecAliasList m_codecAliases_CP1254;134 static codecAliasList m_codecAliases_ISO_8859_9;135 136 // Baltic137 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 143 61 }; 144 62
Note: See TracChangeset
for help on using the changeset viewer.