Annotation of embedaddon/php/ext/mbstring/libmbfl/mbfl/mbfl_ident.c, revision 1.1.1.1
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: #include "mbfl_ident.h"
40: #include "mbfl_allocators.h"
41: #include "mbfilter_pass.h"
42: #include "mbfilter_8bit.h"
43: #include "mbfilter_wchar.h"
44:
45: #include "filters/mbfilter_euc_cn.h"
46: #include "filters/mbfilter_hz.h"
47: #include "filters/mbfilter_euc_tw.h"
48: #include "filters/mbfilter_big5.h"
49: #include "filters/mbfilter_uhc.h"
50: #include "filters/mbfilter_euc_kr.h"
51: #include "filters/mbfilter_iso2022_kr.h"
52: #include "filters/mbfilter_sjis.h"
53: #include "filters/mbfilter_sjis_open.h"
54: #include "filters/mbfilter_jis.h"
55: #include "filters/mbfilter_iso2022_jp_ms.h"
56: #include "filters/mbfilter_euc_jp.h"
57: #include "filters/mbfilter_euc_jp_win.h"
58: #include "filters/mbfilter_ascii.h"
59: #include "filters/mbfilter_koi8r.h"
60: #include "filters/mbfilter_koi8u.h"
61: #include "filters/mbfilter_cp866.h"
62: #include "filters/mbfilter_cp932.h"
63: #include "filters/mbfilter_cp936.h"
64: #include "filters/mbfilter_cp1251.h"
65: #include "filters/mbfilter_cp1252.h"
66: #include "filters/mbfilter_cp1254.h"
67: #include "filters/mbfilter_cp51932.h"
68: #include "filters/mbfilter_cp5022x.h"
69: #include "filters/mbfilter_iso8859_1.h"
70: #include "filters/mbfilter_iso8859_2.h"
71: #include "filters/mbfilter_iso8859_3.h"
72: #include "filters/mbfilter_iso8859_4.h"
73: #include "filters/mbfilter_iso8859_5.h"
74: #include "filters/mbfilter_iso8859_6.h"
75: #include "filters/mbfilter_iso8859_7.h"
76: #include "filters/mbfilter_iso8859_8.h"
77: #include "filters/mbfilter_iso8859_9.h"
78: #include "filters/mbfilter_iso8859_10.h"
79: #include "filters/mbfilter_iso8859_13.h"
80: #include "filters/mbfilter_iso8859_14.h"
81: #include "filters/mbfilter_iso8859_15.h"
82: #include "filters/mbfilter_base64.h"
83: #include "filters/mbfilter_qprint.h"
84: #include "filters/mbfilter_uuencode.h"
85: #include "filters/mbfilter_7bit.h"
86: #include "filters/mbfilter_utf7.h"
87: #include "filters/mbfilter_utf7imap.h"
88: #include "filters/mbfilter_utf8.h"
89: #include "filters/mbfilter_utf16.h"
90: #include "filters/mbfilter_utf32.h"
91: #include "filters/mbfilter_byte2.h"
92: #include "filters/mbfilter_byte4.h"
93: #include "filters/mbfilter_ucs4.h"
94: #include "filters/mbfilter_ucs2.h"
95: #include "filters/mbfilter_htmlent.h"
96: #include "filters/mbfilter_armscii8.h"
97: #include "filters/mbfilter_cp850.h"
98:
99: static const struct mbfl_identify_vtbl vtbl_identify_false = {
100: mbfl_no_encoding_pass,
101: mbfl_filt_ident_false_ctor,
102: mbfl_filt_ident_common_dtor,
103: mbfl_filt_ident_false };
104:
105:
106: static const struct mbfl_identify_vtbl *mbfl_identify_filter_list[] = {
107: &vtbl_identify_utf8,
108: &vtbl_identify_utf7,
109: &vtbl_identify_ascii,
110: &vtbl_identify_eucjp,
111: &vtbl_identify_sjis,
112: &vtbl_identify_sjis_open,
113: &vtbl_identify_eucjpwin,
114: &vtbl_identify_cp932,
115: &vtbl_identify_jis,
116: &vtbl_identify_2022jp,
117: &vtbl_identify_2022jpms,
118: &vtbl_identify_cp51932,
119: &vtbl_identify_euccn,
120: &vtbl_identify_cp936,
121: &vtbl_identify_hz,
122: &vtbl_identify_euctw,
123: &vtbl_identify_big5,
124: &vtbl_identify_euckr,
125: &vtbl_identify_uhc,
126: &vtbl_identify_2022kr,
127: &vtbl_identify_cp1251,
128: &vtbl_identify_cp866,
129: &vtbl_identify_koi8r,
130: &vtbl_identify_koi8u,
131: &vtbl_identify_cp1252,
132: &vtbl_identify_cp1254,
133: &vtbl_identify_8859_1,
134: &vtbl_identify_8859_2,
135: &vtbl_identify_8859_3,
136: &vtbl_identify_8859_4,
137: &vtbl_identify_8859_5,
138: &vtbl_identify_8859_6,
139: &vtbl_identify_8859_7,
140: &vtbl_identify_8859_8,
141: &vtbl_identify_8859_9,
142: &vtbl_identify_8859_10,
143: &vtbl_identify_8859_13,
144: &vtbl_identify_8859_14,
145: &vtbl_identify_8859_15,
146: &vtbl_identify_armscii8,
147: &vtbl_identify_cp850,
148: &vtbl_identify_jis_ms,
149: &vtbl_identify_cp50220,
150: &vtbl_identify_cp50221,
151: &vtbl_identify_cp50222,
152: &vtbl_identify_false,
153: NULL
154: };
155:
156:
157:
158: /*
159: * identify filter
160: */
161: const struct mbfl_identify_vtbl * mbfl_identify_filter_get_vtbl(enum mbfl_no_encoding encoding)
162: {
163: const struct mbfl_identify_vtbl * vtbl;
164: int i;
165:
166: i = 0;
167: while ((vtbl = mbfl_identify_filter_list[i++]) != NULL) {
168: if (vtbl->encoding == encoding) {
169: break;
170: }
171: }
172:
173: return vtbl;
174: }
175:
176: mbfl_identify_filter *mbfl_identify_filter_new(enum mbfl_no_encoding encoding)
177: {
178: mbfl_identify_filter *filter;
179:
180: /* allocate */
181: filter = (mbfl_identify_filter *)mbfl_malloc(sizeof(mbfl_identify_filter));
182: if (filter == NULL) {
183: return NULL;
184: }
185:
186: if (mbfl_identify_filter_init(filter, encoding)) {
187: mbfl_free(filter);
188: return NULL;
189: }
190:
191: return filter;
192: }
193:
194: int mbfl_identify_filter_init(mbfl_identify_filter *filter, enum mbfl_no_encoding encoding)
195: {
196: const struct mbfl_identify_vtbl *vtbl;
197:
198: /* encoding structure */
199: filter->encoding = mbfl_no2encoding(encoding);
200: if (filter->encoding == NULL) {
201: filter->encoding = &mbfl_encoding_pass;
202: }
203:
204: filter->status = 0;
205: filter->flag = 0;
206: filter->score = 0;
207:
208: /* setup the function table */
209: vtbl = mbfl_identify_filter_get_vtbl(filter->encoding->no_encoding);
210: if (vtbl == NULL) {
211: vtbl = &vtbl_identify_false;
212: }
213: filter->filter_ctor = vtbl->filter_ctor;
214: filter->filter_dtor = vtbl->filter_dtor;
215: filter->filter_function = vtbl->filter_function;
216:
217: /* constructor */
218: (*filter->filter_ctor)(filter);
219:
220: return 0;
221: }
222:
223: void mbfl_identify_filter_delete(mbfl_identify_filter *filter)
224: {
225: if (filter == NULL) {
226: return;
227: }
228:
229: mbfl_identify_filter_cleanup(filter);
230: mbfl_free((void*)filter);
231: }
232:
233: void mbfl_identify_filter_cleanup(mbfl_identify_filter *filter)
234: {
235: (*filter->filter_dtor)(filter);
236: }
237:
238: void mbfl_filt_ident_common_ctor(mbfl_identify_filter *filter)
239: {
240: filter->status = 0;
241: filter->flag = 0;
242: }
243:
244: void mbfl_filt_ident_common_dtor(mbfl_identify_filter *filter)
245: {
246: filter->status = 0;
247: }
248:
249: int mbfl_filt_ident_false(int c, mbfl_identify_filter *filter)
250: {
251: filter->flag = 1; /* bad */
252: return c;
253: }
254:
255: void mbfl_filt_ident_false_ctor(mbfl_identify_filter *filter)
256: {
257: filter->status = 0;
258: filter->flag = 1;
259: }
260:
261: int mbfl_filt_ident_true(int c, mbfl_identify_filter *filter)
262: {
263: return c;
264: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>