abouttreesummaryrefslogcommitdiff
path: root/srcs/juloo.keyboard2/KeyValue.java
diff options
context:
space:
mode:
authorJules Aguillon2024-05-02 20:52:18 +0200
committerGitHub2024-05-02 20:52:18 +0200
commit69ab869079307509a8c2e2ad89d7a163521fb6e4 (patch)
treeb1ef2474c67d5ff79f4db743f74e58b21c8a2b93 /srcs/juloo.keyboard2/KeyValue.java
parentd96414c6c6d995db020ec38556ef2e635574b759 (diff)
downloadunexpected-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.java51
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);
}