engine: じ is keyed j, the letter SKK types it with
okuriletter() puts じ in the z row, so dictqokuri can never build a key ending in j. map/kanji.dict has 17 of them, and 8 have no z twin at all: before after shinjiru 死んじる 信じる 死んじる tojiru (nothing) 綴じる 閉じる tsuujiru (nothing) 通じる shoujiru (nothing) 生じる toujiru 問うじる 投じる 問うじる koujiru 乞うじる 請うじる 高じる 乞うじる 請うじる gozonji 御存知 御存知 御存じ majiru 混じる 先じる 交じる 混じる 信じる, 閉じる, 通じる, 生じる, 投じる, 交じる: the dictionary holds every one and the engine could reach none. What it offered instead was the next split down -- しんじる falls back to しn, so 死んじる is what the popup shows for 信じる, and it is the only candidate. The letter is not ours to choose; it is the one the SKK dictionary was keyed by, which is the one the user typed. Real SKK carries both spellings where both are typed, and here that is 9 of the 17 -- えんj/えんz, かんj/かんz and their kin, identical values on both. Those 8 z rows go unreachable and lose nothing, because their j twin says the same word. ま is the one pair that differs, まj=交 混 against まz=混 先, and both stay reachable: じ takes the j road and ぜ/ず keep the z one. mazeru 混ぜる 先ぜる unchanged kanarazu 必ず ... unchanged mizu 水 見ず unchanged dekizu 出来ず unchanged The z row keeps ざずぜぞ, so nothing that is not じ moves. What this does not cover, deliberately: ち. kanji.dict has 7 keys ending in c, from users who typed "chi", and okuriletter puts ち in the t row. Giving c its own row would have to take ち out of t, and t is where the larger entry lives -- おt is 落 折 負 追 against おc's 落 alone -- so the c rows stay unreachable and lose nothing. づ needed no such choice: it is in the d row, もとd is 基, and もとz is its duplicate.
This commit is contained in:
3
strans.c
3
strans.c
@@ -266,7 +266,8 @@ okuriletter(Rune r)
|
|||||||
{
|
{
|
||||||
static char *rows[] = {
|
static char *rows[] = {
|
||||||
"aあ", "iい", "uう", "eえ", "oお",
|
"aあ", "iい", "uう", "eえ", "oお",
|
||||||
"kかきくけこ", "gがぎぐげご", "sさしすせそ", "zざじずぜぞ",
|
"kかきくけこ", "gがぎぐげご", "sさしすせそ", "zざずぜぞ",
|
||||||
|
"jじ",
|
||||||
"tたちつてとっ", "dだぢづでど", "nなにぬねのん", "hはひふへほ",
|
"tたちつてとっ", "dだぢづでど", "nなにぬねのん", "hはひふへほ",
|
||||||
"bばびぶべぼ", "pぱぴぷぺぽ", "mまみむめも", "yやゆよ",
|
"bばびぶべぼ", "pぱぴぷぺぽ", "mまみむめも", "yやゆよ",
|
||||||
"rらりるれろ", "wわ",
|
"rらりるれろ", "wわ",
|
||||||
|
|||||||
@@ -1282,6 +1282,19 @@ engine_japanese_candidates(struct ct *t)
|
|||||||
checkstr(t, "sokuon written in kana", "行った", &im.kouho[1]);
|
checkstr(t, "sokuon written in kana", "行った", &im.kouho[1]);
|
||||||
}
|
}
|
||||||
CT_CHECK(t, keystroke(Kesc, 0, &com));
|
CT_CHECK(t, keystroke(Kesc, 0, &com));
|
||||||
|
/* じ is keyed j, as SKK types it; ざずぜぞ keep z. */
|
||||||
|
setdict(jp->dict, "しんj", "信");
|
||||||
|
setdict(jp->dict, "まz", "混");
|
||||||
|
if(!typekeys(t, "shinjiru", &com))
|
||||||
|
goto cleanup;
|
||||||
|
if(CT_EQ_INT(t, 1, im.nkouho))
|
||||||
|
checkstr(t, "じ okurigana", "信じる", &im.kouho[0]);
|
||||||
|
CT_CHECK(t, keystroke(Kesc, 0, &com));
|
||||||
|
if(!typekeys(t, "mazeru", &com))
|
||||||
|
goto cleanup;
|
||||||
|
if(CT_EQ_INT(t, 1, im.nkouho))
|
||||||
|
checkstr(t, "ぜ okurigana", "混ぜる", &im.kouho[0]);
|
||||||
|
CT_CHECK(t, keystroke(Kesc, 0, &com));
|
||||||
/* A romaji typo stays in the reading for Backspace to mend. */
|
/* A romaji typo stays in the reading for Backspace to mend. */
|
||||||
if(!typekeys(t, "kanjr", &com))
|
if(!typekeys(t, "kanjr", &com))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|||||||
Reference in New Issue
Block a user