Merge "Clean up keyboard layout test harness a bit"

This commit is contained in:
Tadashi G. Takaoka 2014-03-18 08:48:22 +00:00 committed by Android (Google) Code Review
commit b58b529c9a
27 changed files with 345 additions and 527 deletions

View file

@ -142,7 +142,7 @@ public final class Arabic extends LayoutBase {
} else { } else {
final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON); final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON);
// U+0626: "ئ" ARABIC LETTER YEH WITH HAMZA ABOVE // U+0626: "ئ" ARABIC LETTER YEH WITH HAMZA ABOVE
builder.insertKeysAtRow(3, 2, key("\u0626")); builder.insertKeysAtRow(3, 2, "\u0626");
return builder.build(); return builder.build();
} }
} }
@ -198,7 +198,7 @@ public final class Arabic extends LayoutBase {
// U+069C: "ڜ" ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE // U+069C: "ڜ" ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE
key("\u0634", moreKey("\u069C")), key("\u0634", moreKey("\u069C")),
// U+0633: "س" ARABIC LETTER SEEN // U+0633: "س" ARABIC LETTER SEEN
key("\u0633"), "\u0633",
// U+064A: "ي" ARABIC LETTER YEH // U+064A: "ي" ARABIC LETTER YEH
// U+0626: "ئ" ARABIC LETTER YEH WITH HAMZA ABOVE // U+0626: "ئ" ARABIC LETTER YEH WITH HAMZA ABOVE
// U+0649: "ى" ARABIC LETTER ALEF MAKSURA // U+0649: "ى" ARABIC LETTER ALEF MAKSURA
@ -226,18 +226,16 @@ public final class Arabic extends LayoutBase {
// U+0671: "ٱ" ARABIC LETTER ALEF WASLA // U+0671: "ٱ" ARABIC LETTER ALEF WASLA
key("\u0627", joinMoreKeys("\u0622", "\u0621", "\u0623", "\u0625", "\u0671")), key("\u0627", joinMoreKeys("\u0622", "\u0621", "\u0623", "\u0625", "\u0671")),
// U+062A: "ت" ARABIC LETTER TEH // U+062A: "ت" ARABIC LETTER TEH
key("\u062A"),
// U+0646: "ن" ARABIC LETTER NOON // U+0646: "ن" ARABIC LETTER NOON
key("\u0646"),
// U+0645: "م" ARABIC LETTER MEEM // U+0645: "م" ARABIC LETTER MEEM
key("\u0645"), "\u062A", "\u0646", "\u0645",
// U+0643: "ك" ARABIC LETTER KAF // U+0643: "ك" ARABIC LETTER KAF
// U+06AF: "گ" ARABIC LETTER GAF // U+06AF: "گ" ARABIC LETTER GAF
// U+06A9: "ک" ARABIC LETTER KEHEH // U+06A9: "ک" ARABIC LETTER KEHEH
key("\u0643", joinMoreKeys("\u06AF", "\u06A9")), key("\u0643", joinMoreKeys("\u06AF", "\u06A9")),
// U+0637: "ط" ARABIC LETTER TAH // U+0637: "ط" ARABIC LETTER TAH
key("\u0637")) "\u0637")
.setKeysOfRow(3, joinKeys( .setKeysOfRow(3,
// U+0630: "ذ" ARABIC LETTER THAL // U+0630: "ذ" ARABIC LETTER THAL
// U+0621: "ء" ARABIC LETTER HAMZA // U+0621: "ء" ARABIC LETTER HAMZA
// U+0624: "ؤ" ARABIC LETTER WAW WITH HAMZA ABOVE // U+0624: "ؤ" ARABIC LETTER WAW WITH HAMZA ABOVE
@ -254,7 +252,7 @@ public final class Arabic extends LayoutBase {
key("\u0632", moreKey("\u0698")), key("\u0632", moreKey("\u0698")),
// U+0638: "ظ" ARABIC LETTER ZAH // U+0638: "ظ" ARABIC LETTER ZAH
// U+062F: "د" ARABIC LETTER DAL // U+062F: "د" ARABIC LETTER DAL
"\u0638", "\u062F")) "\u0638", "\u062F")
.build(); .build();
private static class ArabicSymbols extends RtlSymbols { private static class ArabicSymbols extends RtlSymbols {

View file

@ -51,7 +51,7 @@ public final class Azerty extends LayoutBase {
} else { } else {
builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON); builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON);
getCustomizer().setAccentedLetters(builder); getCustomizer().setAccentedLetters(builder);
builder.replaceKeyOfLabel(ROW3_QUOTE, key("?")); builder.replaceKeyOfLabel(ROW3_QUOTE, "?");
} }
builder.toUpperCase(getLocale()); builder.toUpperCase(getLocale());
return builder.build(); return builder.build();
@ -71,7 +71,7 @@ public final class Azerty extends LayoutBase {
key("i", moreKey("8")), key("i", moreKey("8")),
key("o", moreKey("9")), key("o", moreKey("9")),
key("p", moreKey("0"))) key("p", moreKey("0")))
.setLabelsOfRow(2, "q", "s", "d", "f", "g", "h", "j", "k", "l", "m") .setKeysOfRow(2, "q", "s", "d", "f", "g", "h", "j", "k", "l", "m")
.setLabelsOfRow(3, "w", "x", "c", "v", "b", "n", ROW3_QUOTE) .setKeysOfRow(3, "w", "x", "c", "v", "b", "n", ROW3_QUOTE)
.build(); .build();
} }

View file

@ -76,7 +76,7 @@ public final class Bulgarian extends LayoutBase {
// U+043F: "п" CYRILLIC SMALL LETTER PE // U+043F: "п" CYRILLIC SMALL LETTER PE
key("\u043F", moreKey("0")), key("\u043F", moreKey("0")),
// U+0447: "ч" CYRILLIC SMALL LETTER CHE // U+0447: "ч" CYRILLIC SMALL LETTER CHE
key("\u0447")) "\u0447")
// U+0430: "а" CYRILLIC SMALL LETTER A // U+0430: "а" CYRILLIC SMALL LETTER A
// U+0441: "с" CYRILLIC SMALL LETTER ES // U+0441: "с" CYRILLIC SMALL LETTER ES
// U+0434: "д" CYRILLIC SMALL LETTER DE // U+0434: "д" CYRILLIC SMALL LETTER DE
@ -88,7 +88,7 @@ public final class Bulgarian extends LayoutBase {
// U+043B: "л" CYRILLIC SMALL LETTER EL // U+043B: "л" CYRILLIC SMALL LETTER EL
// U+0448: "ш" CYRILLIC SMALL LETTER SHA // U+0448: "ш" CYRILLIC SMALL LETTER SHA
// U+0449: "щ" CYRILLIC SMALL LETTER SHCHA // U+0449: "щ" CYRILLIC SMALL LETTER SHCHA
.setLabelsOfRow(2, .setKeysOfRow(2,
"\u0430", "\u0441", "\u0434", "\u0444", "\u0433", "\u0445", "\u0439", "\u043A", "\u0430", "\u0441", "\u0434", "\u0444", "\u0433", "\u0445", "\u0439", "\u043A",
"\u043B", "\u0448", "\u0449") "\u043B", "\u0448", "\u0449")
// U+0437: "з" CYRILLIC SMALL LETTER ZE // U+0437: "з" CYRILLIC SMALL LETTER ZE
@ -99,7 +99,7 @@ public final class Bulgarian extends LayoutBase {
// U+043D: "н" CYRILLIC SMALL LETTER EN // U+043D: "н" CYRILLIC SMALL LETTER EN
// U+043C: "м" CYRILLIC SMALL LETTER EM // U+043C: "м" CYRILLIC SMALL LETTER EM
// U+044E: "ю" CYRILLIC SMALL LETTER YU // U+044E: "ю" CYRILLIC SMALL LETTER YU
.setLabelsOfRow(3, .setKeysOfRow(3,
"\u0437", "\u044C", "\u0446", "\u0436", "\u0431", "\u043D", "\u043C", "\u044E") "\u0437", "\u044C", "\u0446", "\u0436", "\u0431", "\u043D", "\u043C", "\u044E")
.build(); .build();
} }

View file

@ -66,7 +66,7 @@ public final class BulgarianBds extends LayoutBase {
// U+0446: "ц" CYRILLIC SMALL LETTER TSE // U+0446: "ц" CYRILLIC SMALL LETTER TSE
key("\u0446", moreKey("0")), key("\u0446", moreKey("0")),
// U+0431: "б" CYRILLIC SMALL LETTER BE // U+0431: "б" CYRILLIC SMALL LETTER BE
key("\u0431")) "\u0431")
// U+044C: "ь" CYRILLIC SMALL LETTER SOFT SIGN // U+044C: "ь" CYRILLIC SMALL LETTER SOFT SIGN
// U+044F: "я" CYRILLIC SMALL LETTER YA // U+044F: "я" CYRILLIC SMALL LETTER YA
// U+0430: "а" CYRILLIC SMALL LETTER A // U+0430: "а" CYRILLIC SMALL LETTER A
@ -78,7 +78,7 @@ public final class BulgarianBds extends LayoutBase {
// U+0432: "в" CYRILLIC SMALL LETTER VE // U+0432: "в" CYRILLIC SMALL LETTER VE
// U+043C: "м" CYRILLIC SMALL LETTER EM // U+043C: "м" CYRILLIC SMALL LETTER EM
// U+0447: "ч" CYRILLIC SMALL LETTER CHE // U+0447: "ч" CYRILLIC SMALL LETTER CHE
.setLabelsOfRow(2, .setKeysOfRow(2,
"\u044C", "\u044F", "\u0430", "\u043E", "\u0436", "\u0433", "\u0442", "\u043D", "\u044C", "\u044F", "\u0430", "\u043E", "\u0436", "\u0433", "\u0442", "\u043D",
"\u0432", "\u043C", "\u0447") "\u0432", "\u043C", "\u0447")
// U+044E: "ю" CYRILLIC SMALL LETTER YU // U+044E: "ю" CYRILLIC SMALL LETTER YU
@ -90,7 +90,7 @@ public final class BulgarianBds extends LayoutBase {
// U+043F: "п" CYRILLIC SMALL LETTER PE // U+043F: "п" CYRILLIC SMALL LETTER PE
// U+0440: "р" CYRILLIC SMALL LETTER ER // U+0440: "р" CYRILLIC SMALL LETTER ER
// U+043B: "л" CYRILLIC SMALL LETTER EL // U+043B: "л" CYRILLIC SMALL LETTER EL
.setLabelsOfRow(3, .setKeysOfRow(3,
"\u044E", "\u0439", "\u044A", "\u044D", "\u0444", "\u0445", "\u043F", "\u0440", "\u044E", "\u0439", "\u044A", "\u044D", "\u0444", "\u0445", "\u043F", "\u0440",
"\u043B") "\u043B")
.build(); .build();

View file

@ -82,7 +82,7 @@ public final class EastSlavic extends LayoutBase {
// U+0437: "з" CYRILLIC SMALL LETTER ZE // U+0437: "з" CYRILLIC SMALL LETTER ZE
key("\u0437", moreKey("0")), key("\u0437", moreKey("0")),
// U+0445: "х" CYRILLIC SMALL LETTER HA // U+0445: "х" CYRILLIC SMALL LETTER HA
key("\u0445")) "\u0445")
// U+0444: "ф" CYRILLIC SMALL LETTER EF // U+0444: "ф" CYRILLIC SMALL LETTER EF
// U+0432: "в" CYRILLIC SMALL LETTER VE // U+0432: "в" CYRILLIC SMALL LETTER VE
// U+0430: "а" CYRILLIC SMALL LETTER A // U+0430: "а" CYRILLIC SMALL LETTER A
@ -92,7 +92,7 @@ public final class EastSlavic extends LayoutBase {
// U+043B: "л" CYRILLIC SMALL LETTER EL // U+043B: "л" CYRILLIC SMALL LETTER EL
// U+0434: "д" CYRILLIC SMALL LETTER DE // U+0434: "д" CYRILLIC SMALL LETTER DE
// U+0436: "ж" CYRILLIC SMALL LETTER ZHE // U+0436: "ж" CYRILLIC SMALL LETTER ZHE
.setLabelsOfRow(2, .setKeysOfRow(2,
"\u0444", ROW2_2, "\u0432", "\u0430", "\u043F", "\u0440", "\u043E", "\u043B", "\u0444", ROW2_2, "\u0432", "\u0430", "\u043F", "\u0440", "\u043E", "\u043B",
"\u0434", "\u0436", ROW2_11) "\u0434", "\u0436", ROW2_11)
// U+044F: "я" CYRILLIC SMALL LETTER YA // U+044F: "я" CYRILLIC SMALL LETTER YA
@ -103,7 +103,7 @@ public final class EastSlavic extends LayoutBase {
// U+044C: "ь" CYRILLIC SMALL LETTER SOFT SIGN // U+044C: "ь" CYRILLIC SMALL LETTER SOFT SIGN
// U+0431: "б" CYRILLIC SMALL LETTER BE // U+0431: "б" CYRILLIC SMALL LETTER BE
// U+044E: "ю" CYRILLIC SMALL LETTER YU // U+044E: "ю" CYRILLIC SMALL LETTER YU
.setLabelsOfRow(3, .setKeysOfRow(3,
"\u044F", "\u0447", "\u0441", "\u043C", ROW3_5, "\u0442", "\u044C", "\u0431", "\u044F", "\u0447", "\u0441", "\u043C", ROW3_5, "\u0442", "\u044C", "\u0431",
"\u044E") "\u044E")
.build(); .build();

View file

@ -148,7 +148,7 @@ public final class Farsi extends LayoutBase {
} }
final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON); final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON);
// U+0622: "آ" ARABIC LETTER ALEF WITH MADDA ABOVE // U+0622: "آ" ARABIC LETTER ALEF WITH MADDA ABOVE
builder.insertKeysAtRow(3, 10, key("\u0622")); builder.insertKeysAtRow(3, 10, "\u0622");
return builder.build(); return builder.build();
} }
@ -195,12 +195,11 @@ public final class Farsi extends LayoutBase {
// U+06F0: "۰" EXTENDED ARABIC-INDIC DIGIT ZERO // U+06F0: "۰" EXTENDED ARABIC-INDIC DIGIT ZERO
key("\u062D", joinMoreKeys("\u06F0", "0")), key("\u062D", joinMoreKeys("\u06F0", "0")),
// U+062C: "ج" ARABIC LETTER JEEM // U+062C: "ج" ARABIC LETTER JEEM
key("\u062C")) "\u062C")
.setKeysOfRow(2, .setKeysOfRow(2,
// U+0634: "ش" ARABIC LETTER SHEEN // U+0634: "ش" ARABIC LETTER SHEEN
key("\u0634"),
// U+0633: "س" ARABIC LETTER SEEN // U+0633: "س" ARABIC LETTER SEEN
key("\u0633"), "\u0634", "\u0633",
// U+06CC: "ی" ARABIC LETTER FARSI YEH // U+06CC: "ی" ARABIC LETTER FARSI YEH
// U+0626: "ئ" ARABIC LETTER YEH WITH HAMZA ABOVE // U+0626: "ئ" ARABIC LETTER YEH WITH HAMZA ABOVE
// U+064A: "ي" ARABIC LETTER YEH // U+064A: "ي" ARABIC LETTER YEH
@ -208,9 +207,8 @@ public final class Farsi extends LayoutBase {
// U+0649: "ى" ARABIC LETTER ALEF MAKSURA // U+0649: "ى" ARABIC LETTER ALEF MAKSURA
key("\u06CC", joinMoreKeys("\u0626", "\u064A", moreKey("\uFBE8", "\u0649"))), key("\u06CC", joinMoreKeys("\u0626", "\u064A", moreKey("\uFBE8", "\u0649"))),
// U+0628: "ب" ARABIC LETTER BEH // U+0628: "ب" ARABIC LETTER BEH
key("\u0628"),
// U+0644: "ل" ARABIC LETTER LAM // U+0644: "ل" ARABIC LETTER LAM
key("\u0644"), "\u0628", "\u0644",
// U+0627: "ا" ARABIC LETTER ALEF // U+0627: "ا" ARABIC LETTER ALEF
// U+0671: "ٱ" ARABIC LETTER ALEF WASLA // U+0671: "ٱ" ARABIC LETTER ALEF WASLA
// U+0621: "ء" ARABIC LETTER HAMZA // U+0621: "ء" ARABIC LETTER HAMZA
@ -222,15 +220,14 @@ public final class Farsi extends LayoutBase {
// U+0629: "ة": ARABIC LETTER TEH MARBUTA // U+0629: "ة": ARABIC LETTER TEH MARBUTA
key("\u062A", moreKey("\u0629")), key("\u062A", moreKey("\u0629")),
// U+0646: "ن" ARABIC LETTER NOON // U+0646: "ن" ARABIC LETTER NOON
key("\u0646"),
// U+0645: "م" ARABIC LETTER MEEM // U+0645: "م" ARABIC LETTER MEEM
key("\u0645"), "\u0646", "\u0645",
// U+06A9: "ک" ARABIC LETTER KEHEH // U+06A9: "ک" ARABIC LETTER KEHEH
// U+0643: "ك" ARABIC LETTER KAF // U+0643: "ك" ARABIC LETTER KAF
key("\u06A9", moreKey("\u0643")), key("\u06A9", moreKey("\u0643")),
// U+06AF: "گ" ARABIC LETTER GAF // U+06AF: "گ" ARABIC LETTER GAF
key("\u06AF")) "\u06AF")
.setKeysOfRow(3, joinKeys( .setKeysOfRow(3,
// U+0638: "ظ" ARABIC LETTER ZAH // U+0638: "ظ" ARABIC LETTER ZAH
// U+0637: "ط" ARABIC LETTER TAH // U+0637: "ط" ARABIC LETTER TAH
// U+0698: "ژ" ARABIC LETTER JEH // U+0698: "ژ" ARABIC LETTER JEH
@ -244,7 +241,7 @@ public final class Farsi extends LayoutBase {
// U+0624: "ؤ" ARABIC LETTER WAW WITH HAMZA ABOVE // U+0624: "ؤ" ARABIC LETTER WAW WITH HAMZA ABOVE
key("\u0648", moreKey("\u0624")), key("\u0648", moreKey("\u0624")),
// U+0686: "چ" ARABIC LETTER TCHEH // U+0686: "چ" ARABIC LETTER TCHEH
"\u0686")) "\u0686")
.build(); .build();
private static class FarsiSymbols extends RtlSymbols { private static class FarsiSymbols extends RtlSymbols {

View file

@ -99,9 +99,8 @@ public final class Georgian extends LayoutBase {
// U+10FA: "" GEORGIAN LETTER AIN // U+10FA: "" GEORGIAN LETTER AIN
key("\u10D0", moreKey("\u10FA")), key("\u10D0", moreKey("\u10FA")),
// U+10E1: "" GEORGIAN LETTER SAN // U+10E1: "" GEORGIAN LETTER SAN
key("\u10E1"),
// U+10D3: "" GEORGIAN LETTER DON // U+10D3: "" GEORGIAN LETTER DON
key("\u10D3"), "\u10E1", "\u10D3",
// U+10E4: "" GEORGIAN LETTER PHAR // U+10E4: "" GEORGIAN LETTER PHAR
// U+10F6: "" GEORGIAN LETTER FI // U+10F6: "" GEORGIAN LETTER FI
key("\u10E4", moreKey("\u10F6")), key("\u10E4", moreKey("\u10F6")),
@ -115,27 +114,26 @@ public final class Georgian extends LayoutBase {
// U+10F7: "" GEORGIAN LETTER YN // U+10F7: "" GEORGIAN LETTER YN
key("\u10EF", moreKey("\u10F7")), key("\u10EF", moreKey("\u10F7")),
// U+10D9: "" GEORGIAN LETTER KAN // U+10D9: "" GEORGIAN LETTER KAN
key("\u10D9"),
// U+10DA: "" GEORGIAN LETTER LAS // U+10DA: "" GEORGIAN LETTER LAS
key("\u10DA")) "\u10D9", "\u10DA")
.setKeysOfRow(3, .setKeysOfRow(3,
// U+10D6: "" GEORGIAN LETTER ZEN // U+10D6: "" GEORGIAN LETTER ZEN
key("\u10D6"), "\u10D6",
// U+10EE: "" GEORGIAN LETTER XAN // U+10EE: "" GEORGIAN LETTER XAN
// U+10F4: "" GEORGIAN LETTER HAR // U+10F4: "" GEORGIAN LETTER HAR
key("\u10EE", moreKey("\u10F4")), key("\u10EE", moreKey("\u10F4")),
// U+10EA: "" GEORGIAN LETTER CAN // U+10EA: "" GEORGIAN LETTER CAN
key("\u10EA"), "\u10EA",
// U+10D5: "" GEORGIAN LETTER VIN // U+10D5: "" GEORGIAN LETTER VIN
// U+10F3: "" GEORGIAN LETTER WE // U+10F3: "" GEORGIAN LETTER WE
key("\u10D5", moreKey("\u10F3")), key("\u10D5", moreKey("\u10F3")),
// U+10D1: "" GEORGIAN LETTER BAN // U+10D1: "" GEORGIAN LETTER BAN
key("\u10D1"), "\u10D1",
// U+10DC: "" GEORGIAN LETTER NAR // U+10DC: "" GEORGIAN LETTER NAR
// U+10FC: "" MODIFIER LETTER GEORGIAN NAR // U+10FC: "" MODIFIER LETTER GEORGIAN NAR
key("\u10DC", moreKey("\u10FC")), key("\u10DC", moreKey("\u10FC")),
// U+10DB: "" GEORGIAN LETTER MAN // U+10DB: "" GEORGIAN LETTER MAN
key("\u10DB")) "\u10DB")
.build(); .build();
private static final ExpectedKey[][] ALPHABET_SHIFTED_COMMON = new ExpectedKeyboardBuilder() private static final ExpectedKey[][] ALPHABET_SHIFTED_COMMON = new ExpectedKeyboardBuilder()
@ -154,26 +152,12 @@ public final class Georgian extends LayoutBase {
key("O", moreKey("9")), key("O", moreKey("9")),
key("P", moreKey("0"))) key("P", moreKey("0")))
.setKeysOfRow(2, .setKeysOfRow(2,
key("A"),
// U+10E8: "" GEORGIAN LETTER SHIN // U+10E8: "" GEORGIAN LETTER SHIN
key("\u10E8"),
key("D"),
key("F"),
key("G"),
key("H"),
// U+10DF: "" GEORGIAN LETTER ZHAR // U+10DF: "" GEORGIAN LETTER ZHAR
key("\u10DF"), "A", "\u10E8", "D", "F", "G", "H", "\u10DF", "K", "L")
key("K"),
key("L"))
.setKeysOfRow(3, .setKeysOfRow(3,
// U+10EB: "" GEORGIAN LETTER JIL // U+10EB: "" GEORGIAN LETTER JIL
key("\u10EB"),
key("X"),
// U+10E9: "" GEORGIAN LETTER CHIN // U+10E9: "" GEORGIAN LETTER CHIN
key("\u10E9"), "\u10EB", "X", "\u10E9", "V", "B", "N", "M")
key("V"),
key("B"),
key("N"),
key("M"))
.build(); .build();
} }

View file

@ -112,37 +112,28 @@ public final class Greek extends LayoutBase {
// U+03AC: "ά" GREEK SMALL LETTER ALPHA WITH TONOS // U+03AC: "ά" GREEK SMALL LETTER ALPHA WITH TONOS
key("\u03B1", moreKey("\u03AC")), key("\u03B1", moreKey("\u03AC")),
// U+03C3: "σ" GREEK SMALL LETTER SIGMA // U+03C3: "σ" GREEK SMALL LETTER SIGMA
key("\u03C3"),
// U+03B4: "δ" GREEK SMALL LETTER DELTA // U+03B4: "δ" GREEK SMALL LETTER DELTA
key("\u03B4"),
// U+03C6: "φ" GREEK SMALL LETTER PHI // U+03C6: "φ" GREEK SMALL LETTER PHI
key("\u03C6"),
// U+03B3: "γ" GREEK SMALL LETTER GAMMA // U+03B3: "γ" GREEK SMALL LETTER GAMMA
key("\u03B3"), "\u03C3", "\u03B4", "\u03C6", "\u03B3",
// U+03B7: "η" GREEK SMALL LETTER ETA // U+03B7: "η" GREEK SMALL LETTER ETA
// U+03AE: "ή" GREEK SMALL LETTER ETA WITH TONOS // U+03AE: "ή" GREEK SMALL LETTER ETA WITH TONOS
key("\u03B7", moreKey("\u03AE")), key("\u03B7", moreKey("\u03AE")),
// U+03BE: "ξ" GREEK SMALL LETTER XI // U+03BE: "ξ" GREEK SMALL LETTER XI
key("\u03BE"),
// U+03BA: "κ" GREEK SMALL LETTER KAPPA // U+03BA: "κ" GREEK SMALL LETTER KAPPA
key("\u03BA"),
// U+03BB: "λ" GREEK SMALL LETTER LAMDA // U+03BB: "λ" GREEK SMALL LETTER LAMDA
key("\u03BB")) "\u03BE", "\u03BA", "\u03BB")
.setKeysOfRow(3, .setKeysOfRow(3,
// U+03B6: "ζ" GREEK SMALL LETTER ZETA // U+03B6: "ζ" GREEK SMALL LETTER ZETA
key("\u03B6"),
// U+03C7: "χ" GREEK SMALL LETTER CHI // U+03C7: "χ" GREEK SMALL LETTER CHI
key("\u03C7"),
// U+03C8: "ψ" GREEK SMALL LETTER PSI // U+03C8: "ψ" GREEK SMALL LETTER PSI
key("\u03C8"), "\u03B6", "\u03C7", "\u03C8",
// U+03C9: "ω" GREEK SMALL LETTER OMEGA // U+03C9: "ω" GREEK SMALL LETTER OMEGA
// U+03CE: "ώ" GREEK SMALL LETTER OMEGA WITH TONOS // U+03CE: "ώ" GREEK SMALL LETTER OMEGA WITH TONOS
key("\u03C9", moreKey("\u03CE")), key("\u03C9", moreKey("\u03CE")),
// U+03B2: "β" GREEK SMALL LETTER BETA // U+03B2: "β" GREEK SMALL LETTER BETA
key("\u03B2"),
// U+03BD: "ν" GREEK SMALL LETTER NU // U+03BD: "ν" GREEK SMALL LETTER NU
key("\u03BD"),
// U+03BC: "μ" GREEK SMALL LETTER MU // U+03BC: "μ" GREEK SMALL LETTER MU
key("\u03BC")) "\u03B2", "\u03BD", "\u03BC")
.build(); .build();
} }

View file

@ -129,16 +129,14 @@ public final class Hebrew extends LayoutBase {
key("\u05E4", moreKey("0"))) key("\u05E4", moreKey("0")))
.setKeysOfRow(2, .setKeysOfRow(2,
// U+05E9: "ש" HEBREW LETTER SHIN // U+05E9: "ש" HEBREW LETTER SHIN
key("\u05E9"),
// U+05D3: "ד" HEBREW LETTER DALET // U+05D3: "ד" HEBREW LETTER DALET
key("\u05D3"), "\u05E9", "\u05D3",
// U+05D2: "ג" HEBREW LETTER GIMEL // U+05D2: "ג" HEBREW LETTER GIMEL
// U+05D2 U+05F3: "ג׳" HEBREW LETTER GIMEL + HEBREW PUNCTUATION GERESH // U+05D2 U+05F3: "ג׳" HEBREW LETTER GIMEL + HEBREW PUNCTUATION GERESH
key("\u05D2", moreKey("\u05D2\u05F3")), key("\u05D2", moreKey("\u05D2\u05F3")),
// U+05DB: "כ" HEBREW LETTER KAF // U+05DB: "כ" HEBREW LETTER KAF
key("\u05DB"),
// U+05E2: "ע" HEBREW LETTER AYIN // U+05E2: "ע" HEBREW LETTER AYIN
key("\u05E2"), "\u05DB", "\u05E2",
// U+05D9: "י" HEBREW LETTER YOD // U+05D9: "י" HEBREW LETTER YOD
// U+05F2 U+05B7: "ײַ" HEBREW LIGATURE YIDDISH DOUBLE YOD + HEBREW POINT PATAH // U+05F2 U+05B7: "ײַ" HEBREW LIGATURE YIDDISH DOUBLE YOD + HEBREW POINT PATAH
key("\u05D9", moreKey("\u05F2\u05B7")), key("\u05D9", moreKey("\u05F2\u05B7")),
@ -146,25 +144,19 @@ public final class Hebrew extends LayoutBase {
// U+05D7 U+05F3: "ח׳" HEBREW LETTER HET + HEBREW PUNCTUATION GERESH // U+05D7 U+05F3: "ח׳" HEBREW LETTER HET + HEBREW PUNCTUATION GERESH
key("\u05D7", moreKey("\u05D7\u05F3")), key("\u05D7", moreKey("\u05D7\u05F3")),
// U+05DC: "ל" HEBREW LETTER LAMED // U+05DC: "ל" HEBREW LETTER LAMED
key("\u05DC"),
// U+05DA: "ך" HEBREW LETTER FINAL KAF // U+05DA: "ך" HEBREW LETTER FINAL KAF
key("\u05DA"),
// U+05E3: "ף" HEBREW LETTER FINAL PE // U+05E3: "ף" HEBREW LETTER FINAL PE
key("\u05E3")) "\u05DC", "\u05DA", "\u05E3")
.setKeysOfRow(3, .setKeysOfRow(3,
// U+05D6: "ז" HEBREW LETTER ZAYIN // U+05D6: "ז" HEBREW LETTER ZAYIN
// U+05D6 U+05F3: "ז׳" HEBREW LETTER ZAYIN + HEBREW PUNCTUATION GERESH // U+05D6 U+05F3: "ז׳" HEBREW LETTER ZAYIN + HEBREW PUNCTUATION GERESH
key("\u05D6", moreKey("\u05D6\u05F3")), key("\u05D6", moreKey("\u05D6\u05F3")),
// U+05E1: "ס" HEBREW LETTER SAMEKH // U+05E1: "ס" HEBREW LETTER SAMEKH
key("\u05E1"),
// U+05D1: "ב" HEBREW LETTER BET // U+05D1: "ב" HEBREW LETTER BET
key("\u05D1"),
// U+05D4: "ה" HEBREW LETTER HE // U+05D4: "ה" HEBREW LETTER HE
key("\u05D4"),
// U+05E0: "נ" HEBREW LETTER NUN // U+05E0: "נ" HEBREW LETTER NUN
key("\u05E0"),
// U+05DE: "מ" HEBREW LETTER MEM // U+05DE: "מ" HEBREW LETTER MEM
key("\u05DE"), "\u05E1", "\u05D1", "\u05D4", "\u05E0", "\u05DE",
// U+05E6: "צ" HEBREW LETTER TSADI // U+05E6: "צ" HEBREW LETTER TSADI
// U+05E6 U+05F3: "צ׳" HEBREW LETTER TSADI + HEBREW PUNCTUATION GERESH // U+05E6 U+05F3: "צ׳" HEBREW LETTER TSADI + HEBREW PUNCTUATION GERESH
key("\u05E6", moreKey("\u05E6\u05F3")), key("\u05E6", moreKey("\u05E6\u05F3")),

View file

@ -155,7 +155,7 @@ public final class Hindi extends LayoutBase {
// U+0947/U+0902: "ें" DEVANAGARI VOWEL SIGN E/DEVANAGARI SIGN ANUSVARA // U+0947/U+0902: "ें" DEVANAGARI VOWEL SIGN E/DEVANAGARI SIGN ANUSVARA
key("\u0947", moreKey("\u0947\u0902")), key("\u0947", moreKey("\u0947\u0902")),
// U+094D: "" DEVANAGARI SIGN VIRAMA // U+094D: "" DEVANAGARI SIGN VIRAMA
key("\u094D"), "\u094D",
// U+093F: "ि" DEVANAGARI VOWEL SIGN I // U+093F: "ि" DEVANAGARI VOWEL SIGN I
// U+093F/U+0902: "िं" DEVANAGARI VOWEL SIGN I/DEVANAGARI SIGN ANUSVARA // U+093F/U+0902: "िं" DEVANAGARI VOWEL SIGN I/DEVANAGARI SIGN ANUSVARA
key("\u093F", moreKey("\u093F\u0902")), key("\u093F", moreKey("\u093F\u0902")),
@ -164,7 +164,7 @@ public final class Hindi extends LayoutBase {
// U+0941/U+0901: "ुँ" DEVANAGARI VOWEL SIGN U/DEVANAGARI SIGN CANDRABINDU // U+0941/U+0901: "ुँ" DEVANAGARI VOWEL SIGN U/DEVANAGARI SIGN CANDRABINDU
key("\u0941", joinMoreKeys("\u0941\u0902", "\u0941\u0901")), key("\u0941", joinMoreKeys("\u0941\u0902", "\u0941\u0901")),
// U+092A: "" DEVANAGARI LETTER PA // U+092A: "" DEVANAGARI LETTER PA
key("\u092A"), "\u092A",
// U+0930: "" DEVANAGARI LETTER RA // U+0930: "" DEVANAGARI LETTER RA
// U+090B: "" DEVANAGARI LETTER VOCALIC R // U+090B: "" DEVANAGARI LETTER VOCALIC R
// U+0930/U+093C: "ऱ" DEVANAGARI LETTER RA/DEVANAGARI SIGN NUKTA // U+0930/U+093C: "ऱ" DEVANAGARI LETTER RA/DEVANAGARI SIGN NUKTA
@ -178,14 +178,12 @@ public final class Hindi extends LayoutBase {
// "त्र" DEVANAGARI LETTER TA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER RA // "त्र" DEVANAGARI LETTER TA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER RA
key("\u0924", moreKey("\u0924\u094D\u0930")), key("\u0924", moreKey("\u0924\u094D\u0930")),
// U+091A: "" DEVANAGARI LETTER CA // U+091A: "" DEVANAGARI LETTER CA
key("\u091A"),
// U+091F: "" DEVANAGARI LETTER TTA // U+091F: "" DEVANAGARI LETTER TTA
key("\u091F")) "\u091A","\u091F")
.setKeysOfRow(3, .setKeysOfRow(3,
// U+0949: "" DEVANAGARI VOWEL SIGN CANDRA O // U+0949: "" DEVANAGARI VOWEL SIGN CANDRA O
key("\u0949"),
// U+0902: "" DEVANAGARI SIGN ANUSVARA // U+0902: "" DEVANAGARI SIGN ANUSVARA
key("\u0902"), "\u0949", "\u0902",
// U+092E: "" DEVANAGARI LETTER MA // U+092E: "" DEVANAGARI LETTER MA
// U+0950: "" DEVANAGARI OM // U+0950: "" DEVANAGARI OM
key("\u092E", moreKey("\u0950")), key("\u092E", moreKey("\u0950")),
@ -195,13 +193,13 @@ public final class Hindi extends LayoutBase {
// U+0928/U+093C: "ऩ" DEVANAGARI LETTER NA/DEVANAGARI SIGN NUKTA // U+0928/U+093C: "ऩ" DEVANAGARI LETTER NA/DEVANAGARI SIGN NUKTA
key("\u0928", joinMoreKeys("\u091E", "\u0919", "\u0928\u093C")), key("\u0928", joinMoreKeys("\u091E", "\u0919", "\u0928\u093C")),
// U+0935: "" DEVANAGARI LETTER VA // U+0935: "" DEVANAGARI LETTER VA
key("\u0935"), "\u0935",
// U+0932: "" DEVANAGARI LETTER LA // U+0932: "" DEVANAGARI LETTER LA
// U+090C: "" DEVANAGARI LETTER VOCALIC L // U+090C: "" DEVANAGARI LETTER VOCALIC L
// U+0961: "" DEVANAGARI LETTER VOCALIC LL // U+0961: "" DEVANAGARI LETTER VOCALIC LL
key("\u0932", joinMoreKeys("\u090C", "\u0961")), key("\u0932", joinMoreKeys("\u090C", "\u0961")),
// U+0938: "" DEVANAGARI LETTER SA // U+0938: "" DEVANAGARI LETTER SA
key("\u0938"), "\u0938",
// U+092F: "" DEVANAGARI LETTER YA // U+092F: "" DEVANAGARI LETTER YA
// U+095F: "" DEVANAGARI LETTER YYA // U+095F: "" DEVANAGARI LETTER YYA
key("\u092F", moreKey("\u095F")), key("\u092F", moreKey("\u095F")),
@ -232,11 +230,9 @@ public final class Hindi extends LayoutBase {
// U+090A/U+0901: "ऊँ" DEVANAGARI LETTER UU/DEVANAGARI SIGN CANDRABINDU // U+090A/U+0901: "ऊँ" DEVANAGARI LETTER UU/DEVANAGARI SIGN CANDRABINDU
key("\u090A", joinMoreKeys("\u090A\u0902", "\u090A\u0901")), key("\u090A", joinMoreKeys("\u090A\u0902", "\u090A\u0901")),
// U+092D: "" DEVANAGARI LETTER BHA // U+092D: "" DEVANAGARI LETTER BHA
key("\u092D"),
// U+0903: "" DEVANAGARI SIGN VISARGA // U+0903: "" DEVANAGARI SIGN VISARGA
key("\u0903"),
// U+0918: "" DEVANAGARI LETTER GHA // U+0918: "" DEVANAGARI LETTER GHA
key("\u0918"), "\u092D", "\u0903", "\u0918",
// U+0927: "" DEVANAGARI LETTER DHA // U+0927: "" DEVANAGARI LETTER DHA
// U+0915/U+094D/U+0937: // U+0915/U+094D/U+0937:
// "क्ष" DEVANAGARI LETTER KA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER SSA // "क्ष" DEVANAGARI LETTER KA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER SSA
@ -244,9 +240,8 @@ public final class Hindi extends LayoutBase {
// "श्र" DEVANAGARI LETTER SHA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER RA // "श्र" DEVANAGARI LETTER SHA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER RA
key("\u0927", joinMoreKeys("\u0915\u094D\u0937", "\u0936\u094D\u0930")), key("\u0927", joinMoreKeys("\u0915\u094D\u0937", "\u0936\u094D\u0930")),
// U+091D: "" DEVANAGARI LETTER JHA // U+091D: "" DEVANAGARI LETTER JHA
key("\u091D"),
// U+0922: "" DEVANAGARI LETTER DDHA // U+0922: "" DEVANAGARI LETTER DDHA
key("\u0922")) "\u091D", "\u0922")
.setKeysOfRow(2, .setKeysOfRow(2,
// U+0913: "" DEVANAGARI LETTER O // U+0913: "" DEVANAGARI LETTER O
// U+0913/U+0902: "ओं" DEVANAGARI LETTER O/DEVANAGARI SIGN ANUSVARA // U+0913/U+0902: "ओं" DEVANAGARI LETTER O/DEVANAGARI SIGN ANUSVARA
@ -282,33 +277,29 @@ public final class Hindi extends LayoutBase {
// U+0916/U+093C: "ख़" DEVANAGARI LETTER KHA/DEVANAGARI SIGN NUKTA // U+0916/U+093C: "ख़" DEVANAGARI LETTER KHA/DEVANAGARI SIGN NUKTA
key("\u0916", moreKey("\u0916\u093C")), key("\u0916", moreKey("\u0916\u093C")),
// U+0925: "" DEVANAGARI LETTER THA // U+0925: "" DEVANAGARI LETTER THA
key("\u0925"),
// U+091B: "" DEVANAGARI LETTER CHA // U+091B: "" DEVANAGARI LETTER CHA
key("\u091B"),
// U+0920: "" DEVANAGARI LETTER TTHA // U+0920: "" DEVANAGARI LETTER TTHA
key("\u0920")) "\u0925", "\u091B", "\u0920")
.setKeysOfRow(3, .setKeysOfRow(3,
// U+0911: "" DEVANAGARI LETTER CANDRA O // U+0911: "" DEVANAGARI LETTER CANDRA O
key("\u0911"), "\u0911",
// U+0901: "" DEVANAGARI SIGN CANDRABINDU // U+0901: "" DEVANAGARI SIGN CANDRABINDU
// U+0945: "" DEVANAGARI VOWEL SIGN CANDRA E // U+0945: "" DEVANAGARI VOWEL SIGN CANDRA E
key("\u0901", moreKey("\u0945")), key("\u0901", moreKey("\u0945")),
// U+0923: "" DEVANAGARI LETTER NNA // U+0923: "" DEVANAGARI LETTER NNA
key("\u0923"),
// U+0929: "" DEVANAGARI LETTER NNNA // U+0929: "" DEVANAGARI LETTER NNNA
key("\u0929"), "\u0923", "\u0929",
// U+0933: "" DEVANAGARI LETTER LLA // U+0933: "" DEVANAGARI LETTER LLA
// U+0934: "" DEVANAGARI LETTER LLLA // U+0934: "" DEVANAGARI LETTER LLLA
key("\u0933", moreKey("\u0934")), key("\u0933", moreKey("\u0934")),
// U+0936: "" DEVANAGARI LETTER SHA // U+0936: "" DEVANAGARI LETTER SHA
key("\u0936"),
// U+0937: "" DEVANAGARI LETTER SSA // U+0937: "" DEVANAGARI LETTER SSA
key("\u0937"), "\u0936", "\u0937",
// U+0943: "" DEVANAGARI VOWEL SIGN VOCALIC R // U+0943: "" DEVANAGARI VOWEL SIGN VOCALIC R
// U+0944: "" DEVANAGARI VOWEL SIGN VOCALIC RR // U+0944: "" DEVANAGARI VOWEL SIGN VOCALIC RR
key("\u0943", moreKey("\u0944")), key("\u0943", moreKey("\u0944")),
// U+091E: "" DEVANAGARI LETTER NYA // U+091E: "" DEVANAGARI LETTER NYA
key("\u091E")) "\u091E")
.build(); .build();
static class HindiSymbols extends Symbols { static class HindiSymbols extends Symbols {

View file

@ -66,7 +66,7 @@ public final class Khmer extends LayoutBase {
return ALPHABET_COMMON; return ALPHABET_COMMON;
} }
final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON); final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON);
builder.addKeysOnTheRightOfRow(4, EXCLAMATION_AND_QUESTION_MARKS); builder.addKeysOnTheRightOfRow(4, (Object[])EXCLAMATION_AND_QUESTION_MARKS);
return builder.build(); return builder.build();
} }
@ -84,11 +84,9 @@ public final class Khmer extends LayoutBase {
ExpectedKeyboardBuilder convertCommonLayoutToKeyboard(final ExpectedKeyboardBuilder builder, ExpectedKeyboardBuilder convertCommonLayoutToKeyboard(final ExpectedKeyboardBuilder builder,
final boolean isPhone) { final boolean isPhone) {
final LayoutCustomizer customizer = getCustomizer(); final LayoutCustomizer customizer = getCustomizer();
final ExpectedKey[] spacebar = joinKeys( builder.setKeysOfRow(5, (Object[])customizer.getSpaceKeys(isPhone));
customizer.getKeysLeftToSpacebar(isPhone), builder.addKeysOnTheLeftOfRow(5, (Object[])customizer.getKeysLeftToSpacebar(isPhone));
customizer.getSpaceKeys(isPhone), builder.addKeysOnTheRightOfRow(5, (Object[])customizer.getKeysRightToSpacebar(isPhone));
customizer.getKeysRightToSpacebar(isPhone));
builder.setKeysOfRow(5, spacebar);
if (isPhone) { if (isPhone) {
builder.addKeysOnTheRightOfRow(4, DELETE_KEY) builder.addKeysOnTheRightOfRow(4, DELETE_KEY)
.addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey()) .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey())
@ -99,8 +97,8 @@ public final class Khmer extends LayoutBase {
.addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey(), SETTINGS_KEY) .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey(), SETTINGS_KEY)
.addKeysOnTheRightOfRow(5, EMOJI_KEY); .addKeysOnTheRightOfRow(5, EMOJI_KEY);
} }
builder.addKeysOnTheLeftOfRow(4, customizer.getLeftShiftKeys(isPhone)) builder.addKeysOnTheLeftOfRow(4, (Object[])customizer.getLeftShiftKeys(isPhone))
.addKeysOnTheRightOfRow(4, customizer.getRightShiftKeys(isPhone)); .addKeysOnTheRightOfRow(4, (Object[])customizer.getRightShiftKeys(isPhone));
return builder; return builder;
} }
@ -144,27 +142,18 @@ public final class Khmer extends LayoutBase {
key("\u17B2", moreKey("\u17B1"))) key("\u17B2", moreKey("\u17B1")))
.setKeysOfRow(2, .setKeysOfRow(2,
// U+1786: "" KHMER LETTER CHA // U+1786: "" KHMER LETTER CHA
key("\u1786"),
// U+17B9: "" KHMER VOWEL SIGN Y // U+17B9: "" KHMER VOWEL SIGN Y
key("\u17B9"),
// U+17C1: "" KHMER VOWEL SIGN E // U+17C1: "" KHMER VOWEL SIGN E
key("\u17C1"),
// U+179A: "" KHMER LETTER RO // U+179A: "" KHMER LETTER RO
key("\u179A"),
// U+178F: "" KHMER LETTER TA // U+178F: "" KHMER LETTER TA
key("\u178F"),
// U+1799: "" KHMER LETTER YO // U+1799: "" KHMER LETTER YO
key("\u1799"),
// U+17BB: "" KHMER VOWEL SIGN U // U+17BB: "" KHMER VOWEL SIGN U
key("\u17BB"),
// U+17B7: "" KHMER VOWEL SIGN I // U+17B7: "" KHMER VOWEL SIGN I
key("\u17B7"),
// U+17C4: "" KHMER VOWEL SIGN OO // U+17C4: "" KHMER VOWEL SIGN OO
key("\u17C4"),
// U+1795: "" KHMER LETTER PHA // U+1795: "" KHMER LETTER PHA
key("\u1795"),
// U+17C0: "" KHMER VOWEL SIGN IE // U+17C0: "" KHMER VOWEL SIGN IE
key("\u17C0"), "\u1786", "\u17B9", "\u17C1", "\u179A", "\u178F", "\u1799", "\u17BB", "\u17B7",
"\u17C4", "\u1795", "\u17C0",
// U+17AA: "" KHMER INDEPENDENT VOWEL QUUV // U+17AA: "" KHMER INDEPENDENT VOWEL QUUV
// U+17A7: "" KHMER INDEPENDENT VOWEL QU // U+17A7: "" KHMER INDEPENDENT VOWEL QU
// U+17B1: "" KHMER INDEPENDENT VOWEL QOO TYPE ONE // U+17B1: "" KHMER INDEPENDENT VOWEL QOO TYPE ONE
@ -174,32 +163,23 @@ public final class Khmer extends LayoutBase {
key("\u17AA", joinMoreKeys("\u17A7", "\u17B1", "\u17B3", "\u17A9", "\u17A8"))) key("\u17AA", joinMoreKeys("\u17A7", "\u17B1", "\u17B3", "\u17A9", "\u17A8")))
.setKeysOfRow(3, .setKeysOfRow(3,
// U+17B6: "" KHMER VOWEL SIGN AA // U+17B6: "" KHMER VOWEL SIGN AA
key("\u17B6"),
// U+179F: "" KHMER LETTER SA // U+179F: "" KHMER LETTER SA
key("\u179F"),
// U+178A: "" KHMER LETTER DA // U+178A: "" KHMER LETTER DA
key("\u178A"),
// U+1790: "" KHMER LETTER THA // U+1790: "" KHMER LETTER THA
key("\u1790"),
// U+1784: "" KHMER LETTER NGO // U+1784: "" KHMER LETTER NGO
key("\u1784"),
// U+17A0: "" KHMER LETTER HA // U+17A0: "" KHMER LETTER HA
key("\u17A0"),
// U+17D2: "" KHMER SIGN COENG // U+17D2: "" KHMER SIGN COENG
key("\u17D2"),
// U+1780: "" KHMER LETTER KA // U+1780: "" KHMER LETTER KA
key("\u1780"),
// U+179B: "" KHMER LETTER LO // U+179B: "" KHMER LETTER LO
key("\u179B"),
// U+17BE: "" KHMER VOWEL SIGN OE // U+17BE: "" KHMER VOWEL SIGN OE
key("\u17BE"),
// U+17CB: "" KHMER SIGN BANTOC // U+17CB: "" KHMER SIGN BANTOC
key("\u17CB"), "\u17B6", "\u179F", "\u178A", "\u1790", "\u1784", "\u17A0", "\u17D2", "\u1780",
"\u179B", "\u17BE", "\u17CB",
// U+17AE: "" KHMER INDEPENDENT VOWEL LYY // U+17AE: "" KHMER INDEPENDENT VOWEL LYY
// U+17AD: "" KHMER INDEPENDENT VOWEL LY // U+17AD: "" KHMER INDEPENDENT VOWEL LY
// U+17B0: "" KHMER INDEPENDENT VOWEL QAI // U+17B0: "" KHMER INDEPENDENT VOWEL QAI
key("\u17AE", joinMoreKeys("\u17AD", "\u17B0"))) key("\u17AE", joinMoreKeys("\u17AD", "\u17B0")))
.setLabelsOfRow(4, .setKeysOfRow(4,
// U+178B: "" KHMER LETTER TTHA // U+178B: "" KHMER LETTER TTHA
// U+1781: "" KHMER LETTER KHA // U+1781: "" KHMER LETTER KHA
// U+1785: "" KHMER LETTER CA // U+1785: "" KHMER LETTER CA
@ -241,7 +221,7 @@ public final class Khmer extends LayoutBase {
// U+00D7: "×" MULTIPLICATION SIGN // U+00D7: "×" MULTIPLICATION SIGN
key("\u17CC", moreKey("\u00D7")), key("\u17CC", moreKey("\u00D7")),
// U+17CE: "" KHMER SIGN KAKABAT // U+17CE: "" KHMER SIGN KAKABAT
key("\u17CE")) "\u17CE")
.setKeysOfRow(2, .setKeysOfRow(2,
// U+1788: "" KHMER LETTER CHO // U+1788: "" KHMER LETTER CHO
// U+17DC: "" KHMER SIGN AVAKRAHASANYA // U+17DC: "" KHMER SIGN AVAKRAHASANYA
@ -250,73 +230,52 @@ public final class Khmer extends LayoutBase {
// U+17DD: "" KHMER SIGN ATTHACAN // U+17DD: "" KHMER SIGN ATTHACAN
key("\u17BA", moreKey("\u17DD")), key("\u17BA", moreKey("\u17DD")),
// U+17C2: "" KHMER VOWEL SIGN AE // U+17C2: "" KHMER VOWEL SIGN AE
key("\u17C2"), "\u17C2",
// U+17AC: "" KHMER INDEPENDENT VOWEL RYY // U+17AC: "" KHMER INDEPENDENT VOWEL RYY
// U+17AB: "" KHMER INDEPENDENT VOWEL RY // U+17AB: "" KHMER INDEPENDENT VOWEL RY
key("\u17AC", moreKey("\u17AB")), key("\u17AC", moreKey("\u17AB")),
// U+1791: "" KHMER LETTER TO // U+1791: "" KHMER LETTER TO
key("\u1791"),
// U+17BD: "" KHMER VOWEL SIGN UA // U+17BD: "" KHMER VOWEL SIGN UA
key("\u17BD"),
// U+17BC: "" KHMER VOWEL SIGN UU // U+17BC: "" KHMER VOWEL SIGN UU
key("\u17BC"),
// U+17B8: "" KHMER VOWEL SIGN II // U+17B8: "" KHMER VOWEL SIGN II
key("\u17B8"),
// U+17C5: "" KHMER VOWEL SIGN AU // U+17C5: "" KHMER VOWEL SIGN AU
key("\u17C5"),
// U+1797: "" KHMER LETTER PHO // U+1797: "" KHMER LETTER PHO
key("\u1797"),
// U+17BF: "" KHMER VOWEL SIGN YA // U+17BF: "" KHMER VOWEL SIGN YA
key("\u17BF"),
// U+17B0: "" KHMER INDEPENDENT VOWEL QAI // U+17B0: "" KHMER INDEPENDENT VOWEL QAI
key("\u17B0")) "\u1791", "\u17BD", "\u17BC", "\u17B8", "\u17C5", "\u1797", "\u17BF", "\u17B0")
.setKeysOfRow(3, .setKeysOfRow(3,
// U+17B6/U+17C6: "ាំ" KHMER VOWEL SIGN AA/KHMER SIGN NIKAHIT // U+17B6/U+17C6: "ាំ" KHMER VOWEL SIGN AA/KHMER SIGN NIKAHIT
key("\u17B6\u17C6"),
// U+17C3: "" KHMER VOWEL SIGN AI // U+17C3: "" KHMER VOWEL SIGN AI
key("\u17C3"),
// U+178C: "" KHMER LETTER DO // U+178C: "" KHMER LETTER DO
key("\u178C"),
// U+1792: "" KHMER LETTER THO // U+1792: "" KHMER LETTER THO
key("\u1792"),
// U+17A2: "" KHMER LETTER QAE // U+17A2: "" KHMER LETTER QAE
key("\u17A2"), "\u17B6\u17C6", "\u17C3", "\u178C", "\u1792", "\u17A2",
// U+17C7: "" KHMER SIGN REAHMUK // U+17C7: "" KHMER SIGN REAHMUK
// U+17C8: "" KHMER SIGN YUUKALEAPINTU // U+17C8: "" KHMER SIGN YUUKALEAPINTU
key("\u17C7", moreKey("\u17C8")), key("\u17C7", moreKey("\u17C8")),
// U+1789: "" KHMER LETTER NYO // U+1789: "" KHMER LETTER NYO
key("\u1789"), "\u1789",
// U+1782: "" KHMER LETTER KO // U+1782: "" KHMER LETTER KO
// U+179D: "" KHMER LETTER SHA // U+179D: "" KHMER LETTER SHA
key("\u1782", moreKey("\u179D")), key("\u1782", moreKey("\u179D")),
// U+17A1: "" KHMER LETTER LA // U+17A1: "" KHMER LETTER LA
key("\u17A1"),
// U+17C4/U+17C7: "ោះ" KHMER VOWEL SIGN OO/KHMER SIGN REAHMUK // U+17C4/U+17C7: "ោះ" KHMER VOWEL SIGN OO/KHMER SIGN REAHMUK
key("\u17C4\u17C7"),
// U+17C9: "" KHMER SIGN MUUSIKATOAN // U+17C9: "" KHMER SIGN MUUSIKATOAN
key("\u17C9"),
// U+17AF: "" KHMER INDEPENDENT VOWEL QE // U+17AF: "" KHMER INDEPENDENT VOWEL QE
key("\u17AF")) "\u17A1", "\u17C4\u17C7", "\u17C9", "\u17AF")
.setKeysOfRow(4, .setKeysOfRow(4,
// U+178D: "" KHMER LETTER TTHO // U+178D: "" KHMER LETTER TTHO
key("\u178D"),
// U+1783: "" KHMER LETTER KHO // U+1783: "" KHMER LETTER KHO
key("\u1783"),
// U+1787: "" KHMER LETTER CO // U+1787: "" KHMER LETTER CO
key("\u1787"),
// U+17C1/U+17C7: "េះ" KHMER VOWEL SIGN E/KHMER SIGN REAHMUK // U+17C1/U+17C7: "េះ" KHMER VOWEL SIGN E/KHMER SIGN REAHMUK
key("\u17C1\u17C7"), "\u178D", "\u1783", "\u1787", "\u17C1\u17C7",
// U+1796: "" KHMER LETTER PO // U+1796: "" KHMER LETTER PO
// U+179E: "" KHMER LETTER SSO // U+179E: "" KHMER LETTER SSO
key("\u1796", moreKey("\u179E")), key("\u1796", moreKey("\u179E")),
// U+178E: "" KHMER LETTER NNO // U+178E: "" KHMER LETTER NNO
key("\u178E"),
// U+17C6: "" KHMER SIGN NIKAHIT // U+17C6: "" KHMER SIGN NIKAHIT
key("\u17C6"),
// U+17BB/U+17C7: "ុះ" KHMER VOWEL SIGN U/KHMER SIGN REAHMUK // U+17BB/U+17C7: "ុះ" KHMER VOWEL SIGN U/KHMER SIGN REAHMUK
key("\u17BB\u17C7"),
// U+17D5: "" KHMER SIGN BARIYOOSAN // U+17D5: "" KHMER SIGN BARIYOOSAN
key("\u17D5"), "\u178E", "\u17C6", "\u17BB\u17C7", "\u17D5", "?")
key("?"))
.build(); .build();
} }

View file

@ -70,7 +70,7 @@ public final class Lao extends LayoutBase {
return ALPHABET_COMMON; return ALPHABET_COMMON;
} }
final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON); final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON);
builder.addKeysOnTheRightOfRow(4, EXCLAMATION_AND_QUESTION_MARKS); builder.addKeysOnTheRightOfRow(4, (Object[])EXCLAMATION_AND_QUESTION_MARKS);
return builder.build(); return builder.build();
} }
@ -88,11 +88,9 @@ public final class Lao extends LayoutBase {
ExpectedKeyboardBuilder convertCommonLayoutToKeyboard(final ExpectedKeyboardBuilder builder, ExpectedKeyboardBuilder convertCommonLayoutToKeyboard(final ExpectedKeyboardBuilder builder,
final boolean isPhone) { final boolean isPhone) {
final LayoutCustomizer customizer = getCustomizer(); final LayoutCustomizer customizer = getCustomizer();
final ExpectedKey[] spacebar = joinKeys( builder.setKeysOfRow(5, (Object[])customizer.getSpaceKeys(isPhone));
customizer.getKeysLeftToSpacebar(isPhone), builder.addKeysOnTheLeftOfRow(5, (Object[])customizer.getKeysLeftToSpacebar(isPhone));
customizer.getSpaceKeys(isPhone), builder.addKeysOnTheRightOfRow(5, (Object[])customizer.getKeysRightToSpacebar(isPhone));
customizer.getKeysRightToSpacebar(isPhone));
builder.setKeysOfRow(5, spacebar);
if (isPhone) { if (isPhone) {
builder.addKeysOnTheRightOfRow(4, DELETE_KEY) builder.addKeysOnTheRightOfRow(4, DELETE_KEY)
.addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey()) .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey())
@ -103,8 +101,8 @@ public final class Lao extends LayoutBase {
.addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey(), SETTINGS_KEY) .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey(), SETTINGS_KEY)
.addKeysOnTheRightOfRow(5, EMOJI_KEY); .addKeysOnTheRightOfRow(5, EMOJI_KEY);
} }
builder.addKeysOnTheLeftOfRow(4, customizer.getLeftShiftKeys(isPhone)) builder.addKeysOnTheLeftOfRow(4, (Object[])customizer.getLeftShiftKeys(isPhone))
.addKeysOnTheRightOfRow(4, customizer.getRightShiftKeys(isPhone)); .addKeysOnTheRightOfRow(4, (Object[])customizer.getRightShiftKeys(isPhone));
return builder; return builder;
} }
@ -123,9 +121,8 @@ public final class Lao extends LayoutBase {
// U+0ED4: "" LAO DIGIT FOUR // U+0ED4: "" LAO DIGIT FOUR
key("\u0E96", joinMoreKeys("4", "\u0ED4")), key("\u0E96", joinMoreKeys("4", "\u0ED4")),
// U+0EB8: "" LAO VOWEL SIGN U // U+0EB8: "" LAO VOWEL SIGN U
key("\u0EB8"),
// U+0EB9: "" LAO VOWEL SIGN UU // U+0EB9: "" LAO VOWEL SIGN UU
key("\u0EB9"), "\u0EB8", "\u0EB9",
// U+0E84: "" LAO LETTER KHO TAM // U+0E84: "" LAO LETTER KHO TAM
// U+0ED5: "" LAO DIGIT FIVE // U+0ED5: "" LAO DIGIT FIVE
key("\u0E84", joinMoreKeys("5", "\u0ED5")), key("\u0E84", joinMoreKeys("5", "\u0ED5")),
@ -142,34 +139,26 @@ public final class Lao extends LayoutBase {
// U+0ED9: "" LAO DIGIT NINE // U+0ED9: "" LAO DIGIT NINE
key("\u0E8A", joinMoreKeys("9", "\u0ED9")), key("\u0E8A", joinMoreKeys("9", "\u0ED9")),
// U+0ECD: "" LAO NIGGAHITA // U+0ECD: "" LAO NIGGAHITA
key("\u0ECD")) "\u0ECD")
.setKeysOfRow(2, .setKeysOfRow(2,
// U+0EBB: "" LAO VOWEL SIGN MAI KON // U+0EBB: "" LAO VOWEL SIGN MAI KON
key("\u0EBB"), "\u0EBB",
// U+0EC4: "" LAO VOWEL SIGN AI // U+0EC4: "" LAO VOWEL SIGN AI
// U+0ED0: "" LAO DIGIT ZERO // U+0ED0: "" LAO DIGIT ZERO
key("\u0EC4", joinMoreKeys("0", "\u0ED0")), key("\u0EC4", joinMoreKeys("0", "\u0ED0")),
// U+0EB3: "" LAO VOWEL SIGN AM // U+0EB3: "" LAO VOWEL SIGN AM
key("\u0EB3"),
// U+0E9E: "" LAO LETTER PHO TAM // U+0E9E: "" LAO LETTER PHO TAM
key("\u0E9E"),
// U+0EB0: "" LAO VOWEL SIGN A // U+0EB0: "" LAO VOWEL SIGN A
key("\u0EB0"),
// U+0EB4: "" LAO VOWEL SIGN I // U+0EB4: "" LAO VOWEL SIGN I
key("\u0EB4"),
// U+0EB5: "" LAO VOWEL SIGN II // U+0EB5: "" LAO VOWEL SIGN II
key("\u0EB5"),
// U+0EAE: "" LAO LETTER HO TAM // U+0EAE: "" LAO LETTER HO TAM
key("\u0EAE"),
// U+0E99: "" LAO LETTER NO // U+0E99: "" LAO LETTER NO
key("\u0E99"),
// U+0E8D: "" LAO LETTER NYO // U+0E8D: "" LAO LETTER NYO
key("\u0E8D"),
// U+0E9A: "" LAO LETTER BO // U+0E9A: "" LAO LETTER BO
key("\u0E9A"),
// U+0EA5: "" LAO LETTER LO LOOT // U+0EA5: "" LAO LETTER LO LOOT
key("\u0EA5")) "\u0EB3", "\u0E9E", "\u0EB0", "\u0EB4", "\u0EB5", "\u0EAE", "\u0E99", "\u0E8D",
.setLabelsOfRow(3, "\u0E9A", "\u0EA5")
.setKeysOfRow(3,
// U+0EB1: "" LAO VOWEL SIGN MAI KAN // U+0EB1: "" LAO VOWEL SIGN MAI KAN
// U+0EAB: "" LAO LETTER HO SUNG // U+0EAB: "" LAO LETTER HO SUNG
// U+0E81: "" LAO LETTER KO // U+0E81: "" LAO LETTER KO
@ -184,7 +173,7 @@ public final class Lao extends LayoutBase {
// U+201C: "" LEFT DOUBLE QUOTATION MARK // U+201C: "" LEFT DOUBLE QUOTATION MARK
"\u0EB1", "\u0EAB", "\u0E81", "\u0E94", "\u0EC0", "\u0EC9", "\u0EC8", "\u0EB2", "\u0EB1", "\u0EAB", "\u0E81", "\u0E94", "\u0EC0", "\u0EC9", "\u0EC8", "\u0EB2",
"\u0EAA", "\u0EA7", "\u0E87", "\u201C") "\u0EAA", "\u0EA7", "\u0E87", "\u201C")
.setLabelsOfRow(4, .setKeysOfRow(4,
// U+0E9C: "" LAO LETTER PHO SUNG // U+0E9C: "" LAO LETTER PHO SUNG
// U+0E9B: "" LAO LETTER PO // U+0E9B: "" LAO LETTER PO
// U+0EC1: "" LAO VOWEL SIGN EI // U+0EC1: "" LAO VOWEL SIGN EI
@ -200,7 +189,7 @@ public final class Lao extends LayoutBase {
.build(); .build();
private static final ExpectedKey[][] ALPHABET_SHIFTED_COMMON = new ExpectedKeyboardBuilder() private static final ExpectedKey[][] ALPHABET_SHIFTED_COMMON = new ExpectedKeyboardBuilder()
.setLabelsOfRow(1, .setKeysOfRow(1,
// U+0ED1: "" LAO DIGIT ONE // U+0ED1: "" LAO DIGIT ONE
// U+0ED2: "" LAO DIGIT TWO // U+0ED2: "" LAO DIGIT TWO
// U+0ED3: "" LAO DIGIT THREE // U+0ED3: "" LAO DIGIT THREE
@ -215,7 +204,7 @@ public final class Lao extends LayoutBase {
// U+0ECD/U+0EC8: "ໍ່" LAO NIGGAHITA/LAO TONE MAI EK // U+0ECD/U+0EC8: "ໍ່" LAO NIGGAHITA/LAO TONE MAI EK
"\u0ED1", "\u0ED2", "\u0ED3", "\u0ED4", "\u0ECC", "\u0EBC", "\u0ED5", "\u0ED6", "\u0ED1", "\u0ED2", "\u0ED3", "\u0ED4", "\u0ECC", "\u0EBC", "\u0ED5", "\u0ED6",
"\u0ED7", "\u0ED8", "\u0ED9", "\u0ECD\u0EC8") "\u0ED7", "\u0ED8", "\u0ED9", "\u0ECD\u0EC8")
.setLabelsOfRow(2, .setKeysOfRow(2,
// U+0EBB/U+0EC9: "" LAO VOWEL SIGN MAI KON/LAO TONE MAI THO // U+0EBB/U+0EC9: "" LAO VOWEL SIGN MAI KON/LAO TONE MAI THO
// U+0ED0: "" LAO DIGIT ZERO // U+0ED0: "" LAO DIGIT ZERO
// U+0EB3/U+0EC9: "ຳ້" LAO VOWEL SIGN AM/LAO TONE MAI THO // U+0EB3/U+0EC9: "ຳ້" LAO VOWEL SIGN AM/LAO TONE MAI THO
@ -228,14 +217,14 @@ public final class Lao extends LayoutBase {
// U+201D: "" RIGHT DOUBLE QUOTATION MARK // U+201D: "" RIGHT DOUBLE QUOTATION MARK
"\u0EBB\u0EC9", "\u0ED0", "\u0EB3\u0EC9", "_", "+", "\u0EB4\u0EC9", "\u0EBB\u0EC9", "\u0ED0", "\u0EB3\u0EC9", "_", "+", "\u0EB4\u0EC9",
"\u0EB5\u0EC9", "\u0EA3", "\u0EDC", "\u0EBD", "\u0EAB\u0EBC", "\u201D") "\u0EB5\u0EC9", "\u0EA3", "\u0EDC", "\u0EBD", "\u0EAB\u0EBC", "\u201D")
.setLabelsOfRow(3, .setKeysOfRow(3,
// U+0EB1/U+0EC9: "ັ້" LAO VOWEL SIGN MAI KAN/LAO TONE MAI THO // U+0EB1/U+0EC9: "ັ້" LAO VOWEL SIGN MAI KAN/LAO TONE MAI THO
// U+0ECA: "" LAO TONE MAI TI // U+0ECA: "" LAO TONE MAI TI
// U+0ECB: "" LAO TONE MAI CATAWA // U+0ECB: "" LAO TONE MAI CATAWA
// U+201C: "" LEFT DOUBLE QUOTATION MARK // U+201C: "" LEFT DOUBLE QUOTATION MARK
"\u0EB1\u0EC9", ";", ".", ",", ":", "\u0ECA", "\u0ECB", "!", "?", "%", "=", "\u0EB1\u0EC9", ";", ".", ",", ":", "\u0ECA", "\u0ECB", "!", "?", "%", "=",
"\u201C") "\u201C")
.setLabelsOfRow(4, .setKeysOfRow(4,
// U+20AD: "" KIP SIGN // U+20AD: "" KIP SIGN
// U+0EAF: "" LAO ELLIPSIS // U+0EAF: "" LAO ELLIPSIS
// U+0EB6/U+0EC9: "ຶ້" LAO VOWEL SIGN Y/LAO TONE MAI THO // U+0EB6/U+0EC9: "ຶ້" LAO VOWEL SIGN Y/LAO TONE MAI THO

View file

@ -161,7 +161,7 @@ public abstract class LayoutBase extends AbstractLayoutBase {
* @return the array of {@link ExpectedKey} that should be placed at left of the spacebar. * @return the array of {@link ExpectedKey} that should be placed at left of the spacebar.
*/ */
public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) { public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) {
return isPhone ? joinKeys(key(",", SETTINGS_KEY)) : joinKeys(key("/")); return isPhone ? joinKeys(key(",", SETTINGS_KEY)) : joinKeys("/");
} }
/** /**
@ -171,7 +171,7 @@ public abstract class LayoutBase extends AbstractLayoutBase {
*/ */
public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) { public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
final ExpectedKey periodKey = key(".", getPunctuationMoreKeys(isPhone)); final ExpectedKey periodKey = key(".", getPunctuationMoreKeys(isPhone));
return isPhone ? joinKeys(periodKey) : joinKeys(key(","), periodKey); return isPhone ? joinKeys(periodKey) : joinKeys(",", periodKey);
} }
/** /**
@ -288,11 +288,9 @@ public abstract class LayoutBase extends AbstractLayoutBase {
ExpectedKeyboardBuilder convertCommonLayoutToKeyboard(final ExpectedKeyboardBuilder builder, ExpectedKeyboardBuilder convertCommonLayoutToKeyboard(final ExpectedKeyboardBuilder builder,
final boolean isPhone) { final boolean isPhone) {
final LayoutCustomizer customizer = getCustomizer(); final LayoutCustomizer customizer = getCustomizer();
final ExpectedKey[] spacebar = joinKeys( builder.setKeysOfRow(4, (Object[])customizer.getSpaceKeys(isPhone));
customizer.getKeysLeftToSpacebar(isPhone), builder.addKeysOnTheLeftOfRow(4, (Object[])customizer.getKeysLeftToSpacebar(isPhone));
customizer.getSpaceKeys(isPhone), builder.addKeysOnTheRightOfRow(4, (Object[])customizer.getKeysRightToSpacebar(isPhone));
customizer.getKeysRightToSpacebar(isPhone));
builder.setKeysOfRow(4, spacebar);
if (isPhone) { if (isPhone) {
builder.addKeysOnTheRightOfRow(3, DELETE_KEY) builder.addKeysOnTheRightOfRow(3, DELETE_KEY)
.addKeysOnTheLeftOfRow(4, customizer.getSymbolsKey()) .addKeysOnTheLeftOfRow(4, customizer.getSymbolsKey())
@ -302,10 +300,9 @@ public abstract class LayoutBase extends AbstractLayoutBase {
.addKeysOnTheRightOfRow(2, ENTER_KEY) .addKeysOnTheRightOfRow(2, ENTER_KEY)
.addKeysOnTheLeftOfRow(4, customizer.getSymbolsKey(), SETTINGS_KEY) .addKeysOnTheLeftOfRow(4, customizer.getSymbolsKey(), SETTINGS_KEY)
.addKeysOnTheRightOfRow(4, EMOJI_KEY); .addKeysOnTheRightOfRow(4, EMOJI_KEY);
} }
builder.addKeysOnTheLeftOfRow(3, customizer.getLeftShiftKeys(isPhone)) builder.addKeysOnTheLeftOfRow(3, (Object[])customizer.getLeftShiftKeys(isPhone))
.addKeysOnTheRightOfRow(3, customizer.getRightShiftKeys(isPhone)); .addKeysOnTheRightOfRow(3, (Object[])customizer.getRightShiftKeys(isPhone));
return builder; return builder;
} }

View file

@ -77,37 +77,33 @@ public final class Mongolian extends LayoutBase {
// U+0437: "з" CYRILLIC SMALL LETTER ZE // U+0437: "з" CYRILLIC SMALL LETTER ZE
key("\u0437", moreKey("0")), key("\u0437", moreKey("0")),
// U+043A: "к" CYRILLIC SMALL LETTER KA // U+043A: "к" CYRILLIC SMALL LETTER KA
key("\u043A")) "\u043A")
// U+0439: "й" CYRILLIC SMALL LETTER SHORT I .setKeysOfRow(2,
// U+044B: "ы" CYRILLIC SMALL LETTER YERU // U+0439: "й" CYRILLIC SMALL LETTER SHORT I
// U+0431: "б" CYRILLIC SMALL LETTER BE // U+044B: "ы" CYRILLIC SMALL LETTER YERU
// U+04E9: "ө" CYRILLIC SMALL LETTER BARRED O // U+0431: "б" CYRILLIC SMALL LETTER BE
// U+0430: "а" CYRILLIC SMALL LETTER A // U+04E9: "ө" CYRILLIC SMALL LETTER BARRED O
// U+0445: "х" CYRILLIC SMALL LETTER HA // U+0430: "а" CYRILLIC SMALL LETTER A
// U+0440: "р" CYRILLIC SMALL LETTER ER // U+0445: "х" CYRILLIC SMALL LETTER HA
// U+043E: "о" CYRILLIC SMALL LETTER O // U+0440: "р" CYRILLIC SMALL LETTER ER
// U+043B: "л" CYRILLIC SMALL LETTER EL // U+043E: "о" CYRILLIC SMALL LETTER O
// U+0434: "д" CYRILLIC SMALL LETTER DE // U+043B: "л" CYRILLIC SMALL LETTER EL
// U+043F: "п" CYRILLIC SMALL LETTER PE // U+0434: "д" CYRILLIC SMALL LETTER DE
.setLabelsOfRow(2, // U+043F: "п" CYRILLIC SMALL LETTER PE
"\u0439", "\u044B", "\u0431", "\u04E9", "\u0430", "\u0445", "\u0440", "\u043E", "\u0439", "\u044B", "\u0431", "\u04E9", "\u0430", "\u0445", "\u0440", "\u043E",
"\u043B", "\u0434", "\u043F") "\u043B", "\u0434", "\u043F")
.setKeysOfRow(3, .setKeysOfRow(3,
// U+044F: "я" CYRILLIC SMALL LETTER YA // U+044F: "я" CYRILLIC SMALL LETTER YA
key("\u044F"),
// U+0447: "ч" CYRILLIC SMALL LETTER CHE // U+0447: "ч" CYRILLIC SMALL LETTER CHE
key("\u0447"), "\u044F", "\u0447",
// U+0451: "ё" CYRILLIC SMALL LETTER IO // U+0451: "ё" CYRILLIC SMALL LETTER IO
// U+0435: "е" CYRILLIC SMALL LETTER IE // U+0435: "е" CYRILLIC SMALL LETTER IE
key("\u0451", moreKey("\u0435")), key("\u0451", moreKey("\u0435")),
// U+0441: "с" CYRILLIC SMALL LETTER ES // U+0441: "с" CYRILLIC SMALL LETTER ES
key("\u0441"),
// U+043C: "м" CYRILLIC SMALL LETTER EM // U+043C: "м" CYRILLIC SMALL LETTER EM
key("\u043C"),
// U+0438: "и" CYRILLIC SMALL LETTER I // U+0438: "и" CYRILLIC SMALL LETTER I
key("\u0438"),
// U+0442: "т" CYRILLIC SMALL LETTER TE // U+0442: "т" CYRILLIC SMALL LETTER TE
key("\u0442"), "\u0441", "\u043C", "\u0438", "\u0442",
// U+044C: "ь" CYRILLIC SMALL LETTER SOFT SIGN // U+044C: "ь" CYRILLIC SMALL LETTER SOFT SIGN
// U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN // U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN
key("\u044C", moreKey("\u044A")), key("\u044C", moreKey("\u044A")),

View file

@ -99,77 +99,76 @@ public final class NepaliRomanized extends LayoutBase {
// U+0966: "" DEVANAGARI DIGIT ZERO // U+0966: "" DEVANAGARI DIGIT ZERO
key("\u092A", joinMoreKeys("\u0966", "0")), key("\u092A", joinMoreKeys("\u0966", "0")),
// U+0907: "" DEVANAGARI LETTER I // U+0907: "" DEVANAGARI LETTER I
key("\u0907")) "\u0907")
// U+093E: "" DEVANAGARI VOWEL SIGN AA .setKeysOfRow(2,
// U+0938: "" DEVANAGARI LETTER SA // U+093E: "" DEVANAGARI VOWEL SIGN AA
// U+0926: "" DEVANAGARI LETTER DA // U+0938: "" DEVANAGARI LETTER SA
// U+0909: "" DEVANAGARI LETTER U // U+0926: "" DEVANAGARI LETTER DA
// U+0917: "" DEVANAGARI LETTER GA // U+0909: "" DEVANAGARI LETTER U
// U+0939: "" DEVANAGARI LETTER HA // U+0917: "" DEVANAGARI LETTER GA
// U+091C: "" DEVANAGARI LETTER JA // U+0939: "" DEVANAGARI LETTER HA
// U+0915: "" DEVANAGARI LETTER KA // U+091C: "" DEVANAGARI LETTER JA
// U+0932: "" DEVANAGARI LETTER LA // U+0915: "" DEVANAGARI LETTER KA
// U+090F: "" DEVANAGARI LETTER E // U+0932: "" DEVANAGARI LETTER LA
// U+0950: "" DEVANAGARI OM // U+090F: "" DEVANAGARI LETTER E
.setLabelsOfRow(2, // U+0950: "" DEVANAGARI OM
"\u093E", "\u0938", "\u0926", "\u0909", "\u0917", "\u0939", "\u091C", "\u0915", "\u093E", "\u0938", "\u0926", "\u0909", "\u0917", "\u0939", "\u091C", "\u0915",
"\u0932", "\u090F", "\u0950") "\u0932", "\u090F", "\u0950")
// U+0937: "" DEVANAGARI LETTER SSA .setKeysOfRow(3,
// U+0921: "" DEVANAGARI LETTER DDA // U+0937: "" DEVANAGARI LETTER SSA
// U+091A: "" DEVANAGARI LETTER CA // U+0921: "" DEVANAGARI LETTER DDA
// U+0935: "" DEVANAGARI LETTER VA // U+091A: "" DEVANAGARI LETTER CA
// U+092C: "" DEVANAGARI LETTER BHA // U+0935: "" DEVANAGARI LETTER VA
// U+0928: "" DEVANAGARI LETTER NA // U+092C: "" DEVANAGARI LETTER BHA
// U+092E: "" DEVANAGARI LETTER MA // U+0928: "" DEVANAGARI LETTER NA
// U+0964: "" DEVANAGARI DANDA // U+092E: "" DEVANAGARI LETTER MA
// U+094D: "" DEVANAGARI SIGN VIRAMA "\u0937", "\u0921", "\u091A", "\u0935", "\u092C", "\u0928", "\u092E",
.setLabelsOfRow(3, // U+0964: "" DEVANAGARI DANDA
"\u0937", "\u0921", "\u091A", "\u0935", "\u092C", "\u0928", "\u092E", "\u0964", // U+093D: "" DEVANAGARI SIGN AVAGRAHA
key("\u0964", moreKey("\u093D")),
// U+094D: "" DEVANAGARI SIGN VIRAMA
"\u094D") "\u094D")
// U+0964: "" DEVANAGARI DANDA
// U+093D: "" DEVANAGARI SIGN AVAGRAHA
.setMoreKeysOf("\u0964", "\u093D")
.build(); .build();
private static final ExpectedKey[][] ALPHABET_SHIFTED_COMMON = new ExpectedKeyboardBuilder() private static final ExpectedKey[][] ALPHABET_SHIFTED_COMMON = new ExpectedKeyboardBuilder()
// U+0920: "" DEVANAGARI LETTER TTHA .setKeysOfRow(1,
// U+0914: "" DEVANAGARI LETTER AU // U+0920: "" DEVANAGARI LETTER TTHA
// U+0948: "" DEVANAGARI VOWEL SIGN AI // U+0914: "" DEVANAGARI LETTER AU
// U+0943: "" DEVANAGARI VOWEL SIGN VOCALIC R // U+0948: "" DEVANAGARI VOWEL SIGN AI
// U+0925: "" DEVANAGARI LETTER THA // U+0943: "" DEVANAGARI VOWEL SIGN VOCALIC R
// U+091E: "" DEVANAGARI LETTER NYA // U+0925: "" DEVANAGARI LETTER THA
// U+0942: "" DEVANAGARI VOWEL SIGN UU // U+091E: "" DEVANAGARI LETTER NYA
// U+0940: "" DEVANAGARI VOWEL SIGN II // U+0942: "" DEVANAGARI VOWEL SIGN UU
// U+0913: "" DEVANAGARI LETTER O // U+0940: "" DEVANAGARI VOWEL SIGN II
// U+092B: "" DEVANAGARI LETTER PHA // U+0913: "" DEVANAGARI LETTER O
// U+0908: "" DEVANAGARI LETTER II // U+092B: "" DEVANAGARI LETTER PHA
.setLabelsOfRow(1, // U+0908: "" DEVANAGARI LETTER II
"\u0920", "\u0914", "\u0948", "\u0943", "\u0925", "\u091E", "\u0942", "\u0940", "\u0920", "\u0914", "\u0948", "\u0943", "\u0925", "\u091E", "\u0942", "\u0940",
"\u0913", "\u092B", "\u0908") "\u0913", "\u092B", "\u0908")
// U+0906: "" DEVANAGARI LETTER AA .setKeysOfRow(2,
// U+0936: "" DEVANAGARI LETTER SHA // U+0906: "" DEVANAGARI LETTER AA
// U+0927: "" DEVANAGARI LETTER DHA // U+0936: "" DEVANAGARI LETTER SHA
// U+090A: "" DEVANAGARI LETTER UU // U+0927: "" DEVANAGARI LETTER DHA
// U+0918: "" DEVANAGARI LETTER GHA // U+090A: "" DEVANAGARI LETTER UU
// U+0905: "" DEVANAGARI LETTER A // U+0918: "" DEVANAGARI LETTER GHA
// U+091D: "" DEVANAGARI LETTER JHA // U+0905: "" DEVANAGARI LETTER A
// U+0916: "" DEVANAGARI LETTER KHA // U+091D: "" DEVANAGARI LETTER JHA
// U+0965: "" DEVANAGARI DOUBLE DANDA // U+0916: "" DEVANAGARI LETTER KHA
// U+0910: "" DEVANAGARI LETTER AI // U+0965: "" DEVANAGARI DOUBLE DANDA
// U+0903: "" DEVANAGARI SIGN VISARGA // U+0910: "" DEVANAGARI LETTER AI
.setLabelsOfRow(2, // U+0903: "" DEVANAGARI SIGN VISARGA
"\u0906", "\u0936", "\u0927", "\u090A", "\u0918", "\u0905", "\u091D", "\u0916", "\u0906", "\u0936", "\u0927", "\u090A", "\u0918", "\u0905", "\u091D", "\u0916",
"\u0965", "\u0910", "\u0903") "\u0965", "\u0910", "\u0903")
// U+090B: "" DEVANAGARI LETTER VOCALIC R .setKeysOfRow(3,
// U+0922: "" DEVANAGARI LETTER DDHA // U+090B: "" DEVANAGARI LETTER VOCALIC R
// U+091B: "" DEVANAGARI LETTER CHA // U+0922: "" DEVANAGARI LETTER DDHA
// U+0901: "" DEVANAGARI SIGN CANDRABINDU // U+091B: "" DEVANAGARI LETTER CHA
// U+092D: "" DEVANAGARI LETTER BHA // U+0901: "" DEVANAGARI SIGN CANDRABINDU
// U+0923: "" DEVANAGARI LETTER NNA // U+092D: "" DEVANAGARI LETTER BHA
// U+0902: "" DEVANAGARI SIGN ANUSVARA // U+0923: "" DEVANAGARI LETTER NNA
// U+0919: "" DEVANAGARI LETTER NGA // U+0902: "" DEVANAGARI SIGN ANUSVARA
// U+094D: "" DEVANAGARI SIGN VIRAMA // U+0919: "" DEVANAGARI LETTER NGA
.setLabelsOfRow(3, // U+094D: "" DEVANAGARI SIGN VIRAMA
"\u090B", "\u0922", "\u091B", "\u0901", "\u092D", "\u0923", "\u0902", "\u0919", "\u090B", "\u0922", "\u091B", "\u0901", "\u092D", "\u0923", "\u0902", "\u0919",
"\u094D") "\u094D")
.build(); .build();

View file

@ -63,7 +63,7 @@ public final class NepaliTraditional extends LayoutBase {
// U+093D: "" DEVANAGARI SIGN AVAGRAHA // U+093D: "" DEVANAGARI SIGN AVAGRAHA
key("\u0947", joinMoreKeys("\u0903", "\u093D")), key("\u0947", joinMoreKeys("\u0903", "\u093D")),
// U+0964: "" DEVANAGARI DANDA // U+0964: "" DEVANAGARI DANDA
key("\u0964"), "\u0964",
// U+0930: "" DEVANAGARI LETTER RA // U+0930: "" DEVANAGARI LETTER RA
// U+0930/U+0941: "रु" DEVANAGARI LETTER RA/DEVANAGARI VOWEL SIGN U // U+0930/U+0941: "रु" DEVANAGARI LETTER RA/DEVANAGARI VOWEL SIGN U
key("\u0930", moreKey("\u0930\u0941"))); key("\u0930", moreKey("\u0930\u0941")));
@ -73,9 +73,8 @@ public final class NepaliTraditional extends LayoutBase {
// U+093D: "" DEVANAGARI SIGN AVAGRAHA // U+093D: "" DEVANAGARI SIGN AVAGRAHA
key("\u0903", moreKey("\u093D")), key("\u0903", moreKey("\u093D")),
// U+0947: "" DEVANAGARI VOWEL SIGN E // U+0947: "" DEVANAGARI VOWEL SIGN E
key("\u0947"),
// U+0964: "" DEVANAGARI DANDA // U+0964: "" DEVANAGARI DANDA
key("\u0964"), "\u0947", "\u0964",
// U+0930: "" DEVANAGARI LETTER RA // U+0930: "" DEVANAGARI LETTER RA
key("\u0930", moreKey("!")), key("\u0930", moreKey("!")),
// U+094D: "" DEVANAGARI SIGN VIRAMA // U+094D: "" DEVANAGARI SIGN VIRAMA
@ -94,9 +93,8 @@ public final class NepaliTraditional extends LayoutBase {
if (isPhone) { if (isPhone) {
builder.addKeysOnTheRightOfRow(3, builder.addKeysOnTheRightOfRow(3,
// U+0902: "" DEVANAGARI SIGN ANUSVARA // U+0902: "" DEVANAGARI SIGN ANUSVARA
key("\u0902"),
// U+0919: "" DEVANAGARI LETTER NGA // U+0919: "" DEVANAGARI LETTER NGA
key("\u0919"), "\u0902", "\u0919",
// U+0948: "" DEVANAGARI VOWEL SIGN AI // U+0948: "" DEVANAGARI VOWEL SIGN AI
// U+0936/U+094D/U+0930: // U+0936/U+094D/U+0930:
// "श्र" DEVANAGARI LETTER SHA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER RA // "श्र" DEVANAGARI LETTER SHA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER RA
@ -104,16 +102,15 @@ public final class NepaliTraditional extends LayoutBase {
} else { } else {
builder.addKeysOnTheRightOfRow(3, builder.addKeysOnTheRightOfRow(3,
// U+0902: "" DEVANAGARI SIGN ANUSVARA // U+0902: "" DEVANAGARI SIGN ANUSVARA
key("\u0902"),
// U+0919: "" DEVANAGARI LETTER NGA // U+0919: "" DEVANAGARI LETTER NGA
key("\u0919"), "\u0902", "\u0919",
// U+0948: "" DEVANAGARI VOWEL SIGN AI // U+0948: "" DEVANAGARI VOWEL SIGN AI
// U+0936/U+094D/U+0930: // U+0936/U+094D/U+0930:
// "श्र" DEVANAGARI LETTER SHA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER RA // "श्र" DEVANAGARI LETTER SHA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER RA
key("\u0948", moreKey("\u0936\u094D\u0930")), key("\u0948", moreKey("\u0936\u094D\u0930")),
// U+0930/U+0941: "रु" DEVANAGARI LETTER RA/DEVANAGARI VOWEL SIGN U // U+0930/U+0941: "रु" DEVANAGARI LETTER RA/DEVANAGARI VOWEL SIGN U
key("\u0930\u0941", moreKey("!")), key("\u0930\u0941", moreKey("!")),
key("?")); "?");
} }
return builder.build(); return builder.build();
} }
@ -153,27 +150,28 @@ public final class NepaliTraditional extends LayoutBase {
// U+0907: "" DEVANAGARI LETTER I // U+0907: "" DEVANAGARI LETTER I
// U+0914: "" DEVANAGARI LETTER AU // U+0914: "" DEVANAGARI LETTER AU
key("\u0907", moreKey("\u0914"))) key("\u0907", moreKey("\u0914")))
// U+092C: "" DEVANAGARI LETTER BA .setKeysOfRow(2,
// U+0915: "" DEVANAGARI LETTER KA // U+092C: "" DEVANAGARI LETTER BA
// U+092E: "" DEVANAGARI LETTER MA // U+0915: "" DEVANAGARI LETTER KA
// U+093E: "" DEVANAGARI VOWEL SIGN AA // U+092E: "" DEVANAGARI LETTER MA
// U+0928: "" DEVANAGARI LETTER NA // U+093E: "" DEVANAGARI VOWEL SIGN AA
// U+091C: "" DEVANAGARI LETTER JA // U+0928: "" DEVANAGARI LETTER NA
// U+0935: "" DEVANAGARI LETTER VA // U+091C: "" DEVANAGARI LETTER JA
// U+092A: "" DEVANAGARI LETTER PA // U+0935: "" DEVANAGARI LETTER VA
// U+093F: "ि" DEVANAGARI VOWEL SIGN I // U+092A: "" DEVANAGARI LETTER PA
// U+0938: "" DEVANAGARI LETTER SA // U+093F: "ि" DEVANAGARI VOWEL SIGN I
// U+0941: "" DEVANAGARI VOWEL SIGN U // U+0938: "" DEVANAGARI LETTER SA
.setLabelsOfRow(2, // U+0941: "" DEVANAGARI VOWEL SIGN U
"\u092C", "\u0915", "\u092E", "\u093E", "\u0928", "\u091C", "\u0935", "\u092A", "\u092C", "\u0915", "\u092E", "\u093E", "\u0928", "\u091C", "\u0935", "\u092A",
"\u093F", "\u0938", "\u0941") "\u093F", "\u0938", "\u0941")
// U+0936: "" DEVANAGARI LETTER SHA .setKeysOfRow(3,
// U+0939: "" DEVANAGARI LETTER HA // U+0936: "" DEVANAGARI LETTER SHA
// U+0905: "" DEVANAGARI LETTER A // U+0939: "" DEVANAGARI LETTER HA
// U+0916: "" DEVANAGARI LETTER KHA // U+0905: "" DEVANAGARI LETTER A
// U+0926: "" DEVANAGARI LETTER DA // U+0916: "" DEVANAGARI LETTER KHA
// U+0932: "" DEVANAGARI LETTER LA // U+0926: "" DEVANAGARI LETTER DA
.setLabelsOfRow(3, "\u0936", "\u0939", "\u0905", "\u0916", "\u0926", "\u0932") // U+0932: "" DEVANAGARI LETTER LA
"\u0936", "\u0939", "\u0905", "\u0916", "\u0926", "\u0932")
.build(); .build();
private static final ExpectedKey[][] ALPHABET_SHIFTED_COMMON = new ExpectedKeyboardBuilder() private static final ExpectedKey[][] ALPHABET_SHIFTED_COMMON = new ExpectedKeyboardBuilder()
@ -222,32 +220,32 @@ public final class NepaliTraditional extends LayoutBase {
// U+0943: "" DEVANAGARI VOWEL SIGN VOCALIC R // U+0943: "" DEVANAGARI VOWEL SIGN VOCALIC R
// U+0913: "" DEVANAGARI LETTER O // U+0913: "" DEVANAGARI LETTER O
key("\u0943", moreKey("\u0913"))) key("\u0943", moreKey("\u0913")))
// U+0906: "" DEVANAGARI LETTER AA .setKeysOfRow(2,
// U+0919/U+094D: "ङ्" DEVANAGARI LETTER NGA/DEVANAGARI SIGN VIRAMA // U+0906: "" DEVANAGARI LETTER AA
// U+0921/U+094D/U+0921: // U+0919/U+094D: "ङ्" DEVANAGARI LETTER NGA/DEVANAGARI SIGN VIRAMA
// "ड्ड" DEVANAGARI LETTER DDA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER DDA // U+0921/U+094D/U+0921:
// U+0901: "" DEVANAGARI SIGN CANDRABINDU // "ड्ड" DEVANAGARI LETTER DDA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER DDA
// U+0926/U+094D/U+0926: // U+0901: "" DEVANAGARI SIGN CANDRABINDU
// "द्द" DEVANAGARI LETTER DA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER DA // U+0926/U+094D/U+0926:
// U+091D: "" DEVANAGARI LETTER JHA // "द्द" DEVANAGARI LETTER DA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER DA
// U+094B: "" DEVANAGARI VOWEL SIGN O // U+091D: "" DEVANAGARI LETTER JHA
// U+092B: "" DEVANAGARI LETTER PHA // U+094B: "" DEVANAGARI VOWEL SIGN O
// U+0940: "" DEVANAGARI VOWEL SIGN II // U+092B: "" DEVANAGARI LETTER PHA
// U+091F/U+094D/U+0920: // U+0940: "" DEVANAGARI VOWEL SIGN II
// "ट्ठ" DEVANAGARI LETTER TTA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER TTHA // U+091F/U+094D/U+0920:
// U+0942: "" DEVANAGARI VOWEL SIGN UU // "ट्ठ" DEVANAGARI LETTER TTA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER TTHA
.setLabelsOfRow(2, // U+0942: "" DEVANAGARI VOWEL SIGN UU
"\u0906", "\u0919\u094D", "\u0921\u094D\u0921", "\u0901", "\u0926\u094D\u0926", "\u0906", "\u0919\u094D", "\u0921\u094D\u0921", "\u0901", "\u0926\u094D\u0926",
"\u091D", "\u094B", "\u092B", "\u0940", "\u091F\u094D\u0920", "\u0942") "\u091D", "\u094B", "\u092B", "\u0940", "\u091F\u094D\u0920", "\u0942")
// U+0915/U+094D: "क्" DEVANAGARI LETTER KA/DEVANAGARI SIGN VIRAMA .setKeysOfRow(3,
// U+0939/U+094D/U+092E: // U+0915/U+094D: "क्" DEVANAGARI LETTER KA/DEVANAGARI SIGN VIRAMA
// "ह्म" DEVANAGARI LETTER HA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER MA // U+0939/U+094D/U+092E:
// U+090B: "" DEVANAGARI LETTER VOCALIC R // "ह्म" DEVANAGARI LETTER HA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER MA
// U+0950: "" DEVANAGARI OM // U+090B: "" DEVANAGARI LETTER VOCALIC R
// U+094C: "" DEVANAGARI VOWEL SIGN AU // U+0950: "" DEVANAGARI OM
// U+0926/U+094D/U+092F: // U+094C: "" DEVANAGARI VOWEL SIGN AU
// "द्य" DEVANAGARI LETTER DA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER YA // U+0926/U+094D/U+092F:
.setLabelsOfRow(3, // "द्य" DEVANAGARI LETTER DA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER YA
"\u0915\u094D", "\u0939\u094D\u092E", "\u090B", "\u0950", "\u094C", "\u0915\u094D", "\u0939\u094D\u092E", "\u090B", "\u0950", "\u094C",
"\u0926\u094D\u092F") "\u0926\u094D\u092F")
.build(); .build();

View file

@ -51,8 +51,8 @@ public final class Nordic extends LayoutBase {
key("i", moreKey("8")), key("i", moreKey("8")),
key("o", moreKey("9")), key("o", moreKey("9")),
key("p", moreKey("0")), key("p", moreKey("0")),
key(ROW1_11)) ROW1_11)
.setLabelsOfRow(2, "a", "s", "d", "f", "g", "h", "j", "k", "l", ROW2_10, ROW2_11) .setKeysOfRow(2, "a", "s", "d", "f", "g", "h", "j", "k", "l", ROW2_10, ROW2_11)
.setLabelsOfRow(3, "z", "x", "c", "v", "b", "n", "m") .setKeysOfRow(3, "z", "x", "c", "v", "b", "n", "m")
.build(); .build();
} }

View file

@ -47,7 +47,7 @@ public final class Qwerty extends LayoutBase {
key("i", moreKey("8")), key("i", moreKey("8")),
key("o", moreKey("9")), key("o", moreKey("9")),
key("p", moreKey("0"))) key("p", moreKey("0")))
.setLabelsOfRow(2, "a", "s", "d", "f", "g", "h", "j", "k", "l") .setKeysOfRow(2, "a", "s", "d", "f", "g", "h", "j", "k", "l")
.setLabelsOfRow(3, "z", "x", "c", "v", "b", "n", "m") .setKeysOfRow(3, "z", "x", "c", "v", "b", "n", "m")
.build(); .build();
} }

View file

@ -44,7 +44,7 @@ public final class Qwertz extends LayoutBase {
key("i", moreKey("8")), key("i", moreKey("8")),
key("o", moreKey("9")), key("o", moreKey("9")),
key("p", moreKey("0"))) key("p", moreKey("0")))
.setLabelsOfRow(2, "a", "s", "d", "f", "g", "h", "j", "k", "l") .setKeysOfRow(2, "a", "s", "d", "f", "g", "h", "j", "k", "l")
.setLabelsOfRow(3, "y", "x", "c", "v", "b", "n", "m") .setKeysOfRow(3, "y", "x", "c", "v", "b", "n", "m")
.build(); .build();
} }

View file

@ -82,28 +82,28 @@ public final class SouthSlavic extends LayoutBase {
// U+043F: "п" CYRILLIC SMALL LETTER PE // U+043F: "п" CYRILLIC SMALL LETTER PE
key("\u043F", moreKey("0")), key("\u043F", moreKey("0")),
// U+0448: "ш" CYRILLIC SMALL LETTER SHA // U+0448: "ш" CYRILLIC SMALL LETTER SHA
key("\u0448")) "\u0448")
// U+0430: "а" CYRILLIC SMALL LETTER A .setKeysOfRow(2,
// U+0441: "с" CYRILLIC SMALL LETTER ES // U+0430: "а" CYRILLIC SMALL LETTER A
// U+0434: "д" CYRILLIC SMALL LETTER DE // U+0441: "с" CYRILLIC SMALL LETTER ES
// U+0444: "ф" CYRILLIC SMALL LETTER EF // U+0434: "д" CYRILLIC SMALL LETTER DE
// U+0433: "г" CYRILLIC SMALL LETTER GHE // U+0444: "ф" CYRILLIC SMALL LETTER EF
// U+0445: "х" CYRILLIC SMALL LETTER HA // U+0433: "г" CYRILLIC SMALL LETTER GHE
// U+0458: "ј" CYRILLIC SMALL LETTER JE // U+0445: "х" CYRILLIC SMALL LETTER HA
// U+043A: "к" CYRILLIC SMALL LETTER KA // U+0458: "ј" CYRILLIC SMALL LETTER JE
// U+043B: "л" CYRILLIC SMALL LETTER EL // U+043A: "к" CYRILLIC SMALL LETTER KA
// U+0447: "ч" CYRILLIC SMALL LETTER CHE // U+043B: "л" CYRILLIC SMALL LETTER EL
.setLabelsOfRow(2, // U+0447: "ч" CYRILLIC SMALL LETTER CHE
"\u0430", "\u0441", "\u0434", "\u0444", "\u0433", "\u0445", "\u0458", "\u043A", "\u0430", "\u0441", "\u0434", "\u0444", "\u0433", "\u0445", "\u0458", "\u043A",
"\u043B", "\u0447", ROW2_11) "\u043B", "\u0447", ROW2_11)
// U+045F: "џ" CYRILLIC SMALL LETTER DZHE .setKeysOfRow(3,
// U+0446: "ц" CYRILLIC SMALL LETTER TSE // U+045F: "џ" CYRILLIC SMALL LETTER DZHE
// U+0432: "в" CYRILLIC SMALL LETTER VE // U+0446: "ц" CYRILLIC SMALL LETTER TSE
// U+0431: "б" CYRILLIC SMALL LETTER BE // U+0432: "в" CYRILLIC SMALL LETTER VE
// U+043D: "н" CYRILLIC SMALL LETTER EN // U+0431: "б" CYRILLIC SMALL LETTER BE
// U+043C: "м" CYRILLIC SMALL LETTER EM // U+043D: "н" CYRILLIC SMALL LETTER EN
// U+0436: "ж" CYRILLIC SMALL LETTER ZHE // U+043C: "м" CYRILLIC SMALL LETTER EM
.setLabelsOfRow(3, // U+0436: "ж" CYRILLIC SMALL LETTER ZHE
ROW3_1, "\u045F", "\u0446", "\u0432", "\u0431", "\u043D", "\u043C", ROW3_8, ROW3_1, "\u045F", "\u0446", "\u0432", "\u0431", "\u043D", "\u043C", ROW3_8,
"\u0436") "\u0436")
.build(); .build();

View file

@ -46,7 +46,7 @@ public final class Spanish extends LayoutBase {
key("i", moreKey("8")), key("i", moreKey("8")),
key("o", moreKey("9")), key("o", moreKey("9")),
key("p", moreKey("0"))) key("p", moreKey("0")))
.setLabelsOfRow(2, "a", "s", "d", "f", "g", "h", "j", "k", "l", ROW2_10) .setKeysOfRow(2, "a", "s", "d", "f", "g", "h", "j", "k", "l", ROW2_10)
.setLabelsOfRow(3, "z", "x", "c", "v", "b", "n", "m") .setKeysOfRow(3, "z", "x", "c", "v", "b", "n", "m")
.build(); .build();
} }

View file

@ -48,8 +48,8 @@ public final class Swiss extends LayoutBase {
key("i", moreKey("8")), key("i", moreKey("8")),
key("o", moreKey("9")), key("o", moreKey("9")),
key("p", moreKey("0")), key("p", moreKey("0")),
key(ROW1_11)) ROW1_11)
.setLabelsOfRow(2, "a", "s", "d", "f", "g", "h", "j", "k", "l", ROW2_10, ROW2_11) .setKeysOfRow(2, "a", "s", "d", "f", "g", "h", "j", "k", "l", ROW2_10, ROW2_11)
.setLabelsOfRow(3, "y", "x", "c", "v", "b", "n", "m") .setKeysOfRow(3, "y", "x", "c", "v", "b", "n", "m")
.build(); .build();
} }

View file

@ -46,7 +46,7 @@ public class Symbols extends AbstractLayoutBase {
.addKeysOnTheRightOfRow(4, key(ENTER_KEY, EMOJI_KEY)); .addKeysOnTheRightOfRow(4, key(ENTER_KEY, EMOJI_KEY));
} else { } else {
// Tablet symbols keyboard has extra two keys at the left edge of the 3rd row. // Tablet symbols keyboard has extra two keys at the left edge of the 3rd row.
builder.addKeysOnTheLeftOfRow(3, joinKeys("\\", "=")); builder.addKeysOnTheLeftOfRow(3, (Object[])joinKeys("\\", "="));
builder.addKeysOnTheRightOfRow(1, DELETE_KEY) builder.addKeysOnTheRightOfRow(1, DELETE_KEY)
.addKeysOnTheRightOfRow(2, ENTER_KEY) .addKeysOnTheRightOfRow(2, ENTER_KEY)
.addKeysOnTheLeftOfRow(3, customizer.getSymbolsShiftKey(isPhone)) .addKeysOnTheLeftOfRow(3, customizer.getSymbolsShiftKey(isPhone))
@ -136,11 +136,10 @@ public class Symbols extends AbstractLayoutBase {
key("4", moreKey("\u2074")), key("4", moreKey("\u2074")),
// U+215D: "" VULGAR FRACTION FIVE EIGHTHS // U+215D: "" VULGAR FRACTION FIVE EIGHTHS
key("5", moreKey("\u215D")), key("5", moreKey("\u215D")),
key("6"), "6",
// U+215E: "" VULGAR FRACTION SEVEN EIGHTHS // U+215E: "" VULGAR FRACTION SEVEN EIGHTHS
key("7", moreKey("\u215E")), key("7", moreKey("\u215E")),
key("8"), "8", "9",
key("9"),
// U+207F: "" SUPERSCRIPT LATIN SMALL LETTER N // U+207F: "" SUPERSCRIPT LATIN SMALL LETTER N
// U+2205: "" EMPTY SET // U+2205: "" EMPTY SET
key("0", joinMoreKeys("\u207F", "\u2205"))) key("0", joinMoreKeys("\u207F", "\u2205")))
@ -148,7 +147,7 @@ public class Symbols extends AbstractLayoutBase {
key("@"), key("#"), key(CURRENCY), key("@"), key("#"), key(CURRENCY),
// U+2030: "" PER MILLE SIGN // U+2030: "" PER MILLE SIGN
key("%", moreKey("\u2030")), key("%", moreKey("\u2030")),
key("&"), "&",
// U+2013: "" EN DASH // U+2013: "" EN DASH
// U+2014: "" EM DASH // U+2014: "" EM DASH
// U+00B7: "·" MIDDLE DOT // U+00B7: "·" MIDDLE DOT

View file

@ -34,7 +34,7 @@ public class SymbolsShifted extends AbstractLayoutBase {
public ExpectedKey[][] getLayout(final boolean isPhone) { public ExpectedKey[][] getLayout(final boolean isPhone) {
final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(SYMBOLS_SHIFTED_COMMON); final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(SYMBOLS_SHIFTED_COMMON);
final LayoutCustomizer customizer = mCustomizer; final LayoutCustomizer customizer = mCustomizer;
builder.replaceKeyOfLabel(OTHER_CURRENCIES, customizer.getOtherCurrencyKeys()); builder.replaceKeyOfLabel(OTHER_CURRENCIES, (Object[])customizer.getOtherCurrencyKeys());
if (isPhone) { if (isPhone) {
builder.addKeysOnTheLeftOfRow(3, customizer.getBackToSymbolsKey()) builder.addKeysOnTheLeftOfRow(3, customizer.getBackToSymbolsKey())
.addKeysOnTheRightOfRow(3, DELETE_KEY) .addKeysOnTheRightOfRow(3, DELETE_KEY)
@ -44,7 +44,7 @@ public class SymbolsShifted extends AbstractLayoutBase {
// Tablet symbols shifted keyboard has extra two keys at the right edge of the 3rd row. // Tablet symbols shifted keyboard has extra two keys at the right edge of the 3rd row.
// U+00BF: "¿" INVERTED QUESTION MARK // U+00BF: "¿" INVERTED QUESTION MARK
// U+00A1: "¡" INVERTED EXCLAMATION MARK // U+00A1: "¡" INVERTED EXCLAMATION MARK
builder.addKeysOnTheRightOfRow(3, joinKeys("\u00A1", "\u00BF")); builder.addKeysOnTheRightOfRow(3, (Object[])joinKeys("\u00A1", "\u00BF"));
builder.addKeysOnTheRightOfRow(1, DELETE_KEY) builder.addKeysOnTheRightOfRow(1, DELETE_KEY)
.addKeysOnTheRightOfRow(2, ENTER_KEY) .addKeysOnTheRightOfRow(2, ENTER_KEY)
.addKeysOnTheLeftOfRow(3, customizer.getBackToSymbolsKey()) .addKeysOnTheLeftOfRow(3, customizer.getBackToSymbolsKey())
@ -72,10 +72,8 @@ public class SymbolsShifted extends AbstractLayoutBase {
// Common symbols shifted keyboard layout. // Common symbols shifted keyboard layout.
private static final ExpectedKey[][] SYMBOLS_SHIFTED_COMMON = new ExpectedKeyboardBuilder() private static final ExpectedKey[][] SYMBOLS_SHIFTED_COMMON = new ExpectedKeyboardBuilder()
.setKeysOfRow(1, .setKeysOfRow(1,
key("~"),
// U+0060: "`" GRAVE ACCENT // U+0060: "`" GRAVE ACCENT
key("\u0060"), "~", "\u0060", "|",
key("|"),
// U+2022: "" BULLET // U+2022: "" BULLET
// U+266A: "" EIGHTH NOTE // U+266A: "" EIGHTH NOTE
// U+2665: "" BLACK HEART SUIT // U+2665: "" BLACK HEART SUIT
@ -84,21 +82,20 @@ public class SymbolsShifted extends AbstractLayoutBase {
// U+2663: "" BLACK CLUB SUIT // U+2663: "" BLACK CLUB SUIT
key("\u2022", joinMoreKeys("\u266A", "\u2665", "\u2660", "\u2666", "\u2663")), key("\u2022", joinMoreKeys("\u266A", "\u2665", "\u2660", "\u2666", "\u2663")),
// U+221A: "" SQUARE ROOT // U+221A: "" SQUARE ROOT
key("\u221A"), "\u221A",
// U+03C0: "π" GREEK SMALL LETTER PI // U+03C0: "π" GREEK SMALL LETTER PI
// U+03A0: "Π" GREEK CAPITAL LETTER PI // U+03A0: "Π" GREEK CAPITAL LETTER PI
key("\u03C0", moreKey("\u03A0")), key("\u03C0", moreKey("\u03A0")),
// U+00F7: "÷" DIVISION SIGN // U+00F7: "÷" DIVISION SIGN
key("\u00F7"),
// U+00D7: "×" MULTIPLICATION SIGN // U+00D7: "×" MULTIPLICATION SIGN
key("\u00D7"), "\u00F7", "\u00D7",
// U+00B6: "" PILCROW SIGN // U+00B6: "" PILCROW SIGN
// U+00A7: "§" SECTION SIGN // U+00A7: "§" SECTION SIGN
key("\u00B6", moreKey("\u00A7")), key("\u00B6", moreKey("\u00A7")),
// U+2206: "" INCREMENT // U+2206: "" INCREMENT
key("\u2206")) "\u2206")
.setKeysOfRow(2, .setKeysOfRow(2,
key(OTHER_CURRENCIES), OTHER_CURRENCIES,
// U+2191: "" UPWARDS ARROW // U+2191: "" UPWARDS ARROW
// U+2193: "" DOWNWARDS ARROW // U+2193: "" DOWNWARDS ARROW
// U+2190: "" LEFTWARDS ARROW // U+2190: "" LEFTWARDS ARROW
@ -112,9 +109,8 @@ public class SymbolsShifted extends AbstractLayoutBase {
// U+2248: "" ALMOST EQUAL TO // U+2248: "" ALMOST EQUAL TO
// U+221E: "" INFINITY // U+221E: "" INFINITY
key("=", joinMoreKeys("\u2260", "\u2248", "\u221E")), key("=", joinMoreKeys("\u2260", "\u2248", "\u221E")),
key("{"), "{", "}")
key("}")) .setKeysOfRow(3,
.setLabelsOfRow(3,
// U+00A9: "©" COPYRIGHT SIGN // U+00A9: "©" COPYRIGHT SIGN
// U+00AE: "®" REGISTERED SIGN // U+00AE: "®" REGISTERED SIGN
// U+2122: "" TRADE MARK SIGN // U+2122: "" TRADE MARK SIGN
@ -129,7 +125,7 @@ public class SymbolsShifted extends AbstractLayoutBase {
// U+2265: "" GREATER-THAN EQUAL TO // U+2265: "" GREATER-THAN EQUAL TO
// U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
key(">", joinMoreKeys("\u203A", "\u2265", "\u00BB")), key(">", joinMoreKeys("\u203A", "\u2265", "\u00BB")),
SPACE_KEY, key(","), SPACE_KEY, ",",
// U+2026: "" HORIZONTAL ELLIPSIS // U+2026: "" HORIZONTAL ELLIPSIS
key(".", moreKey("\u2026"))) key(".", moreKey("\u2026")))
.build(); .build();

View file

@ -69,11 +69,11 @@ public final class Thai extends LayoutBase {
final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON); final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON);
if (isPhone) { if (isPhone) {
// U+0E03: "" THAI CHARACTER KHO KHUAT // U+0E03: "" THAI CHARACTER KHO KHUAT
builder.addKeysOnTheRightOfRow(3, key("\u0E03")); builder.addKeysOnTheRightOfRow(3, "\u0E03");
} else { } else {
// U+0E03: "" THAI CHARACTER KHO KHUAT // U+0E03: "" THAI CHARACTER KHO KHUAT
builder.addKeysOnTheRightOfRow(2, key("\u0E03")) builder.addKeysOnTheRightOfRow(2, "\u0E03")
.addKeysOnTheRightOfRow(4, EXCLAMATION_AND_QUESTION_MARKS); .addKeysOnTheRightOfRow(4, (Object[])EXCLAMATION_AND_QUESTION_MARKS);
} }
return builder.build(); return builder.build();
} }
@ -88,10 +88,10 @@ public final class Thai extends LayoutBase {
ALPHABET_SHIFTED_COMMON); ALPHABET_SHIFTED_COMMON);
if (isPhone) { if (isPhone) {
// U+0E05: "" THAI CHARACTER KHO KHON // U+0E05: "" THAI CHARACTER KHO KHON
builder.addKeysOnTheRightOfRow(3, key("\u0E05")); builder.addKeysOnTheRightOfRow(3, "\u0E05");
} else { } else {
// U+0E05: "" THAI CHARACTER KHO KHON // U+0E05: "" THAI CHARACTER KHO KHON
builder.addKeysOnTheRightOfRow(2, key("\u0E05")); builder.addKeysOnTheRightOfRow(2, "\u0E05");
} }
return builder.build(); return builder.build();
} }
@ -101,11 +101,9 @@ public final class Thai extends LayoutBase {
ExpectedKeyboardBuilder convertCommonLayoutToKeyboard(final ExpectedKeyboardBuilder builder, ExpectedKeyboardBuilder convertCommonLayoutToKeyboard(final ExpectedKeyboardBuilder builder,
final boolean isPhone) { final boolean isPhone) {
final LayoutCustomizer customizer = getCustomizer(); final LayoutCustomizer customizer = getCustomizer();
final ExpectedKey[] spacebar = joinKeys( builder.setKeysOfRow(5, (Object[])customizer.getSpaceKeys(isPhone));
customizer.getKeysLeftToSpacebar(isPhone), builder.addKeysOnTheLeftOfRow(5, (Object[])customizer.getKeysLeftToSpacebar(isPhone));
customizer.getSpaceKeys(isPhone), builder.addKeysOnTheRightOfRow(5, (Object[])customizer.getKeysRightToSpacebar(isPhone));
customizer.getKeysRightToSpacebar(isPhone));
builder.setKeysOfRow(5, spacebar);
if (isPhone) { if (isPhone) {
builder.addKeysOnTheRightOfRow(4, DELETE_KEY) builder.addKeysOnTheRightOfRow(4, DELETE_KEY)
.addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey()) .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey())
@ -116,15 +114,15 @@ public final class Thai extends LayoutBase {
.addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey(), SETTINGS_KEY) .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey(), SETTINGS_KEY)
.addKeysOnTheRightOfRow(5, EMOJI_KEY); .addKeysOnTheRightOfRow(5, EMOJI_KEY);
} }
builder.addKeysOnTheLeftOfRow(4, customizer.getLeftShiftKeys(isPhone)) builder.addKeysOnTheLeftOfRow(4, (Object[])customizer.getLeftShiftKeys(isPhone))
.addKeysOnTheRightOfRow(4, customizer.getRightShiftKeys(isPhone)); .addKeysOnTheRightOfRow(4, (Object[])customizer.getRightShiftKeys(isPhone));
return builder; return builder;
} }
private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder() private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
.setKeysOfRow(1, .setKeysOfRow(1,
// U+0E45: "" THAI CHARACTER LAKKHANGYAO // U+0E45: "" THAI CHARACTER LAKKHANGYAO
key("\u0E45"), "\u0E45",
// U+0E51: "" THAI DIGIT ONE // U+0E51: "" THAI DIGIT ONE
key("/", joinMoreKeys("1", "\u0E51")), key("/", joinMoreKeys("1", "\u0E51")),
// U+0E52: "" THAI DIGIT TWO // U+0E52: "" THAI DIGIT TWO
@ -159,160 +157,110 @@ public final class Thai extends LayoutBase {
// U+0E50: "" THAI DIGIT ZERO // U+0E50: "" THAI DIGIT ZERO
key("\u0E46", joinMoreKeys("0", "\u0E50")), key("\u0E46", joinMoreKeys("0", "\u0E50")),
// U+0E44: "" THAI CHARACTER SARA AI MAIMALAI // U+0E44: "" THAI CHARACTER SARA AI MAIMALAI
key("\u0E44"),
// U+0E33: "" THAI CHARACTER SARA AM // U+0E33: "" THAI CHARACTER SARA AM
key("\u0E33"),
// U+0E1E: "" THAI CHARACTER PHO PHAN // U+0E1E: "" THAI CHARACTER PHO PHAN
key("\u0E1E"),
// U+0E30: "" THAI CHARACTER SARA A // U+0E30: "" THAI CHARACTER SARA A
key("\u0E30"), "\u0E44", "\u0E33", "\u0E1E", "\u0E30",
// U+0E31: "" THAI CHARACTER MAI HAN-AKAT // U+0E31: "" THAI CHARACTER MAI HAN-AKAT
key(" \u0E31", "\u0E31"), key(" \u0E31", "\u0E31"),
// U+0E35: "" HAI CHARACTER SARA II // U+0E35: "" HAI CHARACTER SARA II
key(" \u0E35", "\u0E35"), key(" \u0E35", "\u0E35"),
// U+0E23: "" THAI CHARACTER RO RUA // U+0E23: "" THAI CHARACTER RO RUA
key("\u0E23"),
// U+0E19: "" THAI CHARACTER NO NU // U+0E19: "" THAI CHARACTER NO NU
key("\u0E19"),
// U+0E22: "" THAI CHARACTER YO YAK // U+0E22: "" THAI CHARACTER YO YAK
key("\u0E22"),
// U+0E1A: "" THAI CHARACTER BO BAIMAI // U+0E1A: "" THAI CHARACTER BO BAIMAI
key("\u0E1A"),
// U+0E25: "" THAI CHARACTER LO LING // U+0E25: "" THAI CHARACTER LO LING
key("\u0E25")) "\u0E23", "\u0E19", "\u0E22", "\u0E1A", "\u0E25")
.setKeysOfRow(3, .setKeysOfRow(3,
// U+0E1F: "" THAI CHARACTER FO FAN // U+0E1F: "" THAI CHARACTER FO FAN
key("\u0E1F"),
// U+0E2B: "" THAI CHARACTER HO HIP // U+0E2B: "" THAI CHARACTER HO HIP
key("\u0E2B"),
// U+0E01: "" THAI CHARACTER KO KAI // U+0E01: "" THAI CHARACTER KO KAI
key("\u0E01"),
// U+0E14: "" THAI CHARACTER DO DEK // U+0E14: "" THAI CHARACTER DO DEK
key("\u0E14"),
// U+0E40: "" THAI CHARACTER SARA E // U+0E40: "" THAI CHARACTER SARA E
key("\u0E40"), "\u0E1F", "\u0E2B", "\u0E01", "\u0E14", "\u0E40",
// U+0E49: "" THAI CHARACTER MAI THO // U+0E49: "" THAI CHARACTER MAI THO
key(" \u0E49", "\u0E49"), key(" \u0E49", "\u0E49"),
// U+0E48: "" THAI CHARACTER MAI EK // U+0E48: "" THAI CHARACTER MAI EK
key(" \u0E48", "\u0E48"), key(" \u0E48", "\u0E48"),
// U+0E32: "" THAI CHARACTER SARA AA // U+0E32: "" THAI CHARACTER SARA AA
key("\u0E32"),
// U+0E2A: "" THAI CHARACTER SO SUA // U+0E2A: "" THAI CHARACTER SO SUA
key("\u0E2A"),
// U+0E27: "" THAI CHARACTER WO WAEN // U+0E27: "" THAI CHARACTER WO WAEN
key("\u0E27"),
// U+0E07: "" THAI CHARACTER NGO NGU // U+0E07: "" THAI CHARACTER NGO NGU
key("\u0E07")) "\u0E32", "\u0E2A", "\u0E27", "\u0E07")
.setKeysOfRow(4, .setKeysOfRow(4,
// U+0E1C: "" THAI CHARACTER PHO PHUNG // U+0E1C: "" THAI CHARACTER PHO PHUNG
key("\u0E1C"),
// U+0E1B: "" THAI CHARACTER PO PLA // U+0E1B: "" THAI CHARACTER PO PLA
key("\u0E1B"),
// U+0E41: "" THAI CHARACTER SARA AE // U+0E41: "" THAI CHARACTER SARA AE
key("\u0E41"),
// U+0E2D: "" THAI CHARACTER O ANG // U+0E2D: "" THAI CHARACTER O ANG
key("\u0E2D"), "\u0E1C", "\u0E1B", "\u0E41", "\u0E2D",
// U+0E34: "" THAI CHARACTER SARA I // U+0E34: "" THAI CHARACTER SARA I
key(" \u0E34", "\u0E34"), key(" \u0E34", "\u0E34"),
// U+0E37: "" THAI CHARACTER SARA UEE // U+0E37: "" THAI CHARACTER SARA UEE
key(" \u0E37", "\u0E37"), key(" \u0E37", "\u0E37"),
// U+0E17: "" THAI CHARACTER THO THAHAN // U+0E17: "" THAI CHARACTER THO THAHAN
key("\u0E17"),
// U+0E21: "" THAI CHARACTER MO MA // U+0E21: "" THAI CHARACTER MO MA
key("\u0E21"),
// U+0E43: "" THAI CHARACTER SARA AI MAIMUAN // U+0E43: "" THAI CHARACTER SARA AI MAIMUAN
key("\u0E43"),
// U+0E1D: "" THAI CHARACTER FO FA // U+0E1D: "" THAI CHARACTER FO FA
key("\u0E1D")) "\u0E17", "\u0E21", "\u0E43", "\u0E1D")
.build(); .build();
private static final ExpectedKey[][] ALPHABET_SHIFTED_COMMON = new ExpectedKeyboardBuilder() private static final ExpectedKey[][] ALPHABET_SHIFTED_COMMON = new ExpectedKeyboardBuilder()
.setKeysOfRow(1, .setKeysOfRow(1,
key("+"),
// U+0E51: "" THAI DIGIT ONE // U+0E51: "" THAI DIGIT ONE
key("\u0E51"),
// U+0E52: "" THAI DIGIT TWO // U+0E52: "" THAI DIGIT TWO
key("\u0E52"),
// U+0E53: "" THAI DIGIT THREE // U+0E53: "" THAI DIGIT THREE
key("\u0E53"),
// U+0E54: "" THAI DIGIT FOUR // U+0E54: "" THAI DIGIT FOUR
key("\u0E54"),
// U+0E39: "" THAI CHARACTER SARA UU // U+0E39: "" THAI CHARACTER SARA UU
"+", "\u0E51", "\u0E52", "\u0E53", "\u0E54",
key(" \u0E39", "\u0E39"), key(" \u0E39", "\u0E39"),
// U+0E3F: "฿" THAI CURRENCY SYMBOL BAHT // U+0E3F: "฿" THAI CURRENCY SYMBOL BAHT
key("\u0E3F"),
// U+0E55: "" THAI DIGIT FIVE // U+0E55: "" THAI DIGIT FIVE
key("\u0E55"),
// U+0E56: "" THAI DIGIT SIX // U+0E56: "" THAI DIGIT SIX
key("\u0E56"),
// U+0E57: "" THAI DIGIT SEVEN // U+0E57: "" THAI DIGIT SEVEN
key("\u0E57"),
// U+0E58: "" THAI DIGIT EIGHT // U+0E58: "" THAI DIGIT EIGHT
key("\u0E58"),
// U+0E59: "" THAI DIGIT NINE // U+0E59: "" THAI DIGIT NINE
key("\u0E59")) "\u0E3F", "\u0E55", "\u0E56", "\u0E57", "\u0E58", "\u0E59")
.setKeysOfRow(2, .setKeysOfRow(2,
// U+0E50: "" THAI DIGIT ZERO // U+0E50: "" THAI DIGIT ZERO
key("\u0E50"),
key("\""),
// U+0E0E: "" THAI CHARACTER DO CHADA // U+0E0E: "" THAI CHARACTER DO CHADA
key("\u0E0E"),
// U+0E11: "" THAI CHARACTER THO NANGMONTHO // U+0E11: "" THAI CHARACTER THO NANGMONTHO
key("\u0E11"),
// U+0E18: "" THAI CHARACTER THO THONG // U+0E18: "" THAI CHARACTER THO THONG
key("\u0E18"), "\u0E50", "\"", "\u0E0E", "\u0E11", "\u0E18",
// U+0E4D: "" THAI CHARACTER THANTHAKHAT // U+0E4D: "" THAI CHARACTER THANTHAKHAT
key(" \u0E4D", "\u0E4D"), key(" \u0E4D", "\u0E4D"),
// U+0E4A: "" THAI CHARACTER MAI TRI // U+0E4A: "" THAI CHARACTER MAI TRI
key(" \u0E4A", "\u0E4A"), key(" \u0E4A", "\u0E4A"),
// U+0E13: "" THAI CHARACTER NO NEN // U+0E13: "" THAI CHARACTER NO NEN
key("\u0E13"),
// U+0E2F: "" THAI CHARACTER PAIYANNOI // U+0E2F: "" THAI CHARACTER PAIYANNOI
key("\u0E2F"),
// U+0E0D: "" THAI CHARACTER YO YING // U+0E0D: "" THAI CHARACTER YO YING
key("\u0E0D"),
// U+0E10: "" THAI CHARACTER THO THAN // U+0E10: "" THAI CHARACTER THO THAN
key("\u0E10"), "\u0E13", "\u0E2F", "\u0E0D", "\u0E10", ",")
key(","))
.setKeysOfRow(3, .setKeysOfRow(3,
// U+0E24: "" THAI CHARACTER RU // U+0E24: "" THAI CHARACTER RU
key("\u0E24"),
// U+0E06: "" THAI CHARACTER KHO RAKHANG // U+0E06: "" THAI CHARACTER KHO RAKHANG
key("\u0E06"),
// U+0E0F: "" THAI CHARACTER TO PATAK // U+0E0F: "" THAI CHARACTER TO PATAK
key("\u0E0F"),
// U+0E42: "" THAI CHARACTER SARA O // U+0E42: "" THAI CHARACTER SARA O
key("\u0E42"),
// U+0E0C: "" THAI CHARACTER CHO CHOE // U+0E0C: "" THAI CHARACTER CHO CHOE
key("\u0E0C"), "\u0E24", "\u0E06", "\u0E0F", "\u0E42", "\u0E0C",
// U+0E47: "" THAI CHARACTER MAITAIKHU // U+0E47: "" THAI CHARACTER MAITAIKHU
key(" \u0E47", "\u0E47"), key(" \u0E47", "\u0E47"),
// U+0E4B: "" THAI CHARACTER MAI CHATTAWA // U+0E4B: "" THAI CHARACTER MAI CHATTAWA
key(" \u0E4B", "\u0E4B"), key(" \u0E4B", "\u0E4B"),
// U+0E29: "" THAI CHARACTER SO RUSI // U+0E29: "" THAI CHARACTER SO RUSI
key("\u0E29"),
// U+0E28: "" THAI CHARACTER SO SALA // U+0E28: "" THAI CHARACTER SO SALA
key("\u0E28"),
// U+0E0B: "" THAI CHARACTER SO SO // U+0E0B: "" THAI CHARACTER SO SO
key("\u0E0B"), "\u0E29", "\u0E28", "\u0E0B", ".")
key("."))
.setKeysOfRow(4, .setKeysOfRow(4,
key("("),
key(")"),
// U+0E09: "" THAI CHARACTER CHO CHING // U+0E09: "" THAI CHARACTER CHO CHING
key("\u0E09"),
// U+0E2E: "" THAI CHARACTER HO NOKHUK // U+0E2E: "" THAI CHARACTER HO NOKHUK
key("\u0E2E"), "(", ")", "\u0E09", "\u0E2E",
// U+0E3A: "" THAI CHARACTER PHINTHU // U+0E3A: "" THAI CHARACTER PHINTHU
key(" \u0E3A", "\u0E3A"), key(" \u0E3A", "\u0E3A"),
// U+0E4C: "" THAI CHARACTER THANTHAKHAT // U+0E4C: "" THAI CHARACTER THANTHAKHAT
key(" \u0E4C", "\u0E4C"), key(" \u0E4C", "\u0E4C"),
key("?"),
// U+0E12: "" THAI CHARACTER THO PHUTHAO // U+0E12: "" THAI CHARACTER THO PHUTHAO
key("\u0E12"),
// U+0E2C: "" THAI CHARACTER LO CHULA // U+0E2C: "" THAI CHARACTER LO CHULA
key("\u0E2C"),
// U+0E26: "" THAI CHARACTER LU // U+0E26: "" THAI CHARACTER LU
key("\u0E26")) "?", "\u0E12", "\u0E2C", "\u0E26")
.build(); .build();
} }

View file

@ -18,12 +18,8 @@ package com.android.inputmethod.keyboard.layout.expected;
import com.android.inputmethod.keyboard.internal.KeyboardIconsSet; import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
import com.android.inputmethod.latin.Constants; import com.android.inputmethod.latin.Constants;
import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.StringUtils; import com.android.inputmethod.latin.utils.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
/** /**
* Base class to create an expected keyboard for unit test. * Base class to create an expected keyboard for unit test.
*/ */
@ -97,19 +93,7 @@ public abstract class AbstractLayoutBase {
// Helper method to create {@link ExpectedKey} array by joining {@link ExpectedKey}, // Helper method to create {@link ExpectedKey} array by joining {@link ExpectedKey},
// {@link ExpectedKey} array, and {@link String}. // {@link ExpectedKey} array, and {@link String}.
public static ExpectedKey[] joinKeys(final Object ... keys) { public static ExpectedKey[] joinKeys(final Object ... keys) {
final ArrayList<ExpectedKey> list = CollectionUtils.newArrayList(); return ExpectedKeyboardBuilder.joinKeys(keys);
for (final Object key : keys) {
if (key instanceof ExpectedKey) {
list.add((ExpectedKey)key);
} else if (key instanceof ExpectedKey[]) {
list.addAll(Arrays.asList((ExpectedKey[])key));
} else if (key instanceof String) {
list.add(key((String)key));
} else {
throw new RuntimeException("Unknown expected key type: " + key);
}
}
return list.toArray(new ExpectedKey[list.size()]);
} }
// Icon ids. // Icon ids.

View file

@ -16,6 +16,9 @@
package com.android.inputmethod.keyboard.layout.expected; package com.android.inputmethod.keyboard.layout.expected;
import com.android.inputmethod.latin.utils.CollectionUtils;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Locale; import java.util.Locale;
@ -105,67 +108,57 @@ public final class ExpectedKeyboardBuilder extends AbstractKeyboardBuilder<Expec
} }
} }
/** // Helper method to create {@link ExpectedKey} array by joining {@link ExpectedKey},
* Set the row with specified keys that have specified labels. // {@link ExpectedKey} array, and {@link String}.
* @param row the row number to set keys. static ExpectedKey[] joinKeys(final Object ... keys) {
* @param labels the label texts of the keys. final ArrayList<ExpectedKey> list = CollectionUtils.newArrayList();
* @return this builder. for (final Object key : keys) {
*/ if (key instanceof ExpectedKey) {
public ExpectedKeyboardBuilder setLabelsOfRow(final int row, final String ... labels) { list.add((ExpectedKey)key);
final ExpectedKey[] keys = new ExpectedKey[labels.length]; } else if (key instanceof ExpectedKey[]) {
for (int columnIndex = 0; columnIndex < labels.length; columnIndex++) { list.addAll(Arrays.asList((ExpectedKey[])key));
keys[columnIndex] = ExpectedKey.newInstance(labels[columnIndex]); } else if (key instanceof String) {
list.add(ExpectedKey.newInstance((String)key));
} else {
throw new RuntimeException("Unknown expected key type: " + key);
}
} }
setRowAt(row, keys); return list.toArray(new ExpectedKey[list.size()]);
return this;
} }
/** /**
* Set the row with specified keys. * Set the row with specified keys.
* @param row the row number to set keys. * @param row the row number to set keys.
* @param keys the keys to be set at <code>row</code>. * @param keys the keys to be set at <code>row</code>. Each key can be {@link ExpectedKey},
* {@link ExpectedKey} array, and {@link String}.
* @return this builder. * @return this builder.
*/ */
public ExpectedKeyboardBuilder setKeysOfRow(final int row, final ExpectedKey ... keys) { public ExpectedKeyboardBuilder setKeysOfRow(final int row, final Object ... keys) {
setRowAt(row, keys); setRowAt(row, joinKeys(keys));
return this; return this;
} }
/** /**
* Set the "more keys" of the key that has the specified label. * Set the "more keys" of the key that has the specified label.
* @param label the label of the key to set the "more keys". * @param label the label of the key to set the "more keys".
* @param moreKeys the array of labels of the "more keys" to be set. * @param moreKeys the array of "more key" to be set. Each "more key" can be
* {@link ExpectedKey}, {@link ExpectedKey} array, and {@link String}.
* @return this builder. * @return this builder.
*/ */
public ExpectedKeyboardBuilder setMoreKeysOf(final String label, final String ... moreKeys) { public ExpectedKeyboardBuilder setMoreKeysOf(final String label, final Object ... moreKeys) {
final ExpectedKey[] expectedMoreKeys = new ExpectedKey[moreKeys.length]; setMoreKeysOf(ExpectedKeyVisual.newInstance(label), joinKeys(moreKeys));
for (int index = 0; index < moreKeys.length; index++) {
expectedMoreKeys[index] = ExpectedKey.newInstance(moreKeys[index]);
}
setMoreKeysOf(label, expectedMoreKeys);
return this;
}
/**
* Set the "more keys" of the key that has the specified label.
* @param label the label of the key to set the "more keys".
* @param moreKeys the array of "more key" to be set.
* @return this builder.
*/
public ExpectedKeyboardBuilder setMoreKeysOf(final String label,
final ExpectedKey ... moreKeys) {
setMoreKeysOf(ExpectedKeyVisual.newInstance(label), moreKeys);
return this; return this;
} }
/** /**
* Set the "more keys" of the key that has the specified icon. * Set the "more keys" of the key that has the specified icon.
* @param iconId the icon id of the key to set the "more keys". * @param iconId the icon id of the key to set the "more keys".
* @param moreKeys the array of "more key" to be set. * @param moreKeys the array of "more key" to be set. Each "more key" can be
* {@link ExpectedKey}, {@link ExpectedKey} array, and {@link String}.
* @return this builder. * @return this builder.
*/ */
public ExpectedKeyboardBuilder setMoreKeysOf(final int iconId, final ExpectedKey ... moreKeys) { public ExpectedKeyboardBuilder setMoreKeysOf(final int iconId, final Object ... moreKeys) {
setMoreKeysOf(ExpectedKeyVisual.newInstance(iconId), moreKeys); setMoreKeysOf(ExpectedKeyVisual.newInstance(iconId), joinKeys(moreKeys));
return this; return this;
} }
@ -188,14 +181,16 @@ public final class ExpectedKeyboardBuilder extends AbstractKeyboardBuilder<Expec
* Insert the keys at specified position. * Insert the keys at specified position.
* @param row the row number to insert the <code>keys</code>. * @param row the row number to insert the <code>keys</code>.
* @param column the column number to insert the <code>keys</code>. * @param column the column number to insert the <code>keys</code>.
* @param keys the array of keys to insert at <code>row,column</code>. * @param keys the array of keys to insert at <code>row,column</code>. Each key can be
* {@link ExpectedKey}, {@link ExpectedKey} array, and {@link String}.
* @return this builder. * @return this builder.
* @throws {@link RuntimeException} if <code>row</code> or <code>column</code> is illegal. * @throws {@link RuntimeException} if <code>row</code> or <code>column</code> is illegal.
*/ */
public ExpectedKeyboardBuilder insertKeysAtRow(final int row, final int column, public ExpectedKeyboardBuilder insertKeysAtRow(final int row, final int column,
final ExpectedKey ... keys) { final Object ... keys) {
final ExpectedKey[] expectedKeys = joinKeys(keys);
for (int index = 0; index < keys.length; index++) { for (int index = 0; index < keys.length; index++) {
setElementAt(row, column + index, keys[index], true /* insert */); setElementAt(row, column + index, expectedKeys[index], true /* insert */);
} }
return this; return this;
} }
@ -203,15 +198,17 @@ public final class ExpectedKeyboardBuilder extends AbstractKeyboardBuilder<Expec
/** /**
* Add the keys on the left most of the row. * Add the keys on the left most of the row.
* @param row the row number to add the <code>keys</code>. * @param row the row number to add the <code>keys</code>.
* @param keys the array of keys to add on the left most of the row. * @param keys the array of keys to add on the left most of the row. Each key can be
* {@link ExpectedKey}, {@link ExpectedKey} array, and {@link String}.
* @return this builder. * @return this builder.
* @throws {@link RuntimeException} if <code>row</code> is illegal. * @throws {@link RuntimeException} if <code>row</code> is illegal.
*/ */
public ExpectedKeyboardBuilder addKeysOnTheLeftOfRow(final int row, public ExpectedKeyboardBuilder addKeysOnTheLeftOfRow(final int row,
final ExpectedKey ... keys) { final Object ... keys) {
final ExpectedKey[] expectedKeys = joinKeys(keys);
// Keys should be inserted from the last to preserve the order. // Keys should be inserted from the last to preserve the order.
for (int index = keys.length - 1; index >= 0; index--) { for (int index = keys.length - 1; index >= 0; index--) {
setElementAt(row, 1, keys[index], true /* insert */); setElementAt(row, 1, expectedKeys[index], true /* insert */);
} }
return this; return this;
} }
@ -219,12 +216,13 @@ public final class ExpectedKeyboardBuilder extends AbstractKeyboardBuilder<Expec
/** /**
* Add the keys on the right most of the row. * Add the keys on the right most of the row.
* @param row the row number to add the <code>keys</code>. * @param row the row number to add the <code>keys</code>.
* @param keys the array of keys to add on the right most of the row. * @param keys the array of keys to add on the right most of the row. Each key can be
* {@link ExpectedKey}, {@link ExpectedKey} array, and {@link String}.
* @return this builder. * @return this builder.
* @throws {@link RuntimeException} if <code>row</code> is illegal. * @throws {@link RuntimeException} if <code>row</code> is illegal.
*/ */
public ExpectedKeyboardBuilder addKeysOnTheRightOfRow(final int row, public ExpectedKeyboardBuilder addKeysOnTheRightOfRow(final int row,
final ExpectedKey ... keys) { final Object ... keys) {
final int rightEnd = getRowAt(row).length + 1; final int rightEnd = getRowAt(row).length + 1;
insertKeysAtRow(row, rightEnd, keys); insertKeysAtRow(row, rightEnd, keys);
return this; return this;
@ -233,16 +231,17 @@ public final class ExpectedKeyboardBuilder extends AbstractKeyboardBuilder<Expec
/** /**
* Replace the most top-left key that has the specified label with the new keys. * Replace the most top-left key that has the specified label with the new keys.
* @param label the label of the key to set <code>newKeys</code>. * @param label the label of the key to set <code>newKeys</code>.
* @param newKeys the keys to be set. * @param newKeys the keys to be set. Each key can be {@link ExpectedKey}, {@link ExpectedKey}
* array, and {@link String}.
* @return this builder. * @return this builder.
*/ */
public ExpectedKeyboardBuilder replaceKeyOfLabel(final String label, public ExpectedKeyboardBuilder replaceKeyOfLabel(final String label,
final ExpectedKey ... newKeys) { final Object ... newKeys) {
final ExpectedKeyVisual visual = ExpectedKeyVisual.newInstance(label); final ExpectedKeyVisual visual = ExpectedKeyVisual.newInstance(label);
replaceKeyOf(visual, new ReplaceJob() { replaceKeyOf(visual, new ReplaceJob() {
@Override @Override
public ExpectedKey[] replacingKeys(final ExpectedKey oldKey) { public ExpectedKey[] replacingKeys(final ExpectedKey oldKey) {
return newKeys; return joinKeys(newKeys);
} }
@Override @Override
public boolean stopAtFirstOccurrence() { public boolean stopAtFirstOccurrence() {
@ -255,15 +254,16 @@ public final class ExpectedKeyboardBuilder extends AbstractKeyboardBuilder<Expec
/** /**
* Replace the all specified keys with the new keys. * Replace the all specified keys with the new keys.
* @param key the key to be replaced by <code>newKeys</code>. * @param key the key to be replaced by <code>newKeys</code>.
* @param newKeys the keys to be set. * @param newKeys the keys to be set. Each key can be {@link ExpectedKey}, {@link ExpectedKey}
* array, and {@link String}.
* @return this builder. * @return this builder.
*/ */
public ExpectedKeyboardBuilder replaceKeysOfAll(final ExpectedKey key, public ExpectedKeyboardBuilder replaceKeysOfAll(final ExpectedKey key,
final ExpectedKey ... newKeys) { final Object ... newKeys) {
replaceKeyOf(key.getVisual(), new ReplaceJob() { replaceKeyOf(key.getVisual(), new ReplaceJob() {
@Override @Override
public ExpectedKey[] replacingKeys(final ExpectedKey oldKey) { public ExpectedKey[] replacingKeys(final ExpectedKey oldKey) {
return newKeys; return joinKeys(newKeys);
} }
@Override @Override
public boolean stopAtFirstOccurrence() { public boolean stopAtFirstOccurrence() {