Riey / kime

Korean IME
GNU General Public License v3.0
518 stars 53 forks source link

Implement 신세벌 #222

Closed simnalamburt closed 3 years ago

simnalamburt commented 3 years ago

Looks like 신세벌 is kind of hot keyboard layout among 세벌식 users, while it's not possible to support with current kime-engine's structure since it requires typing two kinds of character using a single key.

CC @xnuk

Riey commented 3 years ago

What's the most common 신세벌 layout?

simnalamburt commented 3 years ago

뭐가 가장 흔한지는 모르겠는데, "갈마들이"라는 동작을 지원하면 되는 듯 합니다.

Reference

simnalamburt commented 3 years ago

신세벌 is previously implemented in https://gitlab.com/3beol/libhangul/-/blob/master/hangul/hangulkeyboard.c#L1183

xnuk commented 3 years ago

현재 구현된 신세벌식 1995는 이중 모음이 입력 불가능한 이슈가 있습니다.

diff --git a/src/engine/core/tests/sebeolsik_sin1995.rs b/src/engine/core/tests/sebeolsik_sin1995.rs
index dba01d6..8d5adaf 100644
--- a/src/engine/core/tests/sebeolsik_sin1995.rs
+++ b/src/engine/core/tests/sebeolsik_sin1995.rs
@@ -67,3 +67,14 @@ fn hello() {
         (Key::normal(X), "요", ""),
     ]);
 }
+
+#[test]
+fn compose_jungseong() {
+    test_input(&[
+        (Key::normal(J), "ㅇ", ""),
+        (Key::normal(O), "우", ""),
+        (Key::normal(C), "웨", ""),
+        (Key::normal(S), "웬", ""),
+    ])
+}
+
Riey commented 3 years ago

@xnuk 그러면 은 어떻게 입력하나요? 아아 그래서 조합용 모음이 따로 있던 것이였군요 이제 이해했습니다.

xnuk commented 3 years ago

v1.1.2 기준으로 '웬' 다음에 '초'를 입력하지 못하는 문제가 있습니다:

#[test]
fn chocolate() {
    test_input(&[
        (Key::normal(J), "ㅇ", ""),
        (Key::normal(O), "우", ""),
        (Key::normal(C), "웨", ""),
        (Key::normal(S), "웬", ""),
        (Key::normal(O), "ㅊ", "웬"),
        (Key::normal(V), "초", ""),
        (Key::normal(Slash), "ㅋ", "초"),
        (Key::normal(V), "코", ""),
        (Key::normal(W), "콜", ""),
        (Key::normal(Y), "ㄹ", "콜"),
        (Key::normal(D), "리", ""),
        (Key::normal(Q), "릿", ""),
    ]);
}
---- chocolate stdout ----
Key: Key { code: J, state: (empty) }
Key: Key { code: O, state: (empty) }
Key: Key { code: C, state: (empty) }
Key: Key { code: S, state: (empty) }
Key: Key { code: O, state: (empty) }
thread 'chocolate' panicked at 'assertion failed: `(left == right)`
  left: `"ㅊ"`,
 right: `"누"`', src/engine/core/tests/sebeolsik_sin1995.rs:22:13
Riey commented 3 years ago

신세벌 P2 자판을 봤는데 아래아가 있더군요 근데 완성형으로는 아래아가 조합된 글자을 표현할 방법이 없는데 뭔가 해결방법이 있을까요? 이거 때문에 선택적으로 조합형으로 출력 하는건 좀 힘들어 보이는데

xnuk commented 3 years ago

신세벌 P2 자판을 봤는데 아래아가 있더군요 근데 완성형으로는 아래아가 조합된 글자을 표현할 방법이 없는데 뭔가 해결방법이 있을까요? 이거 때문에 선택적으로 조합형으로 출력 하는건 좀 힘들어 보이는데

아직 옛한글 지원 계획이 없으시다면 우선 지원하지 않는 방법(P: ㅍㆍ => ㅍ, I: ㅁㅡ => ㅁㅢ, Z: ㅁㆍ => ㅁ)도 방법일 듯싶습니다. 개인적으로 저는 Z: ㅁㆍ => ㅁㅢ 처럼 사용하고 있습니다.

Riey commented 3 years ago

그러면 P -> ㅍ, I: ㅁㅡ, Z: ㅁㅢ로 대체해서 넣어보겠습니다

Riey commented 3 years ago

이제 남은 문제는 옛한글인데 이건 또 다른 차원의 문제이므로 #341 를 만들고 이 이슈는 닫겠습니다.