Annotation of embedaddon/php/ext/mbstring/libmbfl/mbfl/mbfl_ident.c, revision 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>