php-src/ext/mbstring/libmbfl/mbfl/mbfl_language.c
2005-12-23 13:53:30 +00:00

170 lines
3.5 KiB
C

/*
* "streamable kanji code filter and converter"
* Copyright (c) 1998-2002 HappySize, Inc. All rights reserved.
*
* LICENSE NOTICES
*
* This file is part of "streamable kanji code filter and converter",
* which is distributed under the terms of GNU Lesser General Public
* License (version 2) as published by the Free Software Foundation.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with "streamable kanji code filter and converter";
* if not, write to the Free Software Foundation, Inc., 59 Temple Place,
* Suite 330, Boston, MA 02111-1307 USA
*
* The author of this file:
*
*/
/*
* The source code included in this files was separated from mbfilter.c
* by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file
* mbfilter.c is included in this package .
*
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#ifdef HAVE_STDDEF_H
#include <stddef.h>
#endif
#ifdef HAVE_STDDEF_H
#include <stddef.h>
#endif
#ifdef HAVE_STRING_H
#include <string.h>
#endif
#ifdef HAVE_STRINGS_H
#include <strings.h>
#endif
#include "mbfl_encoding.h"
#include "mbfl_language.h"
#include "nls/nls_ja.h"
#include "nls/nls_kr.h"
#include "nls/nls_zh.h"
#include "nls/nls_uni.h"
#include "nls/nls_de.h"
#include "nls/nls_ru.h"
#include "nls/nls_en.h"
#include "nls/nls_hy.h"
#include "nls/nls_tr.h"
#include "nls/nls_neutral.h"
#ifndef HAVE_STRCASECMP
#ifdef HAVE_STRICMP
#define strcasecmp stricmp
#endif
#endif
static const mbfl_language *mbfl_language_ptr_table[] = {
&mbfl_language_uni,
&mbfl_language_japanese,
&mbfl_language_korean,
&mbfl_language_simplified_chinese,
&mbfl_language_traditional_chinese,
&mbfl_language_english,
&mbfl_language_german,
&mbfl_language_russian,
&mbfl_language_armenian,
&mbfl_language_turkish,
&mbfl_language_neutral,
NULL
};
/* language resolver */
const mbfl_language *
mbfl_name2language(const char *name)
{
const mbfl_language *language;
int i, j;
if (name == NULL) {
return NULL;
}
i = 0;
while ((language = mbfl_language_ptr_table[i++]) != NULL){
if (strcasecmp(language->name, name) == 0) {
return language;
}
}
i = 0;
while ((language = mbfl_language_ptr_table[i++]) != NULL){
if (strcasecmp(language->short_name, name) == 0) {
return language;
}
}
/* serch aliases */
i = 0;
while ((language = mbfl_language_ptr_table[i++]) != NULL) {
if (language->aliases != NULL) {
j = 0;
while ((*language->aliases)[j] != NULL) {
if (strcasecmp((*language->aliases)[j], name) == 0) {
return language;
}
j++;
}
}
}
return NULL;
}
const mbfl_language *
mbfl_no2language(enum mbfl_no_language no_language)
{
const mbfl_language *language;
int i;
i = 0;
while ((language = mbfl_language_ptr_table[i++]) != NULL){
if (language->no_language == no_language) {
return language;
}
}
return NULL;
}
enum mbfl_no_language
mbfl_name2no_language(const char *name)
{
const mbfl_language *language;
language = mbfl_name2language(name);
if (language == NULL) {
return mbfl_no_language_invalid;
} else {
return language->no_language;
}
}
const char *
mbfl_no_language2name(enum mbfl_no_language no_language)
{
const mbfl_language *language;
language = mbfl_no2language(no_language);
if (language == NULL) {
return "";
} else {
return language->name;
}
}