Skip to content

Commit 80fac1e

Browse files
committed
Split up encoding comparisons based on first letter
1 parent 6517564 commit 80fac1e

File tree

1 file changed

+103
-58
lines changed

1 file changed

+103
-58
lines changed

src/prism.c

Lines changed: 103 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -6049,65 +6049,110 @@ parser_lex_magic_comment_encoding_value(pm_parser_t *parser, const uint8_t *star
60496049
return true; \
60506050
}
60516051

6052-
// Built convenience macros to compare aliases for the same encoding.
6052+
// A convenience macros for comparing two aliases for the same encoding.
60536053
#define ENCODING2(value1, value2, prebuilt) ENCODING1(value1, prebuilt) ENCODING1(value2, prebuilt)
6054-
#define ENCODING3(value1, value2, value3, prebuilt) ENCODING2(value1, value2, prebuilt) ENCODING1(value3, prebuilt)
6055-
#define ENCODING4(value1, value2, value3, value4, prebuilt) ENCODING3(value1, value2, value3, prebuilt) ENCODING1(value4, prebuilt)
6056-
#define ENCODING5(value1, value2, value3, value4, value5, prebuilt) ENCODING4(value1, value2, value3, value4, prebuilt) ENCODING1(value5, prebuilt)
6057-
6058-
// Check most common first. (This is pretty arbitrary.)
6059-
ENCODING1("ASCII", pm_encoding_ascii);
6060-
ENCODING1("ASCII-8BIT", pm_encoding_ascii_8bit);
6061-
ENCODING1("US-ASCII", pm_encoding_ascii);
6062-
ENCODING1("BINARY", pm_encoding_ascii_8bit);
6063-
ENCODING1("Shift_JIS", pm_encoding_shift_jis);
6064-
ENCODING1("EUC-JP", pm_encoding_euc_jp);
6065-
6066-
// Then check all the others.
6067-
ENCODING2("ANSI_X3.4-1968", "646", pm_encoding_ascii);
6068-
ENCODING1("cp51932", pm_encoding_cp51932);
6069-
ENCODING1("eucJP", pm_encoding_euc_jp);
6070-
ENCODING1("Big5", pm_encoding_big5);
6071-
ENCODING2("CP850", "IBM850", pm_encoding_cp850);
6072-
ENCODING1("CP852", pm_encoding_cp852);
6073-
ENCODING1("CP855", pm_encoding_cp855);
6074-
ENCODING2("GBK", "CP936", pm_encoding_gbk);
6075-
ENCODING2("IBM437", "CP437", pm_encoding_ibm437);
6076-
ENCODING2("IBM720", "CP720", pm_encoding_ibm720);
6077-
ENCODING2("IBM737", "CP737", pm_encoding_ibm737);
6078-
ENCODING2("IBM775", "CP775", pm_encoding_ibm775);
6079-
ENCODING2("ISO-8859-1", "ISO8859-1", pm_encoding_iso_8859_1);
6080-
ENCODING2("ISO-8859-2", "ISO8859-2", pm_encoding_iso_8859_2);
6081-
ENCODING2("ISO-8859-3", "ISO8859-3", pm_encoding_iso_8859_3);
6082-
ENCODING2("ISO-8859-4", "ISO8859-4", pm_encoding_iso_8859_4);
6083-
ENCODING2("ISO-8859-5", "ISO8859-5", pm_encoding_iso_8859_5);
6084-
ENCODING2("ISO-8859-6", "ISO8859-6", pm_encoding_iso_8859_6);
6085-
ENCODING2("ISO-8859-7", "ISO8859-7", pm_encoding_iso_8859_7);
6086-
ENCODING2("ISO-8859-8", "ISO8859-8", pm_encoding_iso_8859_8);
6087-
ENCODING2("ISO-8859-9", "ISO8859-9", pm_encoding_iso_8859_9);
6088-
ENCODING2("ISO-8859-10", "ISO8859-10", pm_encoding_iso_8859_10);
6089-
ENCODING2("ISO-8859-11", "ISO8859-11", pm_encoding_iso_8859_11);
6090-
ENCODING2("ISO-8859-13", "ISO8859-13", pm_encoding_iso_8859_13);
6091-
ENCODING2("ISO-8859-14", "ISO8859-14", pm_encoding_iso_8859_14);
6092-
ENCODING2("ISO-8859-15", "ISO8859-15", pm_encoding_iso_8859_15);
6093-
ENCODING2("ISO-8859-16", "ISO8859-16", pm_encoding_iso_8859_16);
6094-
ENCODING2("KOI8-R", "CP878", pm_encoding_koi8_r);
6095-
ENCODING4("CP65001", "locale", "external", "filesystem", pm_encoding_utf_8);
6096-
ENCODING3("UTF8-MAC", "UTF-8-MAC", "UTF-8-HFS", pm_encoding_utf8_mac);
6097-
ENCODING2("Windows-1250", "CP1250", pm_encoding_windows_1250);
6098-
ENCODING2("Windows-1251", "CP1251", pm_encoding_windows_1251);
6099-
ENCODING2("Windows-1252", "CP1252", pm_encoding_windows_1252);
6100-
ENCODING2("Windows-1253", "CP1253", pm_encoding_windows_1253);
6101-
ENCODING2("Windows-1254", "CP1254", pm_encoding_windows_1254);
6102-
ENCODING2("Windows-1255", "CP1255", pm_encoding_windows_1255);
6103-
ENCODING2("Windows-1256", "CP1256", pm_encoding_windows_1256);
6104-
ENCODING2("Windows-1257", "CP1257", pm_encoding_windows_1257);
6105-
ENCODING2("Windows-1258", "CP1258", pm_encoding_windows_1258);
6106-
ENCODING5("Windows-31J", "CP932", "csWindows31J", "SJIS", "PCK", pm_encoding_windows_31j);
6107-
6108-
#undef ENCODING5
6109-
#undef ENCODING4
6110-
#undef ENCODING3
6054+
6055+
if (width >= 3) {
6056+
switch (*start) {
6057+
case 'A': case 'a':
6058+
ENCODING1("ASCII", pm_encoding_ascii);
6059+
ENCODING1("ASCII-8BIT", pm_encoding_ascii_8bit);
6060+
ENCODING1("ANSI_X3.4-1968", pm_encoding_ascii);
6061+
break;
6062+
case 'B': case 'b':
6063+
ENCODING1("BINARY", pm_encoding_ascii_8bit);
6064+
ENCODING1("Big5", pm_encoding_big5);
6065+
break;
6066+
case 'C': case 'c':
6067+
ENCODING1("CP437", pm_encoding_ibm437);
6068+
ENCODING1("CP720", pm_encoding_ibm720);
6069+
ENCODING1("CP737", pm_encoding_ibm737);
6070+
ENCODING1("CP775", pm_encoding_ibm775);
6071+
ENCODING1("CP850", pm_encoding_cp850);
6072+
ENCODING1("CP852", pm_encoding_cp852);
6073+
ENCODING1("CP855", pm_encoding_cp855);
6074+
ENCODING1("CP878", pm_encoding_koi8_r);
6075+
ENCODING2("CP932", "csWindows31J", pm_encoding_windows_31j);
6076+
ENCODING1("CP936", pm_encoding_gbk);
6077+
ENCODING1("CP1250", pm_encoding_windows_1250);
6078+
ENCODING1("CP1251", pm_encoding_windows_1251);
6079+
ENCODING1("CP1252", pm_encoding_windows_1252);
6080+
ENCODING1("CP1253", pm_encoding_windows_1253);
6081+
ENCODING1("CP1254", pm_encoding_windows_1254);
6082+
ENCODING1("CP1255", pm_encoding_windows_1255);
6083+
ENCODING1("CP1256", pm_encoding_windows_1256);
6084+
ENCODING1("CP1257", pm_encoding_windows_1257);
6085+
ENCODING1("CP1258", pm_encoding_windows_1258);
6086+
ENCODING1("CP51932", pm_encoding_cp51932);
6087+
ENCODING1("CP65001", pm_encoding_utf_8);
6088+
break;
6089+
case 'E': case 'e':
6090+
ENCODING2("EUC-JP", "eucJP", pm_encoding_euc_jp);
6091+
ENCODING1("external", pm_encoding_utf_8);
6092+
break;
6093+
case 'F': case 'f':
6094+
ENCODING1("filesystem", pm_encoding_utf_8);
6095+
break;
6096+
case 'G': case 'g':
6097+
ENCODING1("GBK", pm_encoding_gbk);
6098+
break;
6099+
case 'I': case 'i':
6100+
ENCODING1("IBM437", pm_encoding_ibm437);
6101+
ENCODING1("IBM720", pm_encoding_ibm720);
6102+
ENCODING1("IBM737", pm_encoding_ibm737);
6103+
ENCODING1("IBM775", pm_encoding_ibm775);
6104+
ENCODING1("IBM850", pm_encoding_cp850);
6105+
ENCODING2("ISO-8859-1", "ISO8859-1", pm_encoding_iso_8859_1);
6106+
ENCODING2("ISO-8859-2", "ISO8859-2", pm_encoding_iso_8859_2);
6107+
ENCODING2("ISO-8859-3", "ISO8859-3", pm_encoding_iso_8859_3);
6108+
ENCODING2("ISO-8859-4", "ISO8859-4", pm_encoding_iso_8859_4);
6109+
ENCODING2("ISO-8859-5", "ISO8859-5", pm_encoding_iso_8859_5);
6110+
ENCODING2("ISO-8859-6", "ISO8859-6", pm_encoding_iso_8859_6);
6111+
ENCODING2("ISO-8859-7", "ISO8859-7", pm_encoding_iso_8859_7);
6112+
ENCODING2("ISO-8859-8", "ISO8859-8", pm_encoding_iso_8859_8);
6113+
ENCODING2("ISO-8859-9", "ISO8859-9", pm_encoding_iso_8859_9);
6114+
ENCODING2("ISO-8859-10", "ISO8859-10", pm_encoding_iso_8859_10);
6115+
ENCODING2("ISO-8859-11", "ISO8859-11", pm_encoding_iso_8859_11);
6116+
ENCODING2("ISO-8859-13", "ISO8859-13", pm_encoding_iso_8859_13);
6117+
ENCODING2("ISO-8859-14", "ISO8859-14", pm_encoding_iso_8859_14);
6118+
ENCODING2("ISO-8859-15", "ISO8859-15", pm_encoding_iso_8859_15);
6119+
ENCODING2("ISO-8859-16", "ISO8859-16", pm_encoding_iso_8859_16);
6120+
break;
6121+
case 'K': case 'k':
6122+
ENCODING1("KOI8-R", pm_encoding_koi8_r);
6123+
break;
6124+
case 'L': case 'l':
6125+
ENCODING1("locale", pm_encoding_utf_8);
6126+
break;
6127+
case 'P': case 'p':
6128+
ENCODING1("PCK", pm_encoding_windows_31j);
6129+
break;
6130+
case 'S': case 's':
6131+
ENCODING1("Shift_JIS", pm_encoding_shift_jis);
6132+
ENCODING1("SJIS", pm_encoding_windows_31j);
6133+
break;
6134+
case 'U': case 'u':
6135+
ENCODING1("US-ASCII", pm_encoding_ascii);
6136+
ENCODING2("UTF8-MAC", "UTF-8-HFS", pm_encoding_utf8_mac);
6137+
break;
6138+
case 'W': case 'w':
6139+
ENCODING1("Windows-31J", pm_encoding_windows_31j);
6140+
ENCODING1("Windows-1250", pm_encoding_windows_1250);
6141+
ENCODING1("Windows-1251", pm_encoding_windows_1251);
6142+
ENCODING1("Windows-1252", pm_encoding_windows_1252);
6143+
ENCODING1("Windows-1253", pm_encoding_windows_1253);
6144+
ENCODING1("Windows-1254", pm_encoding_windows_1254);
6145+
ENCODING1("Windows-1255", pm_encoding_windows_1255);
6146+
ENCODING1("Windows-1256", pm_encoding_windows_1256);
6147+
ENCODING1("Windows-1257", pm_encoding_windows_1257);
6148+
ENCODING1("Windows-1258", pm_encoding_windows_1258);
6149+
break;
6150+
case '6':
6151+
ENCODING1("646", pm_encoding_ascii);
6152+
break;
6153+
}
6154+
}
6155+
61116156
#undef ENCODING2
61126157
#undef ENCODING1
61136158

0 commit comments

Comments
 (0)