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