diff -u config.h config.h --- config.h 2003-01-18 12:55:33 +0900 +++ config.h 2007-06-16 20:57:41 +0900 @@ -24,6 +24,8 @@ /*#define KUTOUTEN /* "."->maru, ","->ten */ /*#define MORE_ASCII /* insert "?!:;" in ASCII instead of KANJI(ZENKAKU) */ +/*#define NO_TOUTEN /* with KUTOUTEN, ","->comma */ + #ifndef SKKFEP_LIB #define KANJIBS /* do/don't shuft-out BS code in JIS mode */ #define KANJIBS_DEFAULT 0 /* 0 -> shift out / 1 -> don't shift out */ diff -u keymap.c keymap.c --- keymap.c 2003-01-18 12:55:35 +0900 +++ keymap.c 2007-06-16 20:39:16 +0900 @@ -34,9 +34,9 @@ flthru, flthru, flthru, flthru, #endif /* $ % & ' */ - flthru, flthru, flthru, flthru, + flthru, iZenAl, iZenAl, flthru, /* ( ) * + */ - flthru, flthru, flthru, flthru, + iZenAl, iZenAl, iZenAl, iZenAl, /* , - . / */ #ifndef KUTOUTEN iZenAl, iZenEx, iZenAl, kkBegA, @@ -55,12 +55,12 @@ #endif /* < = > ? */ #ifndef MORE_ASCII - flthru, flthru, flthru, iZenAl, + iZenAl, iZenAl, iZenAl, iZenAl, #else flthru, flthru, flthru, flthru, #endif /* @ A B C */ - flthru, kkBegV, kkBegC, kkBegC, + iZenAl, kkBegV, kkBegC, kkBegC, /* D E F G */ kkBegC, kkBegV, kkBegC, kkBegC, /* H I J K */ @@ -88,9 +88,9 @@ /* t u v w */ iKanaC, iKanaV, iKanaC, iKanaC, /* x y z { */ - iKanaC, iKanaC, iKanaC, flthru, + iKanaC, iKanaC, iKanaC, iZenEx, /* | } ~ DEL */ - flthru, flthru, flthru, flthru, + flthru, iZenEx, iZenAl, flthru, }; Keymap ZenkakuKeymap = { @@ -214,7 +214,7 @@ /* L M N O */ kfFixToZenA, kOkuri, kOkuri, kOkuri, /* P Q R S */ - kOkuri, nulcmd, kOkuri, kOkuri, + kOkuri, h2kkana, kOkuri, kOkuri, /* T U V W */ kOkuri, kOkuri, kOkuri, kOkuri, /* X Y Z [ */ diff -u kkconv.c kkconv.c --- kkconv.c 2003-01-18 12:55:35 +0900 +++ kkconv.c 2007-06-16 20:39:31 +0900 @@ -1029,7 +1029,7 @@ #ifdef USE_TRIANGLE kanjiInputMark(0); #endif - hira2kata(WordBuf); + hira2kata(WordBuf, c); writeShells(WordBuf); endKanjiInput(); } @@ -1371,6 +1371,7 @@ RegisterCand->prevcand = NULL; RegisterCand->dicitem = NULL; RegisterCand->candword[0] = '\0'; + return 0; } /* restore saved variables when registe mode ended */ diff -u romkan-org.c romkan-org.c --- romkan-org.c 2003-01-18 12:55:36 +0900 +++ romkan-org.c 2007-06-16 20:58:15 +0900 @@ -2,6 +2,7 @@ #include "fep.h" #include #include "functions.h" +#include #define VOW_A 0 #define VOW_I 1 @@ -94,8 +95,8 @@ {"つぁ","つぃ","つ","つぇ","つぉ"}, /* ts = 35 */ {"ゎ","ゐ","ぅ","ゑ","ぉ"}, /* xw = 36 */ {"う゛ぁ","う゛ぃ","う゛","う゛ぇ","う゛ぉ"}, /* v = 37 */ - {"だぁ","でぃ","どぅ","でぇ","どぉ"}, /* dh = 38 */ - {"てゃ","てぃ","てゅ","てぇ","てょ"}, /* th = 39 */ + {"だぁ","でぃ","でゅ","でぇ","どぉ"}, /* dh = 38 */ + {"てゃ","てぃ","とぅ","てぇ","てょ"}, /* th = 39 */ {"ん","っ","ゐ","ゑ",""}, /* others = 40 */ }; @@ -138,8 +139,8 @@ {"ツァ","ツィ","ツ","ツェ","ツォ"}, {"ヮ","ヰ","ゥ","ヱ","ォ"}, {"ヴァ","ヴィ","ヴ","ヴェ","ヴォ"}, - {"ダァ","ディ","ドゥ","デェ","ドォ"}, - {"テャ","ティ","テュ","テェ","テョ"}, + {"ダァ","ディ","デュ","デェ","ドォ"}, + {"テャ","ティ","トゥ","テェ","テョ"}, {"ン","ッ","ヰ","ヱ",""}, }; @@ -172,8 +173,12 @@ #ifndef KUTOUTEN /* By Y. Kaneko */ char *ExChars[] = {"ー","「","」"}; #else +#ifdef NO_TOUTEN +char *ExChars[] = {"ー","「","」",",","。","・"}; +#else char *ExChars[] = {"ー","「","」","、","。","・"}; #endif +#endif #ifdef NUMCONV char *NumKanji[] = { @@ -487,6 +492,12 @@ case ']': output(ExChars[2]); break; + case '{': + output("『"); + break; + case '}': + output("』"); + break; #ifdef KUTOUTEN case ',': output(ExChars[3]); @@ -593,22 +604,90 @@ } } +static char HanKataTab[] = + "。「」、・をぁぃぅぇぉゃゅょっー" + "あいうえおかきくけこさしすせそたちつてとなにぬねの" + "はひふへほまみむめもやゆよらりるれろわん゛゜"; +#define HANKATA_HIGH 0x8e +#define HANKATA_LOW_START 0xa1 +#define DAKUON 0xa1ab +#define HANDAKUON 0xa1ac + void -hira2kata(buf) -char *buf; +hira2kata(buf, c) +char *buf, c; { int i,j,k; + + /* regularize */ + if (c == 'Q') { + for (i = 0; buf[i] != '¥0'; ) { + if (buf[i] == '/') { + memmove(&buf[i + 2], &buf[i + 1], strlen(&buf[i + 1]) + 1); + strncpy(&buf[i], "・", 2); + i += 2; + } else if ((buf[i] & 0x80) == 0) + i++; + else if (strncmp(&buf[i], ",", 2) == 0) { + strncpy(&buf[i], "、", 2); + i += 2; + } else if (strncmp(&buf[i], ".", 2) == 0) { + strncpy(&buf[i], "。", 2); + i += 2; + } else { + unsigned short c = ((buf[i] & 0xff) << 8) | (buf[i + 1] & 0xff); + unsigned short d = 0; + if (c >= 0xa4d1 && c <= 0xa4dd && c % 3 == 1) { + d = HANDAKUON; + c -= 2; + } else if ((c >= 0xa4ac && c <= 0xa4c2 && c % 2 == 0) || + (c >= 0xa4c5 && c <= 0xa4c9 && c % 2 == 1) || + (c >= 0xa4d0 && c <= 0xa4dc && c % 3 == 0)) { + d = DAKUON; + c--; + } + if (d == 0) + i += 2; + else { + memmove(&buf[i + 4], &buf[i + 2], strlen(&buf[i + 2]) + 1); + buf[i] = c >> 8; + buf[i + 1] = c; + buf[i + 2] = d >> 8; + buf[i + 3] = d; + i += 4; + } + } + } + } + i = 0; while (buf[i]) { if (buf[i] & 0x80) { - for (j = 0; j <= CON_NN; j++) { - for (k = 0; k < 5; k++) { - if (!strncmp(&buf[i],HiraTab[j][k],2)) { - strncpy(&buf[i],KataTab[j][k],2); - goto brk1; - } - } - } + if (c == 'Q') { + for (j = 0; j < sizeof(HanKataTab) - 1; j += 2) + if (strncmp(&buf[i], &HanKataTab[j], 2) == 0) { + buf[i] = HANKATA_HIGH; + buf[i + 1] = HANKATA_LOW_START + j / 2; + break; + } + } else { + /* v */ + if (!strncmp(&buf[i], HiraTab[CON_V][VOW_U], 4)) { + strncpy(&buf[i], KataTab[CON_V][VOW_U], 2); + for (j = i + 2; buf[j + 2] != 0; j++) + buf[j] = buf[j + 2]; + buf[j] = 0; + goto brk1; + } + for (j = 0; j <= CON_NN; j++) { + for (k = 0; k < 5; k++) { + if (!strncmp(&buf[i],HiraTab[j][k],2)) { + strncpy(&buf[i],KataTab[j][k],2); + goto brk1; + } + } + } + } brk1: i += 2; } else