diff options
| author | Jules Aguillon | 2024-05-02 20:52:18 +0200 |
|---|---|---|
| committer | GitHub | 2024-05-02 20:52:18 +0200 |
| commit | 69ab869079307509a8c2e2ad89d7a163521fb6e4 (patch) | |
| tree | b1ef2474c67d5ff79f4db743f74e58b21c8a2b93 /srcs/juloo.keyboard2/KeyValue.java | |
| parent | d96414c6c6d995db020ec38556ef2e635574b759 (diff) | |
| download | unexpected-keyboard-69ab869079307509a8c2e2ad89d7a163521fb6e4.tar.gz unexpected-keyboard-69ab869079307509a8c2e2ad89d7a163521fb6e4.zip | |
Hangul support (#595)
* Hangul support
This works with two new kinds of keys (Hangul_initial and Hangul_medial)
that carry a precomposed hangul syllable and act as modifiers.
The hangul syllables are composed algorithmically.
* Add shift layer to Dubeolsik layout
Diffstat (limited to 'srcs/juloo.keyboard2/KeyValue.java')
| -rw-r--r-- | srcs/juloo.keyboard2/KeyValue.java | 51 |
1 files changed, 49 insertions, 2 deletions
diff --git a/srcs/juloo.keyboard2/KeyValue.java b/srcs/juloo.keyboard2/KeyValue.java index 1f00464..8435cae 100644 --- a/srcs/juloo.keyboard2/KeyValue.java +++ b/srcs/juloo.keyboard2/KeyValue.java @@ -86,8 +86,8 @@ public final class KeyValue implements Comparable<KeyValue> public static enum Kind { - Char, String, Keyevent, Event, Compose_pending, Modifier, Editing, - Placeholder, + Char, String, Keyevent, Event, Compose_pending, Hangul_initial, + Hangul_medial, Modifier, Editing, Placeholder, Cursor_move // Value is encoded as a 16-bit integer } @@ -195,6 +195,13 @@ public final class KeyValue implements Comparable<KeyValue> return (_code & VALUE_BITS); } + /** Defined only when [getKind()] is [Kind.Hangul_initial] or + [Kind.Hangul_medial]. */ + public int getHangulPrecomposed() + { + return (_code & VALUE_BITS); + } + /** Defined only when [getKind() == Kind.Cursor_move]. */ public short getCursorMove() { @@ -368,6 +375,25 @@ public final class KeyValue implements Comparable<KeyValue> flags | FLAG_KEY_FONT); } + public static KeyValue makeHangulInitial(String symbol, int initial_idx) + { + return new KeyValue(symbol, Kind.Hangul_initial, initial_idx * 588 + 44032, + FLAG_LATCH); + } + + public static KeyValue makeHangulMedial(int precomposed, int medial_idx) + { + precomposed += medial_idx * 28; + return new KeyValue(String.valueOf((char)precomposed), Kind.Hangul_medial, + precomposed, FLAG_LATCH); + } + + public static KeyValue makeHangulFinal(int precomposed, int final_idx) + { + precomposed += final_idx; + return KeyValue.makeCharKey((char)precomposed); + } + /** Make a key that types a string. A char key is returned for a string of length 1. */ public static KeyValue makeStringKey(String str, int flags) @@ -538,6 +564,27 @@ public final class KeyValue implements Comparable<KeyValue> case "f11_placeholder": return placeholderKey(Placeholder.F11); case "f12_placeholder": return placeholderKey(Placeholder.F12); + // Korean Hangul + case "ㄱ": return makeHangulInitial("ㄱ", 0); + case "ㄲ": return makeHangulInitial("ㄲ", 1); + case "ㄴ": return makeHangulInitial("ㄴ", 2); + case "ㄷ": return makeHangulInitial("ㄷ", 3); + case "ㄸ": return makeHangulInitial("ㄸ", 4); + case "ㄹ": return makeHangulInitial("ㄹ", 5); + case "ㅁ": return makeHangulInitial("ㅁ", 6); + case "ㅂ": return makeHangulInitial("ㅂ", 7); + case "ㅃ": return makeHangulInitial("ㅃ", 8); + case "ㅅ": return makeHangulInitial("ㅅ", 9); + case "ㅆ": return makeHangulInitial("ㅆ", 10); + case "ㅇ": return makeHangulInitial("ㅇ", 11); + case "ㅈ": return makeHangulInitial("ㅈ", 12); + case "ㅉ": return makeHangulInitial("ㅉ", 13); + case "ㅊ": return makeHangulInitial("ㅊ", 14); + case "ㅋ": return makeHangulInitial("ㅋ", 15); + case "ㅌ": return makeHangulInitial("ㅌ", 16); + case "ㅍ": return makeHangulInitial("ㅍ", 17); + case "ㅎ": return makeHangulInitial("ㅎ", 18); + /* Fallback to a string key that types its name */ default: return makeStringKey(name); } |
