fix vietnamese telex state

This commit is contained in:
2026-08-11 19:34:14 +09:00
parent e70278a3d2
commit 7b40ef419f
6 changed files with 3930 additions and 1371 deletions

View File

@@ -17,7 +17,7 @@ Lang langs[] = {
{LangJPK, "kata", "kanji", transmap, backmap, dictqmap, nil, nil},
{LangKO, "hangul", nil, transko, backko, dictqmap, nil, nil},
{LangEMOJI, "emoji", "emoji", transmap, backmap, dictqmap, nil, nil},
// {LangVI, "telex", nil, transvi, backmap, dictqmap, nil, nil},
{LangVI, "telex", nil, transvi, backvi, dictqmap, nil, nil},
};
int nlang = nelem(langs);
@@ -65,6 +65,7 @@ static void
reset(void)
{
sclear(&im.pre);
sclear(&im.raw);
clearkouho();
show();
}
@@ -115,6 +116,7 @@ commit(Str *com)
else
sappend(com, &im.pre);
sclear(&im.pre);
sclear(&im.raw);
}
static int
@@ -122,8 +124,24 @@ dotrans(Rune c, Str *com)
{
Emit e;
Dictreq req;
Str mapped;
e = im.l->trans(&im, c);
if(im.l->lang == LangVI){
if(e.s.n > 0 || !e.eat)
sclear(&im.raw);
if(e.eat && e.next.n > 0){
if(im.raw.n >= Maxrunes){
if(!mapget(im.l->map, &e.next, &mapped))
mapped = e.next;
sappend(com, &mapped);
reset();
return e.eat;
}
sputr(&im.raw, c);
}
}
clearkouho();
if(e.s.n > 0)
sappend(com, &e.s);
sclear(&im.pre);
@@ -151,7 +169,7 @@ getlang(int lang)
static int
maplookup(Trie *t, Str *key, Str *out)
{
char buf[256], *v;
char buf[Maxutf], *v;
int klen, vlen;
if(key->n == 0)
@@ -341,7 +359,7 @@ imthread(void*)
int
mapget(Trie *t, Str *key, Str *out)
{
char buf[256], *v;
char buf[Maxutf], *v;
int klen, vlen;
if(key->n == 0)