mbfl_language.c 3.4 KB

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