1 /* 2 * romaji_main.c - 3 * 4 * Written By: MURAOKA Taro <koron@tka.att.ne.jp> 5 * Last Change: 21-Sep-2004. 6 */ 7 module romaji_main.romaji_main; 8 9 10 private static import core.stdc.stdio; 11 private static import core.stdc.string; 12 private static import migemo_d.romaji; 13 private static import std.getopt; 14 private static import std.string; 15 16 enum DICTDIR = "../../dict"; 17 enum DICT_ROMA2HIRA = DICTDIR ~ "/roma2hira.dat\0"; 18 enum DICT_HIRA2KATA = DICTDIR ~ "/hira2kata.dat\0"; 19 enum DICT_HAN2ZEN = DICTDIR ~ "/han2zen.dat\0"; 20 enum DICT_ZEN2HAN = DICTDIR ~ "/zen2han.dat\0"; 21 22 nothrow @nogc 23 void query_one(migemo_d.romaji.romaji* object, migemo_d.romaji.romaji* hira2kata, migemo_d.romaji.romaji* han2zen, migemo_d.romaji.romaji* zen2han, char* buf) 24 25 do 26 { 27 /* ローマ字→平仮名(表示)→片仮名(表示) */ 28 char* stop; 29 char* hira = migemo_d.romaji.romaji_convert(object, buf, &stop); 30 31 scope (exit) { 32 if (hira != null) { 33 migemo_d.romaji.romaji_release(object, hira); 34 hira = null; 35 } 36 } 37 38 if (hira != null) { 39 core.stdc.stdio.printf(" hira=%s, stop=%s\n", hira, stop); 40 41 version (all) { 42 char* kata = migemo_d.romaji.romaji_convert2(hira2kata, hira, &stop, 0); 43 44 scope (exit) { 45 if (kata != null) { 46 migemo_d.romaji.romaji_release(hira2kata, kata); 47 kata = null; 48 } 49 } 50 51 if (kata != null) { 52 core.stdc.stdio.printf(" kata=%s, stop=%s\n", kata, stop); 53 char* han = migemo_d.romaji.romaji_convert2(zen2han, kata, &stop, 0); 54 55 scope (exit) { 56 if (han != null) { 57 migemo_d.romaji.romaji_release(zen2han, han); 58 han = null; 59 } 60 } 61 62 if (han != null) { 63 core.stdc.stdio.printf(" han=%s, stop=%s\n", han, stop); 64 } 65 } 66 } 67 } 68 69 version (all) { 70 char* zen = migemo_d.romaji.romaji_convert2(han2zen, buf, &stop, 0); 71 72 scope (exit) { 73 if (zen != null) { 74 migemo_d.romaji.romaji_release(han2zen, zen); 75 zen = null; 76 } 77 } 78 79 if (zen != null) { 80 core.stdc.stdio.printf(" zen=%s, stop=%s\n", zen, stop); 81 } 82 } 83 84 core.stdc.stdio.fflush(core.stdc.stdio.stdout); 85 } 86 87 nothrow @nogc 88 void query_loop(migemo_d.romaji.romaji* object, migemo_d.romaji.romaji* hira2kata, migemo_d.romaji.romaji* han2zen, migemo_d.romaji.romaji* zen2han) 89 90 do 91 { 92 char[256] buf; 93 94 while (true) { 95 core.stdc.stdio.printf("QUERY: "); 96 97 if (!core.stdc.stdio.fgets(&(buf[0]), buf.length, core.stdc.stdio.stdin)) { 98 core.stdc.stdio.printf("\n"); 99 100 break; 101 } 102 103 /* 改行をNUL文字に置き換える */ 104 char* ans = core.stdc..string.strchr(&(buf[0]), '\n'); 105 106 if (ans != null) { 107 *ans = '\0'; 108 } 109 110 .query_one(object, hira2kata, han2zen, zen2han, &(buf[0])); 111 } 112 } 113 114 int main(string[] argv) 115 116 do 117 { 118 migemo_d.romaji.romaji* object = migemo_d.romaji.romaji_open(); 119 migemo_d.romaji.romaji* hira2kata = migemo_d.romaji.romaji_open(); 120 migemo_d.romaji.romaji* han2zen = migemo_d.romaji.romaji_open(); 121 migemo_d.romaji.romaji* zen2han = migemo_d.romaji.romaji_open(); 122 123 scope (exit) { 124 if (zen2han != null) { 125 migemo_d.romaji.romaji_close(zen2han); 126 zen2han = null; 127 } 128 129 if (han2zen != null) { 130 migemo_d.romaji.romaji_close(han2zen); 131 han2zen = null; 132 } 133 134 if (hira2kata != null) { 135 migemo_d.romaji.romaji_close(hira2kata); 136 hira2kata = null; 137 } 138 139 if (object != null) { 140 migemo_d.romaji.romaji_close(object); 141 object = null; 142 } 143 } 144 145 migemo_d.romaji.romaji_set_verbose(zen2han, 1); 146 147 string word = null; 148 149 auto help_info = std.getopt.getopt 150 ( 151 argv, 152 "word|w", &word 153 ); 154 155 if ((object != null) && (hira2kata != null) && (han2zen != null) && (zen2han != null)) { 156 int retval = migemo_d.romaji.romaji_load(object, .DICT_ROMA2HIRA.ptr); 157 core.stdc.stdio.printf("romaji_load(%s)=%d\n", .DICT_ROMA2HIRA.ptr, retval); 158 retval = migemo_d.romaji.romaji_load(hira2kata, .DICT_HIRA2KATA.ptr); 159 core.stdc.stdio.printf("romaji_load(%s)=%d\n", .DICT_HIRA2KATA.ptr, retval); 160 retval = migemo_d.romaji.romaji_load(han2zen, .DICT_HAN2ZEN.ptr); 161 core.stdc.stdio.printf("romaji_load(%s)=%d\n", .DICT_HAN2ZEN.ptr, retval); 162 retval = migemo_d.romaji.romaji_load(zen2han, .DICT_ZEN2HAN.ptr); 163 core.stdc.stdio.printf("romaji_load(%s)=%d\n", .DICT_HAN2ZEN.ptr, retval); 164 165 if (word != null) { 166 .query_one(object, hira2kata, han2zen, zen2han, std..string.toStringz(word)); 167 } else { 168 .query_loop(object, hira2kata, han2zen, zen2han); 169 } 170 } 171 172 return 0; 173 }