fix vietnamese telex state
This commit is contained in:
27
vi.c
27
vi.c
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user