diff options
| author | Kevin Newton <kddnewton@gmail.com> | 2023-11-12 00:04:20 -0500 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2023-11-16 17:39:34 +0000 |
| commit | f93e4ac18e04377dea56941fc7ce599cdc7ddbcf (patch) | |
| tree | 916725d270aa6ec3d8e1c45cf60a49284520061a | |
| parent | ef748f353bd02a88e1ce2488738e3e191e874f74 (diff) | |
[ruby/prism] Split up encoding comparisons based on first letter
https://github.com/ruby/prism/commit/80fac1e4a9
| -rw-r--r-- | prism/prism.c | 161 |
1 files changed, 103 insertions, 58 deletions
diff --git a/prism/prism.c b/prism/prism.c index fd12dd05fa..949e7381a9 100644 --- a/prism/prism.c +++ b/prism/prism.c @@ -6049,65 +6049,110 @@ parser_lex_magic_comment_encoding_value(pm_parser_t *parser, const uint8_t *star return true; \ } - // Built convenience macros to compare aliases for the same encoding. + // A convenience macros for comparing two aliases for the same encoding. #define ENCODING2(value1, value2, prebuilt) ENCODING1(value1, prebuilt) ENCODING1(value2, prebuilt) -#define ENCODING3(value1, value2, value3, prebuilt) ENCODING2(value1, value2, prebuilt) ENCODING1(value3, prebuilt) -#define ENCODING4(value1, value2, value3, value4, prebuilt) ENCODING3(value1, value2, value3, prebuilt) ENCODING1(value4, prebuilt) -#define ENCODING5(value1, value2, value3, value4, value5, prebuilt) ENCODING4(value1, value2, value3, value4, prebuilt) ENCODING1(value5, prebuilt) - - // Check most common first. (This is pretty arbitrary.) - ENCODING1("ASCII", pm_encoding_ascii); - ENCODING1("ASCII-8BIT", pm_encoding_ascii_8bit); - ENCODING1("US-ASCII", pm_encoding_ascii); - ENCODING1("BINARY", pm_encoding_ascii_8bit); - ENCODING1("Shift_JIS", pm_encoding_shift_jis); - ENCODING1("EUC-JP", pm_encoding_euc_jp); - - // Then check all the others. - ENCODING2("ANSI_X3.4-1968", "646", pm_encoding_ascii); - ENCODING1("cp51932", pm_encoding_cp51932); - ENCODING1("eucJP", pm_encoding_euc_jp); - ENCODING1("Big5", pm_encoding_big5); - ENCODING2("CP850", "IBM850", pm_encoding_cp850); - ENCODING1("CP852", pm_encoding_cp852); - ENCODING1("CP855", pm_encoding_cp855); - ENCODING2("GBK", "CP936", pm_encoding_gbk); - ENCODING2("IBM437", "CP437", pm_encoding_ibm437); - ENCODING2("IBM720", "CP720", pm_encoding_ibm720); - ENCODING2("IBM737", "CP737", pm_encoding_ibm737); - ENCODING2("IBM775", "CP775", pm_encoding_ibm775); - ENCODING2("ISO-8859-1", "ISO8859-1", pm_encoding_iso_8859_1); - ENCODING2("ISO-8859-2", "ISO8859-2", pm_encoding_iso_8859_2); - ENCODING2("ISO-8859-3", "ISO8859-3", pm_encoding_iso_8859_3); - ENCODING2("ISO-8859-4", "ISO8859-4", pm_encoding_iso_8859_4); - ENCODING2("ISO-8859-5", "ISO8859-5", pm_encoding_iso_8859_5); - ENCODING2("ISO-8859-6", "ISO8859-6", pm_encoding_iso_8859_6); - ENCODING2("ISO-8859-7", "ISO8859-7", pm_encoding_iso_8859_7); - ENCODING2("ISO-8859-8", "ISO8859-8", pm_encoding_iso_8859_8); - ENCODING2("ISO-8859-9", "ISO8859-9", pm_encoding_iso_8859_9); - ENCODING2("ISO-8859-10", "ISO8859-10", pm_encoding_iso_8859_10); - ENCODING2("ISO-8859-11", "ISO8859-11", pm_encoding_iso_8859_11); - ENCODING2("ISO-8859-13", "ISO8859-13", pm_encoding_iso_8859_13); - ENCODING2("ISO-8859-14", "ISO8859-14", pm_encoding_iso_8859_14); - ENCODING2("ISO-8859-15", "ISO8859-15", pm_encoding_iso_8859_15); - ENCODING2("ISO-8859-16", "ISO8859-16", pm_encoding_iso_8859_16); - ENCODING2("KOI8-R", "CP878", pm_encoding_koi8_r); - ENCODING4("CP65001", "locale", "external", "filesystem", pm_encoding_utf_8); - ENCODING3("UTF8-MAC", "UTF-8-MAC", "UTF-8-HFS", pm_encoding_utf8_mac); - ENCODING2("Windows-1250", "CP1250", pm_encoding_windows_1250); - ENCODING2("Windows-1251", "CP1251", pm_encoding_windows_1251); - ENCODING2("Windows-1252", "CP1252", pm_encoding_windows_1252); - ENCODING2("Windows-1253", "CP1253", pm_encoding_windows_1253); - ENCODING2("Windows-1254", "CP1254", pm_encoding_windows_1254); - ENCODING2("Windows-1255", "CP1255", pm_encoding_windows_1255); - ENCODING2("Windows-1256", "CP1256", pm_encoding_windows_1256); - ENCODING2("Windows-1257", "CP1257", pm_encoding_windows_1257); - ENCODING2("Windows-1258", "CP1258", pm_encoding_windows_1258); - ENCODING5("Windows-31J", "CP932", "csWindows31J", "SJIS", "PCK", pm_encoding_windows_31j); - -#undef ENCODING5 -#undef ENCODING4 -#undef ENCODING3 + + if (width >= 3) { + switch (*start) { + case 'A': case 'a': + ENCODING1("ASCII", pm_encoding_ascii); + ENCODING1("ASCII-8BIT", pm_encoding_ascii_8bit); + ENCODING1("ANSI_X3.4-1968", pm_encoding_ascii); + break; + case 'B': case 'b': + ENCODING1("BINARY", pm_encoding_ascii_8bit); + ENCODING1("Big5", pm_encoding_big5); + break; + case 'C': case 'c': + ENCODING1("CP437", pm_encoding_ibm437); + ENCODING1("CP720", pm_encoding_ibm720); + ENCODING1("CP737", pm_encoding_ibm737); + ENCODING1("CP775", pm_encoding_ibm775); + ENCODING1("CP850", pm_encoding_cp850); + ENCODING1("CP852", pm_encoding_cp852); + ENCODING1("CP855", pm_encoding_cp855); + ENCODING1("CP878", pm_encoding_koi8_r); + ENCODING2("CP932", "csWindows31J", pm_encoding_windows_31j); + ENCODING1("CP936", pm_encoding_gbk); + ENCODING1("CP1250", pm_encoding_windows_1250); + ENCODING1("CP1251", pm_encoding_windows_1251); + ENCODING1("CP1252", pm_encoding_windows_1252); + ENCODING1("CP1253", pm_encoding_windows_1253); + ENCODING1("CP1254", pm_encoding_windows_1254); + ENCODING1("CP1255", pm_encoding_windows_1255); + ENCODING1("CP1256", pm_encoding_windows_1256); + ENCODING1("CP1257", pm_encoding_windows_1257); + ENCODING1("CP1258", pm_encoding_windows_1258); + ENCODING1("CP51932", pm_encoding_cp51932); + ENCODING1("CP65001", pm_encoding_utf_8); + break; + case 'E': case 'e': + ENCODING2("EUC-JP", "eucJP", pm_encoding_euc_jp); + ENCODING1("external", pm_encoding_utf_8); + break; + case 'F': case 'f': + ENCODING1("filesystem", pm_encoding_utf_8); + break; + case 'G': case 'g': + ENCODING1("GBK", pm_encoding_gbk); + break; + case 'I': case 'i': + ENCODING1("IBM437", pm_encoding_ibm437); + ENCODING1("IBM720", pm_encoding_ibm720); + ENCODING1("IBM737", pm_encoding_ibm737); + ENCODING1("IBM775", pm_encoding_ibm775); + ENCODING1("IBM850", pm_encoding_cp850); + ENCODING2("ISO-8859-1", "ISO8859-1", pm_encoding_iso_8859_1); + ENCODING2("ISO-8859-2", "ISO8859-2", pm_encoding_iso_8859_2); + ENCODING2("ISO-8859-3", "ISO8859-3", pm_encoding_iso_8859_3); + ENCODING2("ISO-8859-4", "ISO8859-4", pm_encoding_iso_8859_4); + ENCODING2("ISO-8859-5", "ISO8859-5", pm_encoding_iso_8859_5); + ENCODING2("ISO-8859-6", "ISO8859-6", pm_encoding_iso_8859_6); + ENCODING2("ISO-8859-7", "ISO8859-7", pm_encoding_iso_8859_7); + ENCODING2("ISO-8859-8", "ISO8859-8", pm_encoding_iso_8859_8); + ENCODING2("ISO-8859-9", "ISO8859-9", pm_encoding_iso_8859_9); + ENCODING2("ISO-8859-10", "ISO8859-10", pm_encoding_iso_8859_10); + ENCODING2("ISO-8859-11", "ISO8859-11", pm_encoding_iso_8859_11); + ENCODING2("ISO-8859-13", "ISO8859-13", pm_encoding_iso_8859_13); + ENCODING2("ISO-8859-14", "ISO8859-14", pm_encoding_iso_8859_14); + ENCODING2("ISO-8859-15", "ISO8859-15", pm_encoding_iso_8859_15); + ENCODING2("ISO-8859-16", "ISO8859-16", pm_encoding_iso_8859_16); + break; + case 'K': case 'k': + ENCODING1("KOI8-R", pm_encoding_koi8_r); + break; + case 'L': case 'l': + ENCODING1("locale", pm_encoding_utf_8); + break; + case 'P': case 'p': + ENCODING1("PCK", pm_encoding_windows_31j); + break; + case 'S': case 's': + ENCODING1("Shift_JIS", pm_encoding_shift_jis); + ENCODING1("SJIS", pm_encoding_windows_31j); + break; + case 'U': case 'u': + ENCODING1("US-ASCII", pm_encoding_ascii); + ENCODING2("UTF8-MAC", "UTF-8-HFS", pm_encoding_utf8_mac); + break; + case 'W': case 'w': + ENCODING1("Windows-31J", pm_encoding_windows_31j); + ENCODING1("Windows-1250", pm_encoding_windows_1250); + ENCODING1("Windows-1251", pm_encoding_windows_1251); + ENCODING1("Windows-1252", pm_encoding_windows_1252); + ENCODING1("Windows-1253", pm_encoding_windows_1253); + ENCODING1("Windows-1254", pm_encoding_windows_1254); + ENCODING1("Windows-1255", pm_encoding_windows_1255); + ENCODING1("Windows-1256", pm_encoding_windows_1256); + ENCODING1("Windows-1257", pm_encoding_windows_1257); + ENCODING1("Windows-1258", pm_encoding_windows_1258); + break; + case '6': + ENCODING1("646", pm_encoding_ascii); + break; + } + } + #undef ENCODING2 #undef ENCODING1 |
