OSDN Git Service

* Changed Feature.
authorkonn <konn@1a406e8e-add9-4483-a2c8-d8cac5b7c224>
Wed, 3 Dec 2008 05:30:10 +0000 (05:30 +0000)
committerkonn <konn@1a406e8e-add9-4483-a2c8-d8cac5b7c224>
Wed, 3 Dec 2008 05:30:10 +0000 (05:30 +0000)
    - Z2h converter.

git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/modchxj/mod_chxj/branches/RELEASE_0_12_0@4575 1a406e8e-add9-4483-a2c8-d8cac5b7c224

src/chxj_conv_kana.c
test/chxj_conv_kana/test_chxj_conv_kana.c

index 874f37f..7529f03 100644 (file)
 #include "qs_parse_string.h"
 #include <errno.h>
 
-static struct kana_table_t {
+typedef struct {
   apr_size_t byte;
   char *hankaku;
-} kana_table[] = {
+} kana_table_t;
+
+static kana_table_t kana_table1[] = {
   { /* 00 */ 1, "\xa7\x00",},
   { /* 01 */ 1, "\xb1\x00",},
   { /* 02 */ 1, "\xa8\x00",},
@@ -112,6 +114,26 @@ static struct kana_table_t {
   { /* 85 */ 2, "\x83\x95",},
   { /* 86 */ 2, "\x83\x96",},
 };
+static kana_table_t kana_table2[] = {
+  { /* 0x8141 、*/ 1, "\xa4",},
+  { /* 0x8142 。*/ 1, "\xa1",},
+  { /* 0x8143 ,*/ 1, ",",},
+  { /* 0x8144 .*/ 1, ".",},
+  { /* 0x8145 ・*/ 1, "\xa5",},
+  { /* 0x8146 :*/ 1, ":",},
+  { /* 0x8147 ;*/ 1, ";",},
+  { /* 0x8148 ?*/ 1, "?",},
+  { /* 0x8149 !*/ 1, "!",},
+  { /* 0x814a ゛*/ 1, "\xde",},
+  { /* 0x814b ゜*/ 1, "\xdf",},
+};
+static kana_table_t kana_table3[] = {
+  { /* 0x8175 「*/ 1, "\xa2",},
+  { /* 0x8176 」*/ 1, "\xa3",},
+};
+static kana_table_t kana_table4[] = {
+  { /* 0x815b ゛*/ 1, "-",},
+};
 
 /**
  */
@@ -157,13 +179,60 @@ chxj_conv_z2h_kana(request_rec *r, const char *src, apr_size_t *len, chxjconvrul
     else if (is_sjis_kanji(src[ii])) {
       unsigned char firstbyte  = src[ii + 0];
       unsigned char secondbyte = src[ii + 1];
-      unsigned char p = secondbyte - 0x40;
       if (   firstbyte == 0x83
-          && (secondbyte >= 0x40 && secondbyte <= 0x96)
-          && kana_table[p].byte != 0) {
-        /* Detect Zenkakaku Kana */
-        strcpy(&obuf[olen], kana_table[p].hankaku);
-        olen += kana_table[p].byte;
+          && (secondbyte >= 0x40 && secondbyte <= 0x96)) {
+        unsigned char p = secondbyte - 0x40;
+        if (kana_table1[p].byte != 0) {
+          /* Detect Zenkakaku Kana */
+          strcpy(&obuf[olen], kana_table1[p].hankaku);
+          olen += kana_table1[p].byte;
+        }
+        else {
+          obuf[olen++] = src[ii + 0];
+          obuf[olen++] = src[ii + 1];
+        }
+      }
+      else
+      if (   firstbyte == 0x81
+          && (secondbyte >= 0x41 && secondbyte <= 0x4b)) {
+        unsigned char p = secondbyte - 0x41;
+        if (kana_table2[p].byte != 0) {
+          /* Detect Zenkakaku Kana */
+          strcpy(&obuf[olen], kana_table2[p].hankaku);
+          olen += kana_table2[p].byte;
+        }
+        else {
+          obuf[olen++] = src[ii + 0];
+          obuf[olen++] = src[ii + 1];
+        }
+      }
+      else
+      if (   firstbyte == 0x81
+          && (secondbyte >= 0x75 && secondbyte <= 0x76)) {
+        unsigned char p = secondbyte - 0x75;
+        if (kana_table3[p].byte != 0) {
+          /* Detect Zenkakaku Kana */
+          strcpy(&obuf[olen], kana_table3[p].hankaku);
+          olen += kana_table3[p].byte;
+        }
+        else {
+          obuf[olen++] = src[ii + 0];
+          obuf[olen++] = src[ii + 1];
+        }
+      }
+      else
+      if (   firstbyte == 0x81
+          && (secondbyte >= 0x5b && secondbyte <= 0x5b)) {
+        unsigned char p = secondbyte - 0x5b;
+        if (kana_table4[p].byte != 0) {
+          /* Detect Zenkakaku Kana */
+          strcpy(&obuf[olen], kana_table4[p].hankaku);
+          olen += kana_table4[p].byte;
+        }
+        else {
+          obuf[olen++] = src[ii + 0];
+          obuf[olen++] = src[ii + 1];
+        }
       }
       else {
         obuf[olen++] = src[ii + 0];
index 6d9505f..94fab5b 100644 (file)
@@ -152,11 +152,14 @@ void test_conv_kana_001()
 #define  TEST_STRING "ァアィイゥウェエォオカガキギクグケゲコゴ" \
                      "サザシジスズセゼソゾタダチヂッツヅテデトド" \
                      "ナニヌネノハバパヒビピフブプヘベペホボポ" \
-                     "マミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ"
+                     "マミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ" \
+                     "、。,.・:;?!゛゜" \
+                     "゛゜「」ー"
 #define  RESULT_STRING "ァアィイゥウェエォオカガキギクグケゲコゴ" \
                        "サザシジスズセゼソゾタダチヂッツヅテデトド" \
                        "ナニヌネノハバパヒビピフブプヘベペホボポ" \
-                       "マミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ"
+                       "マミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ" \
+                       "、。,.・:;?!゙゚゙゚「」-"
   char  *ret;
   device_table spec;
   chxjconvrule_entry entry;