mbfl_language.c 3.6 KB

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