OSDN Git Service

Enhance all settings encryption.
[ffftp/ffftp.git] / putty / CHARSET / MIMEENC.C
1 /*\r
2  * mimeenc.c - translate our internal character set codes to and\r
3  * from MIME standard character-set names.\r
4  * \r
5  */\r
6 \r
7 #include <ctype.h>\r
8 #include "charset.h"\r
9 #include "internal.h"\r
10 \r
11 static const struct {\r
12     const char *name;\r
13     int charset;\r
14 } mimeencs[] = {\r
15     /*\r
16      * These names are taken from\r
17      * \r
18      *   http://www.iana.org/assignments/character-sets\r
19      * \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
24      */\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
34 \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
42 \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
50 \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
58 \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
65 \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
74 \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
84 \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
91 \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
99 \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
106 \r
107     { "ISO-8859-13", CS_ISO8859_13 },\r
108 \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
116 \r
117     { "ISO-8859-15", CS_ISO8859_15 },\r
118     { "ISO_8859-15", CS_ISO8859_15 },\r
119     { "Latin-9", CS_ISO8859_15 },\r
120 \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
127 \r
128     { "IBM437", CS_CP437 },\r
129     { "cp437", CS_CP437 },\r
130     { "437", CS_CP437 },\r
131     { "csPC8CodePage437", CS_CP437 },\r
132 \r
133     { "IBM850", CS_CP850 },\r
134     { "cp850", CS_CP850 },\r
135     { "850", CS_CP850 },\r
136     { "csPC850Multilingual", CS_CP850 },\r
137 \r
138     { "IBM852", CS_CP852 },\r
139     { "cp852", CS_CP852 },\r
140     { "852", CS_CP852 },\r
141     { "csIBM852", CS_CP852 },\r
142 \r
143     { "IBM866", CS_CP866 },\r
144     { "cp866", CS_CP866 },\r
145     { "866", CS_CP866 },\r
146     { "csIBM866", CS_CP866 },\r
147 \r
148     { "windows-1250", CS_CP1250 },\r
149 \r
150     { "windows-1251", CS_CP1251 },\r
151 \r
152     { "windows-1252", CS_CP1252 },\r
153 \r
154     { "windows-1253", CS_CP1253 },\r
155 \r
156     { "windows-1254", CS_CP1254 },\r
157 \r
158     { "windows-1255", CS_CP1255 },\r
159 \r
160     { "windows-1256", CS_CP1256 },\r
161 \r
162     { "windows-1257", CS_CP1257 },\r
163 \r
164     { "windows-1258", CS_CP1258 },\r
165 \r
166     { "KOI8-R", CS_KOI8_R },\r
167     { "csKOI8R", CS_KOI8_R },\r
168 \r
169     { "KOI8-U", CS_KOI8_U },\r
170 \r
171     { "macintosh", CS_MAC_ROMAN_OLD },\r
172     { "mac", CS_MAC_ROMAN_OLD },\r
173     { "csMacintosh", CS_MAC_ROMAN_OLD },\r
174 \r
175     { "VISCII", CS_VISCII },\r
176     { "csVISCII", CS_VISCII },\r
177 \r
178     { "hp-roman8", CS_HP_ROMAN8 },\r
179     { "roman8", CS_HP_ROMAN8 },\r
180     { "r8", CS_HP_ROMAN8 },\r
181     { "csHPRoman8", CS_HP_ROMAN8 },\r
182 \r
183     { "DEC-MCS", CS_DEC_MCS },\r
184     { "dec", CS_DEC_MCS },\r
185     { "csDECMCS", CS_DEC_MCS },\r
186 \r
187     { "UTF-8", CS_UTF8 },\r
188 };\r
189 \r
190 const char *charset_to_mimeenc(int charset)\r
191 {\r
192     int i;\r
193 \r
194     for (i = 0; i < (int)lenof(mimeencs); i++)\r
195         if (charset == mimeencs[i].charset)\r
196             return mimeencs[i].name;\r
197 \r
198     return NULL;                       /* not found */\r
199 }\r
200 \r
201 int charset_from_mimeenc(const char *name)\r
202 {\r
203     int i;\r
204 \r
205     for (i = 0; i < (int)lenof(mimeencs); i++) {\r
206         const char *p, *q;\r
207         p = name;\r
208         q = mimeencs[i].name;\r
209         while (*p || *q) {\r
210                 if (tolower((unsigned char)*p) != tolower((unsigned char)*q))\r
211                 break;\r
212             p++; q++;\r
213         }\r
214         if (!*p && !*q)\r
215             return mimeencs[i].charset;\r
216     }\r
217 \r
218     return CS_NONE;                    /* not found */\r
219 }\r