fix vietnamese telex state
This commit is contained in:
24
strans.c
24
strans.c
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user