diff --git a/map/english.map b/map/english.map deleted file mode 100644 index e69de29..0000000 diff --git a/map/hangul.map b/map/hangul.map deleted file mode 100644 index e69de29..0000000 diff --git a/strans.c b/strans.c index c1c1e39..5ac1018 100644 --- a/strans.c +++ b/strans.c @@ -18,17 +18,11 @@ struct Search }; static Search search; -static void -backmap(Im *im) -{ - spopr(&im->pre); -} - Lang langs[] = { - {LangEN, "english", nil, transmap, backmap, dictqmap, nil, nil}, + {LangEN, nil, nil, nil, nil, nil, nil, nil}, {LangJP, "hira", "kanji", transmap, backjp, dictqjp, nil, nil}, {LangJPK, "kata", nil, transmap, backjp, dictqjp, nil, nil}, - {LangKO, "hangul", nil, transko, backko, dictqmap, nil, nil}, + {LangKO, nil, nil, transko, backko, nil, nil, nil}, {LangEMOJI, nil, "emoji", nil, nil, nil, nil, nil}, {LangVI, "telex", nil, transvi, backvi, dictqmap, nil, nil}, }; @@ -658,7 +652,8 @@ keystroke(u32int ks, u32int mod, Str *com) reset(); return 1; } - im.l->dictq(&im); + if(im.l->dictq != nil) + im.l->dictq(&im); return 1; } if(ks == Kesc){ @@ -706,6 +701,8 @@ keystroke(u32int ks, u32int mod, Str *com) reset(); return 1; } + if(im.l->trans == nil) + return 0; if(im.l->lang == LangKO) ks = kokey(ks, mod); n = dotrans(ks, com); diff --git a/tests/engine_test.c b/tests/engine_test.c index 390184e..bb6691a 100644 --- a/tests/engine_test.c +++ b/tests/engine_test.c @@ -246,6 +246,38 @@ engine_korean_modifiers_and_backspace(struct ct *t) } } +void +engine_direct_language_modes(struct ct *t) +{ + Str com; + + init(); + sclear(&com); + CT_EQ_INT(t, LangEN, im.l->lang); + CT_EQ_PTR(t, nil, im.l->mapname); + CT_EQ_PTR(t, nil, im.l->map); + CT_EQ_PTR(t, nil, im.l->trans); + CT_CHECK(t, !keystroke('a', 0, &com)); + CT_CHECK(t, !keystroke('Z', Mshift, &com)); + checkstr(t, "English direct commit", "", &com); + CT_EQ_INT(t, 0, im.pre.n); + CT_EQ_INT(t, 0, im.raw.n); + CT_CHECK(t, keystroke('e', Mctrl, &com)); + CT_CHECK(t, search.on); + CT_EQ_INT(t, LangEN, im.l->lang); + CT_CHECK(t, keystroke(Kesc, 0, &com)); + CT_CHECK(t, !search.on); + CT_CHECK(t, keystroke('s', Mctrl, &com)); + CT_EQ_INT(t, LangKO, im.l->lang); + CT_EQ_PTR(t, nil, im.l->mapname); + CT_EQ_PTR(t, nil, im.l->map); + CT_EQ_PTR(t, nil, im.l->dictq); + CT_CHECK(t, keystroke('r', 0, &com)); + checkstr(t, "Korean without map", "ㄱ", &im.pre); + CT_CHECK(t, keystroke(Kback, 0, &com)); + CT_EQ_INT(t, 0, im.pre.n); +} + void engine_language_switch_state(struct ct *t) { diff --git a/tests/test.h b/tests/test.h index 7641cac..91cfcf7 100644 --- a/tests/test.h +++ b/tests/test.h @@ -36,6 +36,7 @@ void engine_commit_contract(struct ct*); void engine_language_switch_state(struct ct*); void engine_telex_history_bound(struct ct*); void engine_korean_modifiers_and_backspace(struct ct*); +void engine_direct_language_modes(struct ct*); void engine_japanese_readings(struct ct*); void engine_japanese_candidates(struct ct*); void engine_japanese_backspace_and_boundaries(struct ct*); diff --git a/tests/unit_test.c b/tests/unit_test.c index 667e509..e857557 100644 --- a/tests/unit_test.c +++ b/tests/unit_test.c @@ -85,6 +85,7 @@ static const struct ct_test tests[] = { { "engine/language-switch-state", engine_language_switch_state }, { "engine/telex-history-bound", engine_telex_history_bound }, { "engine/korean-modifiers-backspace", engine_korean_modifiers_and_backspace }, + { "engine/direct-language-modes", engine_direct_language_modes }, { "engine/japanese-readings", engine_japanese_readings }, { "engine/japanese-candidates", engine_japanese_candidates }, { "engine/japanese-backspace-boundaries", engine_japanese_backspace_and_boundaries },