engine: Space offers the reading in Katakana last; 0 always commits the reading
Every Japanese IME converts a reading to Katakana on demand; strans made the user switch to the Katakana mode and type again. Space now adds the reading in Katakana after the dictionary candidates, so a loanword the dictionary lacks converts with one Space and Enter, and 漢字 users still get 漢字 first. 0 committed the reading only while candidates showed; without them it typed a 0 as well. It now commits any Japanese reading, the counterpart of 1-9 picking candidates, as the README always said.
This commit is contained in:
@@ -1146,12 +1146,14 @@ engine_japanese_candidates(struct ct *t)
|
||||
CT_CHECK(t, keystroke(' ', 0, &com));
|
||||
CT_EQ_INT(t, 1, im.sel);
|
||||
CT_CHECK(t, keystroke(' ', 0, &com));
|
||||
CT_EQ_INT(t, 2, im.sel);
|
||||
CT_CHECK(t, keystroke(' ', 0, &com));
|
||||
CT_EQ_INT(t, 0, im.sel);
|
||||
CT_CHECK(t, keystroke(' ', Mshift, &com));
|
||||
CT_EQ_INT(t, 1, im.sel);
|
||||
CT_EQ_INT(t, 2, im.sel);
|
||||
CT_CHECK(t, keystroke(Kback, 0, &com));
|
||||
CT_EQ_INT(t, -1, im.sel);
|
||||
CT_EQ_INT(t, 2, im.nkouho);
|
||||
CT_EQ_INT(t, 3, im.nkouho);
|
||||
CT_CHECK(t, keystroke(' ', 0, &com));
|
||||
CT_CHECK(t, keystroke('w', 0, &com));
|
||||
CT_CHECK(t, keystroke('o', 0, &com));
|
||||
@@ -1160,45 +1162,22 @@ engine_japanese_candidates(struct ct *t)
|
||||
checkstr(t, "reading after the candidate", "を", &shown);
|
||||
sclear(&com);
|
||||
CT_CHECK(t, keystroke(' ', 0, &com));
|
||||
checkstr(t, "Space commits a reading without candidates", "を", &com);
|
||||
CT_EQ_INT(t, 0, im.pre.n);
|
||||
CT_EQ_INT(t, 0, im.raw.n);
|
||||
if(CT_EQ_INT(t, 1, im.nkouho))
|
||||
checkstr(t, "Space offers Katakana without candidates", "ヲ",
|
||||
&im.kouho[0]);
|
||||
CT_EQ_INT(t, 0, im.sel);
|
||||
CT_CHECK(t, keystroke(Kret, 0, &com));
|
||||
checkstr(t, "Katakana committed", "ヲ", &com);
|
||||
CT_CHECK(t, !keystroke(' ', 0, &com));
|
||||
sclear(&com);
|
||||
if(!typekeys(t, "kanji", &com))
|
||||
goto cleanup;
|
||||
CT_CHECK(t, keystroke(' ', 0, &com));
|
||||
CT_CHECK(t, keystroke(Kesc, 0, &com));
|
||||
CT_EQ_INT(t, -1, im.sel);
|
||||
impre(&im, &shown);
|
||||
checkstr(t, "Escape goes back to the reading", "かんじ", &shown);
|
||||
CT_CHECK(t, keystroke(Kesc, 0, &com));
|
||||
CT_EQ_INT(t, 0, im.pre.n);
|
||||
CT_EQ_INT(t, 0, im.raw.n);
|
||||
CT_EQ_INT(t, 0, im.nkouho);
|
||||
sclear(&com);
|
||||
if(!typekeys(t, "kanji", &com))
|
||||
goto cleanup;
|
||||
CT_CHECK(t, keystroke(Kdown, 0, &com));
|
||||
CT_CHECK(t, keystroke('s', Mctrl, &com));
|
||||
checkstr(t, "language switch takes the candidate", "漢字", &com);
|
||||
CT_EQ_INT(t, LangKO, im.l->lang);
|
||||
im.l = jp;
|
||||
/* A romaji typo stays in the reading for Backspace to mend. */
|
||||
sclear(&com);
|
||||
if(!typekeys(t, "kanjr", &com))
|
||||
goto cleanup;
|
||||
impre(&im, &shown);
|
||||
checkstr(t, "typo kept", "かんjr", &shown);
|
||||
CT_CHECK(t, keystroke(Kback, 0, &com));
|
||||
impre(&im, &shown);
|
||||
checkstr(t, "typo half mended", "かんj", &shown);
|
||||
CT_CHECK(t, keystroke(Kback, 0, &com));
|
||||
if(!typekeys(t, "ji", &com))
|
||||
goto cleanup;
|
||||
impre(&im, &shown);
|
||||
checkstr(t, "typo mended", "かんじ", &shown);
|
||||
CT_EQ_INT(t, 2, im.nkouho);
|
||||
CT_CHECK(t, keystroke(' ', 0, &com));
|
||||
if(CT_EQ_INT(t, 3, im.nkouho))
|
||||
checkstr(t, "Katakana after the candidates", "カンジ",
|
||||
&im.kouho[2]);
|
||||
CT_CHECK(t, keystroke(Kesc, 0, &com));
|
||||
CT_CHECK(t, keystroke(Kesc, 0, &com));
|
||||
/* SKK's okuri-ari entries convert verbs: stem plus okurigana. */
|
||||
setdict(jp->dict, "かk", "書 描");
|
||||
@@ -1226,6 +1205,47 @@ engine_japanese_candidates(struct ct *t)
|
||||
checkstr(t, "sokuon written in kana", "行った", &im.kouho[1]);
|
||||
}
|
||||
CT_CHECK(t, keystroke(Kesc, 0, &com));
|
||||
/* A romaji typo stays in the reading for Backspace to mend. */
|
||||
if(!typekeys(t, "kanjr", &com))
|
||||
goto cleanup;
|
||||
impre(&im, &shown);
|
||||
checkstr(t, "typo kept", "かんjr", &shown);
|
||||
CT_CHECK(t, keystroke(Kback, 0, &com));
|
||||
impre(&im, &shown);
|
||||
checkstr(t, "typo half mended", "かんj", &shown);
|
||||
CT_CHECK(t, keystroke(Kback, 0, &com));
|
||||
if(!typekeys(t, "ji", &com))
|
||||
goto cleanup;
|
||||
impre(&im, &shown);
|
||||
checkstr(t, "typo mended", "かんじ", &shown);
|
||||
CT_EQ_INT(t, 2, im.nkouho);
|
||||
CT_CHECK(t, keystroke('0', 0, &com));
|
||||
checkstr(t, "0 commits the reading", "かんじ", &com);
|
||||
sclear(&com);
|
||||
if(!typekeys(t, "wo", &com))
|
||||
goto cleanup;
|
||||
CT_CHECK(t, keystroke('0', 0, &com));
|
||||
checkstr(t, "0 commits a reading without candidates", "を", &com);
|
||||
sclear(&com);
|
||||
if(!typekeys(t, "kanji", &com))
|
||||
goto cleanup;
|
||||
CT_CHECK(t, keystroke(' ', 0, &com));
|
||||
CT_CHECK(t, keystroke(Kesc, 0, &com));
|
||||
CT_EQ_INT(t, -1, im.sel);
|
||||
impre(&im, &shown);
|
||||
checkstr(t, "Escape goes back to the reading", "かんじ", &shown);
|
||||
CT_CHECK(t, keystroke(Kesc, 0, &com));
|
||||
CT_EQ_INT(t, 0, im.pre.n);
|
||||
CT_EQ_INT(t, 0, im.raw.n);
|
||||
CT_EQ_INT(t, 0, im.nkouho);
|
||||
sclear(&com);
|
||||
if(!typekeys(t, "kanji", &com))
|
||||
goto cleanup;
|
||||
CT_CHECK(t, keystroke(Kdown, 0, &com));
|
||||
CT_CHECK(t, keystroke('s', Mctrl, &com));
|
||||
checkstr(t, "language switch takes the candidate", "漢字", &com);
|
||||
CT_EQ_INT(t, LangKO, im.l->lang);
|
||||
im.l = jp;
|
||||
/* Backspace looks a complete shorter reading up again. */
|
||||
setdict(jp->dict, "かん", "缶");
|
||||
if(!typekeys(t, "kanji", &com))
|
||||
|
||||
Reference in New Issue
Block a user