From 69ab869079307509a8c2e2ad89d7a163521fb6e4 Mon Sep 17 00:00:00 2001 From: Jules Aguillon Date: Thu, 2 May 2024 20:52:18 +0200 Subject: 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--- srcs/juloo.keyboard2/KeyValue.java | 51 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) (limited to 'srcs/juloo.keyboard2/KeyValue.java') 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 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 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 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 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); } -- cgit v1.2.3