diff --git a/gradle.properties b/gradle.properties index e9577ca9c..709ccf4b3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 -android.enableJetifier=true +android.enableJetifier=false android.useAndroidX=true \ No newline at end of file diff --git a/java/assets/layouts/Arabic/farsi.yaml b/java/assets/layouts/Arabic/farsi.yaml new file mode 100644 index 000000000..5f2c2df0a --- /dev/null +++ b/java/assets/layouts/Arabic/farsi.yaml @@ -0,0 +1,40 @@ +name: Farsi +languages: fa +useZWNJKey: true +rows: + - letters: # rowkeys_farsi1.xml + - ['ض'] + - ['ص'] + - ['ث'] + - ['ق'] + - ['ف'] + - ['غ'] + - ['ع'] + - ['ه', "ﻫ|ه\u200d", 'هٔ', 'ة', '%'] + - ['خ'] + - ['ح'] + - ['ج'] + - letters: # rowkeys_farsi2.xml + - ['ش'] + - ['س'] + - ['ی', 'ئ', 'ي', 'ﯨ|ى'] + - ['ب'] + - ['ل'] + - ['ا', '!fixedColumnOrder!5', 'ٱ', 'ء', 'آ', 'أ', 'إ'] + - ['ت', 'ة'] + - ['ن'] + - ['م'] + - ['ک', 'ك'] + - ['گ'] + - letters: # rowkeys_farsi3.xml + - ['ظ'] + - ['ط'] + - ['ژ'] + - ['ز'] + - ['ر'] + - ['ذ'] + - ['د'] + - ['پ'] + - ['و', 'ؤ'] + - ['چ'] + - $delete # forces no shift key \ No newline at end of file diff --git a/java/assets/layouts/Bengali/bengali.yaml b/java/assets/layouts/Bengali/bengali.yaml new file mode 100644 index 000000000..dec201c24 --- /dev/null +++ b/java/assets/layouts/Bengali/bengali.yaml @@ -0,0 +1,40 @@ +name: bengali +languages: bn +rows: + - letters: # rowkeys_bengali1.xml + - ['ঔ', 'ৌ', '১'] + - ['ঐ', 'ৈ', '২'] + - ['আ', 'া', '৩'] + - ['ঈ', 'ী', '৪'] + - ['ঊ', 'ূ', '৫'] + - ['ব', 'ভ', '৬'] + - ['হ', '৭'] + - ['গ', 'ঘ', '৮'] + - ['দ', 'ধ', '৯'] + - ['জ', 'ঝ', 'জ্ঞ', '০'] + - ['ড', 'ড়'] + - letters: # rowkeys_bengali2.xml + - ['ও', 'ো'] + - ['এ', 'ে'] + - ['অ', '্'] + - ['ই', 'ি'] + - ['উ', 'ু'] + - ['প', 'ফ'] + - ['র', 'ৃ', 'ঋ', 'ত্র'] + - ['ক', 'খ'] + - ['ত', 'ৎ', 'থ', 'ত্ত'] + - ['চ', 'ছ'] + - ['ট', 'ঠ'] + - letters: # rowkeys_bengali3.xml + - ['ঁ', 'ঃ', 'ং'] + - ['ঢ', 'ঢ়'] + - ['ম'] + - ['ন', 'ণ'] + - ['ঞ', 'ঙ', 'ঞ্জ'] + - ['ল'] + - ['ষ', 'ক্ষ'] + - ['স', 'শ'] + - ['য়', 'য'] + - ['।', '॥'] + - $delete +# detected 3 rows \ No newline at end of file diff --git a/java/assets/layouts/Bengali/bengali_akkhor.yaml b/java/assets/layouts/Bengali/bengali_akkhor.yaml index 081b6147e..c2220f804 100644 --- a/java/assets/layouts/Bengali/bengali_akkhor.yaml +++ b/java/assets/layouts/Bengali/bengali_akkhor.yaml @@ -4,34 +4,34 @@ useZWNJKey: true rows: - letters: - type: case - normal: [ 'ধ', 'ধ্ব', 'ধ্য', 'ধ্র' ] + normal: [ 'ধ', '১', 'ধ্ব', 'ধ্য', 'ধ্র' ] shifted: [ 'ঢ' ] - type: case - normal: [ 'থ', 'থ্য', 'থ্র' ] + normal: [ 'থ', '২', 'থ্য', 'থ্র' ] shifted: [ 'ঠ' ] - type: case - normal: [ 'ে', 'এ' ] + normal: [ 'ে', '৩', 'এ' ] shifted: [ 'ৈ', 'ঐ' ] - type: case - normal: [ 'র' ] + normal: [ 'র', '৪' ] shifted: [ 'ড়', '়' ] - type: case - normal: [ 'ত', 'ৎ', 'ত্ত', 'ত্ন', 'ত্ব', 'ত্ম' ] + normal: [ 'ত', '৫', 'ৎ', 'ত্ত', 'ত্ন', 'ত্ব', 'ত্ম' ] shifted: [ 'ট', '৳', 'ট্ট', 'ট্ব', 'ট্ম' ] - type: case - normal: [ 'য়' ] + normal: [ 'য়', '৬' ] shifted: [ 'ঞ', 'ঞ্চ', 'ঞ্ছ', 'ঞ্জ' ] - type: case - normal: [ 'ু', 'উ' ] + normal: [ 'ু', '৭', 'উ' ] shifted: [ 'ূ', 'ঊ' ] - type: case - normal: [ 'ি', 'ই' ] + normal: [ 'ি', '৮', 'ই' ] shifted: [ 'ী', 'ঈ' ] - type: case - normal: [ 'ো', 'ও' ] + normal: [ 'ো', '৯', 'ও' ] shifted: [ 'ৌ', 'চ', 'ৗ' ] - type: case - normal: [ 'প', 'প্ত', 'প্ন', 'প্প', 'প্য', 'প্র', 'প্ল', 'প্স' ] + normal: [ 'প', '০', 'প্ত', 'প্ন', 'প্প', 'প্য', 'প্র', 'প্ল', 'প্স' ] shifted: [ 'ফ', 'ফ্ট', 'ফ্য', 'ফ্র', 'ফ্ল' ] - type: case normal: [ 'আ' ] diff --git a/java/assets/layouts/Bulgarian/bulgarian.yaml b/java/assets/layouts/Bulgarian/bulgarian.yaml new file mode 100644 index 000000000..576bbfe2b --- /dev/null +++ b/java/assets/layouts/Bulgarian/bulgarian.yaml @@ -0,0 +1,36 @@ +name: Bulgarian +languages: bg +rows: + - letters: + - ['я'] + - ['в'] + - ['е'] + - ['р'] + - ['т'] + - ['ъ'] + - ['у'] + - ['и', '%', 'ѝ'] + - ['о'] + - ['п'] + - ['ч'] + - letters: + - ['а'] + - ['с'] + - ['д'] + - ['ф'] + - ['г'] + - ['х'] + - ['й'] + - ['к'] + - ['л'] + - ['ш'] + - ['щ'] + - letters: + - ['з'] + - ['ь'] + - ['ц'] + - ['ж'] + - ['б'] + - ['н'] + - ['м'] + - ['ю'] \ No newline at end of file diff --git a/java/assets/layouts/Bulgarian/bulgarian_bds.yaml b/java/assets/layouts/Bulgarian/bulgarian_bds.yaml new file mode 100644 index 000000000..9bc164e7b --- /dev/null +++ b/java/assets/layouts/Bulgarian/bulgarian_bds.yaml @@ -0,0 +1,37 @@ +name: Bulgarian (BDS) +languages: bg +rows: + - letters: + - ['у'] + - ['е'] + - ['и', '%', 'ѝ'] + - ['ш'] + - ['щ'] + - ['к'] + - ['с'] + - ['д'] + - ['з'] + - ['ц'] + - ['б'] + - letters: + - ['ь'] + - ['я'] + - ['а'] + - ['о'] + - ['ж'] + - ['г'] + - ['т'] + - ['н'] + - ['в'] + - ['м'] + - ['ч'] + - letters: + - ['ю'] + - ['й'] + - ['ъ'] + - ['э'] + - ['ф'] + - ['х'] + - ['п'] + - ['р'] + - ['л'] \ No newline at end of file diff --git a/java/assets/layouts/Default/azerty.yaml b/java/assets/layouts/Default/azerty.yaml index 671a29530..55e770c92 100644 --- a/java/assets/layouts/Default/azerty.yaml +++ b/java/assets/layouts/Default/azerty.yaml @@ -2,4 +2,11 @@ name: AZERTY rows: - letters: a z e r t y u i o p - letters: q s d f g h j k l m - - letters: w x c v b n ' \ No newline at end of file + - letters: + - w + - x + - c + - v + - b + - n + - {type: case, normal: "'", shifted: "?"} \ No newline at end of file diff --git a/java/assets/layouts/Default/colemak.yaml b/java/assets/layouts/Default/colemak.yaml index 7d0c9887d..5206daaed 100644 --- a/java/assets/layouts/Default/colemak.yaml +++ b/java/assets/layouts/Default/colemak.yaml @@ -1,5 +1,15 @@ name: Colemak rows: - - letters: q w f p g j l u y ; + - letters: + - q + - w + - f + - p + - g + - j + - l + - u + - y + - {type: case, normal: ";", shifted: ":"} - letters: a r s t d h n e i o - letters: z x c v b k m \ No newline at end of file diff --git a/java/assets/layouts/Default/dvorak.yaml b/java/assets/layouts/Default/dvorak.yaml index 80c4040ef..31b08ddc5 100644 --- a/java/assets/layouts/Default/dvorak.yaml +++ b/java/assets/layouts/Default/dvorak.yaml @@ -1,6 +1,16 @@ name: Dvorak rows: - - letters: \' , . p y f g c r l + - letters: + - {type: case, normal: "'", shifted: "\""} + - {type: case, normal: ",", shifted: "<"} + - {type: case, normal: ".", shifted: ">"} + - p + - y + - f + - g + - c + - r + - l - letters: a o e u i d h t n s - letters: $shift j k x b m w v $delete - bottom: $symbols q $action $space $contextual z $enter \ No newline at end of file diff --git a/java/assets/layouts/Default/pcqwerty.yaml b/java/assets/layouts/Default/pcqwerty.yaml index 6400dc634..38cc857d5 100644 --- a/java/assets/layouts/Default/pcqwerty.yaml +++ b/java/assets/layouts/Default/pcqwerty.yaml @@ -2,16 +2,16 @@ name: "PC QWERTY" rows: - numbers: - {type: case, normal: ["`", "~"], shifted: "~"} - - {type: case, normal: ["1", "!", "!text/morekeys_symbols_1"], shifted: "!"} - - {type: case, normal: ["2", "@", "!text/morekeys_symbols_2"], shifted: "@"} - - {type: case, normal: ["3", "#", "!text/morekeys_symbols_3"], shifted: "#"} - - {type: case, normal: ["4", "$", "!text/morekeys_symbols_4"], shifted: "$"} - - {type: case, normal: ["5", "%", "!text/morekeys_symbols_5"], shifted: "%"} - - {type: case, normal: ["6", "^", "!text/morekeys_symbols_6"], shifted: "^"} - - {type: case, normal: ["7", "&", "!text/morekeys_symbols_7"], shifted: "&"} - - {type: case, normal: ["8", "*", "!text/morekeys_symbols_8"], shifted: "*"} - - {type: case, normal: ["9", "(", "!text/morekeys_symbols_9"], shifted: "("} - - {type: case, normal: ["0", ")", "!text/morekeys_symbols_0"], shifted: ")"} + - {type: case, normal: ["1", "!"], shifted: "!"} + - {type: case, normal: ["2", "@"], shifted: "@"} + - {type: case, normal: ["3", "#"], shifted: "#"} + - {type: case, normal: ["4", "$"], shifted: "$"} + - {type: case, normal: ["5", "%"], shifted: "%"} + - {type: case, normal: ["6", "^"], shifted: "^"} + - {type: case, normal: ["7", "&"], shifted: "&"} + - {type: case, normal: ["8", "*"], shifted: "*"} + - {type: case, normal: ["9", "("], shifted: "("} + - {type: case, normal: ["0", ")"], shifted: ")"} - {type: case, normal: ["-", "_"], shifted: "_"} - {type: case, normal: ["=", "+"], shifted: "+"} - letters: diff --git a/java/assets/layouts/French/bepo.yaml b/java/assets/layouts/French/bepo.yaml new file mode 100644 index 000000000..16683f352 --- /dev/null +++ b/java/assets/layouts/French/bepo.yaml @@ -0,0 +1,33 @@ +name: BEPO +languages: fr +rows: + - letters: # rowkeys_bepo1.xml + - ['b'] + - ['é', 'è'] + - ['p'] + - ['o'] + - ['v'] + - ['d'] + - ['l'] + - ['j'] + - ['z'] + - ['w'] + - letters: # rowkeys_bepo2.xml + - ['a'] + - ['u'] + - ['i'] + - ['e'] + - ['c'] + - ['t'] + - ['s'] + - ['r'] + - ['n'] + - ['m'] + - letters: # rowkeys_bepo3.xml + - ['y'] + - ['x'] + - ['k'] + - ['q'] + - ['g'] + - ['h'] + - ['f'] \ No newline at end of file diff --git a/java/assets/layouts/Georgian/georgian.yaml b/java/assets/layouts/Georgian/georgian.yaml new file mode 100644 index 000000000..edb655565 --- /dev/null +++ b/java/assets/layouts/Georgian/georgian.yaml @@ -0,0 +1,33 @@ +name: Georgian +languages: ka_GE +attributes: {shiftable: false} # Automatic shifting breaks many of the characters +rows: + - letters: + - 'ქ' + - {type: case, normal: ['წ', 'ჭ'], shifted: ['ჭ']} + - ['ე', '%', 'ჱ'] + - {type: case, normal: ['რ', 'ღ'], shifted: ['ღ']} + - {type: case, normal: ['ტ', 'თ'], shifted: ['თ']} + - ['ყ', '%', 'ჸ'] + - 'უ' + - ['ი', '%', 'ჲ'] + - 'ო' + - 'პ' + - letters: + - ['ა', 'ჺ'] + - {type: case, normal: ['ს', 'შ'], shifted: ['შ']} + - 'დ' + - ['ფ', 'ჶ'] + - ['გ', 'ჹ'] + - ['ჰ', 'ჵ'] + - {type: case, normal: ['ჯ', 'ჟ', 'ჷ'], shifted: ['ჟ']} + - 'კ' + - 'ლ' + - letters: + - {type: case, normal: ['ზ', 'ძ'], shifted: ['ძ']} + - ['ხ', 'ჴ'] + - {type: case, normal: ['ც', 'ჩ'], shifted: ['ჩ']} + - ['ვ', 'ჳ'] + - 'ბ' + - ['ნ', 'ჼ'] + - 'მ' \ No newline at end of file diff --git a/java/assets/layouts/Greek/greek.yaml b/java/assets/layouts/Greek/greek.yaml new file mode 100644 index 000000000..6e2459659 --- /dev/null +++ b/java/assets/layouts/Greek/greek.yaml @@ -0,0 +1,33 @@ +name: Greek +languages: el +rows: + - letters: # rowkeys_greek1.xml + - {type: case, normal: [';', '%', ':', '·'], shifted: [':', '%', ';', '·']} + - {type: base, spec: 'ς', attributes: {shiftable: false}} # This specific character must not be shifted + - ['ε', 'έ', '%', 'ὲ', 'ἐ', 'ἑ', 'ἔ', 'ἕ', 'ἒ', 'ἓ'] + - ['ρ', '%', 'ῥ'] + - ['τ'] + - ['υ', 'ύ', '%', 'ϋ', 'ΰ', 'ὺ', 'ῦ', 'ὐ', 'ὑ', 'ὔ', 'ὕ', 'ὒ', 'ὓ', 'ὖ', 'ὗ', 'ῢ', 'ῧ'] + - ['θ'] + - ['ι', 'ί', '%', 'ϊ', 'ΐ', 'ὶ', 'ῖ', 'ἰ', 'ἱ', 'ἴ', 'ἵ', 'ἲ', 'ἳ', 'ἶ', 'ἷ', 'ῒ', 'ῗ'] + - ['ο', 'ό', '%', 'ὸ', 'ὀ', 'ὁ', 'ὄ', 'ὅ', 'ὂ', 'ὃ'] + - ['π'] + - letters: # rowkeys_greek2.xml + - {type: case, normal: ['α', 'ά', 'ὰ', 'ᾶ', 'ἀ', 'ἁ', 'ἄ', 'ἅ', 'ἂ', 'ἃ', 'ἆ', 'ἇ', 'ᾳ', 'ᾴ', 'ᾲ', 'ᾷ', 'ᾀ', 'ᾁ', 'ᾄ', 'ᾅ', 'ᾂ', 'ᾃ', 'ᾆ', 'ᾇ'], shifted: ['Α', 'Ά', 'Ὰ', 'Ἀ', 'Ἁ', 'ἄ', 'ἅ', 'Ἂ', 'Ἃ', 'Ἆ', 'Ἇ']} + - ['σ'] + - ['δ'] + - ['φ'] + - ['γ'] + - {type: case, normal: ['η', 'ή', 'ὴ', 'ῆ', 'ἠ', 'ἡ', 'ἤ', 'ἥ', 'ἢ', 'ἣ', 'ἦ', 'ἧ', 'ῃ', 'ῄ', 'ῂ', 'ῇ', 'ᾐ', 'ᾑ', 'ᾔ', 'ᾕ', 'ᾒ', 'ᾓ', 'ᾖ', 'ᾗ'], shifted: ['Η', 'Ή', 'Ὴ', 'Ἠ', 'Ἡ', 'Ἤ', 'Ἥ', 'Ἢ', 'Ἣ', 'Ἦ', 'Ἧ']} + - ['ξ'] + - ['κ'] + - ['λ'] + - letters: # rowkeys_greek3.xml + - ['ζ'] + - ['χ'] + - ['ψ'] + - {type: case, normal: ['ω', 'ώ', 'ὼ', 'ῶ', 'ὠ', 'ὡ', 'ὤ', 'ὥ', 'ὢ', 'ὣ', 'ὦ', 'ὧ', 'ῳ', 'ῴ', 'ῲ', 'ῷ', 'ᾠ', 'ᾡ', 'ᾤ', 'ᾥ', 'ᾢ', 'ᾣ', 'ᾦ', 'ᾧ'], shifted: ['ω', 'Ώ', 'Ὼ', 'Ὠ', 'Ὡ', 'Ὤ', 'Ὥ', 'Ὢ', 'Ὣ', 'Ὦ', 'Ὧ']} + - ['β'] + - ['ν'] + - ['μ'] +# detected 3 rows \ No newline at end of file diff --git a/java/assets/layouts/Hebrew/hebrew.yaml b/java/assets/layouts/Hebrew/hebrew.yaml new file mode 100644 index 000000000..a1dad7725 --- /dev/null +++ b/java/assets/layouts/Hebrew/hebrew.yaml @@ -0,0 +1,38 @@ +name: Hebrew +languages: iw +rows: + - letters: # rowkeys_hebrew1.xml + # skipped unknown case {'{http://schemas.android.com/apk/res-auto}mode': 'email|url'} + - ["\\'", '%', '"'] + - ['-', '%', '_'] + - ['ק'] + - ['ר'] + - ['א'] + - ['ט'] + - ['ו'] + - ['ן'] + - ['ם'] + - ['פ'] + - letters: # rowkeys_hebrew2.xml + - ['ש'] + - ['ד'] + - ['ג', 'ג׳'] + - ['כ'] + - ['ע'] + - ['י', 'ײַ'] + - ['ח', 'ח׳'] + - ['ל'] + - ['ך'] + - ['ף'] + - letters: # rowkeys_hebrew3.xml + - ['ז', 'ז׳'] + - ['ס'] + - ['ב'] + - ['ה'] + - ['נ'] + - ['מ'] + - ['צ', 'צ׳'] + - ['ת', 'ת׳'] + - ['ץ', 'ץ׳'] + - $delete # force no shift key +# detected 3 rows \ No newline at end of file diff --git a/java/assets/layouts/Kannada/kannada.yaml b/java/assets/layouts/Kannada/kannada.yaml new file mode 100644 index 000000000..d4ccf6192 --- /dev/null +++ b/java/assets/layouts/Kannada/kannada.yaml @@ -0,0 +1,40 @@ +name: Kannada +languages: kn-IN +useZWNJKey: true +rows: + - letters: # rowkeys_kannada1.xml + - ['ೌ', 'ಔ', '೧'] + - ['ೈ', 'ಐ', '೨'] + - ['ಾ', 'ಆ', '೩'] + - ['ೀ', 'ಈ', '೪'] + - ['ೂ', 'ಊ', '೫'] + - ['ಬ', 'ಭ', '೬'] + - ['ಹ', 'ಙ', '೭'] + - ['ಗ', 'ಘ', '೮'] + - ['ದ', 'ಧ', '೯'] + - ['ಜ', 'ಝ', '೦'] + - ['ಡ', 'ಢ'] + - letters: # rowkeys_kannada2.xml + - ['ೋ', 'ಓ'] + - ['ೇ', 'ಏ'] + - ['್', 'ಅ'] + - ['ಿ', 'ಇ'] + - ['ು', 'ಉ'] + - ['ಪ', 'ಫ'] + - ['ರ', 'ಱ', 'ೃ'] + - ['ಕ', 'ಖ'] + - ['ತ', 'ಥ'] + - ['ಚ', 'ಛ'] + - ['ಟ', 'ಠ'] + - letters: # rowkeys_kannada3.xml + - ['ೆ', 'ಒ'] + - ['ಂ', 'ಎ'] + - ['ಮ'] + - ['ನ', 'ಣ'] + - ['ವ'] + - ['ಲ', 'ಳ'] + - ['ಸ', 'ಶ'] + - ['ಋ', '್ರ'] + - ['ಷ', 'ಕ್ಷ'] + - ['ಯ', 'ಜ್ಞ'] + - $delete # force no shift key \ No newline at end of file diff --git a/java/assets/layouts/Khmer/khmer.yaml b/java/assets/layouts/Khmer/khmer.yaml new file mode 100644 index 000000000..d21278187 --- /dev/null +++ b/java/assets/layouts/Khmer/khmer.yaml @@ -0,0 +1,56 @@ +name: Khmer +languages: km-KH +minimumFunctionalKeyWidth: 0.0 +attributes: { moreKeyMode: OnlyExplicit } +rows: + - letters: # rowkeys_khmer1.xml + - {type: case, normal: ['១', '1', '៱'], shifted: ['!', "!icon/zwj_key|\u200d"]} + - {type: case, normal: ['២', '2', '៲'], shifted: ['ៗ', "!icon/zwnj_key|\u200c"]} + - {type: case, normal: ['៣', '3', '៳'], shifted: ['"', '៑']} + - {type: case, normal: ['៤', '4', '៴'], shifted: ['៛', '$', '€']} + - {type: case, normal: ['៥', '5', '៵'], shifted: ['%', '៖']} + - {type: case, normal: ['៦', '6', '៶'], shifted: ['៍', '៙']} + - {type: case, normal: ['៧', '7', '៷'], shifted: ['័', '៚']} + - {type: case, normal: ['៨', '8', '៸'], shifted: ['៏', "\u17d7", '*']} + - {type: case, normal: ['៩', '9', '៹'], shifted: ['(', '{', '«']} + - {type: case, normal: ['០', '0', '៰'], shifted: [')', '}', '»']} + - {type: case, normal: ['ឥ', 'ឦ'], shifted: ['៌', '×']} + - {type: case, normal: ['ឲ', 'ឱ'], shifted: ['៎']} + - letters: # rowkeys_khmer2.xml + - {type: case, normal: ['ឆ'], shifted: ['ឈ', 'ៜ']} + - {type: case, normal: ['ឹ'], shifted: ['ឺ', '៝']} + - {type: case, normal: ['េ'], shifted: ['ែ']} + - {type: case, normal: ['រ'], shifted: ['ឬ', 'ឫ']} + - {type: case, normal: ['ត'], shifted: ['ទ']} + - {type: case, normal: ['យ'], shifted: ['ួ']} + - {type: case, normal: ['ុ'], shifted: ['ូ']} + - {type: case, normal: ['ិ'], shifted: ['ី']} + - {type: case, normal: ['ោ'], shifted: ['ៅ']} + - {type: case, normal: ['ផ'], shifted: ['ភ']} + - {type: case, normal: ['ៀ'], shifted: ['ឿ']} + - {type: case, normal: ['ឪ', 'ឧ', 'ឱ', 'ឳ', 'ឩ', 'ឨ'], shifted: ['ឰ']} + - letters: # rowkeys_khmer3.xml + - {type: case, normal: ['ា'], shifted: ['ាំ']} + - {type: case, normal: ['ស'], shifted: ['ៃ']} + - {type: case, normal: ['ដ'], shifted: ['ឌ']} + - {type: case, normal: ['ថ'], shifted: ['ធ']} + - {type: case, normal: ['ង'], shifted: ['អ']} + - {type: case, normal: ['ហ'], shifted: ['ះ', 'ៈ']} + - {type: case, normal: ['្'], shifted: ['ញ']} + - {type: case, normal: ['ក'], shifted: ['គ', 'ឝ']} + - {type: case, normal: ['ល'], shifted: ['ឡ']} + - {type: case, normal: ['ើ'], shifted: ['ោះ']} + - {type: case, normal: ['់'], shifted: ['៉']} + - {type: case, normal: ['ឮ', 'ឭ', 'ឰ'], shifted: ['ឯ']} + - letters: # rowkeys_khmer4.xml + - {type: case, normal: ['ឋ'], shifted: ['ឍ']} + - {type: case, normal: ['ខ'], shifted: ['ឃ']} + - {type: case, normal: ['ច'], shifted: ['ជ']} + - {type: case, normal: ['វ'], shifted: ['េះ']} + - {type: case, normal: ['ប'], shifted: ['ព', 'ឞ']} + - {type: case, normal: ['ន'], shifted: ['ណ']} + - {type: case, normal: ['ម'], shifted: ['ំ']} + - {type: case, normal: ['ុំ'], shifted: ['ុះ']} + - {type: case, normal: ['។'], shifted: ['៕']} + - {type: case, normal: ['៊', "\u17d8"], shifted: ['?']} +# detected 4 rows \ No newline at end of file diff --git a/java/assets/layouts/Lao/lao.yaml b/java/assets/layouts/Lao/lao.yaml new file mode 100644 index 000000000..6f78de434 --- /dev/null +++ b/java/assets/layouts/Lao/lao.yaml @@ -0,0 +1,56 @@ +name: Lao +languages: lo-LA +minimumFunctionalKeyWidth: 0.0 +attributes: { moreKeyMode: OnlyExplicit } +rows: + - letters: # rowkeys_lao1.xml + - {type: case, normal: ['ຢ', '1', '໑'], shifted: ['໑']} + - {type: case, normal: ['ຟ', '2', '໒'], shifted: ['໒']} + - {type: case, normal: ['ໂ', '3', '໓'], shifted: ['໓']} + - {type: case, normal: ['ຖ', '4', '໔'], shifted: ['໔']} + - {type: case, normal: ['ຸ'], shifted: ['໌']} + - {type: case, normal: ['ູ'], shifted: ['ຼ']} + - {type: case, normal: ['ຄ', '5', '໕'], shifted: ['໕']} + - {type: case, normal: ['ຕ', '6', '໖'], shifted: ['໖']} + - {type: case, normal: ['ຈ', '7', '໗'], shifted: ['໗']} + - {type: case, normal: ['ຂ', '8', '໘'], shifted: ['໘']} + - {type: case, normal: ['ຊ', '9', '໙'], shifted: ['໙']} + - {type: case, normal: ['ໍ'], shifted: ['ໍ່']} + - letters: # rowkeys_lao2.xml + - {type: case, normal: ['ົ'], shifted: ['ົ້']} + - {type: case, normal: ['ໄ', '0', '໐'], shifted: ['໐']} + - {type: case, normal: ['ຳ'], shifted: ['ຳ້']} + - {type: case, normal: ['ພ'], shifted: ['_']} + - {type: case, normal: ['ະ'], shifted: ['+']} + - {type: case, normal: ['ິ'], shifted: ['ິ້']} + - {type: case, normal: ['ີ'], shifted: ['ີ້']} + - {type: case, normal: ['ຮ'], shifted: ['ຣ']} + - {type: case, normal: ['ນ'], shifted: ['ໜ']} + - {type: case, normal: ['ຍ'], shifted: ['ຽ']} + - {type: case, normal: ['ບ'], shifted: ['ຫຼ']} + - {type: case, normal: ['ລ'], shifted: ['”']} + - letters: # rowkeys_lao3.xml + - {type: case, normal: ['ັ'], shifted: ['ັ້']} + - {type: case, normal: ['ຫ'], shifted: [';']} + - {type: case, normal: ['ກ'], shifted: ['.']} + - {type: case, normal: ['ດ'], shifted: [',']} + - {type: case, normal: ['ເ'], shifted: [':']} + - {type: case, normal: ['້'], shifted: ['໊']} + - {type: case, normal: ['່'], shifted: ['໋']} + - {type: case, normal: ['າ'], shifted: ['!']} + - {type: case, normal: ['ສ'], shifted: ['?']} + - {type: case, normal: ['ວ'], shifted: ['%']} + - {type: case, normal: ['ງ'], shifted: ['=']} + - {type: case, normal: ['“'], shifted: ['“']} + - letters: # rowkeys_lao4.xml + - {type: case, normal: ['ຜ'], shifted: ['₭']} + - {type: case, normal: ['ປ'], shifted: ['(']} + - {type: case, normal: ['ແ'], shifted: ['ຯ']} + - {type: case, normal: ['ອ'], shifted: ['@']} + - {type: case, normal: ['ຶ'], shifted: ['ຶ້']} + - {type: case, normal: ['ື'], shifted: ['ື້']} + - {type: case, normal: ['ທ'], shifted: ['ໆ']} + - {type: case, normal: ['ມ'], shifted: ['ໝ']} + - {type: case, normal: ['ໃ'], shifted: ['$']} + - {type: case, normal: ['ຝ'], shifted: [')']} +# detected 4 rows \ No newline at end of file diff --git a/java/assets/layouts/Legacy/east_slavic_phonetic.yaml b/java/assets/layouts/Legacy/east_slavic_phonetic.yaml index bb7b82798..473754add 100644 --- a/java/assets/layouts/Legacy/east_slavic_phonetic.yaml +++ b/java/assets/layouts/Legacy/east_slavic_phonetic.yaml @@ -8,7 +8,7 @@ rows: - р - т - ы - - у + - [у, ю] - и - о - п diff --git a/java/assets/layouts/Malayalam/malayalam.yaml b/java/assets/layouts/Malayalam/malayalam.yaml new file mode 100644 index 000000000..ac6e73e7b --- /dev/null +++ b/java/assets/layouts/Malayalam/malayalam.yaml @@ -0,0 +1,40 @@ +name: Malayalam +languages: ml-IN +rows: + - letters: # rowkeys_malayalam1.xml + - ['്', 'അ'] + - ['ാ', 'ആ'] + - ['ി', 'ഇ'] + - ['ീ', 'ഈ'] + - ['ു', 'ഉ'] + - ['ൂ', 'ഊ'] + - ['ൃ', 'ഋ'] + - ['െ', 'എ', 'ഐ', 'ൈ'] + - ['േ', 'ഏ'] + - ['ൊ', 'ഒ'] + - ['ോ', 'ഓ', 'ഔ', 'ൗ'] + - letters: # rowkeys_malayalam2.xml + - ['ക', 'ഖ'] + - ['ഗ', 'ഘ'] + - ['ങ', 'ഞ'] + - ['ച', 'ഛ'] + - ['ജ', 'ഝ'] + - ['ട', 'ഠ'] + - ['ഡ', 'ഢ'] + - ['ണ', 'ൺ'] + - ['ത', 'ഥ'] + - ['ദ', 'ധ'] + - ['ന', 'ൻ'] + - letters: # rowkeys_malayalam3.xml + - ['പ', 'ഫ'] + - ['ബ', 'ഭ'] + - ['മ', 'ം'] + - ['യ', '്യ'] + - ['ര', '്ര', 'ർ', 'റ'] + - ['ല', 'ൽ'] + - ['വ', '്വ'] + - ['ശ', 'ഷ', 'സ'] + - ['ഹ', 'ഃ'] + - ['ള', 'ൾ', 'ഴ'] + - $delete # force no shift key +# detected 3 rows \ No newline at end of file diff --git a/java/assets/layouts/Serbian/serbian_qwertz.yaml b/java/assets/layouts/Serbian/serbian_qwertz.yaml new file mode 100644 index 000000000..5df7c90ef --- /dev/null +++ b/java/assets/layouts/Serbian/serbian_qwertz.yaml @@ -0,0 +1,6 @@ +name: Serbian QWERTZ +languages: sr-ZZ +rows: + - letters: q w e r t z u i o p š + - letters: a s d f g h j k l č ć + - letters: y x c v b n m đ ž \ No newline at end of file diff --git a/java/assets/layouts/Sinhala/sinhala.yaml b/java/assets/layouts/Sinhala/sinhala.yaml new file mode 100644 index 000000000..02ebb2e1d --- /dev/null +++ b/java/assets/layouts/Sinhala/sinhala.yaml @@ -0,0 +1,38 @@ +name: Sinhala +languages: si-LK +rows: + - letters: # rowkeys_sinhala1.xml + - {type: case, normal: ['ු'], shifted: ['ූ']} + - {type: case, normal: ['අ'], shifted: ['උ']} + - {type: case, normal: ['ැ'], shifted: ['ෑ']} + - {type: case, normal: ['ර'], shifted: ['ඍ']} + - {type: case, normal: ['එ'], shifted: ['ඔ']} + - {type: case, normal: ['හ'], shifted: ['ශ']} + - {type: case, normal: ['ම'], shifted: ['ඹ']} + - {type: case, normal: ['ස'], shifted: ['ෂ']} + - {type: case, normal: ['ද', '%', 'ඳ'], shifted: ['ධ']} + - {type: case, normal: ['ච'], shifted: ['ඡ']} + - {type: case, normal: ['ඤ', '෴'], shifted: ['ඥ', '෴']} + - letters: # rowkeys_sinhala2.xml + - {type: case, normal: ['්'], shifted: ['ෟ']} + - {type: case, normal: ['ි'], shifted: ['ී']} + - {type: case, normal: ['ා'], shifted: ['ෘ']} + - {type: case, normal: ['ෙ'], shifted: ['ෆ']} + - {type: case, normal: ['ට'], shifted: ['ඨ']} + - {type: case, normal: ['ය'], shifted: ["්\u200dය"]} + - {type: case, normal: ['ව'], shifted: ['ළු']} + - {type: case, normal: ['න'], shifted: ['ණ']} + - {type: case, normal: ['ක'], shifted: ['ඛ']} + - {type: case, normal: ['ත'], shifted: ['ථ']} + - {type: case, normal: ['ඏ'], shifted: ["්\u200dර"]} + - letters: # rowkeys_sinhala3.xml + - {type: case, normal: ['ං', 'ඃ'], shifted: ['ඞ']} + - {type: case, normal: ['ජ', 'ඦ'], shifted: ['ඣ']} + - {type: case, normal: ['ඩ', 'ඬ'], shifted: ['ඪ']} + - {type: case, normal: ['ඉ'], shifted: ['ඊ']} + - {type: case, normal: ['බ'], shifted: ['භ']} + - {type: case, normal: ['ප'], shifted: ['ඵ']} + - {type: case, normal: ['ල'], shifted: ['ළ']} + - {type: case, normal: ['ග', 'ඟ'], shifted: ['ඝ']} + - {type: case, normal: ['ෳ'], shifted: ["ර්\u200d"]} +# detected 3 rows \ No newline at end of file diff --git a/java/assets/layouts/Slavic/mongolian.yaml b/java/assets/layouts/Slavic/mongolian.yaml new file mode 100644 index 000000000..b670d5528 --- /dev/null +++ b/java/assets/layouts/Slavic/mongolian.yaml @@ -0,0 +1,40 @@ +name: Mongolian +languages: mn-MN +rows: + - letters: # rowkeys_mongolian1.xml + - ['ф'] + - ['ц'] + - ['у', '!text/morekeys_cyrillic_u'] + - ['ж'] + - ['э', '!text/morekeys_cyrillic_ie'] + - ['н', '!text/morekeys_cyrillic_en'] + - ['г', '!text/morekeys_cyrillic_ghe'] + - ['ш', '%', 'щ'] + - ['ү'] + - ['з'] + - ['к'] + - ['е'] + - letters: # rowkeys_mongolian2.xml + - ['й'] + - ['ы'] + - ['б'] + - ['ө'] + - ['а'] + - ['х'] + - ['р'] + - ['о'] + - ['л'] + - ['д'] + - ['п'] + - ['ю'] + - letters: # rowkeys_mongolian3.xml + - ['я'] + - ['ч'] + - ['ё'] + - ['с'] + - ['м'] + - ['и'] + - ['т'] + - ['ь', 'ъ'] + - ['в'] +# detected 3 rows \ No newline at end of file diff --git a/java/assets/layouts/Tamil/tamil.yaml b/java/assets/layouts/Tamil/tamil.yaml new file mode 100644 index 000000000..217e9c434 --- /dev/null +++ b/java/assets/layouts/Tamil/tamil.yaml @@ -0,0 +1,40 @@ +name: Tamil +languages: ta-LK ta-IN ta-SG +rows: + - letters: # rowkeys_tamil1.xml + - ['ஔ', 'ௌ'] + - ['ஐ', 'ை'] + - ['ஆ', 'ா'] + - ['ஈ', 'ீ'] + - ['ஊ', 'ூ'] + - ['ம'] + - ['ன'] + - ['ந'] + - ['ங'] + - ['ண'] + - ['ஞ'] + - letters: # rowkeys_tamil2.xml + - ['ஓ', 'ோ', 'ௐ'] + - ['ஏ', 'ே'] + - ['அ', 'ஃ'] + - ['இ', 'ி'] + - ['உ', 'ு'] + - ['ற'] + - ['ப'] + - ['க', 'ஹ', 'க்ஷ'] + - ['த'] + - ['ச', 'ஸ', 'ஶ்ரீ'] + - ['ட'] + - letters: # rowkeys_tamil3.xml + - ['ஒ', 'ொ'] + - ['எ', 'ெ'] + - ['்'] + - ['ர'] + - ['வ'] + - ['ழ'] + - ['ல'] + - ['ள'] + - ['ய'] + - ['ஷ', 'ஜ'] + - $delete # force no shift key +# detected 3 rows \ No newline at end of file diff --git a/java/assets/layouts/Telugu/telugu.yaml b/java/assets/layouts/Telugu/telugu.yaml new file mode 100644 index 000000000..85e3fd354 --- /dev/null +++ b/java/assets/layouts/Telugu/telugu.yaml @@ -0,0 +1,41 @@ +name: Telugu +languages: te-IN +useZWNJKey: true +rows: + - letters: # rowkeys_telugu1.xml + - ['ౌ', 'ఔ'] + - ['ై', 'ఐ'] + - ['ా', 'ఆ'] + - ['ీ', 'ఈ'] + - ['ూ', 'ఊ'] + - ['బ', 'భ'] + - ['హ', 'ః'] + - ['గ', 'ఘ'] + - ['ద', 'ధ'] + - ['జ', 'ఝ'] + - ['డ', 'ఢ'] + - letters: # rowkeys_telugu2.xml + - ['ో', 'ఓ'] + - ['ే', 'ఏ'] + - ['్', 'అ'] + - ['ి', 'ఇ'] + - ['ు', 'ఉ'] + - ['ప', 'ఫ'] + - ['ర', 'ఱ', '్ర'] + - ['క', 'ఖ'] + - ['త', 'థ'] + - ['చ', 'ఛ'] + - ['ట', 'ఠ'] + - letters: # rowkeys_telugu3.xml + - ['ొ', 'ఒ'] + - ['ె', 'ఎ'] + - ['మ', 'ం', 'ఁ'] + - ['న', 'ణ', 'ఙ', 'ఞ'] + - ['వ'] + - ['ల', 'ళ'] + - ['స', 'శ'] + - ['ఋ', 'ృ'] + - ['ష', 'క్ష'] + - ['య', 'జ్ఞ'] + - $delete # force no shift key +# detected 3 rows \ No newline at end of file diff --git a/java/assets/layouts/Thai/thai.yaml b/java/assets/layouts/Thai/thai.yaml new file mode 100644 index 000000000..0fcf6ddce --- /dev/null +++ b/java/assets/layouts/Thai/thai.yaml @@ -0,0 +1,56 @@ +name: Thai +languages: th +minimumFunctionalKeyWidth: 0.0 +attributes: { moreKeyMode: OnlyExplicit } +rows: + - letters: # rowkeys_thai1.xml + - {type: case, normal: ['ๅ'], shifted: ['+']} + - {type: case, normal: ['/', '1', '๑'], shifted: ['๑']} + - {type: case, normal: ['_', '2', '๒'], shifted: ['๒']} + - {type: case, normal: ['ภ', '3', '๓'], shifted: ['๓']} + - {type: case, normal: ['ถ', '4', '๔'], shifted: ['๔']} + - {type: case, normal: [' ุ|ุ'], shifted: [' ู|ู']} + - {type: case, normal: [' ึ|ึ'], shifted: ['฿']} + - {type: case, normal: ['ค', '5', '๕'], shifted: ['๕']} + - {type: case, normal: ['ต', '6', '๖'], shifted: ['๖']} + - {type: case, normal: ['จ', '7', '๗'], shifted: ['๗']} + - {type: case, normal: ['ข', '8', '๘'], shifted: ['๘']} + - {type: case, normal: ['ช', '9', '๙'], shifted: ['๙']} + - letters: # rowkeys_thai2.xml + - {type: case, normal: ['ๆ', '0', '๐'], shifted: ['๐']} + - {type: case, normal: ['ไ'], shifted: ['"']} + - {type: case, normal: ['ำ'], shifted: ['ฎ']} + - {type: case, normal: ['พ'], shifted: ['ฑ']} + - {type: case, normal: ['ะ'], shifted: ['ธ']} + - {type: case, normal: [' ั|ั'], shifted: [' ํ|ํ']} + - {type: case, normal: [' ี|ี'], shifted: [' ๊|๊']} + - {type: case, normal: ['ร'], shifted: ['ณ']} + - {type: case, normal: ['น'], shifted: ['ฯ']} + - {type: case, normal: ['ย'], shifted: ['ญ']} + - {type: case, normal: ['บ'], shifted: ['ฐ']} + - {type: case, normal: ['ล'], shifted: [',']} + - letters: # rowkeys_thai3.xml + - {type: case, normal: ['ฟ'], shifted: ['ฤ']} + - {type: case, normal: ['ห'], shifted: ['ฆ']} + - {type: case, normal: ['ก'], shifted: ['ฏ']} + - {type: case, normal: ['ด'], shifted: ['โ']} + - {type: case, normal: ['เ'], shifted: ['ฌ']} + - {type: case, normal: [' ้|้'], shifted: [' ็|็']} + - {type: case, normal: [' ่|่'], shifted: [' ๋|๋']} + - {type: case, normal: ['า'], shifted: ['ษ']} + - {type: case, normal: ['ส'], shifted: ['ศ']} + - {type: case, normal: ['ว'], shifted: ['ซ']} + - {type: case, normal: ['ง'], shifted: ['.']} + - {type: case, normal: ['ฃ'], shifted: ['ฅ']} + - letters: # rowkeys_thai4.xml + - {type: case, normal: ['ผ'], shifted: ['(']} + - {type: case, normal: ['ป'], shifted: [')']} + - {type: case, normal: ['แ'], shifted: ['ฉ']} + - {type: case, normal: ['อ'], shifted: ['ฮ']} + - {type: case, normal: [' ิ|ิ'], shifted: [' ฺ|ฺ']} + - {type: case, normal: [' ื|ื'], shifted: [' ์|์']} + - {type: case, normal: ['ท'], shifted: ['?']} + - {type: case, normal: ['ม'], shifted: ['ฒ']} + - {type: case, normal: ['ใ'], shifted: ['ฬ']} + - {type: case, normal: ['ฝ'], shifted: ['ฦ']} +# detected 4 rows \ No newline at end of file diff --git a/java/assets/layouts/Turkish/turkish.yaml b/java/assets/layouts/Turkish/turkish.yaml new file mode 100644 index 000000000..5f7687f1b --- /dev/null +++ b/java/assets/layouts/Turkish/turkish.yaml @@ -0,0 +1,39 @@ +name: Turkish +languages: tr +rows: + - letters: # rowkeys_turkish1.xml + - ['!text/keyspec_q'] + - ['!text/keyspec_w'] + - ['e'] + - ['r'] + - ['t'] + - ['!text/keyspec_y'] + - ['u'] + - ['ı'] + - ['o'] + - ['p'] + - ['ğ'] + - ['ü'] + - letters: # rowkeys_turkish2.xml + - a + - s + - d + - f + - g + - h + - j + - k + - l + - ['ş'] + - ['i'] + - letters: # rowkeys_turkish3.xml + - z + - x + - c + - v + - b + - n + - m + - ['ö'] + - ['ç'] +# detected 3 rows \ No newline at end of file diff --git a/java/assets/layouts/Uzbek/uzbek.yaml b/java/assets/layouts/Uzbek/uzbek.yaml new file mode 100644 index 000000000..f9604e10b --- /dev/null +++ b/java/assets/layouts/Uzbek/uzbek.yaml @@ -0,0 +1,6 @@ +name: Uzbek +languages: uz-UZ +rows: + - letters: q w e r t y u i o p oʻ + - letters: a s d f g h j k l gʻ ʼ + - letters: z x c v b n m \ No newline at end of file diff --git a/java/src/org/futo/inputmethod/keyboard/Key.kt b/java/src/org/futo/inputmethod/keyboard/Key.kt index 25ef17bef..c3cd75687 100644 --- a/java/src/org/futo/inputmethod/keyboard/Key.kt +++ b/java/src/org/futo/inputmethod/keyboard/Key.kt @@ -213,9 +213,7 @@ data class Key( /** hint label to use, either constructor-specified or from moreKeys */ val effectiveHintLabel = hintLabel ?: moreKeys.firstOrNull()?.let { - val label = it.mLabel?.let { - if(it.startsWith("\\")) it.substring(1) else it - } + val label = it.mLabel if(it.mNeedsToUpperCase) { StringUtils.toTitleCaseOfKeyLabel(label, it.mLocale) @@ -336,7 +334,7 @@ data class Key( KeyConsts.LABEL_FLAGS_FOLLOW_KEY_LARGE_LETTER_RATIO -> params.mLargeLetterSize KeyConsts.LABEL_FLAGS_FOLLOW_KEY_LABEL_RATIO -> params.mLabelSize KeyConsts.LABEL_FLAGS_FOLLOW_KEY_HINT_LABEL_RATIO -> params.mHintLabelSize - else -> if (StringUtils.codePointCount(label) == 1) params.mLetterSize else params.mLabelSize + else -> if (StringUtils.codePointCount(label) == 1 || visualStyle == KeyVisualStyle.Normal) params.mLetterSize else params.mLabelSize } } diff --git a/java/src/org/futo/inputmethod/keyboard/internal/KeyPreviewChoreographer.java b/java/src/org/futo/inputmethod/keyboard/internal/KeyPreviewChoreographer.java index c993fbf2c..1da993bff 100644 --- a/java/src/org/futo/inputmethod/keyboard/internal/KeyPreviewChoreographer.java +++ b/java/src/org/futo/inputmethod/keyboard/internal/KeyPreviewChoreographer.java @@ -121,7 +121,7 @@ public final class KeyPreviewChoreographer { final int bottomPadding = getBottomPaddingForKey(keyPreviewView.getContext(), key); final int topArea = Math.max(key.getHeight(), (int)(44.0f * density)); - final int previewWidth = Math.min(Math.max(key.getWidth(), (int)(34.0f * density)), (int)(80.0f * density)); + final int previewWidth = Math.min(Math.max(key.getWidth(), (int)(34.0f * density)), (int)(64.0f * density)); final int previewHeight = topArea + bottomPadding; keyPreviewView.setPadding(0, 0, 0, bottomPadding); diff --git a/java/src/org/futo/inputmethod/keyboard/internal/KeyboardTextsTable.java b/java/src/org/futo/inputmethod/keyboard/internal/KeyboardTextsTable.java index d771b972a..7bad31dcc 100644 --- a/java/src/org/futo/inputmethod/keyboard/internal/KeyboardTextsTable.java +++ b/java/src/org/futo/inputmethod/keyboard/internal/KeyboardTextsTable.java @@ -41,7 +41,9 @@ public final class KeyboardTextsTable { public static String getText(final String name, final String[] textsTable) { final Integer indexObj = sNameToIndexesMap.get(name); if (indexObj == null) { - if(name.startsWith("morekeys")) { + if(name.startsWith("actions_") || name.startsWith("qwertysyms_")) { + return ""; + } else if(name.startsWith("morekeys")) { Log.w("KeyboardTextsTable", "Unknown morekeys text name=" + name + " locale=" + sTextsTableToLocaleMap.get(textsTable)); return ""; @@ -89,285 +91,285 @@ public final class KeyboardTextsTable { "morekeys_c", "keyspec_currency", "morekeys_s", - "morekeys_misc_a", "morekeys_misc_o", + "morekeys_misc_a", "morekeys_misc_u", "morekeys_misc_e", - "morekeys_n", - "morekeys_misc_i", "morekeys_z", - "morekeys_misc_c", + "morekeys_misc_i", + "morekeys_n", "morekeys_misc_s", + "morekeys_misc_c", "double_angle_quotes", "single_angle_quotes", - "morekeys_y", - "morekeys_misc_z", - "additional_morekeys_symbols_9", - "keyspec_symbols_9", - "morekeys_g", - "additional_morekeys_symbols_3", - "additional_morekeys_symbols_2", "keyspec_symbols_0", - "additional_morekeys_symbols_7", - "additional_morekeys_symbols_0", - "additional_morekeys_symbols_8", - "keyspec_symbols_8", - "additional_morekeys_symbols_6", - "keyspec_symbols_3", - "keyspec_symbols_2", - "keyspec_symbols_7", + "additional_morekeys_symbols_2", "keyspec_symbols_4", - "keyspec_symbols_6", - "additional_morekeys_symbols_1", - "keyspec_symbols_5", - "additional_morekeys_symbols_4", - "additional_morekeys_symbols_5", - "morekeys_d", + "additional_morekeys_symbols_0", + "keyspec_symbols_7", + "keyspec_symbols_3", "keyspec_symbols_1", + "morekeys_y", + "additional_morekeys_symbols_6", + "additional_morekeys_symbols_3", + "keyspec_symbols_9", + "additional_morekeys_symbols_1", + "additional_morekeys_symbols_4", + "keyspec_symbols_2", + "keyspec_symbols_8", + "additional_morekeys_symbols_5", + "additional_morekeys_symbols_7", + "keyspec_symbols_6", + "additional_morekeys_symbols_9", + "keyspec_symbols_5", + "additional_morekeys_symbols_8", + "morekeys_g", "keylabel_to_symbol", - "morekeys_tablet_period", + "morekeys_d", + "morekeys_misc_z", "morekeys_cyrillic_ie", - "morekeys_period", - "keyspec_east_slavic_row3_5", - "keyspec_east_slavic_row2_2", - "keyspec_tablet_comma", - "morekeys_t", + "morekeys_tablet_period", "morekeys_nordic_row2_10", + "morekeys_t", "keyspec_nordic_row2_11", - "keyspec_east_slavic_row1_9", - "morekeys_misc_n", - "morekeys_cyrillic_soft_sign", "keyspec_nordic_row2_10", + "keyspec_tablet_comma", + "keyspec_east_slavic_row3_5", + "morekeys_cyrillic_soft_sign", + "morekeys_period", "keyspec_nordic_row1_11", "keyspec_east_slavic_row2_11", + "keyspec_east_slavic_row1_9", "keyspec_period", - "morekeys_r", + "keyspec_east_slavic_row2_2", + "morekeys_misc_n", "keyspec_left_parenthesis", - "keyspec_comma", - "morekeys_punctuation", - "morekeys_star", - "keyspec_less_than", - "keyspec_greater_than_equal", - "keyspec_right_square_bracket", - "morekeys_question", - "keyspec_right_parenthesis", - "keyspec_right_curly_bracket", - "keyspec_left_double_angle_quote", - "morekeys_l", - "morekeys_tablet_comma", "keyhintlabel_period", - "keyspec_left_curly_bracket", - "keyspec_tablet_period", - "keyspec_right_single_angle_quote", - "morekeys_nordic_row2_11", - "keyspec_left_single_angle_quote", - "keyspec_greater_than", - "keyspec_right_double_angle_quote", + "morekeys_r", "keyspec_less_than_equal", + "keyspec_greater_than", "keyspec_left_square_bracket", - "keyspec_symbols_percent", - "morekeys_misc_y", + "keyspec_left_single_angle_quote", + "keyspec_right_curly_bracket", + "keyspec_right_single_angle_quote", + "keyspec_comma", + "keyspec_left_double_angle_quote", + "keyspec_left_curly_bracket", + "keyspec_right_square_bracket", + "morekeys_l", + "morekeys_question", + "keyspec_greater_than_equal", + "morekeys_nordic_row2_11", + "keyspec_less_than", + "morekeys_punctuation", + "keyspec_tablet_period", + "morekeys_star", + "keyspec_right_parenthesis", + "keyspec_right_double_angle_quote", + "morekeys_tablet_comma", "keyspec_spanish_row2_10", - "morekeys_left_parenthesis", - "morekeys_swiss_row2_11", - "keyspec_swiss_row1_11", - "morekeys_right_parenthesis", - "keyspec_swiss_row2_11", - "morekeys_swiss_row1_11", - "keyspec_symbols_question", - "keyhintlabel_tablet_period", "keyhintlabel_tablet_comma", + "morekeys_misc_y", + "keyspec_swiss_row1_11", + "morekeys_swiss_row2_10", + "keyspec_symbols_semicolon", + "morekeys_right_parenthesis", + "keyhintlabel_tablet_period", + "morekeys_symbols_semicolon", + "keyspec_symbols_percent", + "keyspec_symbols_question", "morekeys_symbols_percent", + "morekeys_left_parenthesis", + "keyspec_swiss_row2_11", + "morekeys_swiss_row2_11", "keyspec_swiss_row2_10", "morekeys_bullet", - "morekeys_symbols_semicolon", - "keyspec_symbols_semicolon", + "morekeys_swiss_row1_11", "morekeys_arabic_diacritics", - "morekeys_swiss_row2_10", - "morekeys_cyrillic_u", - "label_pause_key", - "morekeys_east_slavic_row2_2", - "label_done_key", - "morekeys_misc_l", - "label_wait_key", - "label_send_key", - "morekeys_h", - "keyspec_south_slavic_row3_1", - "label_go_key", - "keyspec_south_slavic_row2_11", "morekeys_k", - "label_previous_key", - "morekeys_cyrillic_i", - "keyspec_south_slavic_row3_8", - "morekeys_cyrillic_ghe", - "morekeys_misc_g", - "morekeys_cyrillic_en", + "keyspec_south_slavic_row2_11", "label_search_key", - "keyspec_south_slavic_row1_6", - "morekeys_misc_r", + "label_pause_key", + "label_send_key", + "morekeys_cyrillic_u", "morekeys_cyrillic_o", - "morekeys_tablet_punctuation", + "keyspec_south_slavic_row3_1", "label_next_key", + "keyspec_south_slavic_row1_6", + "label_done_key", + "label_previous_key", + "label_wait_key", + "morekeys_tablet_punctuation", + "morekeys_cyrillic_en", + "morekeys_east_slavic_row2_2", + "keyspec_south_slavic_row3_8", + "morekeys_misc_g", + "label_go_key", "morekeys_j", - "morekeys_less_than", + "morekeys_cyrillic_ghe", + "morekeys_cyrillic_i", + "morekeys_misc_r", + "morekeys_h", + "morekeys_misc_l", + "keyspec_y", + "morekeys_east_slavic_row2_11", + "morekeys_currency_dollar", "morekeys_w", - "keyspec_q", "morekeys_cyrillic_a", "morekeys_misc_h", - "keyspec_y", - "morekeys_greater_than", - "keyspec_w", - "morekeys_misc_t", - "morekeys_currency_dollar", - "morekeys_cyrillic_ka", - "morekeys_east_slavic_row2_11", + "keyspec_q", "keyspec_x", + "morekeys_misc_t", + "morekeys_less_than", "morekeys_plus", "morekeys_exclamation", - "qwertysyms_4", - "qwertysyms_w", - "qwertysyms_6", - "number_1", - "qwertysyms_l", - "double_9qm_rqm", - "actions_p", - "number_2", - "actions_i", - "actions_b", - "keylabel_to_more_symbol", - "qwertysyms_b", - "actions_2", - "morekeys_double_quote", - "qwertysyms_f", - "actions_5", - "morekeys_misc_d", - "qwertysyms_i", - "morekeys_f", - "morekeys_m", - "morekeys_misc_j", - "morekeys_misc_b", - "morekeys_misc_q", - "morekeys_misc_x", - "qwertysyms_c", - "morekeys_misc_p", + "morekeys_cyrillic_ka", + "morekeys_greater_than", + "keyspec_w", + "keyspec_action_previous", "keyspec_popular_domain", - "morekeys_misc_m", - "qwertysyms_q", - "actions_j", - "double_rqm_9qm", - "actions_8", - "keylabel_tablet_to_more_symbol", - "single_rqm_9qm", - "number_9", - "actions_d", - "actions_x", - "morekeys_tablet_double_quote", - "morekeys_q", - "double_9qm_lqm", - "qwertysyms_3", - "morekeys_single_quote", - "morekeys_v", - "morekeys_symbols_4", - "morekeys_symbols_1", - "qwertysyms_8", - "keyspecs_left_parenthesis_more_keys", - "actions_4", - "number_6", "qwertysyms_s", - "qwertysyms_x", - "number_7", - "keyspec_action_next", - "actions_l", - "morekeys_x", - "morekeys_symbols_0", - "qwertysyms_7", - "actions_7", - "actions_s", - "qwertysyms_2", - "actions_w", - "actions_f", - "single_raqm_laqm", - "morekeys_symbols_6", - "qwertysyms_1", - "qwertysyms_p", - "morekeys_currency_generic", - "qwertysyms_j", - "morekeys_symbols_8", - "keyspec_settings", - "qwertysyms_y", - "qwertysyms_h", - "qwertysyms_5", - "qwertysyms_t", - "qwertysyms_9", + "morekeys_misc_d", "double_laqm_raqm", - "double_lqm_rqm", - "morekeys_symbols_7", - "qwertysyms_u", - "actions_1", - "single_9qm_rqm", - "actions_m", - "actions_r", - "single_lqm_rqm", - "qwertysyms_a", - "keylabel_time_am", - "morekeys_symbols_3", - "actions_v", - "actions_h", - "qwertysyms_0", - "morekeys_symbols_9", - "actions_6", - "actions_q", - "morekeys_p", - "morekeys_b", - "actions_a", - "actions_c", + "qwertysyms_4", + "morekeys_x", + "qwertysyms_t", "morekeys_am_pm", - "actions_u", - "qwertysyms_e", - "actions_t", - "single_9qm_lqm", - "keyspec_emoji_action_key", - "number_8", - "actions_0", - "morekeys_symbols_2", - "single_laqm_raqm", - "morekeys_bottomrow_comma", + "qwertysyms_x", + "morekeys_misc_q", + "qwertysyms_b", + "keylabel_to_phone_symbols", + "number_0", + "qwertysyms_1", + "qwertysyms_7", + "actions_d", + "keyspecs_left_parenthesis_more_keys", + "actions_b", + "morekeys_misc_f", + "keylabel_to_more_symbol", + "actions_8", + "morekeys_misc_x", + "double_lqm_rqm", + "morekeys_symbols_0", + "actions_x", + "qwertysyms_v", + "actions_h", + "actions_a", + "single_lqm_rqm", + "qwertysyms_5", + "morekeys_symbols_6", + "morekeys_q", + "morekeys_misc_p", + "actions_j", + "number_1", "number_3", - "qwertysyms_o", - "actions_n", - "morekeys_misc_w", - "number_5", + "keylabel_time_am", + "morekeys_f", + "morekeys_b", + "keyspec_emoji_action_key", "qwertysyms_r", + "single_raqm_laqm", + "double_raqm_laqm", + "actions_2", + "actions_v", + "qwertysyms_3", + "double_rqm_9qm", + "keyspec_shortcut", + "single_9qm_rqm", + "morekeys_symbols_5", + "morekeys_symbols_7", + "morekeys_single_quote", "actions_k", + "morekeys_misc_j", + "actions_l", + "actions_n", + "number_7", + "qwertysyms_9", + "morekeys_double_quote", + "actions_z", + "keyspec_emoji_action_key_navigation", + "morekeys_tablet_double_quote", + "morekeys_symbols_2", + "morekeys_misc_w", + "actions_p", + "qwertysyms_j", + "qwertysyms_a", + "actions_e", + "actions_m", + "qwertysyms_p", + "qwertysyms_z", + "actions_6", + "actions_1", + "actions_u", + "morekeys_symbols_4", + "qwertysyms_h", "actions_9", "keylabel_time_pm", - "actions_e", - "actions_y", + "morekeys_v", + "actions_7", + "qwertysyms_f", + "number_2", + "morekeys_popular_domain", "qwertysyms_g", + "actions_g", + "morekeys_misc_k", + "actions_c", + "number_6", + "actions_4", + "number_4", + "morekeys_p", + "morekeys_symbols_3", + "qwertysyms_2", + "qwertysyms_d", + "single_laqm_raqm", + "double_9qm_rqm", + "keylabel_to_phone_numeric", + "actions_w", + "actions_y", + "actions_t", + "morekeys_symbols_8", + "actions_0", + "qwertysyms_y", + "actions_i", + "morekeys_misc_v", + "keyspecs_right_parenthesis_more_keys", + "qwertysyms_6", + "actions_5", + "qwertysyms_i", + "keyspec_settings", + "morekeys_symbols_9", + "qwertysyms_k", + "qwertysyms_m", + "single_rqm_9qm", + "number_8", + "number_9", + "actions_f", + "qwertysyms_o", + "morekeys_misc_m", + "qwertysyms_l", + "morekeys_m", + "qwertysyms_u", + "actions_s", + "morekeys_bottomrow_comma", "actions_3", "actions_o", - "keyspec_emoji_action_key_navigation", - "morekeys_misc_v", - "actions_g", - "qwertysyms_v", - "qwertysyms_m", - "actions_z", - "keyspecs_right_parenthesis_more_keys", - "number_0", - "keyspec_action_previous", - "double_raqm_laqm", - "morekeys_symbols_5", - "keyspec_shortcut", - "number_4", - "morekeys_misc_f", - "keylabel_to_phone_symbols", - "qwertysyms_z", + "morekeys_currency_generic", + "actions_r", + "qwertysyms_q", + "number_5", + "morekeys_misc_b", + "qwertysyms_e", + "single_9qm_lqm", + "actions_q", "qwertysyms_n", - "morekeys_misc_k", - "qwertysyms_k", - "qwertysyms_d", - "keylabel_to_phone_numeric", - "morekeys_popular_domain" + "keyspec_action_next", + "morekeys_symbols_1", + "qwertysyms_c", + "qwertysyms_8", + "qwertysyms_0", + "keylabel_tablet_to_more_symbol", + "double_9qm_lqm", + "qwertysyms_w" }; private static final String EMPTY = ""; @@ -385,8 +387,8 @@ public final class KeyboardTextsTable { null, null, null, - "\u00e2,\u00e4,\u00e0,\u00e6,\u00e3,\u00e5,\u0101", "\u00f6,\u00f2,\u00f5,\u0153,\u00f8,\u014d", + "\u00e2,\u00e4,\u00e0,\u00e6,\u00e3,\u00e5,\u0101", "\u00fc,\u00f9,\u016b", "\u0119,\u0117,\u0113", null, @@ -417,42 +419,41 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - "9", - "\u0669", - null, - "3", - "2", "\u0660", - "7", - "0,\u066b,\u066c", - "8", - "\u0668", - "6", - "\u0663", - "\u0662", - "\u0667", + "2", "\u0664", - "\u0666", - "1", - "\u0665", - "4", - "5", - null, + "0,\u066b,\u066c", + "\u0667", + "\u0663", "\u0661", + null, + "6", + "3", + "\u0669", + "1", + "4", + "\u0662", + "\u0668", + "5", + "7", + "\u0666", + "9", + "\u0665", + "8", + null, "\u0663\u0662\u0661\u061f", - "!text/morekeys_arabic_diacritics", + null, + null, null, "!text/morekeys_arabic_diacritics", null, null, + null, + null, "\u060c", null, null, - null, - null, - null, + "!text/morekeys_arabic_diacritics", null, null, null, @@ -460,45 +461,47 @@ public final class KeyboardTextsTable { null, null, "(|)", + "\u0651", + null, + "\u2264|\u2265", + ">|<", + "[|]", + "\u2039|\u203a", + "}|{", + "\u203a|\u2039", "\u060c", + "\u00ab|\u00bb", + "{|}", + "]|[", + null, + "?,\u00bf", + "\u2265|\u2264", + null, + "<|>", + null, null, "\u2605,\u066d", - "<|>", - "\u2265|\u2264", - "]|[", - "?,\u00bf", ")|(", - "}|{", - "\u00ab|\u00bb", - null, - "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,\\\",\\'", - "\u0651", - "{|}", - null, - "\u203a|\u2039", - null, - "\u2039|\u203a", - ">|<", "\u00bb|\u00ab", - "\u2264|\u2265", - "[|]", + "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,\\\",\\'", + null, + "\u061f", + null, + null, + null, + "\u061b", + "!fixedColumnOrder!4,\ufd3f|\ufd3e,!text/keyspecs_right_parenthesis_more_keys", + "\u0651", + ";", "\u066a", - null, - null, + "\u061f", + "\\%,\u2030", "!fixedColumnOrder!4,\ufd3e|\ufd3f,!text/keyspecs_left_parenthesis_more_keys", null, null, - "!fixedColumnOrder!4,\ufd3f|\ufd3e,!text/keyspecs_right_parenthesis_more_keys", - null, - null, - "\u061f", - "\u0651", - "\u061f", - "\\%,\u2030", null, "\u266a", - ";", - "\u061b", + null, "!fixedColumnOrder!8, \u0654\u25cc|\u0654, \u0652\u25cc|\u0652, \u064d\u25cc|\u064d, \u064c\u25cc|\u064c, \u0651\u25cc|\u0651, \u064b\u25cc|\u064b,!text/keyspec_symbols_question,!, \u0656\u25cc|\u0656, \u0670\u25cc|\u0670, \u0653\u25cc|\u0653, \u0650\u25cc|\u0650, \u064f\u25cc|\u064f,\u0640, \u0655\u25cc|\u0655, \u064e\u25cc|\u064e" }; @@ -519,9 +522,16 @@ public final class KeyboardTextsTable { null, null, null, + "\u017e", + null, "\u0148,\u00f1", null, - "\u017e", + null, + null, + null, + null, + null, + null, null, null, null, @@ -530,6 +540,16 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, "\u011f" }; @@ -582,21 +602,21 @@ public final class KeyboardTextsTable { null, null, null, - null, "\u0451", null, + null, + null, + null, + null, + null, "\u0456", - "\u044b", - null, - null, - null, - null, - "\u045e", - null, "\u044a", null, null, - "\u044d" + "\u044d", + "\u045e", + null, + "\u044b" }; private static final String[] TEXTS_bg = { @@ -634,30 +654,27 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - "9", - "\u09ef", - null, - "3", - "2", "\u09e6", - "7", - "0", - "8", - "\u09ee", - "6", - "\u09e9", - "\u09e8", - "\u09ed", + "2", "\u09ea", - "\u09ec", - "1", - "\u09eb", - "4", - "5", + "0", + "\u09ed", + "\u09e9", + "\u09e7", null, - "\u09e7" + "6", + "3", + "\u09ef", + "1", + "4", + "\u09e8", + "\u09ee", + "5", + "7", + "\u09ec", + "9", + "\u09eb", + "8" }; private static final String[] TEXTS_bn_IN = { @@ -687,13 +704,14 @@ public final class KeyboardTextsTable { "\u00e7", null, null, - "\u00e1,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", "\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", + "\u00e1,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", "\u00f9,\u00fb,\u016b", "\u00eb,\u00ea,\u0119,\u0117,\u0113", null, "\u00ec,\u00ee,\u012f,\u012b", null, + null, "\u0107,\u010d", null, null, @@ -742,29 +760,26 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, "!autoColumnOrder!9,\\\\,?,!,\u00b7,#,),(,/,;,',@,:,-,\\\",+,\\%,&", null, null, null, null, null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, "\u00e7", null, null, @@ -797,13 +812,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, - null, - null, "!autoColumnOrder!8,\\\\,',\u00b7,#,),(,/,;,@,:,-,\\\",+,\\%,&" }; @@ -831,88 +839,89 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - "9", - "\u0669", - null, - "3", - "2", "\u0660", - "7", - "0,\u066b,\u066c", - "8", - "\u0668", - "6", - "\u0663", - "\u0662", - "\u0667", + "2", "\u0664", - "\u0666", - "1", - "\u0665", - "4", - "5", - null, + "0,\u066b,\u066c", + "\u0667", + "\u0663", "\u0661", + null, + "6", + "3", + "\u0669", + "1", + "4", + "\u0662", + "\u0668", + "5", + "7", + "\u0666", + "9", + "\u0665", + "8", + null, "\u0663\u0662\u0661\u061f", - "\u061f", + null, + null, null, "\u061f", null, null, + null, + null, "\u060c", null, null, - null, - null, - null, - null, + "\u061f", null, null, null, ".", null, + null, "(|)", + "\u0651", + null, + "\u2264|\u2265", + ">|<", + "[|]", + "\u2039|\u203a", + "}|{", + "\u203a|\u2039", "\u060c", + "\u00ab|\u00bb", + "{|}", + "]|[", + null, + "?,\u00bf", + "\u2265|\u2264", + null, + "<|>", + null, null, "\u2605,\u066d", - "<|>", - "\u2265|\u2264", - "]|[", - "?,\u00bf", ")|(", - "}|{", - "\u00ab|\u00bb", - null, - "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,\\\",\\'", - "\u0651", - "{|}", - null, - "\u203a|\u2039", - null, - "\u2039|\u203a", - ">|<", "\u00bb|\u00ab", - "\u2264|\u2265", - "[|]", + "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,\\\",\\'", + null, + "\u061f", + null, + null, + null, + "\u061b", + "!fixedColumnOrder!4,\ufd3f|\ufd3e,!text/keyspecs_right_parenthesis_more_keys", + "\u0651", + ";", "\u066a", - null, - null, + "\u061f", + "\\%,\u2030", "!fixedColumnOrder!4,\ufd3e|\ufd3f,!text/keyspecs_left_parenthesis_more_keys", null, null, - "!fixedColumnOrder!4,\ufd3f|\ufd3e,!text/keyspecs_right_parenthesis_more_keys", - null, - null, - "\u061f", - "\u0651", - "\u061f", - "\\%,\u2030", null, "\u266a", - ";", - "\u061b", + null, "!fixedColumnOrder!7, \u0655\u25cc|\u0655, \u0654\u25cc|\u0654, \u0652\u25cc|\u0652, \u064d\u25cc|\u064d, \u064c\u25cc|\u064c, \u064b\u25cc|\u064b, \u0651\u25cc|\u0651, \u0656\u25cc|\u0656, \u0670\u25cc|\u0670, \u0653\u25cc|\u0653, \u0650\u25cc|\u0650, \u064f\u25cc|\u064f, \u064e\u25cc|\u064e,\u0640|\u0640" }; @@ -929,24 +938,25 @@ public final class KeyboardTextsTable { "\u010d", null, "\u0161", - "\u00e0,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", "\u00f6,\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", + "\u00e0,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", "\u00fb,\u00fc,\u00f9,\u016b", "\u00e8,\u00ea,\u00eb,\u0119,\u0117,\u0113", - "\u0148", - "\u00ee,\u00ef,\u00ec,\u012f,\u012b", "\u017e", - "\u00e7,\u0107", + "\u00ee,\u00ef,\u00ec,\u012f,\u012b", + "\u0148", "\u00df,\u015b", + "\u00e7,\u0107", "!text/double_raqm_laqm", "!text/single_raqm_laqm", + null, + null, + null, + null, + null, + null, + null, "\u00fd", - "\u017a,\u017c", - null, - null, - null, - null, - null, null, null, null, @@ -963,11 +973,7 @@ public final class KeyboardTextsTable { null, null, "\u010f", - null, - null, - null, - null, - null, + "\u017a,\u017c", null, null, null, @@ -975,12 +981,17 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, + null, + null, + null, "\u00f1,\u0144", null, null, - null, - null, - null, "\u0159", null, null, @@ -1005,7 +1016,6 @@ public final class KeyboardTextsTable { null, null, null, - null, "\u00ff" }; @@ -1022,8 +1032,8 @@ public final class KeyboardTextsTable { null, null, null, - "\u00e1,\u00e4,\u00e0,\u00e2,\u00e3,\u0101", "\u00f6,\u00f3,\u00f4,\u00f2,\u00f5,\u0153,\u014d", + "\u00e1,\u00e4,\u00e0,\u00e2,\u00e3,\u0101", null, null, null, @@ -1060,17 +1070,14 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, "\u00e4", + null, "\u00f8", - null, - null, - null, "\u00e6", + null, + null, + null, + null, "\u00e5", null, null, @@ -1092,6 +1099,7 @@ public final class KeyboardTextsTable { null, null, null, + null, "\u00f6" }; @@ -1108,15 +1116,15 @@ public final class KeyboardTextsTable { null, null, "\u00df", - "%,\u00e2,\u00e0,\u00e1,\u00e6,\u00e3,\u00e5,\u0101", "%,\u00f4,\u00f2,\u00f3,\u00f5,\u0153,\u00f8,\u014d", + "%,\u00e2,\u00e0,\u00e1,\u00e6,\u00e3,\u00e5,\u0101", "%,\u00fb,\u00f9,\u00fa,\u016b", null, null, null, null, - null, "\u015b,\u0161", + null, "!text/double_raqm_laqm", "!text/single_raqm_laqm", null, @@ -1187,22 +1195,21 @@ public final class KeyboardTextsTable { null, null, null, - null, - "\u00e0", "\u00fc", + "\u00e9", + null, + null, + null, + null, + null, + null, + null, null, "\u00e4", - "\u00e8", - null, - null, - null, - null, + "\u00e0", "\u00f6", null, - null, - null, - null, - "\u00e9" + "\u00e8" }; private static final String[] TEXTS_el = { @@ -1234,8 +1241,25 @@ public final class KeyboardTextsTable { null, null, null, - "\u0107,\u010d,\u00e7,\u010b", "\u00df,\u0161,\u015b,\u0219,\u015f", + "\u0107,\u010d,\u00e7,\u010b", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, null, null, null, @@ -1286,25 +1310,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, "\u0135", null, null, @@ -1329,7 +1334,10 @@ public final class KeyboardTextsTable { null, null, null, - "\u0125", + null, + null, + null, + null, null, null, null, @@ -1340,26 +1348,27 @@ public final class KeyboardTextsTable { null, "\u011f,\u0121,\u0123", null, + "\u0135", null, null, null, + "\u0125", null, - null, - null, - null, - null, - null, - "\u015d", - null, - "\u0127", "\u016d", null, - "\u011d", + null, + null, + null, + "\u0127", + "\u015d", + "\u0109", null, null, null, null, - "\u0109" + null, + null, + "\u011d" }; private static final String[] TEXTS_es = { @@ -1375,12 +1384,17 @@ public final class KeyboardTextsTable { null, null, null, - "\u00e0,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", "\u00f2,\u00f6,\u00f4,\u00f5,\u00f8,\u0153,\u014d,\u00ba", + "\u00e0,\u00e4,\u00e2,\u00e3,\u00e5,\u0105,\u00e6,\u0101,\u00aa", "\u00f9,\u00fb,\u016b", "\u00e8,\u00eb,\u00ea,\u0119,\u0117,\u0113", - "\u00f1", + null, "\u00ef,\u00ec,\u00ee,\u012f,\u012b", + "\u00f1", + null, + null, + null, + null, null, null, null, @@ -1430,6 +1444,16 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, "!autoColumnOrder!9,\\\\,?,!,#,),(,/,;,\u00a1,',@,:,-,\\\",+,\\%,&,\u00bf" }; @@ -1446,55 +1470,52 @@ public final class KeyboardTextsTable { null, null, "\u0161", - "\u0101,\u00e0,\u00e1,\u00e2,\u00e3,\u00e5,\u00e6,\u0105", "\u00f2,\u00f3,\u00f4,\u0153,\u0151,\u00f8", + "\u0101,\u00e0,\u00e1,\u00e2,\u00e3,\u00e5,\u00e6,\u0105", "\u016b,\u0173,\u00f9,\u00fa,\u00fb,\u016f,\u0171", null, - null, - null, "\u017e", null, + null, "\u00df,\u015b,\u015f", null, null, null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, "\u017c,\u017a", null, null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, "\u00f5", + null, "\u00e4", - null, - null, - null, "\u00f6", + null, + null, + null, + null, "\u00fc" }; @@ -1515,6 +1536,8 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, "\u00f1,\u0144" }; @@ -1542,42 +1565,41 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - "9", - "\u06f9", - null, - "3", - "2", "\u06f0", - "7", - "0,\u066b,\u066c", - "8", - "\u06f8", - "6", - "\u06f3", - "\u06f2", - "\u06f7", + "2", "\u06f4", - "\u06f6", - "1", - "\u06f5", - "4", - "5", - null, + "0,\u066b,\u066c", + "\u06f7", + "\u06f3", "\u06f1", + null, + "6", + "3", + "\u06f9", + "1", + "4", + "\u06f2", + "\u06f8", + "5", + "7", + "\u06f6", + "9", + "\u06f5", + "8", + null, "\u06f3\u06f2\u06f1\u061f", - "!text/morekeys_arabic_diacritics", + null, + null, null, "!text/morekeys_arabic_diacritics", null, null, + null, + null, "\u060c", null, null, - null, - null, - null, + "!text/morekeys_arabic_diacritics", null, null, null, @@ -1585,45 +1607,47 @@ public final class KeyboardTextsTable { null, null, "(|)", + "\u064b", + null, + "\u2264|\u2265", + ">|<", + "[|]", + "\u2039|\u203a", + "}|{", + "\u203a|\u2039", "\u060c", + "\u00ab|\u00bb", + "{|}", + "]|[", + null, + "?,\u00bf", + "\u2265|\u2264", + null, + "<|>", + null, null, "\u2605,\u066d", - "<|>", - "\u2265|\u2264", - "]|[", - "?,\u00bf", ")|(", - "}|{", - "\u00ab|\u00bb", - null, - "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote", - "\u064b", - "{|}", - null, - "\u203a|\u2039", - null, - "\u2039|\u203a", - ">|<", "\u00bb|\u00ab", - "\u2264|\u2265", - "[|]", + "!fixedColumnOrder!4,:,!,\u061f,\u061b,-,!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote", + null, + "\u061f", + null, + null, + null, + "\u061b", + "!fixedColumnOrder!4,\ufd3f|\ufd3e,!text/keyspecs_right_parenthesis_more_keys", + "\u064b", + ";", "\u066a", - null, - null, + "\u061f", + "\\%,\u2030", "!fixedColumnOrder!4,\ufd3e|\ufd3f,!text/keyspecs_left_parenthesis_more_keys", null, null, - "!fixedColumnOrder!4,\ufd3f|\ufd3e,!text/keyspecs_right_parenthesis_more_keys", - null, - null, - "\u061f", - "\u064b", - "\u061f", - "\\%,\u2030", null, "\u266a", - ";", - "\u061b", + null, "!fixedColumnOrder!8, \u0654\u25cc|\u0654, \u0652\u25cc|\u0652, \u064d\u25cc|\u064d, \u064c\u25cc|\u064c, \u0651\u25cc|\u0651, \u064b\u25cc|\u064b,!text/keyspec_symbols_question,!, \u0656\u25cc|\u0656, \u0670\u25cc|\u0670, \u0653\u25cc|\u0653, \u0650\u25cc|\u0650, \u064f\u25cc|\u064f,\u0640, \u0655\u25cc|\u0655, \u064e\u25cc|\u064e", null, null, @@ -1651,12 +1675,18 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, + null, + null, + null, "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_less_than", null, null, null, - null, - null, "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_greater_than" }; @@ -1673,55 +1703,52 @@ public final class KeyboardTextsTable { null, null, "\u0161", - "\u00e6,\u00e0,\u00e1,\u00e2,\u00e3,\u0101", "\u00f8,\u00f4,\u00f2,\u00f3,\u00f5,\u0153,\u014d", - null, - null, + "\u00e6,\u00e0,\u00e1,\u00e2,\u00e3,\u0101", null, null, "\u017e", null, + null, "\u00df,\u015b", null, null, null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, "\u017a,\u017c", null, null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, "\u00f8", + null, "\u00e4", - null, - null, - null, "\u00f6", + null, + null, + null, + null, "\u00e5", null, null, @@ -1743,6 +1770,7 @@ public final class KeyboardTextsTable { null, null, null, + null, "\u00e6" }; @@ -1759,17 +1787,24 @@ public final class KeyboardTextsTable { "\u00e7", null, null, - "\u00e1,\u00e4,\u00e3,\u00e5,\u0101,\u00aa", "%,\u00f6,\u00f2,\u00f3,\u00f5,\u00f8,\u014d,\u00ba", + "\u00e1,\u00e4,\u00e3,\u00e5,\u0101,\u00aa", "\u00fa,\u016b", "%,\u0119,\u0117,\u0113", null, "\u00ec,\u00ed,\u012f,\u012b", null, + null, "%,\u0107,\u010d", null, null, null, + null, + null, + null, + null, + null, + null, "%,\u00ff", null, null, @@ -1831,29 +1866,21 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, - null, - null, - null, - "\u00e4", "\u00e8", + "\u00f6", + null, + null, + null, + null, + null, + null, + null, null, "\u00e0", - "\u00fc", - null, - null, - null, - null, + "\u00e4", "\u00e9", null, - null, - null, - null, - "\u00f6" + "\u00fc" }; private static final String[] TEXTS_gl = { @@ -1873,6 +1900,8 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, "\u00f1,\u0144" }; @@ -1900,46 +1929,44 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - "9", - "\u096f", - null, - "3", - "2", "\u0966", - "7", - "0", - "8", - "\u096e", - "6", - "\u0969", - "\u0968", - "\u096d", + "2", "\u096a", - "\u096c", - "1", - "\u096b", - "4", - "5", - null, + "0", + "\u096d", + "\u0969", "\u0967", + null, + "6", + "3", + "\u096f", + "1", + "4", + "\u0968", + "\u096e", + "5", + "7", + "\u096c", + "9", + "\u096b", + "8", + null, "?\u0967\u0968\u0969", + null, + null, + null, "!autoColumnOrder!8,\\\\,.,',#,),(,/,;,@,:,-,\\\",+,\\%,&", null, + null, + null, + null, + null, + null, + null, "!autoColumnOrder!9,\\\\,.,?,!,#,),(,/,;,',@,:,-,\\\",+,\\%,&", null, null, null, - null, - null, - null, - null, - null, - null, - null, - null, - null, "\u0964", null, null, @@ -1957,6 +1984,11 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, "\u0964" }; @@ -2069,29 +2101,24 @@ public final class KeyboardTextsTable { null, null, null, + null, + "Search", "Pause", - null, - "Done", - null, - "Wait", "Send", null, null, - "Go", null, + "Next", null, + "Done", "Prev", + "Wait", null, null, null, null, null, - "Search", - null, - null, - null, - null, - "Next" + "Go" }; private static final String[] TEXTS_hr = { @@ -2111,15 +2138,14 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, "\u017e", - "\u00e7", + null, + null, "\u015b,\u00df", + "\u00e7", "!text/double_raqm_laqm", "!text/single_raqm_laqm", null, - "\u017a,\u017c", null, null, null, @@ -2140,7 +2166,10 @@ public final class KeyboardTextsTable { null, null, null, - "\u0111" + null, + null, + "\u0111", + "\u017a,\u017c" }; private static final String[] TEXTS_hu = { @@ -2156,8 +2185,8 @@ public final class KeyboardTextsTable { null, null, null, - "\u00e0,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", "\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", + "\u00e0,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", "\u00fb,\u00f9,\u016b", "\u00e8,\u00ea,\u00eb,\u0119,\u0117,\u0113", null, @@ -2218,6 +2247,7 @@ public final class KeyboardTextsTable { null, null, null, + null, "!text/morekeys_punctuation", null, null, @@ -2230,14 +2260,19 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, "\u0589", null, null, + null, + null, + null, + null, + null, + null, + null, + null, + null, "\u055d", - "!autoColumnOrder!8,\\,,\u055e,\u055c,.,\u055a,\u0559,?,!,\u055d,\u055b,\u058a,\u00bb,\u00ab,\u055f,;,:", null, null, null, @@ -2246,10 +2281,7 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, + "!autoColumnOrder!8,\\,,\u055e,\u055c,.,\u055a,\u0559,?,!,\u055d,\u055b,\u058a,\u00bb,\u00ab,\u055f,;,:", "\u0589", null, null, @@ -2310,12 +2342,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, - null, "\u055c,\u00a1" }; @@ -2332,8 +2358,8 @@ public final class KeyboardTextsTable { null, null, null, - "\u00e5,\u00e0,\u00e2,\u00e3,\u0101", "\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", + "\u00e5,\u00e0,\u00e2,\u00e3,\u0101", "\u00fc,\u00fb,\u00f9,\u016b", "\u00eb,\u00e8,\u00ea,\u0119,\u0117,\u0113", null, @@ -2343,6 +2369,13 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, + null, + null, "\u00fd", null, null, @@ -2359,21 +2392,11 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, - null, "\u00f0", null, null, null, null, - null, - null, - null, - null, "\u00fe", null, null, @@ -2409,6 +2432,10 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, "\u00ff" }; @@ -2425,8 +2452,8 @@ public final class KeyboardTextsTable { null, null, null, - "\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101,\u00aa", "\u00f3,\u00f4,\u00f6,\u00f5,\u0153,\u00f8,\u014d,\u00ba", + "\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101,\u00aa", "\u00fa,\u00fb,\u00fc,\u016b", "\u00ea,\u00eb,\u0119,\u0117,\u0113", null, @@ -2504,22 +2531,21 @@ public final class KeyboardTextsTable { null, null, null, - null, - "\u00e0", "\u00fc", + "\u00e9", + null, + null, + null, + null, + null, + null, + null, null, "\u00e4", - "\u00e8", - null, - null, - null, - null, + "\u00e0", "\u00f6", null, - null, - null, - null, - "\u00e9" + "\u00e8" }; private static final String[] TEXTS_iw = { @@ -2587,32 +2613,29 @@ public final class KeyboardTextsTable { null, null, null, - null, "(|)", null, null, - "\u2605", - "<|>", - "\u2265|\u2264", - "]|[", - null, - ")|(", + "\u2264|\u2265", + ">|<", + "[|]", + "\u2039|\u203a", "}|{", - "\u00ab|\u00bb", - null, - null, - null, - "{|}", - null, "\u203a|\u2039", null, - "\u2039|\u203a", - ">|<", + "\u00ab|\u00bb", + "{|}", + "]|[", + null, + null, + "\u2265|\u2264", + null, + "<|>", + null, + null, + "\u2605", + ")|(", "\u00bb|\u00ab", - "\u2264|\u2265", - "[|]", - null, - null, null, null, null, @@ -2732,21 +2755,26 @@ public final class KeyboardTextsTable { null, null, null, - null, "\u0451", null, + null, + null, + null, + null, + null, "\u0438", + "\u044a", + null, + null, + "\u044d", + "\u0449", + null, "\u044b", null, null, null, null, - "\u0449", null, - "\u044a", - null, - null, - "\u044d", null, null, null, @@ -2792,31 +2820,27 @@ public final class KeyboardTextsTable { null, null, "\u04af,\u04b1", + "\u04e9", null, + null, + null, + null, + null, + null, + null, + "\u04a3", "\u0456", null, null, null, null, - null, - null, - null, - null, - null, - null, - null, - null, "\u0493", null, - "\u04a3", - null, - null, - null, - "\u04e9", null, null, null, null, + "\u04bb", null, null, "\u04d9", @@ -2826,8 +2850,8 @@ public final class KeyboardTextsTable { null, null, null, - "\u049b", - "\u04bb" + null, + "\u049b" }; private static final String[] TEXTS_km = { @@ -2965,13 +2989,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, - null, - null, "\u17db,\u00a2,\u00a3,\u20ac,\u00a5,\u20b1" }; @@ -2986,7 +3003,42 @@ public final class KeyboardTextsTable { null, null, null, - "\u20b9" + "\u20b9", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + "\u0ce6", + "2", + "\u0cea", + "0", + "\u0ced", + "\u0ce9", + "\u0ce7", + null, + "6", + "3", + "\u0cef", + "1", + "4", + "\u0ce8", + "\u0cee", + "5", + "7", + "\u0cec", + "9", + "\u0ceb", + "8", + null, + "?\u0ce7\u0ce8\u0ce9" }; private static final String[] TEXTS_ky = { @@ -3038,21 +3090,26 @@ public final class KeyboardTextsTable { null, null, null, - null, "\u0451", null, + null, + null, + null, + null, + null, "\u0438", + "\u044a", + null, + null, + "\u044d", + "\u0449", + null, "\u044b", null, null, null, null, - "\u0449", null, - "\u044a", - null, - null, - "\u044d", null, null, null, @@ -3098,6 +3155,7 @@ public final class KeyboardTextsTable { null, null, "\u04af", + "\u04e9", null, null, null, @@ -3105,20 +3163,7 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - "\u04a3", - null, - null, - null, - "\u04e9" + "\u04a3" }; private static final String[] TEXTS_lo = { @@ -3152,8 +3197,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, "\u017e" }; @@ -3170,37 +3213,42 @@ public final class KeyboardTextsTable { "\u010d", null, "\u0161", - "\u00e0,\u00e1,\u00e2,\u00e3,\u00e4,\u00e5,\u00e6,\u0105", "\u00f2,\u00f3,\u00f4,\u00f5,\u00f6,\u0153,\u0151,\u00f8", + "\u00e0,\u00e1,\u00e2,\u00e3,\u00e4,\u00e5,\u00e6,\u0105", "\u0173,\u00f9,\u00fa,\u00fb,\u00fc,\u016f,\u0171", "\u0117,\u00e8,\u00e9,\u00ea,\u00eb,\u0119,\u011b", - "\u0146", - "\u012f,\u00ec,\u00ed,\u00ee,\u00ef,\u0131", "\u017e", - "\u00e7,\u0107", + "\u012f,\u00ec,\u00ed,\u00ee,\u00ef,\u0131", + "\u0146", "\u00df,\u015b,\u015f", + "\u00e7,\u0107", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, null, null, null, - "\u017c,\u017a", null, null, "\u0123", null, null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, + "\u017c,\u017a", null, null, null, @@ -3219,9 +3267,6 @@ public final class KeyboardTextsTable { "\u00f1,\u0144", null, null, - null, - null, - null, "\u0157", null, null, @@ -3233,7 +3278,6 @@ public final class KeyboardTextsTable { null, null, null, - null, "\u013c", null, null, @@ -3264,28 +3308,31 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, - "\u0142,\u013a,\u013e", - null, - null, - null, - null, - null, - null, "\u0137", null, null, null, null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, "\u011f", null, null, null, - "\u0159,\u0155" + null, + "\u0159,\u0155", + null, + "\u0142,\u013a,\u013e" }; private static final String[] TEXTS_mk = { @@ -3337,7 +3384,6 @@ public final class KeyboardTextsTable { null, null, null, - null, "\u0450", null, null, @@ -3398,7 +3444,7 @@ public final class KeyboardTextsTable { null, null, null, - null, + "\u045c", null, null, null, @@ -3406,16 +3452,19 @@ public final class KeyboardTextsTable { null, "\u0437", null, - "\u045c", + "\u0455", + null, + null, + null, + null, null, null, - "\u045d", "\u0453", null, null, null, null, - "\u0455" + "\u045d" }; private static final String[] TEXTS_ml = { @@ -3470,30 +3519,28 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - "9", - "\u096f", - null, - "3", - "2", "\u0966", - "7", - "0", - "8", - "\u096e", - "6", - "\u0969", - "\u0968", - "\u096d", + "2", "\u096a", - "\u096c", - "1", - "\u096b", - "4", - "5", - null, + "0", + "\u096d", + "\u0969", "\u0967", + null, + "6", + "3", + "\u096f", + "1", + "4", + "\u0968", + "\u096e", + "5", + "7", + "\u096c", + "9", + "\u096b", + "8", + null, "?\u0967\u0968\u0969" }; @@ -3551,6 +3598,18 @@ public final class KeyboardTextsTable { null, null, null, + null, + "\u104a", + null, + null, + null, + null, + null, + null, + "\u104b", + null, + null, + null, "\u104a", null, null, @@ -3561,40 +3620,19 @@ public final class KeyboardTextsTable { null, null, null, - "\u104b", + null, + null, + null, + null, null, null, null, "!autoColumnOrder!9,\u104a,.,?,!,#,),(,/,;,...,',@,:,-,\\\",+,\\%,&", - null, - null, - null, - null, - null, - null, - null, - null, - null, - "\\", - "\u104a", - null, "\u104b", null, null, null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, + "\\", null, null, null, @@ -3681,17 +3719,14 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, "\u00f6", + null, "\u00e6", - null, - null, - null, "\u00f8", + null, + null, + null, + null, "\u00e5", null, null, @@ -3713,6 +3748,7 @@ public final class KeyboardTextsTable { null, null, null, + null, "\u00e4" }; @@ -3740,46 +3776,44 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - "9", - "\u096f", - null, - "3", - "2", "\u0966", - "7", - "0", - "8", - "\u096e", - "6", - "\u0969", - "\u0968", - "\u096d", + "2", "\u096a", - "\u096c", - "1", - "\u096b", - "4", - "5", - null, + "0", + "\u096d", + "\u0969", "\u0967", + null, + "6", + "3", + "\u096f", + "1", + "4", + "\u0968", + "\u096e", + "5", + "7", + "\u096c", + "9", + "\u096b", + "8", + null, "?\u0967\u0968\u0969", + null, + null, + null, "!autoColumnOrder!8,.,\\\\,',#,),(,/,;,@,:,-,\\\",+,\\%,&", null, + null, + null, + null, + null, + null, + null, "!autoColumnOrder!9,.,\\\\,?,!,#,),(,/,;,',@,:,-,\\\",+,\\%,&", null, null, null, - null, - null, - null, - null, - null, - null, - null, - null, - null, "\u0964", null, null, @@ -3797,6 +3831,11 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, "\u0964" }; @@ -3813,8 +3852,8 @@ public final class KeyboardTextsTable { null, null, null, - "\u00e6,\u00e3,\u00e5,\u0101", "\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", + "\u00e6,\u00e3,\u00e5,\u0101", "\u00fb,\u00f9,\u016b", "\u0119,\u0117,\u0113" }; @@ -3832,15 +3871,38 @@ public final class KeyboardTextsTable { "\u0107", null, "\u015b", - "\u00e1,\u00e0,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", "\u00f6,\u00f4,\u00f2,\u00f5,\u0153,\u00f8,\u014d", + "\u00e1,\u00e0,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", null, "\u00e8,\u00e9,\u00ea,\u00eb,\u0117,\u0113", - "\u0144", - null, "\u017c,\u017a", - "\u00e7,\u010d", + null, + "\u0144", "\u00df,\u0161", + "\u00e7,\u010d", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, null, null, null, @@ -3860,24 +3922,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, "\u00f1", null, null, @@ -3892,10 +3936,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, "\u0142" }; @@ -3912,13 +3952,14 @@ public final class KeyboardTextsTable { "\u00e7", null, null, - "\u00e4,\u00e5,\u00e6,\u00aa", "\u00f2,\u00f6,\u0153,\u00f8,\u014d,\u00ba", + "\u00e4,\u00e5,\u00e6,\u00aa", "\u00f9,\u00fb,\u016b", "\u00e8,\u0119,\u0117,\u0113,\u00eb", null, "\u00ee,\u00ec,\u00ef,\u012f,\u012b", null, + null, "\u010d,\u0107", null, null, @@ -3987,9 +4028,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, "\u00e7" }; @@ -4013,14 +4051,13 @@ public final class KeyboardTextsTable { null, null, "\u0219", - "\u00e3,\u00e0,\u00e1,\u00e4,\u00e6,\u00e5,\u0101", null, + "\u00e3,\u00e0,\u00e1,\u00e4,\u00e6,\u00e5,\u0101", null, null, null, "\u00ef,\u00ec,\u00ed,\u012f,\u012b", null, - null, "\u00df,\u015b,\u0161", null, null, @@ -4053,8 +4090,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, "\u021b" }; @@ -4107,21 +4142,21 @@ public final class KeyboardTextsTable { null, null, null, - null, "\u0451", null, + null, + null, + null, + null, + null, "\u0438", - "\u044b", - null, - null, - null, - null, - "\u0449", - null, "\u044a", null, null, - "\u044d" + "\u044d", + "\u0449", + null, + "\u044b" }; private static final String[] TEXTS_si = { @@ -4151,24 +4186,25 @@ public final class KeyboardTextsTable { "\u010d", null, "\u0161", - "\u0101,\u00e0,\u00e2,\u00e3,\u00e5,\u00e6,\u0105", "\u00f6,\u00f2,\u00f5,\u0153,\u0151,\u00f8", + "\u0101,\u00e0,\u00e2,\u00e3,\u00e5,\u00e6,\u0105", "\u016f,\u00fc,\u016b,\u0173,\u00f9,\u00fb,\u0171", "\u011b,\u0113,\u0117,\u00e8,\u00ea,\u00eb,\u0119", - "\u0148", - "\u012b,\u012f,\u00ec,\u00ee,\u00ef,\u0131", "\u017e", - "\u00e7,\u0107", + "\u012b,\u012f,\u00ec,\u00ee,\u00ef,\u0131", + "\u0148", "\u00df,\u015b,\u015f", + "\u00e7,\u0107", "!text/double_raqm_laqm", "!text/single_raqm_laqm", + null, + null, + null, + null, + null, + null, + null, "\u00fd", - "\u017c,\u017a", - null, - null, - null, - null, - null, null, null, null, @@ -4185,11 +4221,7 @@ public final class KeyboardTextsTable { null, null, "\u010f", - null, - null, - null, - null, - null, + "\u017c,\u017a", null, null, null, @@ -4197,12 +4229,17 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, + null, + null, + null, "\u0146,\u00f1,\u0144", null, null, - null, - null, - null, "\u0155", null, null, @@ -4214,7 +4251,6 @@ public final class KeyboardTextsTable { null, null, null, - null, "\u013e,\u013a", null, null, @@ -4250,7 +4286,8 @@ public final class KeyboardTextsTable { null, null, null, - "\u013c,\u0142", + null, + null, null, null, null, @@ -4268,9 +4305,7 @@ public final class KeyboardTextsTable { null, "\u0159,\u0157", null, - null, - null, - null, + "\u013c,\u0142", null, null, null, @@ -4299,11 +4334,11 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, "\u017e", - "\u0107", null, + null, + null, + "\u0107", "!text/double_raqm_laqm", "!text/single_raqm_laqm" }; @@ -4357,7 +4392,6 @@ public final class KeyboardTextsTable { null, null, null, - null, "\u0450", null, null, @@ -4418,7 +4452,7 @@ public final class KeyboardTextsTable { null, null, null, - null, + "\u045b", null, null, null, @@ -4426,16 +4460,19 @@ public final class KeyboardTextsTable { null, "\u0455", null, - "\u045b", + "\u0437", + null, + null, + null, + null, null, null, - "\u045d", "\u0452", null, null, null, null, - "\u0437" + "\u045d" }; private static final String[] TEXTS_sr_ZZ = { @@ -4455,8 +4492,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, "\u017e,%", null, null, @@ -4484,6 +4519,9 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, "\u0111,%", null, null, @@ -4547,29 +4585,23 @@ public final class KeyboardTextsTable { null, null, null, + "Tra\u017ei", "Pauza", - null, - "Gotov", - null, - "\u010cekaj", "\u0160alji", null, null, - "Idi", null, + "Sled", null, + "Gotov", "Preth", + "\u010cekaj", null, null, null, null, null, - "Tra\u017ei", - null, - null, - null, - null, - "Sled" + "Idi" }; private static final String[] TEXTS_sv = { @@ -4585,8 +4617,8 @@ public final class KeyboardTextsTable { null, null, null, - "\u00e6,\u00e1,\u00e0,\u00e2,\u0105,\u00e3", "\u00f8,\u0153,\u00f3,\u00f2,\u00f4,\u00f5,\u014d", + "\u00e6,\u00e1,\u00e0,\u00e2,\u0105,\u00e3", null, "\u00e8,\u00ea,\u00eb,\u0119", null, @@ -4623,17 +4655,14 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, "\u00f8,\u0153", + null, "\u00e4", - null, - null, - null, "\u00f6", + null, + null, + null, + null, "\u00e5", null, null, @@ -4655,6 +4684,7 @@ public final class KeyboardTextsTable { null, null, null, + null, "\u00e6" }; @@ -4675,6 +4705,8 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, "\u00f1", null, null, @@ -4686,6 +4718,21 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, "g\\'" }; @@ -4767,6 +4814,8 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, "\u00f1,\u0144" }; @@ -4783,15 +4832,32 @@ public final class KeyboardTextsTable { "\u00e7", null, "\u015f", - null, "\u00f4,\u0153,\u00f2,\u00f3,\u00f5,\u00f8,\u014d", + null, "\u00fb,\u00f9,\u00fa,\u016b", null, null, "\u00ee,\u00ef,\u00ec,\u00ed,\u012f,\u012b", null, - "\u0107,\u010d", "\u00df,\u015b,\u0161", + "\u0107,\u010d", + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, null, null, null, @@ -4853,18 +4919,31 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, "\u0438", + "\u044a", + null, + null, + "\u0454", + "\u0449", + null, "\u0456", null, null, null, null, - "\u0449", - null, - "\u044a", null, null, - "\u0454", + null, + null, + null, + null, + null, + null, + null, null, null, null, @@ -4916,14 +4995,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, - null, - null, - null, "\u0491" }; @@ -4944,9 +5015,16 @@ public final class KeyboardTextsTable { null, null, null, + "\u017e", + null, "\u0148,\u00f1", null, - "\u017e", + null, + null, + null, + null, + null, + null, null, null, null, @@ -4955,6 +5033,16 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, "\u011f" }; @@ -4982,6 +5070,13 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, + null, + null, "\u1ef3,\u00fd,\u1ef7,\u1ef9,\u1ef5", null, null, @@ -4998,12 +5093,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, - null, "\u0111" }; @@ -5024,6 +5113,8 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, "\u00f1" }; @@ -5044,9 +5135,16 @@ public final class KeyboardTextsTable { null, null, null, + "\u017a,\u017c,\u017e", + null, "\u00f1,\u0144,\u0146,\u0148,\u0149,\u014b", null, - "\u017a,\u017c,\u017e", + null, + null, + null, + null, + null, + null, null, null, null, @@ -5055,33 +5153,23 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, "\u011d,\u011f,\u0121,\u0123", null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, "\u010f,\u0111,\u00f0", null, null, null, null, - null, - null, - null, - null, "\u00fe,\u0163,\u0165,\u0167", null, null, @@ -5092,12 +5180,16 @@ public final class KeyboardTextsTable { null, null, null, - "\u0155,\u0157,\u0159", null, null, null, null, null, + "\u0155,\u0157,\u0159", + null, + null, + null, + null, null, null, null, @@ -5134,18 +5226,6 @@ public final class KeyboardTextsTable { null, null, null, - null, - null, - null, - null, - null, - null, - null, - null, - "\u0125", - null, - null, - null, "\u0137,\u0138", null, null, @@ -5159,8 +5239,21 @@ public final class KeyboardTextsTable { null, null, null, + null, + null, + null, + null, + null, + null, "\u0135", null, + null, + null, + "\u0125", + null, + null, + null, + null, "\u0175" }; @@ -5177,285 +5270,285 @@ public final class KeyboardTextsTable { EMPTY, "$", EMPTY, - "\u00e0,\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", "\u00f3,\u00f4,\u00f6,\u00f2,\u0153,\u00f8,\u014d,\u00f5", + "\u00e0,\u00e1,\u00e2,\u00e4,\u00e6,\u00e3,\u00e5,\u0101", "\u00fa,\u00fb,\u00fc,\u00f9,\u016b", "\u00e9,\u00e8,\u00ea,\u00eb,\u0113", EMPTY, "\u00ed,\u00ee,\u00ef,\u012b,\u00ec", EMPTY, - "\u00e7", "\u00df", + "\u00e7", "!text/double_laqm_raqm", "!text/single_laqm_raqm", + "0", + EMPTY, + "4", + EMPTY, + "7", + "3", + "1", EMPTY, EMPTY, EMPTY, "9", EMPTY, EMPTY, - EMPTY, - "0", - EMPTY, - EMPTY, - EMPTY, + "2", "8", EMPTY, - "3", - "2", - "7", - "4", + EMPTY, "6", EMPTY, "5", EMPTY, EMPTY, - EMPTY, - "1", "?123", + EMPTY, + EMPTY, + EMPTY, "!text/morekeys_tablet_punctuation", + "\u00f8", + EMPTY, + "\u00e4", + "\u00f6", + ",", + EMPTY, EMPTY, "!text/morekeys_punctuation", - EMPTY, - EMPTY, - ",", - EMPTY, - "\u00f8", - "\u00e4", - EMPTY, - "\u00f1", - EMPTY, - "\u00f6", "\u00e5", EMPTY, + EMPTY, ".", EMPTY, - "(", - ",", - "!autoColumnOrder!8,\\,,?,!,#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,',@,:,-,\",+,\\%,&", - "\u2020,\u2021,\u2605", - "<", - "\u2265", - "]", - "\u00bf", - ")", - "}", - "\u00ab", - EMPTY, - EMPTY, - EMPTY, - "{", - ".", - "\u203a", - "\u00e6", - "\u2039", - ">", - "\u00bb", - "\u2264", - "[", - "%", - EMPTY, "\u00f1", - "!autoColumnOrder!3,!text/keyspecs_left_parenthesis_more_keys", + "(", EMPTY, EMPTY, + "\u2264", + ">", + "[", + "\u2039", + "}", + "\u203a", + ",", + "\u00ab", + "{", + "]", + EMPTY, + "\u00bf", + "\u2265", + "\u00e6", + "<", + "!autoColumnOrder!8,\\,,?,!,#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,',@,:,-,\",+,\\%,&", + ".", + "\u2020,\u2021,\u2605", + ")", + "\u00bb", + EMPTY, + "\u00f1", + EMPTY, + EMPTY, + EMPTY, + EMPTY, + ";", "!autoColumnOrder!3,!text/keyspecs_right_parenthesis_more_keys", EMPTY, EMPTY, + "%", "?", - EMPTY, - EMPTY, "\u2030", + "!autoColumnOrder!3,!text/keyspecs_left_parenthesis_more_keys", + EMPTY, + EMPTY, EMPTY, "\u266a,\u2665,\u2660,\u2666,\u2663", EMPTY, - ";", - EMPTY, - EMPTY, - EMPTY, - "!string/label_pause_key", - EMPTY, - "!string/label_done_key", - EMPTY, - "!string/label_wait_key", - "!string/label_send_key", - EMPTY, - EMPTY, - "!string/label_go_key", - EMPTY, - EMPTY, - "!string/label_previous_key", - EMPTY, - EMPTY, EMPTY, EMPTY, EMPTY, "!string/label_search_key", + "!string/label_pause_key", + "!string/label_send_key", EMPTY, EMPTY, EMPTY, - "!autoColumnOrder!8,\\,,?,!,#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,',@,:,-,\",+,\\%,&", "!string/label_next_key", EMPTY, - "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_left_double_angle_quote", + "!string/label_done_key", + "!string/label_previous_key", + "!string/label_wait_key", + "!autoColumnOrder!8,\\,,?,!,#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,',@,:,-,\",+,\\%,&", + EMPTY, + EMPTY, + EMPTY, + EMPTY, + "!string/label_go_key", + EMPTY, + EMPTY, + EMPTY, EMPTY, - "q", EMPTY, EMPTY, "y", - "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_right_double_angle_quote", - "w", EMPTY, "\u00a2,\u00a3,\u20ac,\u00a5,\u20b1", EMPTY, EMPTY, + EMPTY, + "q", "x", + EMPTY, + "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_left_double_angle_quote", "\u00b1", "\u00a1,\u203d", - "$", - "\\\\", - "^", - "1", - "),],},>", - "\u201c,\u201e,\u201d", EMPTY, - "2", + "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_right_double_angle_quote", + "w", + "!hasLabels!,!text/label_previous_key|!code/key_action_previous", + ".com", + "#", + EMPTY, + "!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote", + "$", + EMPTY, + "[", + "!fixedColumnOrder!2,!hasLabels!,!text/keylabel_time_am,!text/keylabel_time_pm", + "\"", + EMPTY, + ";", + "\uff0a\uff03", + "0", + "!", + "&", + EMPTY, + "!text/keyspec_less_than,!text/keyspec_left_curly_bracket,!text/keyspec_left_square_bracket", EMPTY, EMPTY, "= \\\\ <", - ";", - EMPTY, - "!fixedColumnOrder!5,!text/double_quotes,!text/double_angle_quotes", - "\\%", EMPTY, EMPTY, - ">", - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - EMPTY, - "'", - EMPTY, - ".com", - EMPTY, - "\\%", - EMPTY, - "\u201c,\u201d,\u201e", - EMPTY, - "~ [ <", - "\u2018,\u2019,\u201a", - "9", - EMPTY, - "!icon/action_cut|!code/action_cut", - "!fixedColumnOrder!6,!text/double_quotes,!text/single_quotes,!text/double_angle_quotes,!text/single_angle_quotes", - EMPTY, - "\u201d,\u201e,\u201c", - "#", - "!fixedColumnOrder!5,!text/single_quotes,!text/single_angle_quotes", - EMPTY, - "\u2074,\u2084", - "\u00b9,\u2081,\u00bd,\u2153,\u00bc,\u215b", - "*", - "!text/keyspec_less_than,!text/keyspec_left_curly_bracket,!text/keyspec_left_square_bracket", - EMPTY, - "6", - "#", - "\"", - "7", - "!hasLabels!,!text/label_next_key|!code/key_action_next", - EMPTY, - EMPTY, - "\u2070,\u2080,\u207f,\u2205", - "&", - EMPTY, - EMPTY, - "@", - EMPTY, - EMPTY, - "!text/keyspec_right_single_angle_quote,!text/keyspec_left_single_angle_quote", - "\u2076,\u2086", - "!", - "}", - "$,\u00a2,\u20ac,\u00a3,\u00a5,\u20b1", - "+,=", - "\u2078,\u2088", - "!icon/settings_key|!code/key_settings", - "]", - "-,\u2013,\u2014,_", - "%", - "[", - "(", - "!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote", "\u201e,\u201c,\u201d", - "\u2077,\u2087,\u215e", - "<", - EMPTY, - "\u2018,\u201a,\u2019", - EMPTY, - EMPTY, - "\u201a,\u2018,\u2019", - "@", - "AM", - "\u00b3,\u2083,\u00be,\u215c", - "!icon/action_paste|!code/action_paste", - EMPTY, - ")", - "\u2079,\u2089", - EMPTY, - EMPTY, - EMPTY, + "\u2070,\u2080,\u207f,\u2205", + "!icon/action_cut|!code/action_cut", + ":", EMPTY, "!icon/action_select_all|!code/action_select_all", - "!icon/action_copy|!code/action_copy", - "!fixedColumnOrder!2,!hasLabels!,!text/keylabel_time_am,!text/keylabel_time_pm", + "\u201a,\u2018,\u2019", + "%", + "\u2076,\u2086", EMPTY, - "|", EMPTY, - "\u2019,\u201a,\u2018", - "!fixedColumnOrder!4,!needsDividers!,!icon/action_switch_language|!code/action_switch_language,!icon/action_text_edit|!code/action_text_edit,!icon/action_clipboard_history|!code/action_clipboard_history,!icon/action_emoji|!code/action_emoji,!icon/action_undo|!code/action_undo,!icon/action_redo|!code/action_redo", - "8", EMPTY, - "\u00b2,\u2082,\u2154", - "!text/keyspec_left_single_angle_quote,!text/keyspec_right_single_angle_quote", - "!icon/action_settings|!code/action_settings", + "1", "3", - "{", + "AM", EMPTY, EMPTY, - "5", + "!fixedColumnOrder!4,!needsDividers!,!icon/action_switch_language|!code/action_switch_language,!icon/action_text_edit|!code/action_text_edit,!icon/action_clipboard_history|!code/action_clipboard_history,!icon/action_emoji|!code/action_emoji,!icon/action_undo|!code/action_undo,!icon/action_redo|!code/action_redo", "=", + "!text/keyspec_right_single_angle_quote,!text/keyspec_left_single_angle_quote", + "!text/keyspec_right_double_angle_quote,!text/keyspec_left_double_angle_quote", EMPTY, + "!icon/action_paste|!code/action_paste", + "#", + "\u201c,\u201d,\u201e", + "!icon/shortcut_key|!code/key_shortcut", + "\u2018,\u201a,\u2019", + "\u2075,\u2085,\u215d", + "\u2077,\u2087,\u215e", + "!fixedColumnOrder!5,!text/single_quotes,!text/single_angle_quotes", + EMPTY, + EMPTY, + EMPTY, + EMPTY, + "7", + "(", + "!fixedColumnOrder!5,!text/double_quotes,!text/double_angle_quotes", + "!icon/action_undo|!code/action_undo", + "!fixedColumnOrder!4,!needsDividers!,!icon/action_switch_language|!code/action_switch_language,!icon/action_text_edit|!code/action_text_edit,!icon/action_clipboard_history|!code/action_clipboard_history,!icon/action_emoji|!code/action_emoji,!icon/previous_key|!code/key_action_previous,!icon/next_key|!code/key_action_next,!icon/action_undo|!code/action_undo,!icon/action_redo|!code/action_redo", + "!fixedColumnOrder!6,!text/double_quotes,!text/single_quotes,!text/double_angle_quotes,!text/single_angle_quotes", + "\u00b2,\u2082,\u2154", + EMPTY, + EMPTY, + "+,=", + "@", + EMPTY, + EMPTY, + "}", + "*", + EMPTY, + EMPTY, + EMPTY, + "\u2074,\u2084", + "-,\u2013,\u2014,_", EMPTY, "PM", EMPTY, - "!icon/action_redo|!code/action_redo", + EMPTY, + "\\%", + "2", + "!hasLabels!,.net,.org,.gov,.edu", "&,|", EMPTY, EMPTY, - "!fixedColumnOrder!4,!needsDividers!,!icon/action_switch_language|!code/action_switch_language,!icon/action_text_edit|!code/action_text_edit,!icon/action_clipboard_history|!code/action_clipboard_history,!icon/action_emoji|!code/action_emoji,!icon/previous_key|!code/key_action_previous,!icon/next_key|!code/key_action_next,!icon/action_undo|!code/action_undo,!icon/action_redo|!code/action_redo", + "!icon/action_copy|!code/action_copy", + "6", EMPTY, - EMPTY, - ":", - "?,/", - "!icon/action_undo|!code/action_undo", - "!text/keyspec_greater_than,!text/keyspec_right_curly_bracket,!text/keyspec_right_square_bracket", - "0", - "!hasLabels!,!text/label_previous_key|!code/key_action_previous", - "!text/keyspec_right_double_angle_quote,!text/keyspec_left_double_angle_quote", - "\u2075,\u2085,\u215d", - "!icon/shortcut_key|!code/key_shortcut", "4", EMPTY, - "\uff0a\uff03", - "*", - "!", - EMPTY, - "(,[,{,<", - "$,\u20ac,\u00a3,\u00a5,\u00a2", + "\u00b3,\u2083,\u00be,\u215c", + "@", + "!text/keyspec_currency,$", + "!text/keyspec_left_single_angle_quote,!text/keyspec_right_single_angle_quote", + "\u201c,\u201e,\u201d", "123", - "!hasLabels!,.net,.org,.gov,.edu" + EMPTY, + "!icon/action_redo|!code/action_redo", + EMPTY, + "\u2078,\u2088", + EMPTY, + "]", + EMPTY, + EMPTY, + "!text/keyspec_greater_than,!text/keyspec_right_curly_bracket,!text/keyspec_right_square_bracket", + "^", + EMPTY, + ">", + "!icon/settings_key|!code/key_settings", + "\u2079,\u2089", + "(,[,{,<", + "?,/", + "\u2018,\u2019,\u201a", + "8", + "9", + EMPTY, + "{", + EMPTY, + "),],},>", + EMPTY, + "<", + EMPTY, + "!icon/action_settings|!code/action_settings", + EMPTY, + EMPTY, + "$,\u00a2,\u20ac,\u00a3,\u00a5,\u20b1", + EMPTY, + "\\%", + "5", + EMPTY, + "|", + "\u2019,\u201a,\u2018", + EMPTY, + "!", + "!hasLabels!,!text/label_next_key|!code/key_action_next", + "\u00b9,\u2081,\u00bd,\u2153,\u00bc,\u215b", + "'", + "*", + ")", + "~ [ <", + "\u201d,\u201e,\u201c", + "\\\\" }; diff --git a/java/src/org/futo/inputmethod/latin/settings/LongPressKeySettings.kt b/java/src/org/futo/inputmethod/latin/settings/LongPressKeySettings.kt index d2689feda..ad6cb9486 100644 --- a/java/src/org/futo/inputmethod/latin/settings/LongPressKeySettings.kt +++ b/java/src/org/futo/inputmethod/latin/settings/LongPressKeySettings.kt @@ -103,12 +103,17 @@ fun List.toEncodedString(): String { class LongPressKeySettings(val context: Context) { private val currentSetting = context.getSettingBlocking(LongPressKeyLayoutSetting).toLongPressKeyLayoutItems() - fun joinMoreKeys(keys: List): String = - keys.map { - it.replace("\\", "\\\\") - .replace(",", "\\,") - }.joinToString(",") + val currentOrder: List + get() = currentSetting + companion object { + @JvmStatic + fun joinMoreKeys(keys: List): String = + keys.map { + it.replace("\\", "\\\\") + .replace(",", "\\,") + }.joinToString(",") + } fun reorderMoreKeys(moreKeys: String): String = joinMoreKeys(reorderMoreKeys( diff --git a/java/src/org/futo/inputmethod/v2keyboard/BaseKey.kt b/java/src/org/futo/inputmethod/v2keyboard/BaseKey.kt index 2637c2e20..bfe4dbc98 100644 --- a/java/src/org/futo/inputmethod/v2keyboard/BaseKey.kt +++ b/java/src/org/futo/inputmethod/v2keyboard/BaseKey.kt @@ -10,6 +10,7 @@ import org.futo.inputmethod.keyboard.internal.KeyboardParams import org.futo.inputmethod.keyboard.internal.MoreKeySpec import org.futo.inputmethod.latin.common.Constants import org.futo.inputmethod.latin.common.StringUtils +import org.futo.inputmethod.latin.settings.LongPressKeySettings /** * Width tokens for keys. Rather than explicitly specifying a width in percentage as is common in @@ -76,74 +77,6 @@ enum class KeyWidth { Custom4, } -internal fun computeMoreKeysFlags(moreKeys: Array, params: KeyboardParams): Int { - // Get maximum column order number and set a relevant mode value. - var moreKeysColumnAndFlags = - (KeyConsts.MORE_KEYS_MODE_MAX_COLUMN_WITH_AUTO_ORDER - or params.mMaxMoreKeysKeyboardColumn) - var value: Int - if ((MoreKeySpec.getIntValue( - moreKeys, - KeyConsts.MORE_KEYS_AUTO_COLUMN_ORDER, - -1 - ).also { - value = it - }) > 0 - ) { - // Override with fixed column order number and set a relevant mode value. - moreKeysColumnAndFlags = - (KeyConsts.MORE_KEYS_MODE_FIXED_COLUMN_WITH_AUTO_ORDER - or (value and KeyConsts.MORE_KEYS_COLUMN_NUMBER_MASK)) - } - if ((MoreKeySpec.getIntValue( - moreKeys, - KeyConsts.MORE_KEYS_FIXED_COLUMN_ORDER, - -1 - ).also { - value = it - }) > 0 - ) { - // Override with fixed column order number and set a relevant mode value. - moreKeysColumnAndFlags = - (KeyConsts.MORE_KEYS_MODE_FIXED_COLUMN_WITH_FIXED_ORDER - or (value and KeyConsts.MORE_KEYS_COLUMN_NUMBER_MASK)) - } - if (MoreKeySpec.getBooleanValue( - moreKeys, - KeyConsts.MORE_KEYS_HAS_LABELS - ) - ) { - moreKeysColumnAndFlags = - moreKeysColumnAndFlags or KeyConsts.MORE_KEYS_FLAGS_HAS_LABELS - } - if (MoreKeySpec.getBooleanValue( - moreKeys, - KeyConsts.MORE_KEYS_NEEDS_DIVIDERS - ) - ) { - moreKeysColumnAndFlags = - moreKeysColumnAndFlags or KeyConsts.MORE_KEYS_FLAGS_NEEDS_DIVIDERS - } - if (MoreKeySpec.getBooleanValue( - moreKeys, - KeyConsts.MORE_KEYS_NO_PANEL_AUTO_MORE_KEY - ) - ) { - moreKeysColumnAndFlags = - moreKeysColumnAndFlags or KeyConsts.MORE_KEYS_FLAGS_NO_PANEL_AUTO_MORE_KEY - } - return moreKeysColumnAndFlags -} - -internal fun filterMoreKeysFlags(moreKeys: List): List = - moreKeys.filter { - !it.startsWith(KeyConsts.MORE_KEYS_AUTO_COLUMN_ORDER) && - !it.startsWith(KeyConsts.MORE_KEYS_FIXED_COLUMN_ORDER) && - !it.startsWith(KeyConsts.MORE_KEYS_HAS_LABELS) && - !it.startsWith(KeyConsts.MORE_KEYS_NEEDS_DIVIDERS) && - !it.startsWith(KeyConsts.MORE_KEYS_NO_PANEL_AUTO_MORE_KEY) - } - /** * Specifies which morekeys can be automatically added to the key. */ @@ -315,7 +248,7 @@ val DefaultKeyAttributes = KeyAttributes( moreKeyMode = null, // Default value is calculated in getEffectiveAttributes based on other attribute values useKeySpecShortcut = true, longPressEnabled = false, - labelFlags = LabelFlags(), + labelFlags = LabelFlags(autoXScale = true), repeatableEnabled = false, shiftable = true, ) @@ -394,7 +327,7 @@ data class BaseKey( } val relevantSpecShortcut = if(attributes.useKeySpecShortcut != false || attributes.moreKeyMode?.autoFromKeyspec != false) { - KeySpecShortcuts[spec] + resolveSpecWithOptionalShortcut(spec, params.mTextsSet, coordinate) } else { null } @@ -402,7 +335,7 @@ data class BaseKey( val expandedSpec: String? = params.mTextsSet.resolveTextReference( if(attributes.useKeySpecShortcut != false) { relevantSpecShortcut?.get(0) } else { null } ?: spec - ) ?: params.mTextsSet.resolveTextReference(spec) + ) val label = expandedSpec?.let { KeySpecParser.getLabel(it) } ?: "" val icon = expandedSpec?.let { KeySpecParser.getIconId(it) } ?: "" @@ -410,38 +343,30 @@ data class BaseKey( val outputText = KeySpecParser.getOutputText(expandedSpec) val moreKeyMode = attributes.moreKeyMode!! + var moreKeysBuilder = MoreKeysBuilder(code = code, mode = moreKeyMode, coordinate = coordinate, row = row, keyboard = keyboard, params = params) - val autoMoreKeys = listOfNotNull( - if (moreKeyMode.autoFromKeyspec) { - getDefaultMoreKeysForKey(code, relevantSpecShortcut) - } else { null }, + // 1. Add layout-defined moreKeys + moreKeysBuilder = + moreKeysBuilder.insertMoreKeys(LongPressKeySettings.joinMoreKeys(moreKeys)) - if (moreKeyMode.autoNumFromCoord && row.isLetterRow) { - getNumForCoordinate(coordinate) - } else { null }, - - if (moreKeyMode.autoSymFromCoord && row.isLetterRow) { - getSymsForCoordinate(coordinate) - } else { null }, - - if (moreKeyMode.autoSymFromCoord) { - getSpecialFromRow(coordinate, row) - } else { null } - ).joinToString(",") - - val joinedMoreKeys = params.mId.mLongPressKeySettings.joinMoreKeys(moreKeys) - - val moreKeys = params.mId.mLongPressKeySettings.reorderMoreKeys("$joinedMoreKeys,$autoMoreKeys").let { - params.mTextsSet.resolveTextReference(it) - }.let { - MoreKeySpec.splitKeySpecs(it)?.toList() ?: listOf() + // 2. Add moreKeys from keyspec + if (moreKeyMode.autoFromKeyspec) { + moreKeysBuilder = + moreKeysBuilder.insertMoreKeys(getDefaultMoreKeysForKey(code, relevantSpecShortcut)) } - val moreKeySpecs = filterMoreKeysFlags(moreKeys).map { - MoreKeySpec(it, shifted, params.mId.locale) + // 3. Add settings-defined moreKeys (numbers, symbols, actions, language, etc) in their order + params.mId.mLongPressKeySettings.currentOrder.forEach { + moreKeysBuilder = moreKeysBuilder.insertMoreKeys(it) } - val moreKeyFlags = computeMoreKeysFlags(moreKeys.toTypedArray(), params) + // 4. Add special (period and comma) + if (moreKeyMode.autoSymFromCoord) { + moreKeysBuilder = + moreKeysBuilder.insertMoreKeys(getSpecialFromRow(coordinate, row)) + } + + val moreKeys = moreKeysBuilder.build(shifted) return ComputedKeyData( label = if(shifted) { @@ -460,10 +385,10 @@ data class BaseKey( style = attributes.style!!, anchored = attributes.anchored!!, showPopup = attributes.showPopup!!, - moreKeys = moreKeySpecs, - longPressEnabled = (attributes.longPressEnabled ?: false) || moreKeys.isNotEmpty(), + moreKeys = moreKeys.specs, + longPressEnabled = (attributes.longPressEnabled ?: false) || moreKeys.specs.isNotEmpty(), repeatable = attributes.repeatableEnabled ?: false, - moreKeyFlags = moreKeyFlags, + moreKeyFlags = moreKeys.flags, countsToKeyCoordinate = moreKeyMode.autoNumFromCoord && moreKeyMode.autoSymFromCoord, hint = hint ?: "", labelFlags = attributes.labelFlags?.getValue() ?: 0 diff --git a/java/src/org/futo/inputmethod/v2keyboard/KeySpecShortcuts.kt b/java/src/org/futo/inputmethod/v2keyboard/KeySpecShortcuts.kt index 02a7d2439..7b61c2d95 100644 --- a/java/src/org/futo/inputmethod/v2keyboard/KeySpecShortcuts.kt +++ b/java/src/org/futo/inputmethod/v2keyboard/KeySpecShortcuts.kt @@ -1,62 +1,103 @@ package org.futo.inputmethod.v2keyboard -val KeySpecShortcuts = mapOf( - "q" to listOf("keyspec_q"), - "," to listOf("keyspec_comma"), - "." to listOf("keyspec_period"), - "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"), - ";" 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"), +import org.futo.inputmethod.keyboard.internal.KeyboardLayoutKind +import org.futo.inputmethod.keyboard.internal.KeyboardTextsSet - // U+2260: "≠" NOT EQUAL TO - // U+2248: "≈" ALMOST EQUAL TO - // U+221E: "∞" INFINITY - "=" to listOf("=", "\u2260", "\u2248", "\u221E"), - - // 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"), -).mapValues { - it.value.map { v -> - if(v.startsWith("keyspec") || v.startsWith("morekeys") || v.startsWith("additional_")) { - "!text/$v" - } else { - v +fun shortcutsOf(vararg values: Pair>): Map> = + mapOf(*values).mapValues { + it.value.map { v -> + if(v.startsWith("keyspec") || v.startsWith("morekeys") || v.startsWith("additional_")) { + "!text/$v" + } else { + v + } } } -} \ No newline at end of file + +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("=", "≠", "≈", "∞"), + + "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? = + 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 + } \ No newline at end of file diff --git a/java/src/org/futo/inputmethod/v2keyboard/Keyboard.kt b/java/src/org/futo/inputmethod/v2keyboard/Keyboard.kt index 788ffc80b..d406b39e6 100644 --- a/java/src/org/futo/inputmethod/v2keyboard/Keyboard.kt +++ b/java/src/org/futo/inputmethod/v2keyboard/Keyboard.kt @@ -128,6 +128,13 @@ enum class NumberRowMode { AlwaysDisabled } +fun NumberRowMode.isActive(userSetting: Boolean) = + when(this) { + NumberRowMode.UserConfigurable -> userSetting + NumberRowMode.AlwaysEnabled -> true + NumberRowMode.AlwaysDisabled -> false + } + enum class BottomRowHeightMode { Fixed, Flexible diff --git a/java/src/org/futo/inputmethod/v2keyboard/LayoutEngine.kt b/java/src/org/futo/inputmethod/v2keyboard/LayoutEngine.kt index ae2240962..549d4e825 100644 --- a/java/src/org/futo/inputmethod/v2keyboard/LayoutEngine.kt +++ b/java/src/org/futo/inputmethod/v2keyboard/LayoutEngine.kt @@ -587,7 +587,7 @@ data class LayoutEngine( params.mProximityCharsCorrectionEnabled = true - params.mAllowRedundantMoreKeys = false + params.mAllowRedundantMoreKeys = true params.removeRedundantMoreKeys() params.mMostCommonKeyWidth = regularKeyWidth.roundToInt() diff --git a/java/src/org/futo/inputmethod/v2keyboard/MoreKeysBuilder.kt b/java/src/org/futo/inputmethod/v2keyboard/MoreKeysBuilder.kt new file mode 100644 index 000000000..233f19d54 --- /dev/null +++ b/java/src/org/futo/inputmethod/v2keyboard/MoreKeysBuilder.kt @@ -0,0 +1,205 @@ +package org.futo.inputmethod.v2keyboard + +import org.futo.inputmethod.keyboard.KeyConsts +import org.futo.inputmethod.keyboard.internal.KeyboardLayoutKind +import org.futo.inputmethod.keyboard.internal.KeyboardParams +import org.futo.inputmethod.keyboard.internal.MoreKeySpec +import org.futo.inputmethod.latin.settings.LongPressKey + +typealias MoreKeys = List + +val QwertySymbols = listOf( + "qwertyuiop".toList(), + "asdfghjklw".toList(), + "zxcvbnm".toList() +) + +private fun getNumForCoordinate(keyCoordinate: KeyCoordinate): String { + if(keyCoordinate.element.kind != KeyboardLayoutKind.Alphabet) return "" + + if(keyCoordinate.regularRow == 0) { + val colOffset = (keyCoordinate.measurement.numColumnsByRow[keyCoordinate.regularRow] - 10) / 2 + val centeredCol = keyCoordinate.regularColumn - colOffset + + if(centeredCol == 9) { + return "!text/keyspec_symbols_0" + } else if(centeredCol in 0 until 9) { + return "!text/keyspec_symbols_${centeredCol + 1}" + } else { + return "" + } + } + return "" +} + + +private fun symsForCoord(keyCoordinate: KeyCoordinate): String { + if(keyCoordinate.element.kind != KeyboardLayoutKind.Alphabet) return "" + + val row = QwertySymbols.getOrNull(keyCoordinate.regularRow) ?: return "" + + val colOffset = (keyCoordinate.measurement.numColumnsByRow[keyCoordinate.regularRow] - row.size) / 2 + val centeredCol = keyCoordinate.regularColumn - colOffset.coerceAtLeast(0) + if(centeredCol < 0) return "" + + val letter = row.getOrNull(centeredCol) + return if(letter != null) { + "!text/qwertysyms_$letter" + } else { + "" + } +} + +private fun actionForCoord(keyCoordinate: KeyCoordinate): String { + if(keyCoordinate.element.kind != KeyboardLayoutKind.Alphabet) return "" + + val row = QwertySymbols.getOrNull(keyCoordinate.regularRow) + val letter = row?.getOrNull(keyCoordinate.regularColumn) + return if(letter != null) { + "!text/actions_$letter" + } else { + "" + } +} + +data class BuiltMoreKeys( + val specs: List, + val flags: Int +) + +data class MoreKeysBuilder( + val code: Int, + val mode: MoreKeyMode, + val coordinate: KeyCoordinate, + val row: Row, + val keyboard: Keyboard, + val params: KeyboardParams, + val moreKeys: MoreKeys = listOf() +) { + private fun insertMoreKeys(resolvedMoreKeys: MoreKeys): MoreKeysBuilder { + if(resolvedMoreKeys.isEmpty()) return this + + val idxOfMarker = moreKeys.indexOf("%") + val newMoreKeys = if(idxOfMarker == -1) { + moreKeys + resolvedMoreKeys + } else { + moreKeys.subList(0, idxOfMarker) + resolvedMoreKeys + moreKeys.subList(idxOfMarker, moreKeys.size) + } + + return this.copy(moreKeys = newMoreKeys) + } + + fun insertMoreKeys(moreKeysToInsert: String): MoreKeysBuilder { + val resolved = MoreKeySpec.splitKeySpecs(params.mTextsSet.resolveTextReference(moreKeysToInsert))?.toList() + + return resolved?.let { insertMoreKeys(it) } ?: this + } + + private val isNumberRowActive = keyboard.numberRowMode.isActive(params.mId.mNumberRow) + + private fun canAddMoreKey(key: LongPressKey): Boolean = + row.isLetterRow && when(key) { + LongPressKey.QuickActions -> mode.autoSymFromCoord + + // Numbers added to top row requires the number row being inactive + LongPressKey.Numbers -> (mode.autoNumFromCoord && !isNumberRowActive) + + // Symbols for top row requires number row being active (it replaces the number long-press keys) + LongPressKey.Symbols -> (mode.autoSymFromCoord && (coordinate.regularRow > 0 || isNumberRowActive)) + + // Language keys require a-z code + LongPressKey.LanguageKeys, LongPressKey.MiscLetters -> (row.isLetterRow && code >= 'a'.code && code <= 'z'.code) + } + + private fun moreKey(key: LongPressKey): String = + when(key) { + LongPressKey.Numbers -> getNumForCoordinate(coordinate) + LongPressKey.Symbols -> symsForCoord(coordinate) + LongPressKey.QuickActions -> actionForCoord(coordinate) + LongPressKey.LanguageKeys -> "!text/morekeys_${code.toChar()}" + LongPressKey.MiscLetters -> "!text/morekeys_misc_${code.toChar()}" + } + + fun insertMoreKeys(key: LongPressKey): MoreKeysBuilder { + if(!canAddMoreKey(key)) return this + return insertMoreKeys(moreKey(key)) + } + + fun build(shifted: Boolean): BuiltMoreKeys { + return BuiltMoreKeys( + specs = filterMoreKeysFlags(moreKeys).filter { it != "%" }.map { + MoreKeySpec(it, shifted, params.mId.locale) + }, + flags = computeMoreKeysFlags(moreKeys.toTypedArray(), params) + ) + } +} + + +private fun computeMoreKeysFlags(moreKeys: Array, params: KeyboardParams): Int { + // Get maximum column order number and set a relevant mode value. + var moreKeysColumnAndFlags = + (KeyConsts.MORE_KEYS_MODE_MAX_COLUMN_WITH_AUTO_ORDER + or params.mMaxMoreKeysKeyboardColumn) + var value: Int + if ((MoreKeySpec.getIntValue( + moreKeys, + KeyConsts.MORE_KEYS_AUTO_COLUMN_ORDER, + -1 + ).also { + value = it + }) > 0 + ) { + // Override with fixed column order number and set a relevant mode value. + moreKeysColumnAndFlags = + (KeyConsts.MORE_KEYS_MODE_FIXED_COLUMN_WITH_AUTO_ORDER + or (value and KeyConsts.MORE_KEYS_COLUMN_NUMBER_MASK)) + } + if ((MoreKeySpec.getIntValue( + moreKeys, + KeyConsts.MORE_KEYS_FIXED_COLUMN_ORDER, + -1 + ).also { + value = it + }) > 0 + ) { + // Override with fixed column order number and set a relevant mode value. + moreKeysColumnAndFlags = + (KeyConsts.MORE_KEYS_MODE_FIXED_COLUMN_WITH_FIXED_ORDER + or (value and KeyConsts.MORE_KEYS_COLUMN_NUMBER_MASK)) + } + if (MoreKeySpec.getBooleanValue( + moreKeys, + KeyConsts.MORE_KEYS_HAS_LABELS + ) + ) { + moreKeysColumnAndFlags = + moreKeysColumnAndFlags or KeyConsts.MORE_KEYS_FLAGS_HAS_LABELS + } + if (MoreKeySpec.getBooleanValue( + moreKeys, + KeyConsts.MORE_KEYS_NEEDS_DIVIDERS + ) + ) { + moreKeysColumnAndFlags = + moreKeysColumnAndFlags or KeyConsts.MORE_KEYS_FLAGS_NEEDS_DIVIDERS + } + if (MoreKeySpec.getBooleanValue( + moreKeys, + KeyConsts.MORE_KEYS_NO_PANEL_AUTO_MORE_KEY + ) + ) { + moreKeysColumnAndFlags = + moreKeysColumnAndFlags or KeyConsts.MORE_KEYS_FLAGS_NO_PANEL_AUTO_MORE_KEY + } + return moreKeysColumnAndFlags +} + +private fun filterMoreKeysFlags(moreKeys: List): List = + moreKeys.filter { + !it.startsWith(KeyConsts.MORE_KEYS_AUTO_COLUMN_ORDER) && + !it.startsWith(KeyConsts.MORE_KEYS_FIXED_COLUMN_ORDER) && + !it.startsWith(KeyConsts.MORE_KEYS_HAS_LABELS) && + !it.startsWith(KeyConsts.MORE_KEYS_NEEDS_DIVIDERS) && + !it.startsWith(KeyConsts.MORE_KEYS_NO_PANEL_AUTO_MORE_KEY) + } diff --git a/java/src/org/futo/inputmethod/v2keyboard/MoreKeysMapping.kt b/java/src/org/futo/inputmethod/v2keyboard/MoreKeysMapping.kt index 6b9430c01..b65725e38 100644 --- a/java/src/org/futo/inputmethod/v2keyboard/MoreKeysMapping.kt +++ b/java/src/org/futo/inputmethod/v2keyboard/MoreKeysMapping.kt @@ -6,8 +6,6 @@ import org.futo.inputmethod.latin.common.Constants fun getDefaultMoreKeysForKey(code: Int, relevantSpecShortcut: List?): String { if(code == Constants.CODE_ENTER) { return "!text/keyspec_emoji_action_key" - } else if(code >= 'a'.code && code <= 'z'.code) { - return "!text/morekeys_${code.toChar()},!text/morekeys_misc_${code.toChar()}" } else if (relevantSpecShortcut != null) { return relevantSpecShortcut.subList(1, relevantSpecShortcut.size).joinToString(",") } else { @@ -15,36 +13,6 @@ fun getDefaultMoreKeysForKey(code: Int, relevantSpecShortcut: List?): St } } -val QwertySymbols = listOf( - "qwertyuiop".toList(), - "asdfghjkl".toList(), - "zxcvbnm".toList() -) - -fun getSymsForCoordinate(keyCoordinate: KeyCoordinate): String { - if(keyCoordinate.element.kind != KeyboardLayoutKind.Alphabet) return "" - - val row = QwertySymbols.getOrNull(keyCoordinate.regularRow) - val letter = row?.getOrNull(keyCoordinate.regularColumn) - return if(letter != null) { - "!text/qwertysyms_$letter,!text/actions_$letter" - } else { - "" - } -} - -fun getNumForCoordinate(keyCoordinate: KeyCoordinate): String { - if(keyCoordinate.element.kind != KeyboardLayoutKind.Alphabet) return "" - - if(keyCoordinate.regularRow == 0 && keyCoordinate.regularColumn <= 9) { - if(keyCoordinate.regularColumn == 9) { - return "!text/keyspec_symbols_0" - } else { - return "!text/keyspec_symbols_${keyCoordinate.regularColumn + 1}" - } - } - return "" -} fun getSpecialFromRow(keyCoordinate: KeyCoordinate, row: Row): String { if(row.isBottomRow) { diff --git a/java/src/org/futo/inputmethod/v2keyboard/TemplateKeys.kt b/java/src/org/futo/inputmethod/v2keyboard/TemplateKeys.kt index 5d4a2f35e..061766d41 100644 --- a/java/src/org/futo/inputmethod/v2keyboard/TemplateKeys.kt +++ b/java/src/org/futo/inputmethod/v2keyboard/TemplateKeys.kt @@ -133,18 +133,16 @@ data class EnterKey( } else { "!text/keyspec_emoji_action_key" }.let { - params.mTextsSet.resolveTextReference(it) - }.let { - MoreKeySpec.splitKeySpecs(it)?.toList() ?: listOf() + MoreKeysBuilder( + code = Constants.CODE_ENTER, + mode = attributes.moreKeyMode!!, + coordinate = coordinate, + row = row, + keyboard = keyboard, + params = params + ).insertMoreKeys(it).build(false) } - val moreKeySpecs = filterMoreKeysFlags(moreKeys).map { - MoreKeySpec(it, false, params.mId.locale) - } - - val moreKeyFlags = computeMoreKeysFlags(moreKeys.toTypedArray(), params) - - return ComputedKeyData( label = "", code = Constants.CODE_ENTER, @@ -154,10 +152,10 @@ data class EnterKey( style = KeyVisualStyle.Action, anchored = true, showPopup = false, - moreKeys = moreKeySpecs, + moreKeys = moreKeys.specs, longPressEnabled = true, repeatable = false, - moreKeyFlags = moreKeyFlags, + moreKeyFlags = moreKeys.flags, countsToKeyCoordinate = false, hint = " ", labelFlags = 0 diff --git a/tools/make-keyboard-text-py/locales/DEFAULT.json b/tools/make-keyboard-text-py/locales/DEFAULT.json index fed7eeb50..488dcf0cd 100644 --- a/tools/make-keyboard-text-py/locales/DEFAULT.json +++ b/tools/make-keyboard-text-py/locales/DEFAULT.json @@ -538,18 +538,15 @@ "a": "@", "s": "#", "d": [ - "$", - "€", - "£", - "¥", - "¢" + "!text/keyspec_currency", + "$" ], "f": "\\%", "g": ["&", "|"], "h": ["-", "–", "—", "_"], "j": ["+", "="], "k": ["(", "[", "{", "<"], - "l": [")", "]", "}", ">" ], + "l": [")", "]", "}", ">"], "z": "*", "x": "\"", diff --git a/tools/make-keyboard-text-py/locales/eo.json b/tools/make-keyboard-text-py/locales/eo.json index c95826ad8..9cc69e31c 100644 --- a/tools/make-keyboard-text-py/locales/eo.json +++ b/tools/make-keyboard-text-py/locales/eo.json @@ -16,6 +16,9 @@ "u": [ "ŭ" ], + "j": [ + "ĵ" + ], "misc_c": [ "ć", "č", diff --git a/tools/make-keyboard-text-py/locales/kn.json b/tools/make-keyboard-text-py/locales/kn.json index 8264cc01c..93385c362 100644 --- a/tools/make-keyboard-text-py/locales/kn.json +++ b/tools/make-keyboard-text-py/locales/kn.json @@ -2,13 +2,55 @@ "locale": "kn", "morekeys": {}, "keyspec": { - "currency": "₹" + "currency": "₹", + "symbols_0": "೦", + "symbols_1": "೧", + "symbols_2": "೨", + "symbols_3": "೩", + "symbols_4": "೪", + "symbols_5": "೫", + "symbols_6": "೬", + "symbols_7": "೭", + "symbols_8": "೮", + "symbols_9": "೯" }, "label": {}, "keylabel": { - "to_alpha": "ಅಆಇ" + "to_alpha": "ಅಆಇ", + "to_symbol": "?೧೨೩" }, "keyhintlabel": {}, - "additional_morekeys": {}, - "other": {} + "other": {}, + "additional_morekeys": { + "symbols_1": [ + "1" + ], + "symbols_2": [ + "2" + ], + "symbols_3": [ + "3" + ], + "symbols_4": [ + "4" + ], + "symbols_5": [ + "5" + ], + "symbols_6": [ + "6" + ], + "symbols_7": [ + "7" + ], + "symbols_8": [ + "8" + ], + "symbols_9": [ + "9" + ], + "symbols_0": [ + "0" + ] + } } \ No newline at end of file diff --git a/tools/make-keyboard-text-py/src/KeyboardTextsTable.tmpl b/tools/make-keyboard-text-py/src/KeyboardTextsTable.tmpl index cea455a61..1b82b3727 100644 --- a/tools/make-keyboard-text-py/src/KeyboardTextsTable.tmpl +++ b/tools/make-keyboard-text-py/src/KeyboardTextsTable.tmpl @@ -41,7 +41,9 @@ public final class KeyboardTextsTable { public static String getText(final String name, final String[] textsTable) { final Integer indexObj = sNameToIndexesMap.get(name); if (indexObj == null) { - if(name.startsWith("morekeys")) { + if(name.startsWith("actions_") || name.startsWith("qwertysyms_")) { + return ""; + } else if(name.startsWith("morekeys")) { Log.w("KeyboardTextsTable", "Unknown morekeys text name=" + name + " locale=" + sTextsTableToLocaleMap.get(textsTable)); return "";