fix: correct Katakana composition
This commit is contained in:
24
strans.c
24
strans.c
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user