Annotation of embedaddon/php/ext/mbstring/libmbfl/mbfl/mbfl_language.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: #ifdef HAVE_STDDEF_H
                     40: #include <stddef.h>
                     41: #endif
                     42: 
                     43: #ifdef HAVE_STRING_H
                     44: #include <string.h>
                     45: #endif
                     46: 
                     47: #ifdef HAVE_STRINGS_H
                     48: #include <strings.h>
                     49: #endif
                     50: 
                     51: #include "mbfl_encoding.h"
                     52: #include "mbfl_language.h"
                     53: 
                     54: #include "nls/nls_ja.h"
                     55: #include "nls/nls_kr.h"
                     56: #include "nls/nls_zh.h"
                     57: #include "nls/nls_uni.h"
                     58: #include "nls/nls_de.h"
                     59: #include "nls/nls_ru.h"
                     60: #include "nls/nls_ua.h"
                     61: #include "nls/nls_en.h"
                     62: #include "nls/nls_hy.h"
                     63: #include "nls/nls_tr.h"
                     64: #include "nls/nls_neutral.h"
                     65: 
                     66: #ifndef HAVE_STRCASECMP
                     67: #ifdef HAVE_STRICMP
                     68: #define strcasecmp stricmp
                     69: #endif
                     70: #endif 
                     71: 
                     72: static const mbfl_language *mbfl_language_ptr_table[] = {
                     73:        &mbfl_language_uni,
                     74:        &mbfl_language_japanese,
                     75:        &mbfl_language_korean,
                     76:        &mbfl_language_simplified_chinese,
                     77:        &mbfl_language_traditional_chinese,
                     78:        &mbfl_language_english,
                     79:        &mbfl_language_german,
                     80:        &mbfl_language_russian,
                     81:        &mbfl_language_ukrainian,
                     82:        &mbfl_language_armenian,
                     83:        &mbfl_language_turkish,
                     84:        &mbfl_language_neutral,
                     85:        NULL
                     86: };
                     87: 
                     88: /* language resolver */
                     89: const mbfl_language *
                     90: mbfl_name2language(const char *name)
                     91: {
                     92:        const mbfl_language *language;
                     93:        int i, j;
                     94: 
                     95:        if (name == NULL) {
                     96:                return NULL;
                     97:        }
                     98: 
                     99:        i = 0;
                    100:        while ((language = mbfl_language_ptr_table[i++]) != NULL){
                    101:                if (strcasecmp(language->name, name) == 0) {
                    102:                        return language;
                    103:                }
                    104:        }
                    105: 
                    106:        i = 0;
                    107:        while ((language = mbfl_language_ptr_table[i++]) != NULL){
                    108:                if (strcasecmp(language->short_name, name) == 0) {
                    109:                        return language;
                    110:                }
                    111:        }
                    112: 
                    113:        /* serch aliases */
                    114:        i = 0;
                    115:        while ((language = mbfl_language_ptr_table[i++]) != NULL) {
                    116:                if (language->aliases != NULL) {
                    117:                        j = 0;
                    118:                        while ((*language->aliases)[j] != NULL) {
                    119:                                if (strcasecmp((*language->aliases)[j], name) == 0) {
                    120:                                        return language;
                    121:                                }
                    122:                                j++;
                    123:                        }
                    124:                }
                    125:        }
                    126: 
                    127:        return NULL;
                    128: }
                    129: 
                    130: const mbfl_language *
                    131: mbfl_no2language(enum mbfl_no_language no_language)
                    132: {
                    133:        const mbfl_language *language;
                    134:        int i;
                    135: 
                    136:        i = 0;
                    137:        while ((language = mbfl_language_ptr_table[i++]) != NULL){
                    138:                if (language->no_language == no_language) {
                    139:                        return language;
                    140:                }
                    141:        }
                    142: 
                    143:        return NULL;
                    144: }
                    145: 
                    146: enum mbfl_no_language
                    147: mbfl_name2no_language(const char *name)
                    148: {
                    149:        const mbfl_language *language;
                    150: 
                    151:        language = mbfl_name2language(name);
                    152:        if (language == NULL) {
                    153:                return mbfl_no_language_invalid;
                    154:        } else {
                    155:                return language->no_language;
                    156:        }
                    157: }
                    158: 
                    159: const char *
                    160: mbfl_no_language2name(enum mbfl_no_language no_language)
                    161: {
                    162:        const mbfl_language *language;
                    163: 
                    164:        language = mbfl_no2language(no_language);
                    165:        if (language == NULL) {
                    166:                return "";
                    167:        } else {
                    168:                return language->name;
                    169:        }
                    170: }
                    171: 

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