#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); } }