Annotation of embedaddon/php/ext/mbstring/libmbfl/mbfl/mbfl_encoding.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: #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"
        !            61: #include "filters/mbfilter_cp51932.h"
        !            62: #include "filters/mbfilter_jis.h"
        !            63: #include "filters/mbfilter_iso2022_jp_ms.h"
        !            64: #include "filters/mbfilter_euc_jp.h"
        !            65: #include "filters/mbfilter_euc_jp_win.h"
        !            66: #include "filters/mbfilter_ascii.h"
        !            67: #include "filters/mbfilter_koi8r.h"
        !            68: #include "filters/mbfilter_koi8u.h"
        !            69: #include "filters/mbfilter_cp866.h"
        !            70: #include "filters/mbfilter_cp932.h"
        !            71: #include "filters/mbfilter_cp936.h"
        !            72: #include "filters/mbfilter_cp1251.h"
        !            73: #include "filters/mbfilter_cp1252.h"
        !            74: #include "filters/mbfilter_cp1254.h"
        !            75: #include "filters/mbfilter_cp5022x.h"
        !            76: #include "filters/mbfilter_iso8859_1.h"
        !            77: #include "filters/mbfilter_iso8859_2.h"
        !            78: #include "filters/mbfilter_iso8859_3.h"
        !            79: #include "filters/mbfilter_iso8859_4.h"
        !            80: #include "filters/mbfilter_iso8859_5.h"
        !            81: #include "filters/mbfilter_iso8859_6.h"
        !            82: #include "filters/mbfilter_iso8859_7.h"
        !            83: #include "filters/mbfilter_iso8859_8.h"
        !            84: #include "filters/mbfilter_iso8859_9.h"
        !            85: #include "filters/mbfilter_iso8859_10.h"
        !            86: #include "filters/mbfilter_iso8859_13.h"
        !            87: #include "filters/mbfilter_iso8859_14.h"
        !            88: #include "filters/mbfilter_iso8859_15.h"
        !            89: #include "filters/mbfilter_iso8859_16.h"
        !            90: #include "filters/mbfilter_base64.h"
        !            91: #include "filters/mbfilter_qprint.h"
        !            92: #include "filters/mbfilter_uuencode.h"
        !            93: #include "filters/mbfilter_7bit.h"
        !            94: #include "filters/mbfilter_utf7.h"
        !            95: #include "filters/mbfilter_utf7imap.h"
        !            96: #include "filters/mbfilter_utf8.h"
        !            97: #include "filters/mbfilter_utf16.h"
        !            98: #include "filters/mbfilter_utf32.h"
        !            99: #include "filters/mbfilter_byte2.h"
        !           100: #include "filters/mbfilter_byte4.h"
        !           101: #include "filters/mbfilter_ucs4.h"
        !           102: #include "filters/mbfilter_ucs2.h"
        !           103: #include "filters/mbfilter_htmlent.h"
        !           104: #include "filters/mbfilter_armscii8.h"
        !           105: #include "filters/mbfilter_cp850.h"
        !           106: 
        !           107: #ifndef HAVE_STRCASECMP
        !           108: #ifdef HAVE_STRICMP
        !           109: #define strcasecmp stricmp
        !           110: #endif
        !           111: #endif 
        !           112: 
        !           113: 
        !           114: static const char *mbfl_encoding_auto_aliases[] = {"unknown", NULL};
        !           115: 
        !           116: static const mbfl_encoding mbfl_encoding_auto = {
        !           117:        mbfl_no_encoding_auto,
        !           118:        "auto",
        !           119:        NULL,
        !           120:        (const char *(*)[])&mbfl_encoding_auto_aliases,
        !           121:        NULL,
        !           122:        0
        !           123: };
        !           124: 
        !           125: static const mbfl_encoding *mbfl_encoding_ptr_list[] = {
        !           126:        &mbfl_encoding_pass,
        !           127:        &mbfl_encoding_auto,
        !           128:        &mbfl_encoding_wchar,
        !           129:        &mbfl_encoding_byte2be,
        !           130:        &mbfl_encoding_byte2le,
        !           131:        &mbfl_encoding_byte4be,
        !           132:        &mbfl_encoding_byte4le,
        !           133:        &mbfl_encoding_base64,
        !           134:        &mbfl_encoding_uuencode,
        !           135:        &mbfl_encoding_html_ent,
        !           136:        &mbfl_encoding_qprint,
        !           137:        &mbfl_encoding_7bit,
        !           138:        &mbfl_encoding_8bit,
        !           139:        &mbfl_encoding_ucs4,
        !           140:        &mbfl_encoding_ucs4be,
        !           141:        &mbfl_encoding_ucs4le,
        !           142:        &mbfl_encoding_ucs2,
        !           143:        &mbfl_encoding_ucs2be,
        !           144:        &mbfl_encoding_ucs2le,
        !           145:        &mbfl_encoding_utf32,
        !           146:        &mbfl_encoding_utf32be,
        !           147:        &mbfl_encoding_utf32le,
        !           148:        &mbfl_encoding_utf16,
        !           149:        &mbfl_encoding_utf16be,
        !           150:        &mbfl_encoding_utf16le,
        !           151:        &mbfl_encoding_utf8,
        !           152:        &mbfl_encoding_utf7,
        !           153:        &mbfl_encoding_utf7imap,
        !           154:        &mbfl_encoding_ascii,
        !           155:        &mbfl_encoding_euc_jp,
        !           156:        &mbfl_encoding_sjis,
        !           157:        &mbfl_encoding_eucjp_win,
        !           158:        &mbfl_encoding_sjis_open,
        !           159:        &mbfl_encoding_cp932,
        !           160:        &mbfl_encoding_cp51932,
        !           161:        &mbfl_encoding_jis,
        !           162:        &mbfl_encoding_2022jp,
        !           163:        &mbfl_encoding_2022jpms,
        !           164:        &mbfl_encoding_cp1252,
        !           165:        &mbfl_encoding_cp1254,
        !           166:        &mbfl_encoding_8859_1,
        !           167:        &mbfl_encoding_8859_2,
        !           168:        &mbfl_encoding_8859_3,
        !           169:        &mbfl_encoding_8859_4,
        !           170:        &mbfl_encoding_8859_5,
        !           171:        &mbfl_encoding_8859_6,
        !           172:        &mbfl_encoding_8859_7,
        !           173:        &mbfl_encoding_8859_8,
        !           174:        &mbfl_encoding_8859_9,
        !           175:        &mbfl_encoding_8859_10,
        !           176:        &mbfl_encoding_8859_13,
        !           177:        &mbfl_encoding_8859_14,
        !           178:        &mbfl_encoding_8859_15,
        !           179:        &mbfl_encoding_8859_16,
        !           180:        &mbfl_encoding_euc_cn,
        !           181:        &mbfl_encoding_cp936,
        !           182:        &mbfl_encoding_hz,
        !           183:        &mbfl_encoding_euc_tw,
        !           184:        &mbfl_encoding_big5,
        !           185:        &mbfl_encoding_euc_kr,
        !           186:        &mbfl_encoding_uhc,
        !           187:        &mbfl_encoding_2022kr,
        !           188:        &mbfl_encoding_cp1251,
        !           189:        &mbfl_encoding_cp866,
        !           190:        &mbfl_encoding_koi8r,
        !           191:        &mbfl_encoding_koi8u,
        !           192:        &mbfl_encoding_armscii8,
        !           193:        &mbfl_encoding_cp850,
        !           194:        &mbfl_encoding_jis_ms,
        !           195:        &mbfl_encoding_cp50220,
        !           196:        &mbfl_encoding_cp50220raw,
        !           197:        &mbfl_encoding_cp50221,
        !           198:        &mbfl_encoding_cp50222,
        !           199:        NULL
        !           200: };
        !           201: 
        !           202: /* encoding resolver */
        !           203: const mbfl_encoding *
        !           204: mbfl_name2encoding(const char *name)
        !           205: {
        !           206:        const mbfl_encoding *encoding;
        !           207:        int i, j;
        !           208: 
        !           209:        if (name == NULL) {
        !           210:                return NULL;
        !           211:        }
        !           212: 
        !           213:        i = 0;
        !           214:        while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL){
        !           215:                if (strcasecmp(encoding->name, name) == 0) {
        !           216:                        return encoding;
        !           217:                }
        !           218:        }
        !           219: 
        !           220:        /* serch MIME charset name */
        !           221:        i = 0;
        !           222:        while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL) {
        !           223:                if (encoding->mime_name != NULL) {
        !           224:                        if (strcasecmp(encoding->mime_name, name) == 0) {
        !           225:                                return encoding;
        !           226:                        }
        !           227:                }
        !           228:        }
        !           229: 
        !           230:        /* serch aliases */
        !           231:        i = 0;
        !           232:        while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL) {
        !           233:                if (encoding->aliases != NULL) {
        !           234:                        j = 0;
        !           235:                        while ((*encoding->aliases)[j] != NULL) {
        !           236:                                if (strcasecmp((*encoding->aliases)[j], name) == 0) {
        !           237:                                        return encoding;
        !           238:                                }
        !           239:                                j++;
        !           240:                        }
        !           241:                }
        !           242:        }
        !           243: 
        !           244:        return NULL;
        !           245: }
        !           246: 
        !           247: const mbfl_encoding *
        !           248: mbfl_no2encoding(enum mbfl_no_encoding no_encoding)
        !           249: {
        !           250:        const mbfl_encoding *encoding;
        !           251:        int i;
        !           252: 
        !           253:        i = 0;
        !           254:        while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL){
        !           255:                if (encoding->no_encoding == no_encoding) {
        !           256:                        return encoding;
        !           257:                }
        !           258:        }
        !           259: 
        !           260:        return NULL;
        !           261: }
        !           262: 
        !           263: enum mbfl_no_encoding
        !           264: mbfl_name2no_encoding(const char *name)
        !           265: {
        !           266:        const mbfl_encoding *encoding;
        !           267: 
        !           268:        encoding = mbfl_name2encoding(name);
        !           269:        if (encoding == NULL) {
        !           270:                return mbfl_no_encoding_invalid;
        !           271:        } else {
        !           272:                return encoding->no_encoding;
        !           273:        }
        !           274: }
        !           275: 
        !           276: const char *
        !           277: mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding)
        !           278: {
        !           279:        const mbfl_encoding *encoding;
        !           280: 
        !           281:        encoding = mbfl_no2encoding(no_encoding);
        !           282:        if (encoding == NULL) {
        !           283:                return "";
        !           284:        } else {
        !           285:                return encoding->name;
        !           286:        }
        !           287: }
        !           288: 
        !           289: const mbfl_encoding **
        !           290: mbfl_get_supported_encodings(void)
        !           291: {
        !           292:        return mbfl_encoding_ptr_list;
        !           293: }
        !           294: 
        !           295: const char *
        !           296: mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding)
        !           297: {
        !           298:        const mbfl_encoding *encoding;
        !           299: 
        !           300:        encoding = mbfl_no2encoding(no_encoding);
        !           301:        if (encoding != NULL && encoding->mime_name != NULL && encoding->mime_name[0] != '\0') {
        !           302:                return encoding->mime_name;
        !           303:        } else {
        !           304:                return NULL;
        !           305:        }
        !           306: }
        !           307: 
        !           308: int
        !           309: mbfl_is_support_encoding(const char *name)
        !           310: {
        !           311:        const mbfl_encoding *encoding;
        !           312: 
        !           313:        encoding = mbfl_name2encoding(name);
        !           314:        if (encoding == NULL) {
        !           315:                return 0;
        !           316:        } else {
        !           317:                return 1;
        !           318:        }
        !           319: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>