From 49944a743e3c9ff7f1b7a71779bde2de24a43597 Mon Sep 17 00:00:00 2001 From: Jules Aguillon Date: Tue, 10 Sep 2024 21:41:09 +0200 Subject: [PATCH] Add Japanese dakuten and handakuten --- srcs/compose/dakuten.json | 44 ++++++++++++++++++++++++ srcs/compose/handakuten.json | 12 +++++++ srcs/juloo.keyboard2/ComposeKeyData.java | 8 +++-- srcs/juloo.keyboard2/KeyModifier.java | 2 ++ srcs/juloo.keyboard2/KeyValue.java | 13 +++++-- 5 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 srcs/compose/dakuten.json create mode 100644 srcs/compose/handakuten.json diff --git a/srcs/compose/dakuten.json b/srcs/compose/dakuten.json new file mode 100644 index 000000000..b3662de1f --- /dev/null +++ b/srcs/compose/dakuten.json @@ -0,0 +1,44 @@ +{ + "う": "ゔ", + "か": "が", + "き": "ぎ", + "く": "ぐ", + "け": "げ", + "こ": "ご", + "さ": "ざ", + "し": "じ", + "す": "ず", + "せ": "ぜ", + "そ": "ぞ", + "た": "だ", + "ち": "ぢ", + "つ": "づ", + "て": "で", + "と": "ど", + "は": "ば", + "ひ": "び", + "ふ": "ぶ", + "へ": "べ", + "ほ": "ぼ", + "ウ": "ヴ", + "カ": "ガ", + "キ": "ギ", + "ク": "グ", + "ケ": "ゲ", + "コ": "ゴ", + "サ": "ザ", + "シ": "ジ", + "ス": "ズ", + "セ": "ゼ", + "ソ": "ゾ", + "タ": "ダ", + "チ": "ヂ", + "ツ": "ヅ", + "テ": "デ", + "ト": "ド", + "ハ": "バ", + "ヒ": "ビ", + "フ": "ブ", + "ヘ": "ベ", + "ホ": "ボ" +} diff --git a/srcs/compose/handakuten.json b/srcs/compose/handakuten.json new file mode 100644 index 000000000..dc9046a03 --- /dev/null +++ b/srcs/compose/handakuten.json @@ -0,0 +1,12 @@ +{ + "は": "ぱ", + "ひ": "ぴ", + "ふ": "ぷ", + "へ": "ぺ", + "ほ": "ぽ", + "ハ": "パ", + "ヒ": "ピ", + "フ": "プ", + "ヘ": "ペ", + "ホ": "ポ" +} diff --git a/srcs/juloo.keyboard2/ComposeKeyData.java b/srcs/juloo.keyboard2/ComposeKeyData.java index 595fdfdc7..1149f540a 100644 --- a/srcs/juloo.keyboard2/ComposeKeyData.java +++ b/srcs/juloo.keyboard2/ComposeKeyData.java @@ -110,7 +110,8 @@ public final class ComposeKeyData "\u2336\u0000/\u22ad\u0000/\u22ae\u0000/\u22af\u0000/\u22ea\u0000/\u22eb\u0000/\u22ec\u0000/\u22ed\u0000_\u2395\u235a\u233a\u0000_\u2378\u0000_\u2379\u0000_\u2376\u0000'/:<=>?\\\u00f7\u2190\u2191\u2192\u2193\u2206\u2207\u2218\u2227\u2228\u2260\u22c4\u25cb\u235e\u2341\u2360\u2343\u2338\u2344\u2370\u2342\u2339\u2347\u2350\u2348\u2357\u234d" + "\u2354\u233b\u2353\u234c\u236f\u233a\u233c\u0000*-.\\_|\u00a8\u2218\u2395\u235f\u2296\u2299\u2349\u235c\u233d\u2365\u233e\u233c\u0000/\u2adc\u0000\u309b\u3094\u0000\u309b\u304c\u0000\u309b\u304e\u0000\u309b\u3050\u0000\u309b\u3052\u0000\u309b\u3054\u0000\u309b\u3056\u0000\u309b\u3058\u0000\u309b\u305a\u0000\u309b\u305c\u0000\u309b\u305e\u0000\u309b\u3060\u0000\u309b\u3062\u0000\u309b\u3065\u0000" + "\u309b\u3067\u0000\u309b\u3069\u0000\u309b\u309c\u3070\u3071\u0000\u309b\u309c\u3073\u3074\u0000\u309b\u309c\u3076\u3077\u0000\u309b\u309c\u3079\u307a\u0000\u309b\u309c\u307c\u307d\u0000\u309b\u30f4\u0000\u309b\u30ac\u0000\u309b\u30ae\u0000\u309b\u30b0\u0000\u309b\u30b2\u0000\u309b\u30b4\u0000\u309b\u30b6\u0000\u309b\u30b8\u0000\u309b\u30ba\u0000\u309b\u30bc\u0000\u309b\u30be\u0000\u309b\u30c0\u0000\u309b\u30c2\u0000\u309b\u30c5" + - "\u0000\u309b\u30c7\u0000\u309b\u30c9\u0000\u309b\u309c\u30d0\u30d1\u0000\u309b\u309c\u30d3\u30d4\u0000\u309b\u309c\u30d6\u30d7\u0000\u309b\u309c\u30d9\u30da\u0000\u309b\u309c\u30dc\u30dd").toCharArray(); + "\u0000\u309b\u30c7\u0000\u309b\u30c9\u0000\u309b\u309c\u30d0\u30d1\u0000\u309b\u309c\u30d3\u30d4\u0000\u309b\u309c\u30d6\u30d7\u0000\u309b\u309c\u30d9\u30da\u0000\u309b\u309c\u30dc\u30dd\u0000\u3046\u304b\u304d\u304f\u3051\u3053\u3055\u3057\u3059\u305b\u305d\u305f\u3061\u3064\u3066\u3068\u306f\u3072\u3075\u3078\u307b\u30a6\u30ab\u30ad\u30af\u30b1\u30b3\u30b5\u30b7\u30b9\u30bb\u30bd\u30bf\u30c1\u30c4\u30c6\u30c8\u30cf\u30d2\u30d5" + + "\u30d8\u30db\u3094\u304c\u304e\u3050\u3052\u3054\u3056\u3058\u305a\u305c\u305e\u3060\u3062\u3065\u3067\u3069\u3070\u3073\u3076\u3079\u307c\u30f4\u30ac\u30ae\u30b0\u30b2\u30b4\u30b6\u30b8\u30ba\u30bc\u30be\u30c0\u30c2\u30c5\u30c7\u30c9\u30d0\u30d3\u30d6\u30d9\u30dc\u0000\u306f\u3072\u3075\u3078\u307b\u30cf\u30d2\u30d5\u30d8\u30db\u3071\u3074\u3077\u307a\u307d\u30d1\u30d4\u30d7\u30da\u30dd").toCharArray(); public static final char[] edges = ("\u0001\u0018\u0019\u001a\u001b\u001c\u001d\u0020\u0021\"\u0023\u0024\u0025\u0026\u0027\u0028\u0029\u002c\u002f\u0032\u0035\u0038\u003b\u003e\u0041\u0001\u0001\u0001\u0001\u0003\u0000\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u000c\u0050\u0051\u0052" + @@ -218,7 +219,8 @@ public final class ComposeKeyData "\u0001\u0002\u1cb3\u0001\u0002\u1cb6\u0001\u0002\u1cb9\u0001\u0002\u1cbc\u0001\u0002\u1cbf\u0001\u0002\u1cc2\u0001\u0002\u1cc5\u0001\u0003\u1cc9\u1cca\u0001\u0001\u0002\u1ccd\u0001\u0002\u1cd0\u0001\u0002\u1cd3\u0001\u0016\u1cea\u1ceb\u1cec\u1ced\u1cee\u1cef\u1cf0\u1cf1\u1cf2\u1cf3\u1cf4\u1cf5\u1cf6\u1cf7\u1cf8\u1cf9\u1cfa\u1cfb\u1cfc\u1cfd\u1cfe\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001" + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\n\u1d09\u1d0a\u1d0b\u1d0c\u1d0d\u1d0e\u1d0f\u1d10\u1d11\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u1d14\u0001\u0002\u1d17\u0001\u0002\u1d1a\u0001\u0002\u1d1d\u0001\u0002\u1d20\u0001\u0002\u1d23\u0001\u0002\u1d26\u0001\u0002\u1d29\u0001\u0002\u1d2c\u0001\u0002\u1d2f\u0001\u0002\u1d32\u0001\u0002\u1d35\u0001\u0002\u1d38\u0001\u0002\u1d3b\u0001\u0002\u1d3e\u0001\u0002" + "\u1d41\u0001\u0002\u1d44\u0001\u0003\u1d48\u1d49\u0001\u0001\u0003\u1d4d\u1d4e\u0001\u0001\u0003\u1d52\u1d53\u0001\u0001\u0003\u1d57\u1d58\u0001\u0001\u0003\u1d5c\u1d5d\u0001\u0001\u0002\u1d60\u0001\u0002\u1d63\u0001\u0002\u1d66\u0001\u0002\u1d69\u0001\u0002\u1d6c\u0001\u0002\u1d6f\u0001\u0002\u1d72\u0001\u0002\u1d75\u0001\u0002\u1d78\u0001\u0002\u1d7b\u0001\u0002\u1d7e\u0001\u0002\u1d81\u0001\u0002\u1d84\u0001\u0002\u1d87\u0001" + - "\u0002\u1d8a\u0001\u0002\u1d8d\u0001\u0003\u1d91\u1d92\u0001\u0001\u0003\u1d96\u1d97\u0001\u0001\u0003\u1d9b\u1d9c\u0001\u0001\u0003\u1da0\u1da1\u0001\u0001\u0003\u1da5\u1da6\u0001\u0001").toCharArray(); + "\u0002\u1d8a\u0001\u0002\u1d8d\u0001\u0003\u1d91\u1d92\u0001\u0001\u0003\u1d96\u1d97\u0001\u0001\u0003\u1d9b\u1d9c\u0001\u0001\u0003\u1da0\u1da1\u0001\u0001\u0003\u1da5\u1da6\u0001\u0001\u002b\u1dd2\u1dd3\u1dd4\u1dd5\u1dd6\u1dd7\u1dd8\u1dd9\u1dda\u1ddb\u1ddc\u1ddd\u1dde\u1ddf\u1de0\u1de1\u1de2\u1de3\u1de4\u1de5\u1de6\u1de7\u1de8\u1de9\u1dea\u1deb\u1dec\u1ded\u1dee\u1def\u1df0\u1df1\u1df2\u1df3\u1df4\u1df5\u1df6\u1df7\u1df8\u1df9" + + "\u1dfa\u1dfb\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u000b\u1e07\u1e08\u1e09\u1e0a\u1e0b\u1e0c\u1e0d\u1e0e\u1e0f\u1e10\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001").toCharArray(); public static final int accent_aigu = 1; public static final int accent_arrows = 68; @@ -243,4 +245,6 @@ public final class ComposeKeyData public static final int accent_tilde = 635; public static final int accent_trema = 658; public static final int compose = 671; + public static final int dakuten = 7591; + public static final int handakuten = 7676; } diff --git a/srcs/juloo.keyboard2/KeyModifier.java b/srcs/juloo.keyboard2/KeyModifier.java index 5763e998e..528da0019 100644 --- a/srcs/juloo.keyboard2/KeyModifier.java +++ b/srcs/juloo.keyboard2/KeyModifier.java @@ -81,6 +81,8 @@ public static KeyValue modify(KeyValue k, KeyValue.Modifier mod) case HORN: return apply_compose(k, ComposeKeyData.accent_horn); case HOOK_ABOVE: return apply_compose(k, ComposeKeyData.accent_hook_above); case ARROW_RIGHT: return apply_map_char(k, map_char_arrow_right); + case DAKUTEN: return apply_compose(k, ComposeKeyData.dakuten); + case HANDAKUTEN: return apply_compose(k, ComposeKeyData.handakuten); default: return k; } } diff --git a/srcs/juloo.keyboard2/KeyValue.java b/srcs/juloo.keyboard2/KeyValue.java index 2a329dfb0..e88a7a340 100644 --- a/srcs/juloo.keyboard2/KeyValue.java +++ b/srcs/juloo.keyboard2/KeyValue.java @@ -44,6 +44,8 @@ public static enum Modifier TREMA, HORN, HOOK_ABOVE, + DAKUTEN, + HANDAKUTEN, SUPERSCRIPT, SUBSCRIPT, RING, @@ -298,10 +300,15 @@ private static KeyValue modifierKey(int symbol, Modifier m, int flags) return modifierKey(String.valueOf((char)symbol), m, flags | FLAG_KEY_FONT); } + private static KeyValue diacritic(String symbol, Modifier m, int flags) + { + return new KeyValue(symbol, Kind.Modifier, m.ordinal(), + FLAG_LATCH | FLAG_SPECIAL | flags); + } + private static KeyValue diacritic(int symbol, Modifier m) { - return new KeyValue(String.valueOf((char)symbol), Kind.Modifier, m.ordinal(), - FLAG_LATCH | FLAG_SPECIAL | FLAG_KEY_FONT); + return diacritic(String.valueOf((char)symbol), m, FLAG_KEY_FONT); } private static KeyValue eventKey(String symbol, Event e, int flags) @@ -448,6 +455,8 @@ public static KeyValue getKeyByName(String name) case "accent_dot_below": return diacritic(0xE060, Modifier.DOT_BELOW); case "accent_horn": return diacritic(0xE061, Modifier.HORN); case "accent_hook_above": return diacritic(0xE062, Modifier.HOOK_ABOVE); + case "dakuten": return diacritic("゛", Modifier.DAKUTEN, 0); + case "handakuten": return diacritic("゜", Modifier.HANDAKUTEN, 0); case "superscript": return modifierKey("Sup", Modifier.SUPERSCRIPT, 0); case "subscript": return modifierKey("Sub", Modifier.SUBSCRIPT, 0); case "ordinal": return modifierKey("Ord", Modifier.ORDINAL, 0);