// // Romaji-kana translator // Ver 0.1 15-Mar-2001 // // Time-stamp: <2001-03-15 02:55:29 yuji> // #include #include #include map > Roma; void initRomaTable() { char* table[]= { "a" , "丐" , "i" , "中" , "u" , "丹" , "e" , "尹" , "o" , "云" , "xa" , "丑" , "xi" , "不" , "xu" , "丰" , "xe" , "之" , "xo" , "予" , "ka" , "井" , "ki" , "五" , "ku" , "仁" , "ke" , "仃" , "ko" , "仇" , "ga" , "互" , "gi" , "亢" , "gu" , "什" , "ge" , "仆" , "go" , "仍" , "kya", "五扎", "kyu", "五文", "kye", "五之", "kyo", "五斤", "gya", "亢扎", "gyu", "亢文", "gye", "亢之", "gyo", "亢斤", "kwa", "仁止", "kwi", "仁不", "kwu", "仁" , "kwe", "仁之", "kwo", "仁予", "qa" , "仁丑", "qi" , "仁不", "qu" , "仁" , "qe" , "仁之", "qo" , "仁予", "sa" , "今" , "si" , "仄" , "su" , "允" , "se" , "六" , "so" , "公" , "ca" , "井" , "ci" , "仄" , "cu" , "仁" , "ce" , "六" , "co" , "仇" , "za" , "介" , "zi" , "元" , "zu" , "內" , "ze" , "兮" , "zo" , "冗" , "sya", "仄扎", "syu", "仄文", "sye", "仄之", "syo", "仄斤", "sha", "仄扎", "shi", "仄" , "shu", "仄文", "she", "仄之", "sho", "仄斤", "ja" , "元扎", "ji" , "元" , "ju" , "元文", "je" , "元之", "jo" , "元斤", "jya", "元扎", "jyu", "元文", "jye", "元之", "jyo", "元斤", "zya", "元扎", "zyu", "元文", "zye", "元之", "zyo", "元斤", "ta" , "凶" , "ti" , "切" , "tu" , "勾" , "te" , "化" , "to" , "午" , "da" , "分" , "di" , "刈" , "du" , "勿" , "de" , "匹" , "do" , "升" , "cha", "切扎", "chi", "切" , "chu", "切文", "che", "切之", "cho", "切斤", "dya", "刈扎", "dyi", "匹不", "dyu", "刈文", "dye", "刈之", "dyo", "刈斤", "tya", "切扎", "tyi", "化不", "tyu", "切文", "tye", "切之", "tyo", "切斤", "na" , "卅" , "ni" , "卞" , "nu" , "厄" , "ne" , "友" , "no" , "及" , "nya", "卞扎", "nyu", "卞文", "nye", "卞之", "nyo", "卞斤", "ha" , "反" , "hi" , "夫" , "hu" , "孔" , "he" , "尺" , "ho" , "幻" , "ba" , "壬" , "bi" , "太" , "bu" , "少" , "be" , "屯" , "bo" , "廿" , "pa" , "天" , "pi" , "夭" , "pu" , "尤" , "pe" , "巴" , "po" , "弔" , "hya", "夫扎", "hyu", "夫文", "hye", "夫之", "hyo", "夫斤", "bya", "太扎", "byu", "太文", "bye", "太之", "byo", "太斤", "pya", "夭扎", "pyu", "夭文", "pye", "夭之", "pyo", "夭斤", "ma" , "引" , "mi" , "心" , "mu" , "戈" , "me" , "戶" , "mo" , "手" , "mya", "心扎", "myu", "心文", "mye", "心之", "myo", "心斤", "ya" , "支" , "yi" , "中" , "yu" , "斗" , "ye" , "中之", "yo" , "方" , "ra" , "日" , "ri" , "曰" , "ru" , "月" , "re" , "木" , "ro" , "欠" , "la" , "日" , "li" , "曰" , "lu" , "月" , "le" , "木" , "lo" , "欠" , "rya", "曰扎", "ryu", "曰文", "rye", "曰之", "ryo", "曰斤", "lya", "曰扎", "lyu", "曰文", "lye", "曰之", "lyo", "曰斤", "wa" , "歹" , "wi" , "毋" , "wu" , "丹" , "we" , "比" , "wo" , "毛" , "va" , "任丑", "vi" , "任不", "vu" , "任" , "ve" , "任之", "vo" , "任予", "fa" , "孔丑", "fi" , "孔不", "fu" , "孔" , "fe" , "孔之", "fo" , "孔予", "xtu", "勻" , "xya", "扎" , "xyu", "文" , "xyo", "斤" , "xwa", "止", "xka", "仰" , "xca", "仰" , "xke", "仳" , "nn" , "氏" , "*" }; int idx=0; while( table[idx][0] != '*' ) { Roma[table[idx]] = table[idx+1]; idx+=2; } } // // 1 character romaji // char* romaji(char* kana) { static char res[16]; map::iterator euc; res[0]=0; euc=Roma.find(kana); if ( euc!=Roma.end() ) return euc->second; else { euc=Roma.find(kana+1); if ( kana[0]==kana[1] && euc!=Roma.end() ) { // sokuon strcpy( res, "勻" ); strcat( res, euc->second ); return res; } else if (kana[0]=='n' && euc!=Roma.end() ) { // n+? strcpy( res, "氏" ); strcat( res, euc->second ); return res; } return kana; } } void roma2kana(char* roma, char* res) { const char Boin[]="aiueo"; char kana[1024]; res[0]=kana[0]=0; int len=strlen(roma); for( int idx=0; idx'z') && chr!='-') { strcat( res, kana ); kana[0]=0; } } // 'n' in end if ( strcmp(kana, "n")==0 ) strcat( res, "氏" ); else if (strcmp(kana, "-")==0 ) strcat( res, "□" ); else strcat( res, kana ); } main(int argc, char** argv) { char* roma=argv[1]; char res[1024]; initRomaTable(); roma2kana( roma, res ); cout << res << endl; }