Return to mbfl_encoding.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / mbstring / libmbfl / mbfl |
1.1 misho 1: /* 2: * "streamable kanji code filter and converter" 3: * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. 4: * 5: * LICENSE NOTICES 6: * 7: * This file is part of "streamable kanji code filter and converter", 8: * which is distributed under the terms of GNU Lesser General Public 9: * License (version 2) as published by the Free Software Foundation. 10: * 11: * This software is distributed in the hope that it will be useful, 12: * but WITHOUT ANY WARRANTY; without even the implied warranty of 13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14: * GNU Lesser General Public License for more details. 15: * 16: * You should have received a copy of the GNU Lesser General Public 17: * License along with "streamable kanji code filter and converter"; 18: * if not, write to the Free Software Foundation, Inc., 59 Temple Place, 19: * Suite 330, Boston, MA 02111-1307 USA 20: * 21: * The author of this file: 22: * 23: */ 24: /* 25: * The source code included in this files was separated from mbfilter.c 26: * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file 27: * mbfilter.c is included in this package . 28: * 29: */ 30: 31: #ifdef HAVE_CONFIG_H 32: #include "config.h" 33: #endif 34: 35: #ifdef HAVE_STDDEF_H 36: #include <stddef.h> 37: #endif 38: 39: #ifdef HAVE_STRING_H 40: #include <string.h> 41: #endif 42: 43: #ifdef HAVE_STRINGS_H 44: #include <strings.h> 45: #endif 46: 47: #include "mbfl_encoding.h" 48: #include "mbfilter_pass.h" 49: #include "mbfilter_8bit.h" 50: #include "mbfilter_wchar.h" 51: 52: #include "filters/mbfilter_euc_cn.h" 53: #include "filters/mbfilter_hz.h" 54: #include "filters/mbfilter_euc_tw.h" 55: #include "filters/mbfilter_big5.h" 56: #include "filters/mbfilter_uhc.h" 57: #include "filters/mbfilter_euc_kr.h" 58: #include "filters/mbfilter_iso2022_kr.h" 59: #include "filters/mbfilter_sjis.h" 60: #include "filters/mbfilter_sjis_open.h" 1.1.1.2 ! misho 61: #include "filters/mbfilter_sjis_mobile.h" ! 62: #include "filters/mbfilter_sjis_mac.h" ! 63: #include "filters/mbfilter_sjis_2004.h" 1.1 misho 64: #include "filters/mbfilter_cp51932.h" 65: #include "filters/mbfilter_jis.h" 66: #include "filters/mbfilter_iso2022_jp_ms.h" 1.1.1.2 ! misho 67: #include "filters/mbfilter_iso2022jp_2004.h" ! 68: #include "filters/mbfilter_iso2022jp_mobile.h" 1.1 misho 69: #include "filters/mbfilter_euc_jp.h" 70: #include "filters/mbfilter_euc_jp_win.h" 1.1.1.2 ! misho 71: #include "filters/mbfilter_euc_jp_2004.h" ! 72: #include "filters/mbfilter_gb18030.h" 1.1 misho 73: #include "filters/mbfilter_ascii.h" 74: #include "filters/mbfilter_koi8r.h" 75: #include "filters/mbfilter_koi8u.h" 76: #include "filters/mbfilter_cp866.h" 77: #include "filters/mbfilter_cp932.h" 78: #include "filters/mbfilter_cp936.h" 79: #include "filters/mbfilter_cp1251.h" 80: #include "filters/mbfilter_cp1252.h" 81: #include "filters/mbfilter_cp1254.h" 82: #include "filters/mbfilter_cp5022x.h" 83: #include "filters/mbfilter_iso8859_1.h" 84: #include "filters/mbfilter_iso8859_2.h" 85: #include "filters/mbfilter_iso8859_3.h" 86: #include "filters/mbfilter_iso8859_4.h" 87: #include "filters/mbfilter_iso8859_5.h" 88: #include "filters/mbfilter_iso8859_6.h" 89: #include "filters/mbfilter_iso8859_7.h" 90: #include "filters/mbfilter_iso8859_8.h" 91: #include "filters/mbfilter_iso8859_9.h" 92: #include "filters/mbfilter_iso8859_10.h" 93: #include "filters/mbfilter_iso8859_13.h" 94: #include "filters/mbfilter_iso8859_14.h" 95: #include "filters/mbfilter_iso8859_15.h" 96: #include "filters/mbfilter_iso8859_16.h" 97: #include "filters/mbfilter_base64.h" 98: #include "filters/mbfilter_qprint.h" 99: #include "filters/mbfilter_uuencode.h" 100: #include "filters/mbfilter_7bit.h" 101: #include "filters/mbfilter_utf7.h" 102: #include "filters/mbfilter_utf7imap.h" 103: #include "filters/mbfilter_utf8.h" 1.1.1.2 ! misho 104: #include "filters/mbfilter_utf8_mobile.h" 1.1 misho 105: #include "filters/mbfilter_utf16.h" 106: #include "filters/mbfilter_utf32.h" 107: #include "filters/mbfilter_byte2.h" 108: #include "filters/mbfilter_byte4.h" 109: #include "filters/mbfilter_ucs4.h" 110: #include "filters/mbfilter_ucs2.h" 111: #include "filters/mbfilter_htmlent.h" 112: #include "filters/mbfilter_armscii8.h" 113: #include "filters/mbfilter_cp850.h" 114: 115: #ifndef HAVE_STRCASECMP 116: #ifdef HAVE_STRICMP 117: #define strcasecmp stricmp 118: #endif 119: #endif 120: 121: 122: static const char *mbfl_encoding_auto_aliases[] = {"unknown", NULL}; 123: 124: static const mbfl_encoding mbfl_encoding_auto = { 125: mbfl_no_encoding_auto, 126: "auto", 127: NULL, 128: (const char *(*)[])&mbfl_encoding_auto_aliases, 129: NULL, 130: 0 131: }; 132: 133: static const mbfl_encoding *mbfl_encoding_ptr_list[] = { 134: &mbfl_encoding_pass, 135: &mbfl_encoding_auto, 136: &mbfl_encoding_wchar, 137: &mbfl_encoding_byte2be, 138: &mbfl_encoding_byte2le, 139: &mbfl_encoding_byte4be, 140: &mbfl_encoding_byte4le, 141: &mbfl_encoding_base64, 142: &mbfl_encoding_uuencode, 143: &mbfl_encoding_html_ent, 144: &mbfl_encoding_qprint, 145: &mbfl_encoding_7bit, 146: &mbfl_encoding_8bit, 147: &mbfl_encoding_ucs4, 148: &mbfl_encoding_ucs4be, 149: &mbfl_encoding_ucs4le, 150: &mbfl_encoding_ucs2, 151: &mbfl_encoding_ucs2be, 152: &mbfl_encoding_ucs2le, 153: &mbfl_encoding_utf32, 154: &mbfl_encoding_utf32be, 155: &mbfl_encoding_utf32le, 156: &mbfl_encoding_utf16, 157: &mbfl_encoding_utf16be, 158: &mbfl_encoding_utf16le, 159: &mbfl_encoding_utf8, 160: &mbfl_encoding_utf7, 161: &mbfl_encoding_utf7imap, 162: &mbfl_encoding_ascii, 163: &mbfl_encoding_euc_jp, 164: &mbfl_encoding_sjis, 165: &mbfl_encoding_eucjp_win, 1.1.1.2 ! misho 166: &mbfl_encoding_eucjp2004, 1.1 misho 167: &mbfl_encoding_sjis_open, 1.1.1.2 ! misho 168: &mbfl_encoding_sjis_docomo, ! 169: &mbfl_encoding_sjis_kddi, ! 170: &mbfl_encoding_sjis_sb, ! 171: &mbfl_encoding_sjis_mac, ! 172: &mbfl_encoding_sjis2004, ! 173: &mbfl_encoding_utf8_docomo, ! 174: &mbfl_encoding_utf8_kddi_a, ! 175: &mbfl_encoding_utf8_kddi_b, ! 176: &mbfl_encoding_utf8_sb, 1.1 misho 177: &mbfl_encoding_cp932, 178: &mbfl_encoding_cp51932, 179: &mbfl_encoding_jis, 180: &mbfl_encoding_2022jp, 181: &mbfl_encoding_2022jpms, 1.1.1.2 ! misho 182: &mbfl_encoding_gb18030, 1.1 misho 183: &mbfl_encoding_cp1252, 184: &mbfl_encoding_cp1254, 185: &mbfl_encoding_8859_1, 186: &mbfl_encoding_8859_2, 187: &mbfl_encoding_8859_3, 188: &mbfl_encoding_8859_4, 189: &mbfl_encoding_8859_5, 190: &mbfl_encoding_8859_6, 191: &mbfl_encoding_8859_7, 192: &mbfl_encoding_8859_8, 193: &mbfl_encoding_8859_9, 194: &mbfl_encoding_8859_10, 195: &mbfl_encoding_8859_13, 196: &mbfl_encoding_8859_14, 197: &mbfl_encoding_8859_15, 198: &mbfl_encoding_8859_16, 199: &mbfl_encoding_euc_cn, 200: &mbfl_encoding_cp936, 201: &mbfl_encoding_hz, 202: &mbfl_encoding_euc_tw, 203: &mbfl_encoding_big5, 1.1.1.2 ! misho 204: &mbfl_encoding_cp950, 1.1 misho 205: &mbfl_encoding_euc_kr, 206: &mbfl_encoding_uhc, 207: &mbfl_encoding_2022kr, 208: &mbfl_encoding_cp1251, 209: &mbfl_encoding_cp866, 210: &mbfl_encoding_koi8r, 211: &mbfl_encoding_koi8u, 212: &mbfl_encoding_armscii8, 213: &mbfl_encoding_cp850, 214: &mbfl_encoding_jis_ms, 1.1.1.2 ! misho 215: &mbfl_encoding_2022jp_2004, ! 216: &mbfl_encoding_2022jp_kddi, 1.1 misho 217: &mbfl_encoding_cp50220, 218: &mbfl_encoding_cp50220raw, 219: &mbfl_encoding_cp50221, 220: &mbfl_encoding_cp50222, 221: NULL 222: }; 223: 224: /* encoding resolver */ 225: const mbfl_encoding * 226: mbfl_name2encoding(const char *name) 227: { 228: const mbfl_encoding *encoding; 229: int i, j; 230: 231: if (name == NULL) { 232: return NULL; 233: } 234: 235: i = 0; 236: while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL){ 237: if (strcasecmp(encoding->name, name) == 0) { 238: return encoding; 239: } 240: } 241: 242: /* serch MIME charset name */ 243: i = 0; 244: while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL) { 245: if (encoding->mime_name != NULL) { 246: if (strcasecmp(encoding->mime_name, name) == 0) { 247: return encoding; 248: } 249: } 250: } 251: 252: /* serch aliases */ 253: i = 0; 254: while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL) { 255: if (encoding->aliases != NULL) { 256: j = 0; 257: while ((*encoding->aliases)[j] != NULL) { 258: if (strcasecmp((*encoding->aliases)[j], name) == 0) { 259: return encoding; 260: } 261: j++; 262: } 263: } 264: } 265: 266: return NULL; 267: } 268: 269: const mbfl_encoding * 270: mbfl_no2encoding(enum mbfl_no_encoding no_encoding) 271: { 272: const mbfl_encoding *encoding; 273: int i; 274: 275: i = 0; 276: while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL){ 277: if (encoding->no_encoding == no_encoding) { 278: return encoding; 279: } 280: } 281: 282: return NULL; 283: } 284: 285: enum mbfl_no_encoding 286: mbfl_name2no_encoding(const char *name) 287: { 288: const mbfl_encoding *encoding; 289: 290: encoding = mbfl_name2encoding(name); 291: if (encoding == NULL) { 292: return mbfl_no_encoding_invalid; 293: } else { 294: return encoding->no_encoding; 295: } 296: } 297: 298: const char * 299: mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding) 300: { 301: const mbfl_encoding *encoding; 302: 303: encoding = mbfl_no2encoding(no_encoding); 304: if (encoding == NULL) { 305: return ""; 306: } else { 307: return encoding->name; 308: } 309: } 310: 311: const mbfl_encoding ** 312: mbfl_get_supported_encodings(void) 313: { 314: return mbfl_encoding_ptr_list; 315: } 316: 317: const char * 318: mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding) 319: { 320: const mbfl_encoding *encoding; 321: 322: encoding = mbfl_no2encoding(no_encoding); 323: if (encoding != NULL && encoding->mime_name != NULL && encoding->mime_name[0] != '\0') { 324: return encoding->mime_name; 325: } else { 326: return NULL; 327: } 328: } 329: 330: int 331: mbfl_is_support_encoding(const char *name) 332: { 333: const mbfl_encoding *encoding; 334: 335: encoding = mbfl_name2encoding(name); 336: if (encoding == NULL) { 337: return 0; 338: } else { 339: return 1; 340: } 341: }