[php-i18n-commits] cvs commit: libmbfl/nls nls_de.c nls_en.c nls_ja.c nls_kr.c nls_ru.c nls_uni.c nls_zh.c

Back to archive index

Moriyoshi Koizumi moriy****@users*****
2002年 12月 31日 (火) 04:37:50 JST


moriyoshi    02/12/31 04:37:50

  Modified:    .        mbfl.def
               mbfl     mbfl_arraylist.h mbfl_collection.h mbfl_language.c
                        mbfl_language.h mbfl_list.h
               nls      nls_de.c nls_en.c nls_ja.c nls_kr.c nls_ru.c
                        nls_uni.c nls_zh.c
  Log:
  Set mbfl_language_id free from hard-coded enums
  
  Revision  Changes    Path
  1.5       +2 -0      libmbfl/mbfl.def
  
  Index: mbfl.def
  ===================================================================
  RCS file: /cvsroot/php-i18n/libmbfl/mbfl.def,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- mbfl.def	30 Dec 2002 19:33:35 -0000	1.4
  +++ mbfl.def	30 Dec 2002 19:37:50 -0000	1.5
  @@ -91,3 +91,5 @@
   	_mbfl_arraylist_ctor @86
   	__mbfl_arraylist_dtor @87
   	_mbfl_iterator_free @88
  +	_mbfl_register_language @89
  +	_mbfl_language_id_uni @90
  
  
  
  1.3       +1 -0      libmbfl/mbfl/mbfl_arraylist.h
  
  Index: mbfl_arraylist.h
  ===================================================================
  RCS file: /cvsroot/php-i18n/libmbfl/mbfl/mbfl_arraylist.h,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- mbfl_arraylist.h	30 Dec 2002 19:02:12 -0000	1.2
  +++ mbfl_arraylist.h	30 Dec 2002 19:37:50 -0000	1.3
  @@ -23,6 +23,7 @@
   #define mbfl_arraylist_remove(a, b, c) mbfl_list_remove(&((a)->_super),(b), (c))
   #define mbfl_arraylist_contains(a, b, c) mbfl_list_contains(&((a)->_super),(b), (c))
   #define mbfl_arraylist_create_iter(a) mbfl_list_create_iter(&((a)->_super))
  +#define mbfl_arraylist_get_num_items(a) mbfl_list_get_num_items(&((a)->_super))
   #define mbfl_arraylist_insert_item_at(a, b, c, d, e) mbfl_list_insert_item_at(&((a)->_super), (b), (c), (d), (e))
   #define mbfl_arraylist_update_item_at(a, b, c, d, e) mbfl_list_update_item_at(&((a)->_super), (b), (c), (d), (e))
   #define mbfl_arraylist_get_item_at(a, b, c, d) mbfl_list_get_item_at(&((a)->_super), (b), (c), (d))
  
  
  
  1.2       +1 -0      libmbfl/mbfl/mbfl_collection.h
  
  Index: mbfl_collection.h
  ===================================================================
  RCS file: /cvsroot/php-i18n/libmbfl/mbfl/mbfl_collection.h,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- mbfl_collection.h	29 Dec 2002 06:41:49 -0000	1.1
  +++ mbfl_collection.h	30 Dec 2002 19:37:50 -0000	1.2
  @@ -28,6 +28,7 @@
   #define mbfl_collection_contains(a, b, c) (a)->contains_op((a), (b), (c))
   #define mbfl_collection_create_iter(a) (a)->create_iter_op((a))
   #define mbfl_collection_dtor(a) (a)->dtor(a)
  +#define mbfl_collection_get_num_items(a) (a)->num_items
   
   MBFLAPI int mbfl_collection_ctor(mbfl_collection *);
   MBFLAPI void _mbfl_collection_dtor(mbfl_collection *);
  
  
  
  1.7       +96 -50    libmbfl/mbfl/mbfl_language.c
  
  Index: mbfl_language.c
  ===================================================================
  RCS file: /cvsroot/php-i18n/libmbfl/mbfl/mbfl_language.c,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- mbfl_language.c	25 Dec 2002 20:54:13 -0000	1.6
  +++ mbfl_language.c	30 Dec 2002 19:37:50 -0000	1.7
  @@ -48,8 +48,12 @@
   #include <strings.h>
   #endif
   
  +#include <assert.h>
  +
   #include "mbfl_encoding.h"
   #include "mbfl_language.h"
  +#include "mbfl_arraylist.h"
  +#include "private.h"
   
   #include "nls/nls_ja.h"
   #include "nls/nls_kr.h"
  @@ -65,70 +69,115 @@
   #endif
   #endif 
   
  +static const mbfl_language * mbfl_get_language_by_name_internal(const char *name, mbfl_language_id *pretval_id);
  +
  +static int mbfl_language_tbl_initialized = 0;
  +static mbfl_arraylist mbfl_language_tbl;
  +
  +MBFLAPI mbfl_language_id mbfl_language_id_uni;
  +
  +int mbfl_language_tbl_init(void)
  +{
  +	int err;
  +
  +	mbfl_arraylist_ctor(&mbfl_language_tbl);
  +	mbfl_language_tbl_initialized = 1;
  +
  +	(err = mbfl_register_language(&mbfl_language_uni, &mbfl_language_id_uni)) ||
  +	(err = mbfl_register_language(&mbfl_language_japanese, NULL)) ||
  +	(err = mbfl_register_language(&mbfl_language_korean, NULL)) ||
  +	(err = mbfl_register_language(&mbfl_language_simplified_chinese, NULL)) ||
  +	(err = mbfl_register_language(&mbfl_language_traditional_chinese, NULL)) ||
  +	(err = mbfl_register_language(&mbfl_language_english, NULL)) ||
  +	(err = mbfl_register_language(&mbfl_language_german, NULL)) ||
  +	(err = mbfl_register_language(&mbfl_language_russian, NULL)) || 1;
  +
  +	return err;
  +}
  +
  +void mbfl_language_tbl_cleanup(void)
  +{
  +	assert(mbfl_language_tbl_initialized);
  +	mbfl_arraylist_dtor(&mbfl_language_tbl);
  +}
  +
  +MBFLAPI int mbfl_register_language(const mbfl_language *lang, mbfl_language_id *plangid)
  +{
  +	int next_id;
   
  -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,
  -	NULL
  -};
  +	assert(mbfl_language_tbl_initialized);
  +
  +	next_id = mbfl_arraylist_get_num_items(&mbfl_language_tbl);
  +
  +	mbfl_arraylist_update_item_at(&mbfl_language_tbl, (void *)&lang, sizeof(lang), NULL, next_id);
  +
  +	if (plangid != NULL) {
  +		*plangid = next_id;
  +	}
  +}
   
   /* language resolver */
  -const mbfl_language * mbfl_get_language_by_name(const char *name)
  +static const mbfl_language * mbfl_get_language_by_name_internal(const char *name, mbfl_language_id *pretval_id)
   {
  -	const mbfl_language *language;
  +	const mbfl_language *retval = NULL;
   	int i, j;
  +	unsigned int dummy;
  +
  +	assert(name != NULL);
   
  -	if (name == NULL) {
  -		return NULL;
  +	if (pretval_id != NULL) {
  +		*pretval_id = mbfl_language_id_invalid;
   	}
   
  -	i = 0;
  -	while ((language = mbfl_language_ptr_table[i++]) != NULL){
  -		if (strcasecmp(language->name, name) == 0) {
  -			return language;
  +	for (i = 0; i < mbfl_arraylist_get_num_items(&mbfl_language_tbl); i++) {
  +		mbfl_language **tmp;
  +		unsigned int sz;
  +
  +		if (mbfl_arraylist_get_item_at(&mbfl_language_tbl, (void **)&tmp, &dummy, i) != 0) {
  +			return NULL;
   		}
  -	}
   
  -	i = 0;
  -	while ((language = mbfl_language_ptr_table[i++]) != NULL){
  -		if (strcasecmp(language->short_name, name) == 0) {
  -			return language;
  +		retval = *tmp;
  +
  +		if (strcasecmp(retval->name, name) == 0) {
  +			if (pretval_id != NULL) {
  +				*pretval_id = i;
  +			}
  +			goto out;
  +		}
  +
  +		if (strcasecmp(retval->short_name, name) == 0) {
  +			if (pretval_id != NULL) {
  +				*pretval_id = i;
  +			}
  +			goto out;
   		}
  -	}
   
  -	/* 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++;
  +		j = 0;
  +		while ((*retval->aliases)[j] != NULL) {
  +			if (strcasecmp((*retval->aliases)[j], name) == 0) {
  +				goto out;
   			}
  +			j++;
   		}
  +		retval = NULL;
   	}
  +out:
  +	return retval;
  +}
   
  -	return NULL;
  +const mbfl_language * mbfl_get_language_by_name(const char *name)
  +{
  +	return mbfl_get_language_by_name_internal(name, NULL);
   }
   
   const mbfl_language * mbfl_get_language_by_id(mbfl_language_id no_language)
   {
  -	const mbfl_language *language;
  -	int i;
  +	const mbfl_language **plang;
  +	unsigned int sz; 
   
  -	i = 0;
  -	while ((language = mbfl_language_ptr_table[i++]) != NULL){
  -		if (language->no_language == no_language) {
  -			return language;
  -		}
  +	if (mbfl_arraylist_get_item_at(&mbfl_language_tbl, (void **)&plang, &sz, no_language) != 0) {
  +		return *plang;
   	}
   
   	return NULL;
  @@ -136,14 +185,11 @@
   
   mbfl_language_id mbfl_language_get_id_by_name(const char *name)
   {
  -	const mbfl_language *language;
  +	mbfl_language_id retval;
   
  -	language = mbfl_get_language_by_name(name);
  -	if (language == NULL) {
  -		return mbfl_language_id_invalid;
  -	} else {
  -		return language->no_language;
  -	}
  +	mbfl_get_language_by_name_internal(name, &retval);
  +
  +	return retval;
   }
   
   const char * mbfl_language_get_name_by_id(mbfl_language_id no_language)
  
  
  
  1.4       +6 -27     libmbfl/mbfl/mbfl_language.h
  
  Index: mbfl_language.h
  ===================================================================
  RCS file: /cvsroot/php-i18n/libmbfl/mbfl/mbfl_language.h,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- mbfl_language.h	25 Dec 2002 18:07:18 -0000	1.3
  +++ mbfl_language.h	30 Dec 2002 19:37:50 -0000	1.4
  @@ -34,39 +34,14 @@
   #include "mbfl_defs.h"
   #include "mbfl_encoding.h"
   
  -enum _mbfl_language_id {
  -	mbfl_language_id_invalid = -1,
  -	mbfl_language_id_neutral,
  -	mbfl_language_id_uni,
  -	mbfl_language_id_min,
  -	mbfl_language_id_catalan,		/* ca */
  -	mbfl_language_id_danish,		/* da */
  -	mbfl_language_id_german,		/* de */
  -	mbfl_language_id_english,		/* en */
  -	mbfl_language_id_estonian,		/* et */
  -	mbfl_language_id_greek,			/* el */
  -	mbfl_language_id_spanish,		/* es */
  -	mbfl_language_id_french,		/* fr */
  -	mbfl_language_id_italian,		/* it */
  -	mbfl_language_id_japanese,		/* ja */
  -	mbfl_language_id_korean,		/* ko */
  -	mbfl_language_id_dutch,			/* nl */
  -	mbfl_language_id_polish,		/* pl */
  -	mbfl_language_id_portuguese,	        /* pt */
  -	mbfl_language_id_swedish,		/* sv */
  -	mbfl_language_id_simplified_chinese,		/* zh-cn */
  -	mbfl_language_id_traditional_chinese,		/* zh-tw */
  -	mbfl_language_id_russian,		/* ru */
  -	mbfl_language_id_max
  -};
  +#define mbfl_language_id_invalid -1
   
  -typedef enum _mbfl_language_id mbfl_language_id;
  +typedef int mbfl_language_id;
   
   /*
    * language
    */
   typedef struct _mbfl_language {
  -	mbfl_language_id no_language;
   	const char *name;
   	const char *short_name;
   	const char *(*aliases)[];
  @@ -74,6 +49,10 @@
   	mbfl_encoding_id mail_header_encoding;
   	mbfl_encoding_id mail_body_encoding;
   } mbfl_language;
  +
  +MBFLAPI mbfl_language_id mbfl_language_id_uni;
  +
  +MBFLAPI int mbfl_register_language(const mbfl_language *lang, mbfl_language_id *plangid);
   
   MBFLAPI extern const mbfl_language * mbfl_get_language_by_name(const char *name);
   MBFLAPI extern const mbfl_language * mbfl_get_language_by_id(mbfl_language_id no_language);
  
  
  
  1.3       +1 -0      libmbfl/mbfl/mbfl_list.h
  
  Index: mbfl_list.h
  ===================================================================
  RCS file: /cvsroot/php-i18n/libmbfl/mbfl/mbfl_list.h,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- mbfl_list.h	30 Dec 2002 19:02:12 -0000	1.2
  +++ mbfl_list.h	30 Dec 2002 19:37:50 -0000	1.3
  @@ -24,6 +24,7 @@
   #define mbfl_list_remove_item(a, b, c) mbfl_collection_remove_item(&((a)->_super),(b), (c))
   #define mbfl_list_contains(a, b, c) mbfl_collection_contains(&((a)->_super),(b), (c))
   #define mbfl_list_create_iter(a) mbfl_collection_create_iter(&((a)->_super))
  +#define mbfl_list_get_num_items(a) mbfl_collection_get_num_items(&((a)->_super))
   #define mbfl_list_insert_item_at(a, b, c, d, e) (a)->insert_item_at_op((a), (b), (c), (d), (e))
   #define mbfl_list_update_item_at(a, b, c, d, e) (a)->update_item_at_op((a), (b), (c), (d), (e))
   #define mbfl_list_get_item_at(a, b, c, d) (a)->get_item_at_op((a), (b), (c), (d))
  
  
  
  1.4       +0 -1      libmbfl/nls/nls_de.c
  
  Index: nls_de.c
  ===================================================================
  RCS file: /cvsroot/php-i18n/libmbfl/nls/nls_de.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- nls_de.c	24 Dec 2002 18:11:12 -0000	1.3
  +++ nls_de.c	30 Dec 2002 19:37:50 -0000	1.4
  @@ -12,7 +12,6 @@
   static const char *mbfl_language_german_aliases[] = {"Deutsch", NULL};
   
   const mbfl_language mbfl_language_german = {
  -	mbfl_language_id_german,
   	"German",
   	"de",
   	(const char *(*)[])&mbfl_language_german_aliases,
  
  
  
  1.4       +0 -1      libmbfl/nls/nls_en.c
  
  Index: nls_en.c
  ===================================================================
  RCS file: /cvsroot/php-i18n/libmbfl/nls/nls_en.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- nls_en.c	24 Dec 2002 18:11:12 -0000	1.3
  +++ nls_en.c	30 Dec 2002 19:37:50 -0000	1.4
  @@ -10,7 +10,6 @@
   #include "nls_en.h"
   
   const mbfl_language mbfl_language_english = {
  -	mbfl_language_id_english,
   	"English",
   	"en",
   	NULL,
  
  
  
  1.4       +0 -1      libmbfl/nls/nls_ja.c
  
  Index: nls_ja.c
  ===================================================================
  RCS file: /cvsroot/php-i18n/libmbfl/nls/nls_ja.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- nls_ja.c	24 Dec 2002 18:11:12 -0000	1.3
  +++ nls_ja.c	30 Dec 2002 19:37:50 -0000	1.4
  @@ -10,7 +10,6 @@
   #include "nls_ja.h"
   
   const mbfl_language mbfl_language_japanese = {
  -	mbfl_language_id_japanese,
   	"Japanese",
   	"ja",
   	NULL,
  
  
  
  1.4       +0 -1      libmbfl/nls/nls_kr.c
  
  Index: nls_kr.c
  ===================================================================
  RCS file: /cvsroot/php-i18n/libmbfl/nls/nls_kr.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- nls_kr.c	24 Dec 2002 18:11:12 -0000	1.3
  +++ nls_kr.c	30 Dec 2002 19:37:50 -0000	1.4
  @@ -10,7 +10,6 @@
   #include "nls_kr.h"
   
   const mbfl_language mbfl_language_korean = {
  -	mbfl_language_id_korean,
   	"Korean",
   	"ko",
   	NULL,
  
  
  
  1.4       +0 -1      libmbfl/nls/nls_ru.c
  
  Index: nls_ru.c
  ===================================================================
  RCS file: /cvsroot/php-i18n/libmbfl/nls/nls_ru.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- nls_ru.c	24 Dec 2002 18:11:12 -0000	1.3
  +++ nls_ru.c	30 Dec 2002 19:37:50 -0000	1.4
  @@ -10,7 +10,6 @@
   #include "nls_ru.h"
   
   const mbfl_language mbfl_language_russian = {
  -	mbfl_language_id_russian,
   	"Russian",
   	"ru",
   	NULL,
  
  
  
  1.4       +0 -1      libmbfl/nls/nls_uni.c
  
  Index: nls_uni.c
  ===================================================================
  RCS file: /cvsroot/php-i18n/libmbfl/nls/nls_uni.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- nls_uni.c	24 Dec 2002 18:12:41 -0000	1.3
  +++ nls_uni.c	30 Dec 2002 19:37:50 -0000	1.4
  @@ -12,7 +12,6 @@
   static const char *mbfl_language_uni_aliases[] = {"universal", NULL};
   
   const mbfl_language mbfl_language_uni = {
  -	mbfl_language_id_uni,
   	"uni",
   	"uni",
   	(const char *(*)[])&mbfl_language_uni_aliases,
  
  
  
  1.4       +0 -2      libmbfl/nls/nls_zh.c
  
  Index: nls_zh.c
  ===================================================================
  RCS file: /cvsroot/php-i18n/libmbfl/nls/nls_zh.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- nls_zh.c	24 Dec 2002 18:11:12 -0000	1.3
  +++ nls_zh.c	30 Dec 2002 19:37:50 -0000	1.4
  @@ -10,7 +10,6 @@
   #include "nls_zh.h"
   
   const mbfl_language mbfl_language_simplified_chinese = {
  -	mbfl_language_id_simplified_chinese,
   	"Simplified Chinese",
   	"zh-cn",
   	NULL,
  @@ -20,7 +19,6 @@
   };
   
   const mbfl_language mbfl_language_traditional_chinese = {
  -	mbfl_language_id_traditional_chinese,
   	"Traditional Chinese",
   	"zh-tw",
   	NULL,
  
  
  



php-i18n-commits メーリングリストの案内
Back to archive index