+++ /dev/null
-/*\r
- * mimeenc.c - translate our internal character set codes to and\r
- * from MIME standard character-set names.\r
- * \r
- */\r
-\r
-#include <ctype.h>\r
-#include "charset.h"\r
-#include "internal.h"\r
-\r
-static const struct {\r
- const char *name;\r
- int charset;\r
-} mimeencs[] = {\r
- /*\r
- * These names are taken from\r
- * \r
- * http://www.iana.org/assignments/character-sets\r
- * \r
- * Where multiple encoding names map to the same encoding id\r
- * (such as the variety of aliases for ISO-8859-1), the first\r
- * is considered canonical and will be returned when\r
- * translating the id to a string.\r
- */\r
- { "ISO-8859-1", CS_ISO8859_1 },\r
- { "iso-ir-100", CS_ISO8859_1 },\r
- { "ISO_8859-1", CS_ISO8859_1 },\r
- { "ISO_8859-1:1987", CS_ISO8859_1 },\r
- { "latin1", CS_ISO8859_1 },\r
- { "l1", CS_ISO8859_1 },\r
- { "IBM819", CS_ISO8859_1 },\r
- { "CP819", CS_ISO8859_1 },\r
- { "csISOLatin1", CS_ISO8859_1 },\r
-\r
- { "ISO-8859-2", CS_ISO8859_2 },\r
- { "ISO_8859-2:1987", CS_ISO8859_2 },\r
- { "iso-ir-101", CS_ISO8859_2 },\r
- { "ISO_8859-2", CS_ISO8859_2 },\r
- { "latin2", CS_ISO8859_2 },\r
- { "l2", CS_ISO8859_2 },\r
- { "csISOLatin2", CS_ISO8859_2 },\r
-\r
- { "ISO-8859-3", CS_ISO8859_3 },\r
- { "ISO_8859-3:1988", CS_ISO8859_3 },\r
- { "iso-ir-109", CS_ISO8859_3 },\r
- { "ISO_8859-3", CS_ISO8859_3 },\r
- { "latin3", CS_ISO8859_3 },\r
- { "l3", CS_ISO8859_3 },\r
- { "csISOLatin3", CS_ISO8859_3 },\r
-\r
- { "ISO-8859-4", CS_ISO8859_4 },\r
- { "ISO_8859-4:1988", CS_ISO8859_4 },\r
- { "iso-ir-110", CS_ISO8859_4 },\r
- { "ISO_8859-4", CS_ISO8859_4 },\r
- { "latin4", CS_ISO8859_4 },\r
- { "l4", CS_ISO8859_4 },\r
- { "csISOLatin4", CS_ISO8859_4 },\r
-\r
- { "ISO-8859-5", CS_ISO8859_5 },\r
- { "ISO_8859-5:1988", CS_ISO8859_5 },\r
- { "iso-ir-144", CS_ISO8859_5 },\r
- { "ISO_8859-5", CS_ISO8859_5 },\r
- { "cyrillic", CS_ISO8859_5 },\r
- { "csISOLatinCyrillic", CS_ISO8859_5 },\r
-\r
- { "ISO-8859-6", CS_ISO8859_6 },\r
- { "ISO_8859-6:1987", CS_ISO8859_6 },\r
- { "iso-ir-127", CS_ISO8859_6 },\r
- { "ISO_8859-6", CS_ISO8859_6 },\r
- { "ECMA-114", CS_ISO8859_6 },\r
- { "ASMO-708", CS_ISO8859_6 },\r
- { "arabic", CS_ISO8859_6 },\r
- { "csISOLatinArabic", CS_ISO8859_6 },\r
-\r
- { "ISO-8859-7", CS_ISO8859_7 },\r
- { "ISO_8859-7:1987", CS_ISO8859_7 },\r
- { "iso-ir-126", CS_ISO8859_7 },\r
- { "ISO_8859-7", CS_ISO8859_7 },\r
- { "ELOT_928", CS_ISO8859_7 },\r
- { "ECMA-118", CS_ISO8859_7 },\r
- { "greek", CS_ISO8859_7 },\r
- { "greek8", CS_ISO8859_7 },\r
- { "csISOLatinGreek", CS_ISO8859_7 },\r
-\r
- { "ISO-8859-8", CS_ISO8859_8 },\r
- { "ISO_8859-8:1988", CS_ISO8859_8 },\r
- { "iso-ir-138", CS_ISO8859_8 },\r
- { "ISO_8859-8", CS_ISO8859_8 },\r
- { "hebrew", CS_ISO8859_8 },\r
- { "csISOLatinHebrew", CS_ISO8859_8 },\r
-\r
- { "ISO-8859-9", CS_ISO8859_9 },\r
- { "ISO_8859-9:1989", CS_ISO8859_9 },\r
- { "iso-ir-148", CS_ISO8859_9 },\r
- { "ISO_8859-9", CS_ISO8859_9 },\r
- { "latin5", CS_ISO8859_9 },\r
- { "l5", CS_ISO8859_9 },\r
- { "csISOLatin5", CS_ISO8859_9 },\r
-\r
- { "ISO-8859-10", CS_ISO8859_10 },\r
- { "iso-ir-157", CS_ISO8859_10 },\r
- { "l6", CS_ISO8859_10 },\r
- { "ISO_8859-10:1992", CS_ISO8859_10 },\r
- { "csISOLatin6", CS_ISO8859_10 },\r
- { "latin6", CS_ISO8859_10 },\r
-\r
- { "ISO-8859-13", CS_ISO8859_13 },\r
-\r
- { "ISO-8859-14", CS_ISO8859_14 },\r
- { "iso-ir-199", CS_ISO8859_14 },\r
- { "ISO_8859-14:1998", CS_ISO8859_14 },\r
- { "ISO_8859-14", CS_ISO8859_14 },\r
- { "latin8", CS_ISO8859_14 },\r
- { "iso-celtic", CS_ISO8859_14 },\r
- { "l8", CS_ISO8859_14 },\r
-\r
- { "ISO-8859-15", CS_ISO8859_15 },\r
- { "ISO_8859-15", CS_ISO8859_15 },\r
- { "Latin-9", CS_ISO8859_15 },\r
-\r
- { "ISO-8859-16", CS_ISO8859_16 },\r
- { "iso-ir-226", CS_ISO8859_16 },\r
- { "ISO_8859-16", CS_ISO8859_16 },\r
- { "ISO_8859-16:2001", CS_ISO8859_16 },\r
- { "latin10", CS_ISO8859_16 },\r
- { "l10", CS_ISO8859_16 },\r
-\r
- { "IBM437", CS_CP437 },\r
- { "cp437", CS_CP437 },\r
- { "437", CS_CP437 },\r
- { "csPC8CodePage437", CS_CP437 },\r
-\r
- { "IBM850", CS_CP850 },\r
- { "cp850", CS_CP850 },\r
- { "850", CS_CP850 },\r
- { "csPC850Multilingual", CS_CP850 },\r
-\r
- { "IBM866", CS_CP866 },\r
- { "cp866", CS_CP866 },\r
- { "866", CS_CP866 },\r
- { "csIBM866", CS_CP866 },\r
-\r
- { "windows-1250", CS_CP1250 },\r
-\r
- { "windows-1251", CS_CP1251 },\r
-\r
- { "windows-1252", CS_CP1252 },\r
-\r
- { "windows-1253", CS_CP1253 },\r
-\r
- { "windows-1254", CS_CP1254 },\r
-\r
- { "windows-1255", CS_CP1255 },\r
-\r
- { "windows-1256", CS_CP1256 },\r
-\r
- { "windows-1257", CS_CP1257 },\r
-\r
- { "windows-1258", CS_CP1258 },\r
-\r
- { "KOI8-R", CS_KOI8_R },\r
- { "csKOI8R", CS_KOI8_R },\r
-\r
- { "KOI8-U", CS_KOI8_U },\r
-\r
- { "macintosh", CS_MAC_ROMAN_OLD },\r
- { "mac", CS_MAC_ROMAN_OLD },\r
- { "csMacintosh", CS_MAC_ROMAN_OLD },\r
-\r
- { "VISCII", CS_VISCII },\r
- { "csVISCII", CS_VISCII },\r
-\r
- { "hp-roman8", CS_HP_ROMAN8 },\r
- { "roman8", CS_HP_ROMAN8 },\r
- { "r8", CS_HP_ROMAN8 },\r
- { "csHPRoman8", CS_HP_ROMAN8 },\r
-\r
- { "DEC-MCS", CS_DEC_MCS },\r
- { "dec", CS_DEC_MCS },\r
- { "csDECMCS", CS_DEC_MCS },\r
-\r
- { "UTF-8", CS_UTF8 },\r
-};\r
-\r
-const char *charset_to_mimeenc(int charset)\r
-{\r
- int i;\r
-\r
- for (i = 0; i < (int)lenof(mimeencs); i++)\r
- if (charset == mimeencs[i].charset)\r
- return mimeencs[i].name;\r
-\r
- return NULL; /* not found */\r
-}\r
-\r
-int charset_from_mimeenc(const char *name)\r
-{\r
- int i;\r
-\r
- for (i = 0; i < (int)lenof(mimeencs); i++) {\r
- const char *p, *q;\r
- p = name;\r
- q = mimeencs[i].name;\r
- while (*p || *q) {\r
- if (tolower((unsigned char)*p) != tolower((unsigned char)*q))\r
- break;\r
- p++; q++;\r
- }\r
- if (!*p && !*q)\r
- return mimeencs[i].charset;\r
- }\r
-\r
- return CS_NONE; /* not found */\r
-}\r