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.h 26 * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file 27 * mbfilter.h is included in this package . 28 * 29 */ 30 31 #ifndef MBFL_ENCODING_H 32 #define MBFL_ENCODING_H 33 34 #include "mbfl_defs.h" 35 #include "zend.h" 36 37 enum mbfl_no_encoding { 38 mbfl_no_encoding_invalid = -1, 39 mbfl_no_encoding_pass, 40 mbfl_no_encoding_wchar, 41 mbfl_no_encoding_base64, 42 mbfl_no_encoding_uuencode, 43 mbfl_no_encoding_html_ent, 44 mbfl_no_encoding_qprint, 45 mbfl_no_encoding_7bit, 46 mbfl_no_encoding_8bit, 47 mbfl_no_encoding_charset_min, 48 mbfl_no_encoding_ucs4, 49 mbfl_no_encoding_ucs4be, 50 mbfl_no_encoding_ucs4le, 51 mbfl_no_encoding_ucs2, 52 mbfl_no_encoding_ucs2be, 53 mbfl_no_encoding_ucs2le, 54 mbfl_no_encoding_utf32, 55 mbfl_no_encoding_utf32be, 56 mbfl_no_encoding_utf32le, 57 mbfl_no_encoding_utf16, 58 mbfl_no_encoding_utf16be, 59 mbfl_no_encoding_utf16le, 60 mbfl_no_encoding_utf8, 61 mbfl_no_encoding_utf8_docomo, 62 mbfl_no_encoding_utf8_kddi_a, 63 mbfl_no_encoding_utf8_kddi_b, 64 mbfl_no_encoding_utf8_sb, 65 mbfl_no_encoding_utf7, 66 mbfl_no_encoding_utf7imap, 67 mbfl_no_encoding_ascii, 68 mbfl_no_encoding_euc_jp, 69 mbfl_no_encoding_eucjp2004, 70 mbfl_no_encoding_sjis, 71 mbfl_no_encoding_eucjp_win, 72 mbfl_no_encoding_sjis_docomo, 73 mbfl_no_encoding_sjis_kddi, 74 mbfl_no_encoding_sjis_sb, 75 mbfl_no_encoding_sjis_mac, 76 mbfl_no_encoding_sjis2004, 77 mbfl_no_encoding_cp932, 78 mbfl_no_encoding_sjiswin, 79 mbfl_no_encoding_cp51932, 80 mbfl_no_encoding_jis, 81 mbfl_no_encoding_2022jp, 82 mbfl_no_encoding_2022jp_2004, 83 mbfl_no_encoding_2022jp_kddi, 84 mbfl_no_encoding_2022jpms, 85 mbfl_no_encoding_gb18030, 86 mbfl_no_encoding_cp1252, 87 mbfl_no_encoding_cp1254, 88 mbfl_no_encoding_8859_1, 89 mbfl_no_encoding_8859_2, 90 mbfl_no_encoding_8859_3, 91 mbfl_no_encoding_8859_4, 92 mbfl_no_encoding_8859_5, 93 mbfl_no_encoding_8859_6, 94 mbfl_no_encoding_8859_7, 95 mbfl_no_encoding_8859_8, 96 mbfl_no_encoding_8859_9, 97 mbfl_no_encoding_8859_10, 98 mbfl_no_encoding_8859_13, 99 mbfl_no_encoding_8859_14, 100 mbfl_no_encoding_8859_15, 101 mbfl_no_encoding_euc_cn, 102 mbfl_no_encoding_cp936, 103 mbfl_no_encoding_euc_tw, 104 mbfl_no_encoding_big5, 105 mbfl_no_encoding_cp950, 106 mbfl_no_encoding_euc_kr, 107 mbfl_no_encoding_2022kr, 108 mbfl_no_encoding_uhc, 109 mbfl_no_encoding_hz, 110 mbfl_no_encoding_cp1251, 111 mbfl_no_encoding_cp866, 112 mbfl_no_encoding_koi8r, 113 mbfl_no_encoding_koi8u, 114 mbfl_no_encoding_8859_16, 115 mbfl_no_encoding_armscii8, 116 mbfl_no_encoding_cp850, 117 mbfl_no_encoding_cp50220, 118 mbfl_no_encoding_cp50221, 119 mbfl_no_encoding_cp50222, 120 mbfl_no_encoding_charset_max 121 }; 122 123 typedef enum mbfl_no_encoding mbfl_encoding_id; 124 125 struct _mbfl_convert_filter; 126 struct mbfl_convert_vtbl { 127 enum mbfl_no_encoding from; 128 enum mbfl_no_encoding to; 129 void (*filter_ctor)(struct _mbfl_convert_filter *filter); 130 void (*filter_dtor)(struct _mbfl_convert_filter *filter); 131 int (*filter_function)(int c, struct _mbfl_convert_filter *filter); 132 int (*filter_flush)(struct _mbfl_convert_filter *filter); 133 void (*filter_copy)(struct _mbfl_convert_filter *src, struct _mbfl_convert_filter *dest); 134 }; 135 136 typedef bool (*mb_check_fn)(unsigned char *in, size_t in_len); 137 138 /* 139 * encoding 140 */ 141 typedef struct _mbfl_encoding { 142 enum mbfl_no_encoding no_encoding; 143 const char *name; 144 const char *mime_name; 145 const char **aliases; 146 const unsigned char *mblen_table; 147 unsigned int flag; 148 const struct mbfl_convert_vtbl *input_filter; 149 const struct mbfl_convert_vtbl *output_filter; 150 mb_check_fn check; 151 } mbfl_encoding; 152 153 MBFLAPI extern const mbfl_encoding *mbfl_name2encoding(const char *name); 154 MBFLAPI extern const mbfl_encoding *mbfl_no2encoding(enum mbfl_no_encoding no_encoding); 155 MBFLAPI extern enum mbfl_no_encoding mbfl_name2no_encoding(const char *name); 156 MBFLAPI extern const mbfl_encoding **mbfl_get_supported_encodings(void); 157 MBFLAPI extern const char *mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding); 158 MBFLAPI extern const char *mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding); 159 MBFLAPI extern const char *mbfl_encoding_preferred_mime_name(const mbfl_encoding *encoding); 160 161 #endif /* MBFL_ENCODING_H */ 162