61 lines
1.1 KiB
C
61 lines
1.1 KiB
C
#include "test.h"
|
|
|
|
void
|
|
korean_sequences(struct ct *t)
|
|
{
|
|
static const struct { char *keys, *want; } cases[] = {
|
|
{ "r", "ㄱ" },
|
|
{ "rk", "가" },
|
|
{ "rkr", "각" },
|
|
{ "rkrk", "가가" },
|
|
{ "rkrtk", "각사" },
|
|
{ "rhk", "과" },
|
|
{ "rr", "ㄱㄱ" },
|
|
{ "Rk", "까" },
|
|
{ "rk1", "가1" },
|
|
};
|
|
Emit e;
|
|
Im state;
|
|
Str out;
|
|
Rune key;
|
|
char *p;
|
|
int i;
|
|
|
|
for(i = 0; i < nelem(cases); i++){
|
|
memset(&state, 0, sizeof state);
|
|
state.l = getlang(LangKO);
|
|
sclear(&out);
|
|
for(p = cases[i].keys; *p != '\0'; p++){
|
|
key = (uchar)*p;
|
|
e = transko(&state, key);
|
|
sappend(&out, &e.s);
|
|
state.pre = e.next;
|
|
if(!e.eat)
|
|
sputr(&out, key);
|
|
}
|
|
sappend(&out, &state.pre);
|
|
checkstr(t, cases[i].keys, cases[i].want, &out);
|
|
}
|
|
}
|
|
|
|
void
|
|
korean_backspace(struct ct *t)
|
|
{
|
|
static const struct { char *before, *after; } cases[] = {
|
|
{ "ㄱ", "" },
|
|
{ "가", "ㄱ" },
|
|
{ "과", "고" },
|
|
{ "각", "가" },
|
|
{ "갃", "각" },
|
|
};
|
|
Im state;
|
|
int i;
|
|
|
|
memset(&state, 0, sizeof state);
|
|
for(i = 0; i < nelem(cases); i++){
|
|
state.pre = mkstr(cases[i].before);
|
|
backko(&state);
|
|
checkstr(t, cases[i].before, cases[i].after, &state.pre);
|
|
}
|
|
}
|