abouttreesummaryrefslogcommitdiff
path: root/srcs
diff options
context:
space:
mode:
authorJules Aguillon2021-05-08 02:00:47 +0200
committerJules Aguillon2021-05-08 02:00:47 +0200
commit8fb89c5c715edbfc8aa5acd92444cadb17412efb (patch)
tree728725f8a689430ff46327ff6000ca13e3ecff6b /srcs
parent3fbc35135e924e67264b393875fe653c62d5aa31 (diff)
downloadunexpected-keyboard-8fb89c5c715edbfc8aa5acd92444cadb17412efb.tar.gz
unexpected-keyboard-8fb89c5c715edbfc8aa5acd92444cadb17412efb.zip
Improve the numeric keyboard
Diffstat (limited to 'srcs')
-rw-r--r--srcs/juloo.keyboard2/KeyModifier.java108
-rw-r--r--srcs/juloo.keyboard2/KeyValue.java20
2 files changed, 93 insertions, 35 deletions
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);