fix: correct Katakana composition

This commit is contained in:
2026-08-12 15:29:35 +09:00
parent ec7e6eb992
commit 6dfbc08704
5 changed files with 62 additions and 3 deletions

View File

@@ -27,7 +27,7 @@ backmap(Im *im)
Lang langs[] = {
{LangEN, "english", nil, transmap, backmap, dictqmap, nil, nil},
{LangJP, "hira", "kanji", transmap, backjp, dictqjp, nil, nil},
{LangJPK, "kata", "kanji", transmap, backjp, dictqjp, nil, nil},
{LangJPK, "kata", nil, transmap, backjp, dictqjp, nil, nil},
{LangKO, "hangul", nil, transko, backko, dictqmap, nil, nil},
{LangEMOJI, nil, "emoji", nil, nil, nil, nil, nil},
{LangVI, "telex", nil, transvi, backvi, dictqmap, nil, nil},
@@ -213,6 +213,23 @@ backjp(Im *im)
spopr(&im->pre);
}
static int
issmalltsu(Str *s)
{
return s->n == 1 && (s->r[0] == L'' || s->r[0] == L'');
}
static void
keeptail(Str *s)
{
int i;
for(i = 1; i < s->n; i++)
s->r[i-1] = s->r[i];
if(s->n > 0)
s->n--;
}
static int
dotransjp(Rune c, Str *com)
{
@@ -228,8 +245,13 @@ dotransjp(Rune c, Str *com)
key = im.raw;
if(key.n < Maxrunes)
sputr(&key, c);
sclear(&mapped);
if(maplookup(im.l->map, &key, &mapped)){
im.raw = key;
if(issmalltsu(&mapped)){
sappend(&im.pre, &mapped);
keeptail(&im.raw);
}
dictqjp(&im);
return 1;
}