Newer
Older
package org.futo.inputmethod.v2keyboard
import org.futo.inputmethod.keyboard.internal.KeyboardLayoutKind
import org.futo.inputmethod.keyboard.internal.KeyboardTextsSet
fun shortcutsOf(vararg values: Pair<String, List<String>>): Map<String, List<String>> =
mapOf(*values).mapValues {
it.value.map { v ->
if(v.startsWith("keyspec") || v.startsWith("morekeys") || v.startsWith("additional_")) {
"!text/$v"
} else {
v
}
val KeySpecShortcuts = listOf(
// Symbols-only shortcuts
listOf(KeyboardLayoutKind.Symbols) to shortcutsOf(
";" to listOf("keyspec_symbols_semicolon", "morekeys_symbols_semicolon"),
"!" to listOf("!", "morekeys_exclamation"),
"+" to listOf("+", "morekeys_plus"),
"?" to listOf("keyspec_symbols_question", "morekeys_question"),
"\"" to listOf("\"", "morekeys_double_quote"),
"\'" to listOf("\'", "morekeys_single_quote"),
"$" to listOf("keyspec_currency", "morekeys_currency_generic"),
"%" to listOf("keyspec_symbols_percent", "morekeys_symbols_percent"),
"(" to listOf("keyspec_left_parenthesis", "morekeys_left_parenthesis"),
")" to listOf("keyspec_right_parenthesis", "morekeys_right_parenthesis"),
"<" to listOf("keyspec_less_than", "morekeys_less_than"),
">" to listOf("keyspec_greater_than", "morekeys_greater_than"),
"[" to listOf("keyspec_left_square_bracket"),
"]" to listOf("keyspec_right_square_bracket"),
"{" to listOf("keyspec_left_curly_bracket"),
"}" to listOf("keyspec_right_curly_bracket"),
"*" to listOf("*", "morekeys_star"),
"=" to listOf("=", "≠", "≈", "∞"),
"," to listOf("keyspec_comma"),
"." to listOf("keyspec_period", "…"),
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
"1" to listOf("keyspec_symbols_1", "additional_morekeys_symbols_1", "morekeys_symbols_1"),
"2" to listOf("keyspec_symbols_2", "additional_morekeys_symbols_2", "morekeys_symbols_2"),
"3" to listOf("keyspec_symbols_3", "additional_morekeys_symbols_3", "morekeys_symbols_3"),
"4" to listOf("keyspec_symbols_4", "additional_morekeys_symbols_4", "morekeys_symbols_4"),
"5" to listOf("keyspec_symbols_5", "additional_morekeys_symbols_5", "morekeys_symbols_5"),
"6" to listOf("keyspec_symbols_6", "additional_morekeys_symbols_6", "morekeys_symbols_6"),
"7" to listOf("keyspec_symbols_7", "additional_morekeys_symbols_7", "morekeys_symbols_7"),
"8" to listOf("keyspec_symbols_8", "additional_morekeys_symbols_8", "morekeys_symbols_8"),
"9" to listOf("keyspec_symbols_9", "additional_morekeys_symbols_9", "morekeys_symbols_9"),
"0" to listOf("keyspec_symbols_0", "additional_morekeys_symbols_0", "morekeys_symbols_0"),
),
// Alphabet-only shortcuts
listOf(KeyboardLayoutKind.Alphabet) to shortcutsOf(
"q" to listOf("keyspec_q"),
"w" to listOf("keyspec_w"),
"y" to listOf("keyspec_y"),
"x" to listOf("keyspec_x"),
// Cyrillic
"щ" to listOf("keyspec_east_slavic_row1_9"),
"ы" to listOf("keyspec_east_slavic_row2_2", "morekeys_east_slavic_row2_2"),
"э" to listOf("keyspec_east_slavic_row2_11", "morekeys_east_slaiv_row2_11"),
"и" to listOf("keyspec_east_slavic_row3_5"),
"\u044c" to listOf("\u044c", "morekeys_cyrillic_soft_sign"),
"\u0443" to listOf("\u0443", "morekeys_cyrillic_u"),
"\u043a" to listOf("\u043a", "morekeys_cyrillic_ka"),
"\u043d" to listOf("\u043d", "morekeys_cyrillic_en"),
"\u0433" to listOf("\u0433", "morekeys_cyrillic_ghe"),
"\u0430" to listOf("\u0430", "morekeys_cyrillic_a"),
"\u043e" to listOf("\u043e", "morekeys_cyrillic_o"),
"\u0438" to listOf("\u0438", "morekeys_cyrillic_i"),
"\u0435" to listOf("\u0435", "morekeys_cyrillic_ie"),
),
// All shortcuts
KeyboardLayoutKind.entries to shortcutsOf(
"," to listOf("keyspec_comma"),
"." to listOf("keyspec_period"),
// Similar to the symbols shortcuts for 0-9, but without morekeys_symbols_n
"1" to listOf("keyspec_symbols_1", "additional_morekeys_symbols_1"),
"2" to listOf("keyspec_symbols_2", "additional_morekeys_symbols_2"),
"3" to listOf("keyspec_symbols_3", "additional_morekeys_symbols_3"),
"4" to listOf("keyspec_symbols_4", "additional_morekeys_symbols_4"),
"5" to listOf("keyspec_symbols_5", "additional_morekeys_symbols_5"),
"6" to listOf("keyspec_symbols_6", "additional_morekeys_symbols_6"),
"7" to listOf("keyspec_symbols_7", "additional_morekeys_symbols_7"),
"8" to listOf("keyspec_symbols_8", "additional_morekeys_symbols_8"),
"9" to listOf("keyspec_symbols_9", "additional_morekeys_symbols_9"),
"0" to listOf("keyspec_symbols_0", "additional_morekeys_symbols_0"),
)
)
fun resolveSpecWithOptionalShortcut(spec: String, textsSet: KeyboardTextsSet, coordinate: KeyCoordinate): List<String>? =
KeySpecShortcuts.filter {
// Filter to shortcut tables that are relevant for this element kind (alphabet, symbols, etc)
it.first.contains(coordinate.element.kind)
}.mapNotNull {
// Map to values that exist
it.second[spec]
}.firstOrNull {
// First one where the main key is resolvable in our texts set
textsSet.resolveTextReference(it[0]) != null
}