summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--prism/prism.c161
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