abouttreesummaryrefslogcommitdiff
path: root/srcs
diff options
context:
space:
mode:
Diffstat (limited to 'srcs')
-rw-r--r--srcs/compose/compile.py2
-rw-r--r--srcs/compose/substitutions.json949
-rw-r--r--srcs/juloo.keyboard2/ComposeKey.java27
-rw-r--r--srcs/juloo.keyboard2/ComposeKeyData.java35
-rw-r--r--srcs/juloo.keyboard2/dict/DictionaryListView.java2
-rw-r--r--srcs/juloo.keyboard2/suggestions/Suggestions.java30
6 files changed, 1029 insertions, 16 deletions
diff --git a/srcs/compose/compile.py b/srcs/compose/compile.py
index 69d22ad..efbe714 100644
--- a/srcs/compose/compile.py
+++ b/srcs/compose/compile.py
@@ -198,6 +198,8 @@ def make_automata(tries):
states.append((None, None))
# Add nested nodes and fill the current node
for c in sorted(t.keys()):
+ if len(c) > 1 or ord(c[0]) > 65535:
+ raise Exception("Char out of range: " + c)
states[i] = (c, add_node(t[c]))
i += 1
return this_node_index
diff --git a/srcs/compose/substitutions.json b/srcs/compose/substitutions.json
new file mode 100644
index 0000000..8c242c2
--- /dev/null
+++ b/srcs/compose/substitutions.json
@@ -0,0 +1,949 @@
+{
+ "A": "a",
+ "B": "b",
+ "C": "c",
+ "D": "d",
+ "E": "e",
+ "F": "f",
+ "G": "g",
+ "H": "h",
+ "I": "i",
+ "J": "j",
+ "K": "k",
+ "L": "l",
+ "M": "m",
+ "N": "n",
+ "O": "o",
+ "P": "p",
+ "Q": "q",
+ "R": "r",
+ "S": "s",
+ "T": "t",
+ "U": "u",
+ "V": "v",
+ "W": "w",
+ "X": "x",
+ "Y": "y",
+ "Z": "z",
+ "x": "x",
+ "¢": "c",
+ "£": "l",
+ "¥": "y",
+ "ª": "a",
+ "µ": "u",
+ "º": "o",
+ "À": "a",
+ "Á": "a",
+ "Â": "a",
+ "Ã": "a",
+ "Ä": "a",
+ "Å": "a",
+ "Æ": "a",
+ "Ç": "c",
+ "È": "e",
+ "É": "e",
+ "Ê": "e",
+ "Ë": "e",
+ "Ì": "i",
+ "Í": "i",
+ "Î": "i",
+ "Ï": "i",
+ "Ñ": "n",
+ "Ò": "o",
+ "Ó": "o",
+ "Ô": "o",
+ "Õ": "o",
+ "Ö": "o",
+ "Ø": "o",
+ "Ù": "u",
+ "Ú": "u",
+ "Û": "u",
+ "Ü": "u",
+ "Ý": "y",
+ "à": "a",
+ "á": "a",
+ "â": "a",
+ "ã": "a",
+ "ä": "a",
+ "å": "a",
+ "æ": "a",
+ "ç": "c",
+ "è": "e",
+ "é": "e",
+ "ê": "e",
+ "ë": "e",
+ "ì": "i",
+ "í": "i",
+ "î": "i",
+ "ï": "i",
+ "ñ": "n",
+ "ò": "o",
+ "ó": "o",
+ "ô": "o",
+ "õ": "o",
+ "ö": "o",
+ "ø": "o",
+ "ù": "u",
+ "ú": "u",
+ "û": "u",
+ "ü": "u",
+ "ý": "y",
+ "ÿ": "y",
+ "Ā": "a",
+ "ā": "a",
+ "Ą": "a",
+ "ą": "a",
+ "Ć": "c",
+ "ć": "c",
+ "Ĉ": "c",
+ "ĉ": "c",
+ "Ċ": "c",
+ "ċ": "c",
+ "Č": "c",
+ "č": "c",
+ "Ď": "d",
+ "ď": "d",
+ "Đ": "d",
+ "đ": "d",
+ "Ē": "e",
+ "ē": "e",
+ "Ė": "e",
+ "ė": "e",
+ "Ę": "e",
+ "ę": "e",
+ "Ě": "e",
+ "ě": "e",
+ "Ĝ": "g",
+ "ĝ": "g",
+ "Ġ": "g",
+ "ġ": "g",
+ "Ģ": "g",
+ "ģ": "g",
+ "Ĥ": "h",
+ "ĥ": "h",
+ "Ħ": "h",
+ "ħ": "h",
+ "Ĩ": "i",
+ "ĩ": "i",
+ "Ī": "i",
+ "ī": "i",
+ "Į": "i",
+ "į": "i",
+ "İ": "i",
+ "ı": "i",
+ "Ĵ": "j",
+ "ĵ": "j",
+ "Ķ": "k",
+ "ķ": "k",
+ "Ĺ": "l",
+ "ĺ": "l",
+ "Ļ": "l",
+ "ļ": "l",
+ "Ľ": "l",
+ "ľ": "l",
+ "Ł": "l",
+ "ł": "l",
+ "Ń": "n",
+ "ń": "n",
+ "Ņ": "n",
+ "ņ": "n",
+ "Ň": "n",
+ "ň": "n",
+ "Ō": "o",
+ "ō": "o",
+ "Ő": "o",
+ "ő": "o",
+ "Œ": "o",
+ "œ": "o",
+ "Ŕ": "r",
+ "ŕ": "r",
+ "Ŗ": "r",
+ "ŗ": "r",
+ "Ř": "r",
+ "ř": "r",
+ "Ś": "s",
+ "ś": "s",
+ "Ŝ": "ŝ",
+ "ŝ": "ŝ",
+ "Ş": "s",
+ "ş": "s",
+ "Š": "s",
+ "š": "s",
+ "Ţ": "t",
+ "ţ": "t",
+ "Ť": "t",
+ "ť": "t",
+ "Ŧ": "t",
+ "ŧ": "t",
+ "Ũ": "u",
+ "ũ": "u",
+ "Ū": "u",
+ "ū": "u",
+ "Ů": "u",
+ "ů": "u",
+ "Ű": "u",
+ "ű": "u",
+ "Ų": "u",
+ "ų": "u",
+ "Ŵ": "w",
+ "ŵ": "w",
+ "Ŷ": "y",
+ "ŷ": "y",
+ "Ÿ": "y",
+ "Ź": "z",
+ "ź": "z",
+ "Ż": "z",
+ "ż": "z",
+ "Ž": "z",
+ "ž": "z",
+ "ƀ": "b",
+ "Ɣ": "γ",
+ "Ɨ": "i",
+ "ƚ": "l",
+ "Ɵ": "o",
+ "Ơ": "o",
+ "ơ": "o",
+ "Ʀ": "r",
+ "Ư": "u",
+ "ư": "u",
+ "Ƶ": "z",
+ "ƶ": "z",
+ "Ǎ": "a",
+ "ǎ": "a",
+ "Ǐ": "i",
+ "ǐ": "i",
+ "Ǒ": "o",
+ "ǒ": "o",
+ "Ǔ": "u",
+ "ǔ": "u",
+ "Ǖ": "u",
+ "ǖ": "u",
+ "Ǘ": "u",
+ "ǘ": "u",
+ "Ǚ": "u",
+ "ǚ": "u",
+ "Ǜ": "u",
+ "ǜ": "u",
+ "Ǟ": "a",
+ "ǟ": "a",
+ "Ǡ": "a",
+ "ǡ": "a",
+ "Ǣ": "a",
+ "ǣ": "a",
+ "Ǥ": "g",
+ "ǥ": "g",
+ "Ǧ": "g",
+ "ǧ": "g",
+ "Ǩ": "k",
+ "ǩ": "k",
+ "Ǫ": "o",
+ "ǫ": "o",
+ "Ǭ": "o",
+ "ǭ": "o",
+ "Ǯ": "ʒ",
+ "ǯ": "ʒ",
+ "ǰ": "j",
+ "Ǵ": "g",
+ "ǵ": "g",
+ "Ǹ": "n",
+ "ǹ": "n",
+ "Ǻ": "a",
+ "ǻ": "a",
+ "Ǽ": "a",
+ "ǽ": "a",
+ "Ǿ": "o",
+ "ǿ": "o",
+ "Ȁ": "a",
+ "ȁ": "a",
+ "Ȅ": "e",
+ "ȅ": "e",
+ "Ȉ": "i",
+ "ȉ": "i",
+ "Ȍ": "o",
+ "ȍ": "o",
+ "Ȑ": "r",
+ "ȑ": "r",
+ "Ȕ": "u",
+ "ȕ": "u",
+ "Ȟ": "h",
+ "ȟ": "h",
+ "Ȧ": "a",
+ "ȧ": "a",
+ "Ȩ": "e",
+ "ȩ": "e",
+ "Ȫ": "o",
+ "ȫ": "o",
+ "Ȭ": "o",
+ "ȭ": "o",
+ "Ȯ": "o",
+ "ȯ": "o",
+ "Ȱ": "o",
+ "ȱ": "o",
+ "Ȳ": "y",
+ "ȳ": "y",
+ "ȷ": "j",
+ "Ⱥ": "a",
+ "Ȼ": "c",
+ "ȼ": "c",
+ "Ƚ": "l",
+ "Ⱦ": "t",
+ "Ƀ": "b",
+ "Ʉ": "u",
+ "Ɇ": "e",
+ "ɇ": "e",
+ "Ɉ": "j",
+ "ɉ": "j",
+ "Ɍ": "r",
+ "ɍ": "r",
+ "Ɏ": "y",
+ "ɏ": "y",
+ "ɟ": "j",
+ "ɢ": "g",
+ "ɣ": "γ",
+ "ɨ": "i",
+ "ɪ": "i",
+ "ɴ": "n",
+ "ɵ": "o",
+ "ɶ": "o",
+ "ʀ": "r",
+ "ʉ": "u",
+ "ʏ": "y",
+ "ʙ": "b",
+ "ʛ": "ɠ",
+ "ʜ": "h",
+ "ʟ": "l",
+ "ʰ": "h",
+ "ʱ": "ɦ",
+ "ʲ": "j",
+ "ʳ": "r",
+ "ʴ": "ɹ",
+ "ʵ": "ɻ",
+ "ʶ": "ʁ",
+ "ʷ": "w",
+ "ʸ": "y",
+ "ˠ": "γ",
+ "ˡ": "l",
+ "ˢ": "s",
+ "ˣ": "x",
+ "Ά": "α",
+ "Έ": "ε",
+ "Ή": "η",
+ "Ί": "ι",
+ "Ό": "ο",
+ "Ύ": "υ",
+ "Β": "β",
+ "Ε": "ε",
+ "Θ": "θ",
+ "Κ": "κ",
+ "Μ": "u",
+ "Π": "π",
+ "Ρ": "ρ",
+ "Σ": "σ",
+ "Φ": "φ",
+ "Ϊ": "ι",
+ "Ϋ": "υ",
+ "ά": "α",
+ "έ": "ε",
+ "ή": "η",
+ "ί": "ι",
+ "ΰ": "υ",
+ "ς": "σ",
+ "ϊ": "ι",
+ "ϋ": "υ",
+ "ό": "ο",
+ "ύ": "υ",
+ "ϐ": "β",
+ "ϑ": "θ",
+ "ϒ": "υ",
+ "ϔ": "υ",
+ "ϕ": "φ",
+ "ϖ": "π",
+ "ϰ": "κ",
+ "ϱ": "ρ",
+ "ϴ": "θ",
+ "ϵ": "ε",
+ "Ѐ": "е",
+ "Ђ": "ꙉ",
+ "Ѓ": "г",
+ "Є": "э",
+ "Ѕ": "с",
+ "І": "и",
+ "Ј": "й",
+ "Ћ": "ч",
+ "Ќ": "к",
+ "Ѝ": "и",
+ "Џ": "ҷ",
+ "И": "і",
+ "Й": "ј",
+ "Ч": "ћ",
+ "Ъ": "ь",
+ "Ы": "ꙑ",
+ "Ь": "ъ",
+ "Я": "ꙗ",
+ "и": "і",
+ "й": "ј",
+ "ч": "ћ",
+ "ъ": "ь",
+ "ы": "ꙑ",
+ "ь": "ъ",
+ "я": "ꙗ",
+ "ѐ": "е",
+ "ђ": "ꙉ",
+ "ѓ": "г",
+ "є": "э",
+ "ѕ": "с",
+ "і": "и",
+ "ј": "й",
+ "ћ": "ч",
+ "ќ": "к",
+ "ѝ": "и",
+ "џ": "ҷ",
+ "Ѣ": "е",
+ "ѣ": "е",
+ "Ѧ": "н",
+ "ѧ": "н",
+ "Ѫ": "м",
+ "ѫ": "м",
+ "Ѱ": "ш",
+ "ѱ": "ш",
+ "Ѳ": "ф",
+ "ѳ": "ф",
+ "Ѷ": "ѵ",
+ "ѷ": "ѵ",
+ "Ѻ": "о",
+ "ѻ": "о",
+ "Ҁ": "қ",
+ "ҁ": "қ",
+ "Ҍ": "ь",
+ "ҍ": "ь",
+ "Ґ": "г",
+ "ґ": "г",
+ "Ҙ": "д",
+ "ҙ": "д",
+ "Қ": "ҁ",
+ "қ": "ҁ",
+ "Ұ": "ү",
+ "ұ": "ү",
+ "Ҷ": "џ",
+ "ҷ": "џ",
+ "Һ": "х",
+ "һ": "х",
+ "Ӓ": "а",
+ "ӓ": "а",
+ "Ӛ": "ә",
+ "ӛ": "ә",
+ "Ӝ": "ж",
+ "ӝ": "ж",
+ "Ӟ": "з",
+ "ӟ": "з",
+ "Ӣ": "и",
+ "ӣ": "и",
+ "Ӥ": "и",
+ "ӥ": "и",
+ "Ӧ": "о",
+ "ӧ": "о",
+ "Ө": "о",
+ "ө": "о",
+ "Ӫ": "о",
+ "ӫ": "о",
+ "Ӭ": "э",
+ "ӭ": "э",
+ "Ӯ": "у",
+ "ӯ": "у",
+ "Ӱ": "у",
+ "ӱ": "у",
+ "Ӳ": "у",
+ "ӳ": "у",
+ "Ӵ": "ч",
+ "ӵ": "ч",
+ "Ӹ": "ы",
+ "ӹ": "ы",
+ "Ӿ": "х",
+ "ӿ": "х",
+ "Ԩ": "ӈ",
+ "ԩ": "ӈ",
+ "Ԯ": "л",
+ "ԯ": "л",
+ "ء": "ع",
+ "آ": "ا",
+ "ذ": "د",
+ "ص": "س",
+ "ض": "س",
+ "ط": "ت",
+ "ظ": "ز",
+ "غ": "ق",
+ "ـ": "م",
+ "ك": "ک",
+ "ه": "ھ",
+ "ي": "ی",
+ "ٮ": "ب",
+ "پ": "ث",
+ "ڕ": "ر",
+ "ژ": "ز",
+ "ڡ": "و",
+ "ڤ": "ف",
+ "ک": "ك",
+ "گ": "ق",
+ "ڵ": "ل",
+ "ں": "ن",
+ "ھ": "ه",
+ "ہ": "ح",
+ "ی": "ي",
+ "ं": "म",
+ "ः": "ह",
+ "आ": "अ",
+ "ई": "इ",
+ "ऊ": "उ",
+ "ऍ": "ए",
+ "ऎ": "ए",
+ "ऐ": "ए",
+ "ऑ": "अ",
+ "ऒ": "ओ",
+ "औ": "ओ",
+ "ख": "क",
+ "घ": "ग",
+ "छ": "च",
+ "झ": "ज",
+ "ठ": "ट",
+ "ढ": "ड",
+ "ण": "न",
+ "थ": "त",
+ "ध": "द",
+ "ऩ": "न",
+ "भ": "ब",
+ "ऱ": "र",
+ "ळ": "ल",
+ "ऴ": "ल",
+ "श": "स",
+ "क़": "क",
+ "ख़": "क",
+ "ग़": "ग",
+ "ज़": "ज",
+ "ड़": "ड",
+ "ढ़": "ड",
+ "फ़": "फ",
+ "य़": "य",
+ "ॠ": "ऋ",
+ "ॡ": "ऌ",
+ "ॲ": "अ",
+ "ॳ": "इ",
+ "ॴ": "इ",
+ "ॵ": "ओ",
+ "ॶ": "उ",
+ "ॷ": "उ",
+ "ॸ": "ट",
+ "ॹ": "ज",
+ "ॺ": "व",
+ "ॻ": "ग",
+ "ॼ": "च",
+ "ॽ": "ऽ",
+ "ॾ": "न",
+ "ॿ": "ब",
+ "ં": "મ",
+ "ઃ": "હ",
+ "આ": "અ",
+ "ઈ": "ઇ",
+ "ઊ": "ઉ",
+ "ઐ": "એ",
+ "ઔ": "ઓ",
+ "ખ": "ક",
+ "ઘ": "ગ",
+ "છ": "ચ",
+ "ઝ": "જ",
+ "ઠ": "ટ",
+ "ઢ": "ડ",
+ "ણ": "ન",
+ "થ": "ત",
+ "ધ": "દ",
+ "ફ": "પ",
+ "ભ": "બ",
+ "ળ": "લ",
+ "શ": "સ",
+ "ᴀ": "a",
+ "ᴁ": "a",
+ "ᴃ": "b",
+ "ᴄ": "c",
+ "ᴅ": "d",
+ "ᴆ": "ð",
+ "ᴇ": "e",
+ "ᴊ": "j",
+ "ᴋ": "k",
+ "ᴌ": "l",
+ "ᴍ": "m",
+ "ᴎ": "ŋ",
+ "ᴏ": "o",
+ "ᴐ": "ɔ",
+ "ᴕ": "ȣ",
+ "ᴘ": "p",
+ "ᴙ": "я",
+ "ᴚ": "ɹ",
+ "ᴛ": "t",
+ "ᴜ": "u",
+ "ᴠ": "v",
+ "ᴡ": "w",
+ "ᴢ": "z",
+ "ᴣ": "ʒ",
+ "ᴦ": "γ",
+ "ᴧ": "λ",
+ "ᴨ": "π",
+ "ᴩ": "ρ",
+ "ᴪ": "ψ",
+ "ᴫ": "л",
+ "ᵃ": "a",
+ "ᵄ": "ɐ",
+ "ᵆ": "ᴂ",
+ "ᵇ": "b",
+ "ᵈ": "d",
+ "ᵉ": "e",
+ "ᵊ": "ə",
+ "ᵋ": "ɛ",
+ "ᵌ": "ᴈ",
+ "ᵍ": "g",
+ "ᵎ": "ᴉ",
+ "ᵏ": "k",
+ "ᵐ": "m",
+ "ᵑ": "ŋ",
+ "ᵒ": "o",
+ "ᵓ": "ɔ",
+ "ᵖ": "p",
+ "ᵗ": "t",
+ "ᵘ": "u",
+ "ᵙ": "ᴝ",
+ "ᵚ": "ɯ",
+ "ᵛ": "v",
+ "ᵝ": "β",
+ "ᵟ": "δ",
+ "ᵠ": "φ",
+ "ᵡ": "χ",
+ "ᵢ": "i",
+ "ᵣ": "r",
+ "ᵤ": "u",
+ "ᵥ": "v",
+ "ᵦ": "β",
+ "ᵧ": "γ",
+ "ᵨ": "ρ",
+ "ᵩ": "φ",
+ "ᵪ": "χ",
+ "ᵻ": "i",
+ "ᵽ": "p",
+ "ᵾ": "u",
+ "ᶛ": "ɒ",
+ "ᶜ": "c",
+ "ᶝ": "ɕ",
+ "ᶟ": "ɜ",
+ "ᶠ": "f",
+ "ᶡ": "j",
+ "ᶣ": "ɥ",
+ "ᶤ": "i",
+ "ᶥ": "ι",
+ "ᶬ": "ɱ",
+ "ᶭ": "ɰ",
+ "ᶱ": "o",
+ "ᶳ": "ʂ",
+ "ᶴ": "ʃ",
+ "ᶶ": "u",
+ "ᶷ": "ʊ",
+ "ᶺ": "ʌ",
+ "ᶻ": "z",
+ "ᶾ": "ʒ",
+ "ᶿ": "θ",
+ "Ḃ": "b",
+ "ḃ": "b",
+ "Ḅ": "b",
+ "ḅ": "b",
+ "Ḉ": "c",
+ "ḉ": "c",
+ "Ḋ": "d",
+ "ḋ": "d",
+ "Ḍ": "d",
+ "ḍ": "d",
+ "Ḑ": "d",
+ "ḑ": "d",
+ "Ḕ": "e",
+ "ḕ": "e",
+ "Ḗ": "e",
+ "ḗ": "e",
+ "Ḝ": "ĕ",
+ "ḝ": "ĕ",
+ "Ḟ": "f",
+ "ḟ": "f",
+ "Ḡ": "g",
+ "ḡ": "g",
+ "Ḣ": "h",
+ "ḣ": "h",
+ "Ḥ": "h",
+ "ḥ": "h",
+ "Ḧ": "h",
+ "ḧ": "h",
+ "Ḩ": "h",
+ "ḩ": "h",
+ "Ḯ": "i",
+ "ḯ": "i",
+ "Ḱ": "k",
+ "ḱ": "k",
+ "Ḳ": "k",
+ "ḳ": "k",
+ "Ḷ": "l",
+ "ḷ": "l",
+ "Ḹ": "l",
+ "ḹ": "l",
+ "Ḿ": "m",
+ "ḿ": "m",
+ "Ṁ": "m",
+ "ṁ": "m",
+ "Ṃ": "m",
+ "ṃ": "m",
+ "Ṅ": "n",
+ "ṅ": "n",
+ "Ṇ": "n",
+ "ṇ": "n",
+ "Ṍ": "o",
+ "ṍ": "o",
+ "Ṏ": "o",
+ "ṏ": "o",
+ "Ṑ": "o",
+ "ṑ": "o",
+ "Ṓ": "o",
+ "ṓ": "o",
+ "Ṕ": "p",
+ "ṕ": "p",
+ "Ṗ": "p",
+ "ṗ": "p",
+ "Ṙ": "r",
+ "ṙ": "r",
+ "Ṛ": "r",
+ "ṛ": "r",
+ "Ṝ": "r",
+ "ṝ": "r",
+ "Ṡ": "s",
+ "ṡ": "s",
+ "Ṣ": "s",
+ "ṣ": "s",
+ "Ṥ": "s",
+ "ṥ": "s",
+ "Ṧ": "s",
+ "ṧ": "s",
+ "Ṩ": "s",
+ "ṩ": "s",
+ "Ṫ": "t",
+ "ṫ": "t",
+ "Ṭ": "t",
+ "ṭ": "t",
+ "Ṹ": "u",
+ "ṹ": "u",
+ "Ṽ": "v",
+ "ṽ": "v",
+ "Ṿ": "v",
+ "ṿ": "v",
+ "Ẁ": "w",
+ "ẁ": "w",
+ "Ẃ": "w",
+ "ẃ": "w",
+ "Ẅ": "w",
+ "ẅ": "w",
+ "Ẇ": "w",
+ "ẇ": "w",
+ "Ẉ": "w",
+ "ẉ": "w",
+ "Ẋ": "x",
+ "ẋ": "x",
+ "Ẍ": "x",
+ "ẍ": "x",
+ "Ẏ": "y",
+ "ẏ": "y",
+ "Ẑ": "z",
+ "ẑ": "z",
+ "Ẓ": "z",
+ "ẓ": "z",
+ "ẗ": "t",
+ "ẘ": "w",
+ "ẙ": "y",
+ "ẛ": "ſ",
+ "ẞ": "ß",
+ "Ạ": "a",
+ "ạ": "a",
+ "Ả": "a",
+ "ả": "a",
+ "Ấ": "a",
+ "ấ": "a",
+ "Ầ": "a",
+ "ầ": "a",
+ "Ẩ": "a",
+ "ẩ": "a",
+ "Ẫ": "a",
+ "ẫ": "a",
+ "Ậ": "a",
+ "ậ": "a",
+ "Ắ": "ă",
+ "ắ": "ă",
+ "Ằ": "ă",
+ "ằ": "ă",
+ "Ẳ": "ă",
+ "ẳ": "ă",
+ "Ẵ": "ă",
+ "ẵ": "ă",
+ "Ặ": "ă",
+ "ặ": "ă",
+ "Ẹ": "e",
+ "ẹ": "e",
+ "Ẻ": "e",
+ "ẻ": "e",
+ "Ẽ": "e",
+ "ẽ": "e",
+ "Ế": "e",
+ "ế": "e",
+ "Ề": "e",
+ "ề": "e",
+ "Ể": "e",
+ "ể": "e",
+ "Ễ": "e",
+ "ễ": "e",
+ "Ệ": "e",
+ "ệ": "e",
+ "Ỉ": "i",
+ "ỉ": "i",
+ "Ị": "i",
+ "ị": "i",
+ "Ọ": "o",
+ "ọ": "o",
+ "Ỏ": "o",
+ "ỏ": "o",
+ "Ố": "o",
+ "ố": "o",
+ "Ồ": "o",
+ "ồ": "o",
+ "Ổ": "o",
+ "ổ": "o",
+ "Ỗ": "o",
+ "ỗ": "o",
+ "Ộ": "o",
+ "ộ": "o",
+ "Ớ": "o",
+ "ớ": "o",
+ "Ờ": "o",
+ "ờ": "o",
+ "Ở": "o",
+ "ở": "o",
+ "Ỡ": "o",
+ "ỡ": "o",
+ "Ợ": "o",
+ "ợ": "o",
+ "Ụ": "u",
+ "ụ": "u",
+ "Ủ": "u",
+ "ủ": "u",
+ "Ứ": "u",
+ "ứ": "u",
+ "Ừ": "u",
+ "ừ": "u",
+ "Ử": "u",
+ "ử": "u",
+ "Ữ": "u",
+ "ữ": "u",
+ "Ự": "u",
+ "ự": "u",
+ "Ỳ": "y",
+ "ỳ": "y",
+ "Ỵ": "y",
+ "ỵ": "y",
+ "Ỷ": "y",
+ "ỷ": "y",
+ "Ỹ": "y",
+ "ỹ": "y",
+ "ὰ": "α",
+ "ὲ": "ε",
+ "ὴ": "η",
+ "ὶ": "ι",
+ "ὸ": "ο",
+ "ὺ": "υ",
+ "ὼ": "ω",
+ "ᾱ": "α",
+ "Ᾱ": "α",
+ "Ὰ": "α",
+ "Ὲ": "ε",
+ "Ὴ": "η",
+ "ῑ": "ι",
+ "Ῑ": "ι",
+ "Ὶ": "ι",
+ "ῡ": "υ",
+ "ῢ": "υ",
+ "ῧ": "ῦ",
+ "Ῡ": "υ",
+ "Ὺ": "υ",
+ "Ὸ": "ο",
+ "Ὼ": "ω",
+ "ⁱ": "i",
+ "ⁿ": "n",
+ "ₐ": "a",
+ "ₑ": "e",
+ "ₒ": "o",
+ "ₓ": "x",
+ "ₔ": "ə",
+ "ₕ": "h",
+ "ₖ": "k",
+ "ₗ": "l",
+ "ₘ": "m",
+ "ₙ": "n",
+ "ₚ": "p",
+ "ₛ": "s",
+ "ₜ": "t",
+ "€": "e",
+ "₱": "b",
+ "₴": "h",
+ "₹": "r",
+ "₽": "p",
+ "₿": "z",
+ "∏": "π",
+ "∑": "σ",
+ "␢": "b",
+ "Ᵽ": "p",
+ "ⱥ": "a",
+ "ⱦ": "t",
+ "ⱻ": "ǝ",
+ "ⱼ": "j",
+ "Ꙁ": "з",
+ "ꙁ": "з",
+ "Ꙉ": "ђ",
+ "ꙉ": "ђ",
+ "Ꙋ": "у",
+ "ꙋ": "у",
+ "Ꙍ": "ѡ",
+ "ꙍ": "ѡ",
+ "Ꙑ": "ы",
+ "ꙑ": "ы",
+ "Ꙗ": "я",
+ "ꙗ": "я",
+ "ꜰ": "f",
+ "ꜱ": "s",
+ "Ꝁ": "k",
+ "ꝁ": "k",
+ "Ꝃ": "k",
+ "ꝃ": "k",
+ "Ꝗ": "q",
+ "ꝗ": "q",
+ "Ꝟ": "v",
+ "ꝟ": "v",
+ "ꝶ": "ꝵ",
+ "Ꞓ": "c",
+ "ꞓ": "c",
+ "Ꞙ": "f",
+ "ꞙ": "f",
+ "Ꞡ": "g",
+ "ꞡ": "g",
+ "Ꞥ": "n",
+ "ꞥ": "n",
+ "Ꞧ": "r",
+ "ꞧ": "r",
+ "Ꞩ": "s",
+ "ꞩ": "s",
+ "Ɪ": "i",
+ "ꞯ": "q",
+ "Ꞹ": "u",
+ "ꞹ": "u",
+ "ꟴ": "q",
+ "ꟹ": "o",
+ "ꟺ": "ɯ",
+ "ꬿ": "ɔ",
+ "ꭥ": "ω",
+ "ꭩ": "ʍ"
+} \ No newline at end of file
diff --git a/srcs/juloo.keyboard2/ComposeKey.java b/srcs/juloo.keyboard2/ComposeKey.java
index 5be9597..3d97d69 100644
--- a/srcs/juloo.keyboard2/ComposeKey.java
+++ b/srcs/juloo.keyboard2/ComposeKey.java
@@ -22,14 +22,14 @@ public final class ComposeKey
return null;
}
- /** Apply the pending compose sequence to char [c]. Returns [null] if no
+ /** Apply a char to the pending compose sequence. Returns [null] if no
sequence matched. */
- public static KeyValue apply(int prev, char c)
+ public static KeyValue apply(int state, char c)
{
char[] states = ComposeKeyData.states;
char[] edges = ComposeKeyData.edges;
- int prev_length = edges[prev];
- int next = Arrays.binarySearch(states, prev + 1, prev + prev_length, c);
+ int state_length = edges[state];
+ int next = Arrays.binarySearch(states, state + 1, state + state_length, c);
if (next < 0)
return null;
next = edges[next];
@@ -46,6 +46,25 @@ public final class ComposeKey
return KeyValue.makeCharKey((char)next_header);
}
+ /** Apply char [c] to the pending compose sequence. If the application resolves
+ to a final char state, return it, otherwise return [0]. This is faster
+ than [apply] but do not support sequences of more than 1 char. Used to
+ apply substitutions for word suggestions. */
+ public static char transform_char(int state, char c)
+ {
+ char[] states = ComposeKeyData.states;
+ char[] edges = ComposeKeyData.edges;
+ int state_length = edges[state];
+ int next = Arrays.binarySearch(states, state + 1, state + state_length, c);
+ if (next < 0)
+ return 0;
+ next = edges[next];
+ int next_header = states[next];
+ if (next_header == 0 || next_header == 0xFFFF)
+ return 0;
+ return (char)next_header;
+ }
+
/** Apply each char of a string to a sequence. Returns [null] if no sequence
matched. */
public static KeyValue apply(int prev, String s)
diff --git a/srcs/juloo.keyboard2/ComposeKeyData.java b/srcs/juloo.keyboard2/ComposeKeyData.java
index 8de1228..b7da16c 100644
--- a/srcs/juloo.keyboard2/ComposeKeyData.java
+++ b/srcs/juloo.keyboard2/ComposeKeyData.java
@@ -127,7 +127,22 @@ public final class ComposeKeyData
"\u0bee\u0bef\u0000\u00df\u0131\u01f0\u0237\u02b0\u02b2\u02b3\u02b7\u02e1\u0905\u0907\u0909\u090b\u090c\u090f\u0913\u0915\u0917\u091a\u091c\u091f\u0921\u0924\u0926\u0928\u092c\u092e\u0932\u0938\u0939\u093f\u0941\u0943\u0945\u0947\u0949\u094b\u0952\u0962\u0a85\u0a87\u0a89\u0a8f\u0a93\u0a95\u0a97\u0a9a\u0a9c\u0a9f\u0aa1\u0aa4\u0aa6\u0aa8\u0aaa\u0aac\u0aae\u0ab2\u0ab8\u0ab9\u0abf\u0ac1\u0ac7\u0acb\u0bf9\u1d43\u1d47\u1d48\u1d49\u1d4d" +
"\u1d4f\u1d50\u1d52\u1d56\u1d57\u1d58\u1d5b\u1d60\u1d9c\u1da0\u1dbe\u1e97\u1e98\u1e99\u2071\u207f\u20b9\u2190\u2191\u2192\u2193\u2196\u2197\u2198\u2199\u2208\u220b\u2282\u2283\u2286\u2287\u2500\u2502\u250c\u2510\u2514\u2518\u251c\u2524\u252c\u2534\u253c\ud835\uFFFF\u004a\u030c\uFFFF\u004a\u0307\u1d34\u1d36\u1d3f\u1d42\u1d38\u0906\u0908\u090a\u0910\u0914\u0916\u0918\u091b\u091d\u0920\u0922\u0925\u0927\u0923\u092d\u0902\u0933\u0936" +
"\u0903\u0940\u0942\u0948\u094c\u0951\u0a86\u0a88\u0a8a\u0a90\u0a94\u0a96\u0a98\u0a9b\u0a9d\u0aa0\u0aa2\u0aa5\u0aa7\u0aa3\u0aab\u0aad\u0a82\u0ab3\u0ab6\u0a83\u0ac0\u0ac2\u0ac8\u0acc\u1d2c\u1d2e\u1d30\u1d31\u1d33\u1d37\u1d39\u1d3c\u1d3e\u1d40\u1d41\u2c7d\u1db2\uFFFF\ua7f2\uFFFF\ua7f3\uFFFF\u0054\u0308\uFFFF\u0057\u030a\uFFFF\u0059\u030a\u1d35\u1d3a\u2550\u2551\u2554\u2557\u255a\u255d\u2560\u2563\u2566\u2569\u256c\u0000\udd57\udd58" +
- "\udd64\udd68\udd69\uFFFF\ud835\udd3d\uFFFF\ud835\udd3e\uFFFF\ud835\udd4a\uFFFF\ud835\udd4e\uFFFF\ud835\udd4f").toCharArray();
+ "\udd64\udd68\udd69\uFFFF\ud835\udd3d\uFFFF\ud835\udd3e\uFFFF\ud835\udd4a\uFFFF\ud835\udd4e\uFFFF\ud835\udd4f\u0000ABCDEFGHIJKLMNOPQRSTUVWXYZx\u00a2\u00a3\u00a5\u00aa\u00b5\u00ba\u00c0\u00c1\u00c2\u00c3\u00c4\u00c5\u00c6\u00c7\u00c8\u00c9\u00ca\u00cb\u00cc\u00cd\u00ce\u00cf\u00d1\u00d2\u00d3\u00d4" +
+ "\u00d5\u00d6\u00d8\u00d9\u00da\u00db\u00dc\u00dd\u00e0\u00e1\u00e2\u00e3\u00e4\u00e5\u00e6\u00e7\u00e8\u00e9\u00ea\u00eb\u00ec\u00ed\u00ee\u00ef\u00f1\u00f2\u00f3\u00f4\u00f5\u00f6\u00f8\u00f9\u00fa\u00fb\u00fc\u00fd\u00ff\u0100\u0101\u0104\u0105\u0106\u0107\u0108\u0109\u010a\u010b\u010c\u010d\u010e\u010f\u0110\u0111\u0112\u0113\u0116\u0117\u0118\u0119\u011a\u011b\u011c\u011d\u0120\u0121\u0122\u0123\u0124\u0125\u0126\u0127\u0128" +
+ "\u0129\u012a\u012b\u012e\u012f\u0130\u0131\u0134\u0135\u0136\u0137\u0139\u013a\u013b\u013c\u013d\u013e\u0141\u0142\u0143\u0144\u0145\u0146\u0147\u0148\u014c\u014d\u0150\u0151\u0152\u0153\u0154\u0155\u0156\u0157\u0158\u0159\u015a\u015b\u015c\u015d\u015e\u015f\u0160\u0161\u0162\u0163\u0164\u0165\u0166\u0167\u0168\u0169\u016a\u016b\u016e\u016f\u0170\u0171\u0172\u0173\u0174\u0175\u0176\u0177\u0178\u0179\u017a\u017b\u017c\u017d\u017e" +
+ "\u0180\u0194\u0197\u019a\u019f\u01a0\u01a1\u01a6\u01af\u01b0\u01b5\u01b6\u01cd\u01ce\u01cf\u01d0\u01d1\u01d2\u01d3\u01d4\u01d5\u01d6\u01d7\u01d8\u01d9\u01da\u01db\u01dc\u01de\u01df\u01e0\u01e1\u01e2\u01e3\u01e4\u01e5\u01e6\u01e7\u01e8\u01e9\u01ea\u01eb\u01ec\u01ed\u01ee\u01ef\u01f0\u01f4\u01f5\u01f8\u01f9\u01fa\u01fb\u01fc\u01fd\u01fe\u01ff\u0200\u0201\u0204\u0205\u0208\u0209\u020c\u020d\u0210\u0211\u0214\u0215\u021e\u021f\u0226" +
+ "\u0227\u0228\u0229\u022a\u022b\u022c\u022d\u022e\u022f\u0230\u0231\u0232\u0233\u0237\u023a\u023b\u023c\u023d\u023e\u0243\u0244\u0246\u0247\u0248\u0249\u024c\u024d\u024e\u024f\u025f\u0262\u0263\u0268\u026a\u0274\u0275\u0276\u0280\u0289\u028f\u0299\u029b\u029c\u029f\u02b0\u02b1\u02b2\u02b3\u02b4\u02b5\u02b6\u02b7\u02b8\u02e0\u02e1\u02e2\u02e3\u0386\u0388\u0389\u038a\u038c\u038e\u0392\u0395\u0398\u039a\u039c\u03a0\u03a1\u03a3\u03a6" +
+ "\u03aa\u03ab\u03ac\u03ad\u03ae\u03af\u03b0\u03c2\u03ca\u03cb\u03cc\u03cd\u03d0\u03d1\u03d2\u03d4\u03d5\u03d6\u03f0\u03f1\u03f4\u03f5\u0400\u0402\u0403\u0404\u0405\u0406\u0408\u040b\u040c\u040d\u040f\u0418\u0419\u0427\u042a\u042b\u042c\u042f\u0438\u0439\u0447\u044a\u044b\u044c\u044f\u0450\u0452\u0453\u0454\u0455\u0456\u0458\u045b\u045c\u045d\u045f\u0462\u0463\u0466\u0467\u046a\u046b\u0470\u0471\u0472\u0473\u0476\u0477\u047a\u047b" +
+ "\u0480\u0481\u048c\u048d\u0490\u0491\u0498\u0499\u049a\u049b\u04b0\u04b1\u04b6\u04b7\u04ba\u04bb\u04d2\u04d3\u04da\u04db\u04dc\u04dd\u04de\u04df\u04e2\u04e3\u04e4\u04e5\u04e6\u04e7\u04e8\u04e9\u04ea\u04eb\u04ec\u04ed\u04ee\u04ef\u04f0\u04f1\u04f2\u04f3\u04f4\u04f5\u04f8\u04f9\u04fe\u04ff\u0528\u0529\u052e\u052f\u0621\u0622\u0630\u0635\u0636\u0637\u0638\u063a\u0640\u0643\u0647\u064a\u066e\u067e\u0695\u0698\u06a1\u06a4\u06a9\u06af" +
+ "\u06b5\u06ba\u06be\u06c1\u06cc\u0902\u0903\u0906\u0908\u090a\u090d\u090e\u0910\u0911\u0912\u0914\u0916\u0918\u091b\u091d\u0920\u0922\u0923\u0925\u0927\u0929\u092d\u0931\u0933\u0934\u0936\u0958\u0959\u095a\u095b\u095c\u095d\u095e\u095f\u0960\u0961\u0972\u0973\u0974\u0975\u0976\u0977\u0978\u0979\u097a\u097b\u097c\u097d\u097e\u097f\u0a82\u0a83\u0a86\u0a88\u0a8a\u0a90\u0a94\u0a96\u0a98\u0a9b\u0a9d\u0aa0\u0aa2\u0aa3\u0aa5\u0aa7\u0aab" +
+ "\u0aad\u0ab3\u0ab6\u1d00\u1d01\u1d03\u1d04\u1d05\u1d06\u1d07\u1d0a\u1d0b\u1d0c\u1d0d\u1d0e\u1d0f\u1d10\u1d15\u1d18\u1d19\u1d1a\u1d1b\u1d1c\u1d20\u1d21\u1d22\u1d23\u1d26\u1d27\u1d28\u1d29\u1d2a\u1d2b\u1d43\u1d44\u1d46\u1d47\u1d48\u1d49\u1d4a\u1d4b\u1d4c\u1d4d\u1d4e\u1d4f\u1d50\u1d51\u1d52\u1d53\u1d56\u1d57\u1d58\u1d59\u1d5a\u1d5b\u1d5d\u1d5f\u1d60\u1d61\u1d62\u1d63\u1d64\u1d65\u1d66\u1d67\u1d68\u1d69\u1d6a\u1d7b\u1d7d\u1d7e\u1d9b" +
+ "\u1d9c\u1d9d\u1d9f\u1da0\u1da1\u1da3\u1da4\u1da5\u1dac\u1dad\u1db1\u1db3\u1db4\u1db6\u1db7\u1dba\u1dbb\u1dbe\u1dbf\u1e02\u1e03\u1e04\u1e05\u1e08\u1e09\u1e0a\u1e0b\u1e0c\u1e0d\u1e10\u1e11\u1e14\u1e15\u1e16\u1e17\u1e1c\u1e1d\u1e1e\u1e1f\u1e20\u1e21\u1e22\u1e23\u1e24\u1e25\u1e26\u1e27\u1e28\u1e29\u1e2e\u1e2f\u1e30\u1e31\u1e32\u1e33\u1e36\u1e37\u1e38\u1e39\u1e3e\u1e3f\u1e40\u1e41\u1e42\u1e43\u1e44\u1e45\u1e46\u1e47\u1e4c\u1e4d\u1e4e" +
+ "\u1e4f\u1e50\u1e51\u1e52\u1e53\u1e54\u1e55\u1e56\u1e57\u1e58\u1e59\u1e5a\u1e5b\u1e5c\u1e5d\u1e60\u1e61\u1e62\u1e63\u1e64\u1e65\u1e66\u1e67\u1e68\u1e69\u1e6a\u1e6b\u1e6c\u1e6d\u1e78\u1e79\u1e7c\u1e7d\u1e7e\u1e7f\u1e80\u1e81\u1e82\u1e83\u1e84\u1e85\u1e86\u1e87\u1e88\u1e89\u1e8a\u1e8b\u1e8c\u1e8d\u1e8e\u1e8f\u1e90\u1e91\u1e92\u1e93\u1e97\u1e98\u1e99\u1e9b\u1e9e\u1ea0\u1ea1\u1ea2\u1ea3\u1ea4\u1ea5\u1ea6\u1ea7\u1ea8\u1ea9\u1eaa\u1eab" +
+ "\u1eac\u1ead\u1eae\u1eaf\u1eb0\u1eb1\u1eb2\u1eb3\u1eb4\u1eb5\u1eb6\u1eb7\u1eb8\u1eb9\u1eba\u1ebb\u1ebc\u1ebd\u1ebe\u1ebf\u1ec0\u1ec1\u1ec2\u1ec3\u1ec4\u1ec5\u1ec6\u1ec7\u1ec8\u1ec9\u1eca\u1ecb\u1ecc\u1ecd\u1ece\u1ecf\u1ed0\u1ed1\u1ed2\u1ed3\u1ed4\u1ed5\u1ed6\u1ed7\u1ed8\u1ed9\u1eda\u1edb\u1edc\u1edd\u1ede\u1edf\u1ee0\u1ee1\u1ee2\u1ee3\u1ee4\u1ee5\u1ee6\u1ee7\u1ee8\u1ee9\u1eea\u1eeb\u1eec\u1eed\u1eee\u1eef\u1ef0\u1ef1\u1ef2\u1ef3" +
+ "\u1ef4\u1ef5\u1ef6\u1ef7\u1ef8\u1ef9\u1f70\u1f72\u1f74\u1f76\u1f78\u1f7a\u1f7c\u1fb1\u1fb9\u1fba\u1fc8\u1fca\u1fd1\u1fd9\u1fda\u1fe1\u1fe2\u1fe7\u1fe9\u1fea\u1ff8\u1ffa\u2071\u207f\u2090\u2091\u2092\u2093\u2094\u2095\u2096\u2097\u2098\u2099\u209a\u209b\u209c\u20ac\u20b1\u20b4\u20b9\u20bd\u20bf\u220f\u2211\u2422\u2c63\u2c65\u2c66\u2c7b\u2c7c\ua640\ua641\ua648\ua649\ua64a\ua64b\ua64c\ua64d\ua650\ua651\ua656\ua657\ua730\ua731\ua740" +
+ "\ua741\ua742\ua743\ua756\ua757\ua75e\ua75f\ua776\ua792\ua793\ua798\ua799\ua7a0\ua7a1\ua7a4\ua7a5\ua7a6\ua7a7\ua7a8\ua7a9\ua7ae\ua7af\ua7b8\ua7b9\ua7f4\ua7f9\ua7fa\uab3f\uab65\uab69abcdefghijklmnopqrstuvwyz\u03b3\u0292\u0260\u0266\u0279\u027b\u0281\u03b1\u03b5\u03b7\u03b9\u03bf\u03c5\u03b2\u03b8\u03ba\u03c0" +
+ "\u03c1\u03c3\u03c6\u0435\u0433\u044d\u0441\u043a\u043d\u043c\u0448\u0444\u043e\u0434\u04af\u0445\u0430\u0436\u0437\u0443\u043b\u0639\u0627\u062f\u0633\u062a\u0632\u0642\u0645\u0628\u0631\u0648\u0641\u0644\u0646\u062d\u092e\u0939\u0905\u0907\u0909\u090f\u0913\u0915\u0917\u091a\u091c\u091f\u0921\u0928\u0924\u0926\u092c\u0930\u0932\u0938\u092b\u092f\u090b\u090c\u0935\u093d\u0aae\u0ab9\u0a85\u0a87\u0a89\u0a8f\u0a93\u0a95\u0a97\u0a9a" +
+ "\u0a9c\u0a9f\u0aa1\u0aa8\u0aa4\u0aa6\u0aaa\u0aac\u0ab2\u0ab8\u0254\u0223\u03bb\u03c8\u0250\u1d02\u025b\u1d08\u1d09\u1d1d\u026f\u03b4\u03c7\u0252\u0255\u025c\u0265\u0271\u0270\u0282\u0283\u028a\u028c\u03c9\u01dd\uFFFF\ua775\u028d").toCharArray();
public static final char[] edges =
("\u0001\u0036\u0037\u0038\u0039\u003a\u003b\u003c\u003f\u0040\u0041\u0042\u0043\u0044\u0045\u0046\u0047\u0048\u0049\u004a\u004b\u004c\u004d\u004e\u004f\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0059\u005a\u005b\\\u005d\u005e\u005f\u0060\u0061\u0062\u0063\u0064\u0067\u0068\u006b\u006e\u006f\u0072\u0075\u0078\u007b\u007e\u0081\u0001\u0001\u0001\u0001\u0001\u0003\u0000\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001" +
@@ -252,7 +267,22 @@ public final class ComposeKeyData
"\u0001\u0001\u0071\u1016\u0daf\u21eb\u21ee\u21f1\u21f2\u21f3\u21f4\u21f5\u21f6\u21f7\u21f8\u2081\u2082\u21f9\u21fa\u21fb\u21fc\u21fd\u21fe\u21ff\u2200\u2201\u2202\u2203\u2204\u2205\u2206\u2207\u2208\u2209\u220a\u20ac\u207b\u220b\u207c\u220c\u220d\u20b3\u220e\u220f\u2210\u2211\u2212\u2213\u2214\u2215\u2216\u2217\u2218\u2219\u221a\u221b\u221c\u221d\u221e\u221f\u2220\u2221\u2222\u2223\u2224\u2225\u1008\u2226\u2227\u2228\u2229\u222a" +
"\u222b\u222c\u222d\u222e\u222f\u2230\u2231\u2232\u2233\u2235\u03f2\u2237\u223a\u223d\u2240\u2241\u1008\u0eb9\u0ec5\u0eba\u0ec8\u20c2\u20c3\u20c4\u20c5\u1dd7\u1ddc\u1e32\u1e36\u1e39\u1e3c\u2242\u2243\u2244\u2245\u2246\u2247\u2248\u2249\u224a\u224b\u224c\u224d\u0003\u0000\u0000\u0003\u0000\u0000\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\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0000\u0002\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0006\u2253\u2256" +
- "\u2259\u225c\u225f\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000").toCharArray();
+ "\u2259\u225c\u225f\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u0003\u0000\u0000\u03b4\u2616\u2617\u2618\u2619\u261a\u261b\u261c\u261d\u261e\u261f\u2620\u2621\u2622\u2623\u2624\u2625\u2626\u2627\u2628\u2629\u262a\u262b\u262c\u03e3\u262d\u262e\u03e3\u2618\u2621\u262d\u2616\u262a\u2624\u2616\u2616\u2616\u2616\u2616\u2616\u2616\u2618\u261a\u261a\u261a\u261a\u261e\u261e\u261e\u261e\u2623\u2624\u2624\u2624" +
+ "\u2624\u2624\u2624\u262a\u262a\u262a\u262a\u262d\u2616\u2616\u2616\u2616\u2616\u2616\u2616\u2618\u261a\u261a\u261a\u261a\u261e\u261e\u261e\u261e\u2623\u2624\u2624\u2624\u2624\u2624\u2624\u262a\u262a\u262a\u262a\u262d\u262d\u2616\u2616\u2616\u2616\u2618\u2618\u2618\u2618\u2618\u2618\u2618\u2618\u2619\u2619\u2619\u2619\u261a\u261a\u261a\u261a\u261a\u261a\u261a\u261a\u261c\u261c\u261c\u261c\u261c\u261c\u261d\u261d\u261d\u261d\u261e" +
+ "\u261e\u261e\u261e\u261e\u261e\u261e\u261e\u261f\u261f\u2620\u2620\u2621\u2621\u2621\u2621\u2621\u2621\u2621\u2621\u2623\u2623\u2623\u2623\u2623\u2623\u2624\u2624\u2624\u2624\u2624\u2624\u2627\u2627\u2627\u2627\u2627\u2627\u2628\u2628\u0184\u0184\u2628\u2628\u2628\u2628\u2629\u2629\u2629\u2629\u2629\u2629\u262a\u262a\u262a\u262a\u262a\u262a\u262a\u262a\u262a\u262a\u262c\u262c\u262d\u262d\u262d\u262e\u262e\u262e\u262e\u262e\u262e" +
+ "\u2617\u262f\u261e\u2621\u2624\u2624\u2624\u2627\u262a\u262a\u262e\u262e\u2616\u2616\u261e\u261e\u2624\u2624\u262a\u262a\u262a\u262a\u262a\u262a\u262a\u262a\u262a\u262a\u2616\u2616\u2616\u2616\u2616\u2616\u261c\u261c\u261c\u261c\u2620\u2620\u2624\u2624\u2624\u2624\u2630\u2630\u261f\u261c\u261c\u2623\u2623\u2616\u2616\u2616\u2616\u2624\u2624\u2616\u2616\u261a\u261a\u261e\u261e\u2624\u2624\u2627\u2627\u262a\u262a\u261d\u261d\u2616" +
+ "\u2616\u261a\u261a\u2624\u2624\u2624\u2624\u2624\u2624\u2624\u2624\u262d\u262d\u261f\u2616\u2618\u2618\u2621\u2629\u2617\u262a\u261a\u261a\u261f\u261f\u2627\u2627\u262d\u262d\u261f\u261c\u262f\u261e\u261e\u2623\u2624\u2624\u2627\u262a\u262d\u2617\u2631\u261d\u2621\u261d\u2632\u261f\u2627\u2633\u2634\u2635\u262c\u262d\u262f\u2621\u2628\u03e3\u2636\u2637\u2638\u2639\u263a\u263b\u263c\u2637\u263d\u263e\u262a\u263f\u2640\u2641\u2642" +
+ "\u2639\u263b\u2636\u2637\u2638\u2639\u263b\u2641\u2639\u263b\u263a\u263b\u263c\u263d\u263b\u263b\u2642\u263f\u263e\u2640\u263d\u2637\u2643\u17f9\u2644\u2645\u2646\u1fea\u107c\u1feb\u2647\u1fea\u0dce\u1fdc\u1fdd\u187c\u1fe5\u1fe6\u1fe8\u191f\u1fdc\u1fdd\u187c\u1fe5\u1fe6\u1fe8\u191f\u2643\u17f9\u2644\u2645\u2646\u1fea\u107c\u1feb\u2647\u1fea\u0dce\u2643\u2643\u2648\u2648\u2649\u2649\u264a\u264a\u264b\u264b\u181a\u181a\u264c\u264c" +
+ "\u0dca\u0dca\u1fe5\u1fe5\u2644\u2644\u264d\u264d\u17f1\u17f1\u264e\u264e\u17fb\u17fb\u264f\u264f\u2650\u2650\u17cb\u17cb\u2651\u2651\u2652\u2652\u1fea\u1fea\u1fea\u1fea\u264c\u264c\u264c\u264c\u264c\u264c\u2645\u2645\u2653\u2653\u2653\u2653\u2653\u2653\u1feb\u1feb\u20cc\u20cc\u264f\u264f\u0d05\u0d05\u2654\u2654\u2655\u2656\u2657\u2658\u2658\u2659\u265a\u265b\u265c\u2071\u2074\u2075\u265d\u19e8\u265e\u265a\u265f\u2660\u2076\u265b" +
+ "\u2661\u2662\u2077\u2663\u2078\u2664\u2665\u2666\u2667\u2668\u2669\u2669\u2669\u2666\u266a\u266a\u266b\u266c\u266d\u266e\u266f\u2670\u2671\u2672\u2673\u2671\u2674\u2675\u2676\u2676\u2677\u266b\u266b\u266c\u266e\u2670\u2670\u2678\u2679\u267a\u267b\u2666\u2667\u2667\u266a\u2668\u2668\u266f\u266e\u267c\u266c\u266d\u267d\u2671\u2674\u267e\u267f\u2680\u2681\u2682\u2683\u2684\u2685\u2686\u2687\u2688\u2689\u268a\u268b\u268c\u268d\u268e" +
+ "\u268f\u2690\u2691\u2616\u2616\u2617\u2618\u2619\u1357\u261a\u261f\u2620\u2621\u2622\u13b7\u2624\u2692\u2693\u2625\u20cd\u2633\u2629\u262a\u262b\u262c\u262e\u2630\u262f\u2694\u263f\u2640\u2695\u2654\u2616\u2696\u2697\u2617\u2619\u261a\u136a\u2698\u2699\u261c\u269a\u2620\u2622\u13b7\u2624\u2692\u2625\u2629\u262a\u269b\u269c\u262b\u263c\u269d\u2642\u269e\u261e\u2627\u262a\u262b\u263c\u262f\u2640\u2642\u269e\u261e\u2625\u262a\u269f" +
+ "\u2618\u26a0\u26a1\u261b\u261f\u26a2\u261e\u2639\u26a3\u26a4\u2624\u26a5\u26a6\u262a\u26a7\u26a8\u262e\u2630\u263d\u2617\u2617\u2617\u2617\u2618\u2618\u2619\u2619\u2619\u2619\u2619\u2619\u261a\u261a\u261a\u261a\u1065\u1065\u261b\u261b\u261c\u261c\u261d\u261d\u261d\u261d\u261d\u261d\u261d\u261d\u261e\u261e\u2620\u2620\u2620\u2620\u2621\u2621\u2621\u2621\u2622\u2622\u2622\u2622\u2622\u2622\u2623\u2623\u2623\u2623\u2624\u2624\u2624" +
+ "\u2624\u2624\u2624\u2624\u2624\u2625\u2625\u2625\u2625\u2627\u2627\u2627\u2627\u2627\u2627\u2628\u2628\u2628\u2628\u2628\u2628\u2628\u2628\u2628\u2628\u2629\u2629\u2629\u2629\u262a\u262a\u262b\u262b\u262b\u262b\u262c\u262c\u262c\u262c\u262c\u262c\u262c\u262c\u262c\u262c\u03e3\u03e3\u03e3\u03e3\u262d\u262d\u262e\u262e\u262e\u262e\u2629\u262c\u262d\u1372\u13ed\u2616\u2616\u2616\u2616\u2616\u2616\u2616\u2616\u2616\u2616\u2616\u2616" +
+ "\u2616\u2616\u1064\u1064\u1064\u1064\u1064\u1064\u1064\u1064\u1064\u1064\u261a\u261a\u261a\u261a\u261a\u261a\u261a\u261a\u261a\u261a\u261a\u261a\u261a\u261a\u261a\u261a\u261e\u261e\u261e\u261e\u2624\u2624\u2624\u2624\u2624\u2624\u2624\u2624\u2624\u2624\u2624\u2624\u2624\u2624\u2624\u2624\u2624\u2624\u2624\u2624\u2624\u2624\u2624\u2624\u262a\u262a\u262a\u262a\u262a\u262a\u262a\u262a\u262a\u262a\u262a\u262a\u262a\u262a\u262d\u262d" +
+ "\u262d\u262d\u262d\u262d\u262d\u262d\u2636\u2637\u2638\u2639\u263a\u263b\u26a9\u2636\u2636\u2636\u2637\u2638\u2639\u2639\u2639\u263b\u263b\u14df\u263b\u263b\u263a\u26a9\u261e\u2623\u2616\u261a\u2624\u03e3\u136a\u261d\u2620\u2621\u2622\u2623\u2625\u2628\u2629\u261a\u2617\u261d\u2627\u2625\u262e\u263f\u2641\u2617\u2625\u2616\u2629\u26aa\u261f\u2652\u2652\u17fe\u17fe\u2653\u2653\u17b8\u17b8\u20cc\u20cc\u20cd\u20cd\u261b\u2628\u2620" +
+ "\u2620\u2620\u2620\u2626\u2626\u262b\u262b\u26ab\u2618\u2618\u261b\u261b\u261c\u261c\u2623\u2623\u2627\u2627\u2628\u2628\u261e\u2626\u262a\u262a\u2626\u2624\u269c\u2692\u26a9\u26ad\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" +
+ "\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\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\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0000\u0001").toCharArray();
public static final int accent_aigu = 1;
public static final int accent_arrows = 130;
@@ -288,4 +318,5 @@ public final class ComposeKeyData
public static final int numpad_persian = 8528;
public static final int numpad_tamil = 8549;
public static final int shift = 8570;
+ public static final int substitutions = 8802;
}
diff --git a/srcs/juloo.keyboard2/dict/DictionaryListView.java b/srcs/juloo.keyboard2/dict/DictionaryListView.java
index 345a800..19bbcd2 100644
--- a/srcs/juloo.keyboard2/dict/DictionaryListView.java
+++ b/srcs/juloo.keyboard2/dict/DictionaryListView.java
@@ -155,7 +155,7 @@ public class DictionaryListView extends LinearLayout
static URL url_of_dictionary(String dict_name)
throws MalformedURLException
{
- int format_version = 0;
+ int format_version = Cdict.format_version();
return new URL(DICT_REPO_URL + "/v" + format_version + "/" + dict_name
+ ".dict");
}
diff --git a/srcs/juloo.keyboard2/suggestions/Suggestions.java b/srcs/juloo.keyboard2/suggestions/Suggestions.java
index 638ac64..41a7941 100644
--- a/srcs/juloo.keyboard2/suggestions/Suggestions.java
+++ b/srcs/juloo.keyboard2/suggestions/Suggestions.java
@@ -5,6 +5,8 @@ import java.util.List;
import juloo.cdict.Cdict;
import juloo.keyboard2.dict.Dictionaries;
import juloo.keyboard2.Config;
+import juloo.keyboard2.ComposeKey;
+import juloo.keyboard2.ComposeKeyData;
/** Keep track of the word being typed and provide suggestions for
[CandidatesView]. */
@@ -49,18 +51,12 @@ public final class Suggestions
int query_suggestions(Cdict dict, String word, String[] dst, int max_count)
{
+ boolean first_char_upper = Character.isUpperCase(word.charAt(0));
+ word = apply_substitutions(word);
Cdict.Result r = dict.find(word);
int i = 0;
if (r.found)
- dst[i++] = word;
- boolean first_char_upper = Character.isUpperCase(word.charAt(0));
- // Do the dictionary query in lower case and re-apply the upper case after
- if (first_char_upper)
- {
- r = dict.find(word.toLowerCase());
- if (r.found)
- dst[i++] = word;
- }
+ dst[i++] = dict.word(r.index);
int[] suffixes = dict.suffixes(r, max_count);
// Disable distance search for small words
int[] dist = (word.length() < 3 || i + 1 >= max_count) ? NO_RESULTS :
@@ -84,6 +80,22 @@ public final class Suggestions
rs[i] = rs[i].substring(0, 1).toUpperCase() + rs[i].substring(1);
}
+ /** Apply the same substitutions that were used when building the
+ dictionaries to find word aliases. This catches missing diacritics for
+ example. */
+ String apply_substitutions(String w)
+ {
+ StringBuilder b = new StringBuilder(w);
+ int len = w.length();
+ for (int i = 0; i < len; i++)
+ {
+ char r =
+ ComposeKey.transform_char(ComposeKeyData.substitutions, b.charAt(i));
+ if (r != 0) b.setCharAt(i, r);
+ }
+ return b.toString();
+ }
+
void set_suggestions(List<String> ws)
{
_callback.set_suggestions(ws);