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

27
vi.c
View File

@@ -117,13 +117,16 @@ onsetglide(Str *m)
Emit
transvi(Im *im, Rune c)
{
Emit e;
Emit e, mappedkey;
Str mapped, pre;
int i, tidx, vi, last, penult, glide;
Rune v, b1, b2;
if(!istone(c) && c != 'z')
return transmap(im, c);
mappedkey = transmap(im, c);
if(mappedkey.eat)
return mappedkey;
memset(&e, 0, sizeof e);
if(im->pre.n == 0)
@@ -182,3 +185,25 @@ transvi(Im *im, Rune c)
e.next = mapped;
return e;
}
void
backvi(Im *im)
{
Emit e;
Str raw;
int i;
if(im->raw.n == 0){
spopr(&im->pre);
return;
}
raw = im->raw;
spopr(&raw);
sclear(&im->pre);
for(i = 0; i < raw.n; i++){
e = transvi(im, raw.r[i]);
sclear(&im->pre);
sappend(&im->pre, &e.next);
}
im->raw = raw;
}