diff options
| author | Jules Aguillon | 2021-05-08 02:00:47 +0200 |
|---|---|---|
| committer | Jules Aguillon | 2021-05-08 02:00:47 +0200 |
| commit | 8fb89c5c715edbfc8aa5acd92444cadb17412efb (patch) | |
| tree | 728725f8a689430ff46327ff6000ca13e3ecff6b | |
| parent | 3fbc35135e924e67264b393875fe653c62d5aa31 (diff) | |
| download | unexpected-keyboard-8fb89c5c715edbfc8aa5acd92444cadb17412efb.tar.gz unexpected-keyboard-8fb89c5c715edbfc8aa5acd92444cadb17412efb.zip | |
Improve the numeric keyboard
| -rw-r--r-- | res/xml/numeric.xml | 20 | ||||
| -rw-r--r-- | srcs/juloo.keyboard2/KeyModifier.java | 108 | ||||
| -rw-r--r-- | srcs/juloo.keyboard2/KeyValue.java | 20 |
3 files changed, 103 insertions, 45 deletions
diff --git a/res/xml/numeric.xml b/res/xml/numeric.xml index aeeafe8..0d235bd 100644 --- a/res/xml/numeric.xml +++ b/res/xml/numeric.xml @@ -3,11 +3,11 @@ <row> <key width="0.75" key0="esc" key2="~" key4="!" /> <key width="0.75" key0="(" key2="[" key4="{" /> - <key key0="7" key2="<" key3="home" /> - <key key0="8" /> - <key key0="9" key2="page_up" key3=">" /> - <key width="0.75" key0="*" /> - <key width="0.75" key0="/" key1="%" key3=":" /> + <key key0="7" key3="<" key4=">" /> + <key key0="8" key2="∞" /> + <key key0="9" key2="π" /> + <key width="0.75" key0="*" key1="√" key2="×" /> + <key width="0.75" key0="/" key1="%" key3="÷" /> </row> <row> <key width="0.75" key0="tab" key1=";" key2="|" key4="\\" /> @@ -15,14 +15,14 @@ <key key0="4" /> <key key0="5" key1="up" key2="right" key3="left" key4="down" /> <key key0="6" /> - <key width="0.75" key0="+" key2="$" /> + <key width="0.75" key0="+" key1="Σ" key2="$" /> <key width="0.75" key0="-" key2="^" /> </row> <row> - <key shift="0.35" width="1.15" key0="shift" key4="alt" /> - <key key0="1" key3="end" /> + <key shift="0.35" width="1.15" key0="shift" key2="fn" key4="alt" /> + <key key0="1" key1="superscript" key3="subscript" /> <key key0="2" /> - <key key0="3" key4="page_down" /> + <key key0="3" /> <key width="1.15" key0="backspace" key2="delete" /> </row> <row height="0.95"> @@ -30,6 +30,6 @@ <key width="1.5" key0="0" /> <key width="0.75" key0="." key2="," /> <key width="0.75" key0="space" key1=""" key2="'" key4="_" /> - <key width="1.5" key0="enter" key3="=" /> + <key width="1.5" key0="enter" key2="±" key3="=" /> </row> </keyboard> diff --git a/srcs/juloo.keyboard2/KeyModifier.java b/srcs/juloo.keyboard2/KeyModifier.java index 0d28af4..71ca40f 100644 --- a/srcs/juloo.keyboard2/KeyModifier.java +++ b/srcs/juloo.keyboard2/KeyModifier.java @@ -20,31 +20,43 @@ class KeyModifier KeyValue r = ks.get(flags); if (r != null) // Found in cache return r; - if ((r = handleChar(k, flags)) != null) ; - else if ((r = handleFn(k, flags)) != null) ; - else r = k; + r = k; + r = handleFn(r, flags); + r = handleShift(r, flags); + r = handleAccents(r, flags); ks.put(flags, r); return r; } - /* Returns [null] if had no effect. */ - private static KeyValue handleChar(KeyValue k, int flags) + private static KeyValue handleAccents(KeyValue k, int flags) { + if (k.char_ == KeyValue.CHAR_NONE || (flags & KeyValue.FLAGS_ACCENTS) == 0) + return k; + char c = handleAccentChar(k.char_, flags); + if (c == 0 || c == k.char_) + return k; + return k.withCharAndSymbol(c); + } + + private static KeyValue handleShift(KeyValue k, int flags) + { + if ((flags & KeyValue.FLAG_SHIFT) == 0) + return k; char c = k.char_; - if (c == KeyValue.CHAR_NONE) - return null; - if ((flags & KeyValue.FLAG_SHIFT) != 0) // Shift + if (k.char_ != KeyValue.CHAR_NONE) c = Character.toUpperCase(c); - if ((flags & KeyValue.FLAGS_ACCENTS) != 0) // Accents, after shift is applied - c = handleAccentChar(c, flags); - if (c == 0 || c == k.char_) - return null; - return k.withCharAndSymbol(String.valueOf(c), c); + if (c == k.char_) // More rules if toUpperCase() did nothing + switch (k.symbol) + { + case "→": c = '⇒'; break; + case "←": c = '⇐'; break; + default: return k; + } + return k.withCharAndSymbol(c); } private static char handleAccentChar(char c, int flags) { - char accent; switch ((flags & KeyValue.FLAGS_ACCENTS)) { case KeyValue.FLAG_ACCENT1: @@ -60,6 +72,32 @@ class KeyModifier case KeyValue.FLAG_ACCENT3: switch (c) { + case '*': return '°'; + default: return (char)KeyCharacterMap.getDeadChar('\u02C6', c); + } + case KeyValue.FLAG_ACCENT4: + return (char)KeyCharacterMap.getDeadChar('\u02DC', c); + case KeyValue.FLAG_ACCENT5: + switch (c) + { + case 'u': return 'µ'; + case '"': return '„'; + case '-': return '¬'; + case 'a': return 'æ'; + case 'o': return 'œ'; + default: return (char)KeyCharacterMap.getDeadChar('\u00B8', c); + } + case KeyValue.FLAG_ACCENT6: + switch (c) + { + case '-': return '÷'; + case '?': return '¿'; + case '!': return '¡'; + default: return (char)KeyCharacterMap.getDeadChar('\u00A8', c); + } + case KeyValue.FLAG_ACCENT_SUPERSCRIPT: + switch (c) + { case '1': return '¹'; case '2': return '²'; case '3': return '³'; @@ -70,12 +108,16 @@ class KeyModifier case '8': return '⁸'; case '9': return '⁹'; case '0': return '⁰'; - case '*': return '°'; - default: return (char)KeyCharacterMap.getDeadChar('\u02C6', c); + case 'i': return 'ⁱ'; + case '+': return '⁺'; + case '-': return '⁻'; + case '=': return '⁼'; + case '(': return '⁽'; + case ')': return '⁾'; + case 'n': return 'ⁿ'; + default: return c; } - case KeyValue.FLAG_ACCENT4: - return (char)KeyCharacterMap.getDeadChar('\u02DC', c); - case KeyValue.FLAG_ACCENT5: + case KeyValue.FLAG_ACCENT_SUBSCRIPT: switch (c) { case '1': return '₁'; @@ -88,18 +130,16 @@ class KeyModifier case '8': return '₈'; case '9': return '₉'; case '0': return '₀'; - case 'u': return 'µ'; - case '"': return '„'; - case '-': return '¬'; - default: return (char)KeyCharacterMap.getDeadChar('\u00B8', c); - } - case KeyValue.FLAG_ACCENT6: - switch (c) - { - case '-': return '÷'; - case '?': return '¿'; - case '!': return '¡'; - default: return (char)KeyCharacterMap.getDeadChar('\u00A8', c); + case '+': return '₊'; + case '-': return '₋'; + case '=': return '₌'; + case '(': return '₍'; + case ')': return '₎'; + case 'e': return 'ₑ'; + case 'a': return 'ₐ'; + case 'x': return 'ₓ'; + case 'o': return 'ₒ'; + default: return c; } default: return c; // Can't happen } @@ -108,7 +148,7 @@ class KeyModifier private static KeyValue handleFn(KeyValue k, int flags) { if ((flags & KeyValue.FLAG_FN) == 0) - return null; + return k; String name; switch (k.name) { @@ -126,7 +166,9 @@ class KeyModifier case "down": name = "page_down"; break; case "left": name = "home"; break; case "right": name = "end"; break; - default: return null; + case ">": name = "→"; break; + case "<": name = "←"; break; + default: return k; } return KeyValue.getKeyByName(name); } diff --git a/srcs/juloo.keyboard2/KeyValue.java b/srcs/juloo.keyboard2/KeyValue.java index b35021e..adf096f 100644 --- a/srcs/juloo.keyboard2/KeyValue.java +++ b/srcs/juloo.keyboard2/KeyValue.java @@ -39,9 +39,12 @@ class KeyValue public static final int FLAG_ACCENT4 = (1 << 19); // Tilde public static final int FLAG_ACCENT5 = (1 << 20); // Cédille public static final int FLAG_ACCENT6 = (1 << 21); // Tréma + public static final int FLAG_ACCENT_SUPERSCRIPT = (1 << 22); + public static final int FLAG_ACCENT_SUBSCRIPT = (1 << 23); public static final int FLAGS_ACCENTS = FLAG_ACCENT1 | FLAG_ACCENT2 | - FLAG_ACCENT3 | FLAG_ACCENT4 | FLAG_ACCENT5 | FLAG_ACCENT6; + FLAG_ACCENT3 | FLAG_ACCENT4 | FLAG_ACCENT5 | FLAG_ACCENT6 | + FLAG_ACCENT_SUPERSCRIPT | FLAG_ACCENT_SUBSCRIPT; public final String name; public final String symbol; @@ -49,6 +52,12 @@ class KeyValue public final int eventCode; public final int flags; + /* Update the char and the symbol. */ + public KeyValue withCharAndSymbol(char c) + { + return withCharAndSymbol(String.valueOf(c), c); + } + public KeyValue withCharAndSymbol(String s, char c) { return new KeyValue(name, s, c, eventCode, flags); @@ -67,7 +76,12 @@ class KeyValue public static KeyValue getKeyByName(String name) { - return (KeyValue.keys.get(name)); + if (name == null) + return null; + KeyValue kv = KeyValue.keys.get(name); + if (kv != null) + return kv; + return new KeyValue(name, name, CHAR_NONE, EVENT_NONE, 0); } private static void addKey(String name, String symbol, char c, int event, int flags) @@ -117,6 +131,8 @@ class KeyValue addModifierKey("accent_tilde", "◌̃", FLAG_ACCENT4); addModifierKey("accent_cedille", "◌̧", FLAG_ACCENT5); addModifierKey("accent_trema", "◌̈", FLAG_ACCENT6); + addModifierKey("superscript", "◌͆", FLAG_ACCENT_SUPERSCRIPT); + addModifierKey("subscript", "◌̺", FLAG_ACCENT_SUBSCRIPT); addModifierKey("fn", "Fn", FLAG_FN); addCharKey('a', KeyEvent.KEYCODE_A); |
