engine: a Hanja reading answers with the words it begins
hanjaquery matched the reading exactly, so a word was reachable only once every syllable of it had been typed, and the popup went blank on the way there. Measured over map/hanja.dict's 187,304 readings: 95,024 proper prefixes of a word answer with nothing today, and 66,731 of those are the keystroke just before the word completes -- 대한민 is one, so 대한민국 looks absent until the last key lands. dictprefix walks the entry at a node before its children, so the reading's own conversions keep their place and the words follow: 34,441 readings gain candidates and none of the 187,304 has its existing order changed. A jamo reading is untouched, since the two keyspaces do not meet and ㅁ has no children. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1104,6 +1104,8 @@ hanjabegin(Searchfix *f, int lang)
|
||||
f->dictlang->dict = trienew();
|
||||
setdict(f->dictlang->dict, "한", "漢 韓");
|
||||
setdict(f->dictlang->dict, "가", "家");
|
||||
setdict(f->dictlang->dict, "민", "民");
|
||||
setdict(f->dictlang->dict, "민국", "民國");
|
||||
init();
|
||||
im.l = getlang(lang);
|
||||
}
|
||||
@@ -1933,6 +1935,32 @@ cleanup:
|
||||
searchend(&f);
|
||||
}
|
||||
|
||||
/*
|
||||
* A reading is the start of the longer words it begins: its own
|
||||
* conversions come first, and past them theirs.
|
||||
*/
|
||||
void
|
||||
engine_hanja_word_prefix(struct ct *t)
|
||||
{
|
||||
Searchfix f;
|
||||
Str com;
|
||||
|
||||
hanjabegin(&f, LangKO);
|
||||
sclear(&com);
|
||||
if(!CT_CHECK(t, keystroke('h', Mctrl, &com)) ||
|
||||
!typekeys(t, "als", &com))
|
||||
goto cleanup;
|
||||
checkstr(t, "the reading typed so far", "민", &search.text);
|
||||
CT_EQ_INT(t, 2, im.nkouho);
|
||||
checkstr(t, "the reading's own conversion", "民", &im.kouho[0]);
|
||||
checkstr(t, "the word it begins", "民國", &im.kouho[1]);
|
||||
CT_CHECK(t, keystroke(Kdown, 0, &com));
|
||||
CT_CHECK(t, keystroke(Kret, 0, &com));
|
||||
checkstr(t, "a word longer than the reading", "民國", &com);
|
||||
cleanup:
|
||||
searchend(&f);
|
||||
}
|
||||
|
||||
void
|
||||
engine_hanja_korean_keys(struct ct *t)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user