2 * mimeenc.c - translate our internal character set codes to and
\r
3 * from MIME standard character-set names.
\r
9 #include "internal.h"
\r
11 static const struct {
\r
16 * These names are taken from
\r
18 * http://www.iana.org/assignments/character-sets
\r
20 * Where multiple encoding names map to the same encoding id
\r
21 * (such as the variety of aliases for ISO-8859-1), the first
\r
22 * is considered canonical and will be returned when
\r
23 * translating the id to a string.
\r
25 { "ISO-8859-1", CS_ISO8859_1 },
\r
26 { "iso-ir-100", CS_ISO8859_1 },
\r
27 { "ISO_8859-1", CS_ISO8859_1 },
\r
28 { "ISO_8859-1:1987", CS_ISO8859_1 },
\r
29 { "latin1", CS_ISO8859_1 },
\r
30 { "l1", CS_ISO8859_1 },
\r
31 { "IBM819", CS_ISO8859_1 },
\r
32 { "CP819", CS_ISO8859_1 },
\r
33 { "csISOLatin1", CS_ISO8859_1 },
\r
35 { "ISO-8859-2", CS_ISO8859_2 },
\r
36 { "ISO_8859-2:1987", CS_ISO8859_2 },
\r
37 { "iso-ir-101", CS_ISO8859_2 },
\r
38 { "ISO_8859-2", CS_ISO8859_2 },
\r
39 { "latin2", CS_ISO8859_2 },
\r
40 { "l2", CS_ISO8859_2 },
\r
41 { "csISOLatin2", CS_ISO8859_2 },
\r
43 { "ISO-8859-3", CS_ISO8859_3 },
\r
44 { "ISO_8859-3:1988", CS_ISO8859_3 },
\r
45 { "iso-ir-109", CS_ISO8859_3 },
\r
46 { "ISO_8859-3", CS_ISO8859_3 },
\r
47 { "latin3", CS_ISO8859_3 },
\r
48 { "l3", CS_ISO8859_3 },
\r
49 { "csISOLatin3", CS_ISO8859_3 },
\r
51 { "ISO-8859-4", CS_ISO8859_4 },
\r
52 { "ISO_8859-4:1988", CS_ISO8859_4 },
\r
53 { "iso-ir-110", CS_ISO8859_4 },
\r
54 { "ISO_8859-4", CS_ISO8859_4 },
\r
55 { "latin4", CS_ISO8859_4 },
\r
56 { "l4", CS_ISO8859_4 },
\r
57 { "csISOLatin4", CS_ISO8859_4 },
\r
59 { "ISO-8859-5", CS_ISO8859_5 },
\r
60 { "ISO_8859-5:1988", CS_ISO8859_5 },
\r
61 { "iso-ir-144", CS_ISO8859_5 },
\r
62 { "ISO_8859-5", CS_ISO8859_5 },
\r
63 { "cyrillic", CS_ISO8859_5 },
\r
64 { "csISOLatinCyrillic", CS_ISO8859_5 },
\r
66 { "ISO-8859-6", CS_ISO8859_6 },
\r
67 { "ISO_8859-6:1987", CS_ISO8859_6 },
\r
68 { "iso-ir-127", CS_ISO8859_6 },
\r
69 { "ISO_8859-6", CS_ISO8859_6 },
\r
70 { "ECMA-114", CS_ISO8859_6 },
\r
71 { "ASMO-708", CS_ISO8859_6 },
\r
72 { "arabic", CS_ISO8859_6 },
\r
73 { "csISOLatinArabic", CS_ISO8859_6 },
\r
75 { "ISO-8859-7", CS_ISO8859_7 },
\r
76 { "ISO_8859-7:1987", CS_ISO8859_7 },
\r
77 { "iso-ir-126", CS_ISO8859_7 },
\r
78 { "ISO_8859-7", CS_ISO8859_7 },
\r
79 { "ELOT_928", CS_ISO8859_7 },
\r
80 { "ECMA-118", CS_ISO8859_7 },
\r
81 { "greek", CS_ISO8859_7 },
\r
82 { "greek8", CS_ISO8859_7 },
\r
83 { "csISOLatinGreek", CS_ISO8859_7 },
\r
85 { "ISO-8859-8", CS_ISO8859_8 },
\r
86 { "ISO_8859-8:1988", CS_ISO8859_8 },
\r
87 { "iso-ir-138", CS_ISO8859_8 },
\r
88 { "ISO_8859-8", CS_ISO8859_8 },
\r
89 { "hebrew", CS_ISO8859_8 },
\r
90 { "csISOLatinHebrew", CS_ISO8859_8 },
\r
92 { "ISO-8859-9", CS_ISO8859_9 },
\r
93 { "ISO_8859-9:1989", CS_ISO8859_9 },
\r
94 { "iso-ir-148", CS_ISO8859_9 },
\r
95 { "ISO_8859-9", CS_ISO8859_9 },
\r
96 { "latin5", CS_ISO8859_9 },
\r
97 { "l5", CS_ISO8859_9 },
\r
98 { "csISOLatin5", CS_ISO8859_9 },
\r
100 { "ISO-8859-10", CS_ISO8859_10 },
\r
101 { "iso-ir-157", CS_ISO8859_10 },
\r
102 { "l6", CS_ISO8859_10 },
\r
103 { "ISO_8859-10:1992", CS_ISO8859_10 },
\r
104 { "csISOLatin6", CS_ISO8859_10 },
\r
105 { "latin6", CS_ISO8859_10 },
\r
107 { "ISO-8859-13", CS_ISO8859_13 },
\r
109 { "ISO-8859-14", CS_ISO8859_14 },
\r
110 { "iso-ir-199", CS_ISO8859_14 },
\r
111 { "ISO_8859-14:1998", CS_ISO8859_14 },
\r
112 { "ISO_8859-14", CS_ISO8859_14 },
\r
113 { "latin8", CS_ISO8859_14 },
\r
114 { "iso-celtic", CS_ISO8859_14 },
\r
115 { "l8", CS_ISO8859_14 },
\r
117 { "ISO-8859-15", CS_ISO8859_15 },
\r
118 { "ISO_8859-15", CS_ISO8859_15 },
\r
119 { "Latin-9", CS_ISO8859_15 },
\r
121 { "ISO-8859-16", CS_ISO8859_16 },
\r
122 { "iso-ir-226", CS_ISO8859_16 },
\r
123 { "ISO_8859-16", CS_ISO8859_16 },
\r
124 { "ISO_8859-16:2001", CS_ISO8859_16 },
\r
125 { "latin10", CS_ISO8859_16 },
\r
126 { "l10", CS_ISO8859_16 },
\r
128 { "IBM437", CS_CP437 },
\r
129 { "cp437", CS_CP437 },
\r
130 { "437", CS_CP437 },
\r
131 { "csPC8CodePage437", CS_CP437 },
\r
133 { "IBM850", CS_CP850 },
\r
134 { "cp850", CS_CP850 },
\r
135 { "850", CS_CP850 },
\r
136 { "csPC850Multilingual", CS_CP850 },
\r
138 { "IBM866", CS_CP866 },
\r
139 { "cp866", CS_CP866 },
\r
140 { "866", CS_CP866 },
\r
141 { "csIBM866", CS_CP866 },
\r
143 { "windows-1250", CS_CP1250 },
\r
145 { "windows-1251", CS_CP1251 },
\r
147 { "windows-1252", CS_CP1252 },
\r
149 { "windows-1253", CS_CP1253 },
\r
151 { "windows-1254", CS_CP1254 },
\r
153 { "windows-1255", CS_CP1255 },
\r
155 { "windows-1256", CS_CP1256 },
\r
157 { "windows-1257", CS_CP1257 },
\r
159 { "windows-1258", CS_CP1258 },
\r
161 { "KOI8-R", CS_KOI8_R },
\r
162 { "csKOI8R", CS_KOI8_R },
\r
164 { "KOI8-U", CS_KOI8_U },
\r
166 { "macintosh", CS_MAC_ROMAN_OLD },
\r
167 { "mac", CS_MAC_ROMAN_OLD },
\r
168 { "csMacintosh", CS_MAC_ROMAN_OLD },
\r
170 { "VISCII", CS_VISCII },
\r
171 { "csVISCII", CS_VISCII },
\r
173 { "hp-roman8", CS_HP_ROMAN8 },
\r
174 { "roman8", CS_HP_ROMAN8 },
\r
175 { "r8", CS_HP_ROMAN8 },
\r
176 { "csHPRoman8", CS_HP_ROMAN8 },
\r
178 { "DEC-MCS", CS_DEC_MCS },
\r
179 { "dec", CS_DEC_MCS },
\r
180 { "csDECMCS", CS_DEC_MCS },
\r
182 { "UTF-8", CS_UTF8 },
\r
185 const char *charset_to_mimeenc(int charset)
\r
189 for (i = 0; i < (int)lenof(mimeencs); i++)
\r
190 if (charset == mimeencs[i].charset)
\r
191 return mimeencs[i].name;
\r
193 return NULL; /* not found */
\r
196 int charset_from_mimeenc(const char *name)
\r
200 for (i = 0; i < (int)lenof(mimeencs); i++) {
\r
203 q = mimeencs[i].name;
\r
205 if (tolower((unsigned char)*p) != tolower((unsigned char)*q))
\r
210 return mimeencs[i].charset;
\r
213 return CS_NONE; /* not found */
\r