engine: the Hanja search composes from its seed, and Escape gives it back
Ctrl+H took the pending syllable as the query, but the keys typed after it started a composition of their own: gk, Ctrl+H, s showed 하ㄴ, and r, Ctrl+H, k showed ㄱㅏ. transstr now composes from a pending text, so the search goes on where the syllable left off. Escape ended the search and dropped the syllable it had taken; it puts it back as pending text.
This commit is contained in:
@@ -1101,7 +1101,7 @@ engine_japanese_readings(struct ct *t)
|
||||
}
|
||||
for(i = 0; i < nelem(replay); i++){
|
||||
raw = mkstr(replay[i].raw);
|
||||
transstr(getlang(LangJP), &raw, &shown);
|
||||
transstr(getlang(LangJP), nil, &raw, &shown);
|
||||
checkstr(t, replay[i].raw, replay[i].want, &shown);
|
||||
}
|
||||
}
|
||||
@@ -1891,6 +1891,25 @@ engine_hanja_backspace(struct ct *t)
|
||||
CT_CHECK(t, keystroke(Kback, 0, &com));
|
||||
CT_EQ_INT(t, 0, search.lang);
|
||||
CT_EQ_INT(t, LangKO, im.l->lang);
|
||||
/* Escape gives the seed back; keys typed compose from it. */
|
||||
if(!typekeys(t, "gks", &com))
|
||||
goto cleanup;
|
||||
CT_CHECK(t, keystroke('h', Mctrl, &com));
|
||||
CT_CHECK(t, keystroke(Kesc, 0, &com));
|
||||
CT_EQ_INT(t, 0, search.lang);
|
||||
checkstr(t, "seed pending again", "한", &im.pre);
|
||||
checkstr(t, "nothing committed", "", &com);
|
||||
CT_CHECK(t, keystroke(Kback, 0, &com));
|
||||
CT_CHECK(t, keystroke('h', Mctrl, &com));
|
||||
checkstr(t, "seed 하", "하", &search.text);
|
||||
CT_CHECK(t, keystroke('s', 0, &com));
|
||||
checkstr(t, "key composes with the seed", "한", &search.text);
|
||||
CT_EQ_INT(t, 2, im.nkouho);
|
||||
CT_CHECK(t, keystroke(Kesc, 0, &com));
|
||||
checkstr(t, "seed alone comes back", "하", &im.pre);
|
||||
CT_CHECK(t, !keystroke(Kesc, 0, &com));
|
||||
checkstr(t, "Korean Escape commits", "하", &com);
|
||||
CT_EQ_INT(t, 0, im.pre.n);
|
||||
cleanup:
|
||||
searchend(&f);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user