From 15c99e9f1a7776b95325d36cf9e38b6d674e483b Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Mon, 30 Jan 2012 11:14:45 +0900 Subject: [PATCH] Support addtionalMoreKeys This change also removes * Unused more_keys_for_q, w, and p. Change-Id: Idb99e5f6d8c2ad2d28437f42b35b21c282cd181f --- .../values-ar/donottranslate-more-keys.xml | 20 +- .../values-ca/donottranslate-more-keys.xml | 8 +- .../values-cs/donottranslate-more-keys.xml | 14 +- .../values-da/donottranslate-more-keys.xml | 10 +- .../donottranslate-more-keys.xml | 23 -- .../values-de/donottranslate-more-keys.xml | 8 +- .../values-en/donottranslate-more-keys.xml | 8 +- .../values-es/donottranslate-more-keys.xml | 8 +- .../values-et/donottranslate-more-keys.xml | 14 +- .../values-fi/donottranslate-more-keys.xml | 4 +- .../donottranslate-more-keys.xml | 25 --- .../donottranslate-more-keys.xml | 26 --- .../values-fr/donottranslate-more-keys.xml | 15 +- .../values-hr/donottranslate-more-keys.xml | 2 +- .../values-hu/donottranslate-more-keys.xml | 10 +- .../values-it/donottranslate-more-keys.xml | 8 +- .../values-ky/donottranslate-more-keys.xml | 4 +- .../values-lt/donottranslate-more-keys.xml | 14 +- .../values-lv/donottranslate-more-keys.xml | 14 +- .../values-nb/donottranslate-more-keys.xml | 6 +- .../values-nl/donottranslate-more-keys.xml | 8 +- .../values-pl/donottranslate-more-keys.xml | 4 +- .../values-pt/donottranslate-more-keys.xml | 8 +- .../values-rm/donottranslate-more-keys.xml | 2 +- .../values-ro/donottranslate-more-keys.xml | 4 +- .../values-ru/donottranslate-more-keys.xml | 2 +- .../values-sk/donottranslate-more-keys.xml | 14 +- .../values-sv/donottranslate-more-keys.xml | 6 +- java/res/values-sw600dp/config.xml | 1 - java/res/values-sw768dp/config.xml | 1 - .../values-tr/donottranslate-more-keys.xml | 6 +- .../values-vi/donottranslate-more-keys.xml | 10 +- java/res/values/attrs.xml | 6 + java/res/values/config.xml | 1 - java/res/values/donottranslate-more-keys.xml | 33 +-- java/res/xml-sw600dp/row_qwerty1.xml | 9 +- java/res/xml-sw600dp/rows_azerty.xml | 7 +- java/res/xml-sw600dp/rows_qwertz.xml | 9 +- java/res/xml-sw600dp/rows_scandinavian.xml | 9 +- java/res/xml-sw600dp/rows_symbols.xml | 10 + java/res/xml-sw768dp/row_qwerty1.xml | 9 +- java/res/xml-sw768dp/rows_azerty.xml | 9 +- java/res/xml-sw768dp/rows_qwertz.xml | 9 +- java/res/xml-sw768dp/rows_scandinavian.xml | 9 +- java/res/xml-sw768dp/rows_symbols.xml | 10 + java/res/xml/row_qwerty1.xml | 13 +- java/res/xml/rows_arabic.xml | 24 +- java/res/xml/rows_azerty.xml | 17 +- java/res/xml/rows_bulgarian.xml | 21 +- java/res/xml/rows_qwertz.xml | 13 +- java/res/xml/rows_scandinavian.xml | 13 +- java/res/xml/rows_serbian.xml | 20 +- java/res/xml/rows_slavic.xml | 17 +- java/res/xml/rows_symbols.xml | 10 + .../com/android/inputmethod/keyboard/Key.java | 15 +- .../keyboard/internal/KeyStyles.java | 1 + .../keyboard/internal/MoreKeySpecParser.java | 115 ++++++---- .../internal/MoreKeySpecParserTests.java | 210 ++++++++++++++++++ 58 files changed, 568 insertions(+), 358 deletions(-) delete mode 100644 java/res/values-de-rZZ/donottranslate-more-keys.xml delete mode 100644 java/res/values-fr-rCA/donottranslate-more-keys.xml delete mode 100644 java/res/values-fr-rCH/donottranslate-more-keys.xml diff --git a/java/res/values-ar/donottranslate-more-keys.xml b/java/res/values-ar/donottranslate-more-keys.xml index e49677adb..6a14a3c55 100644 --- a/java/res/values-ar/donottranslate-more-keys.xml +++ b/java/res/values-ar/donottranslate-more-keys.xml @@ -50,18 +50,18 @@ "٨" "٩" "٠" - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 - 0,\u066b,\u066c + 0,\u066b,\u066c \u060c \u060c \u061f diff --git a/java/res/values-ca/donottranslate-more-keys.xml b/java/res/values-ca/donottranslate-more-keys.xml index bd9fb7ccd..512a86110 100644 --- a/java/res/values-ca/donottranslate-more-keys.xml +++ b/java/res/values-ca/donottranslate-more-keys.xml @@ -19,10 +19,10 @@ --> à,á,ä,â,ã,å,ą,æ,ā,ª - 3,è,é,ë,ê,ę,ė,ē - 8,í,ï,ì,î,į,ī - 9,ò,ó,ö,ô,õ,ø,œ,ō,º - 7,ú,ü,ù,û,ū + è,é,ë,ê,ę,ė,ē + í,ï,ì,î,į,ī + ò,ó,ö,ô,õ,ø,œ,ō,º + ú,ü,ù,û,ū ñ,ń ç,ć,č ŀ,ł diff --git a/java/res/values-cs/donottranslate-more-keys.xml b/java/res/values-cs/donottranslate-more-keys.xml index 70b3f3ee7..3701adb1b 100644 --- a/java/res/values-cs/donottranslate-more-keys.xml +++ b/java/res/values-cs/donottranslate-more-keys.xml @@ -19,16 +19,16 @@ --> á,à,â,ä,æ,ã,å,ā - 3,é,ě,è,ê,ë,ę,ė,ē - 8,í,î,ï,ì,į,ī - 9,ó,ö,ô,ò,õ,œ,ø,ō - 7,ú,ů,û,ü,ù,ū + é,ě,è,ê,ë,ę,ė,ē + í,î,ï,ì,į,ī + ó,ö,ô,ò,õ,œ,ø,ō + ú,ů,û,ü,ù,ū š,ß,ś ň,ñ,ń č,ç,ć ý,ÿ ď - 4,ř - 5,ť - 6,ž,ź,ż + ř + ť + ž,ź,ż diff --git a/java/res/values-da/donottranslate-more-keys.xml b/java/res/values-da/donottranslate-more-keys.xml index bed034d40..b1c8d2072 100644 --- a/java/res/values-da/donottranslate-more-keys.xml +++ b/java/res/values-da/donottranslate-more-keys.xml @@ -19,13 +19,13 @@ --> á,ä,à,â,ã,ā - 3,é,ë - 8,í,ï - 9,ó,ô,ò,õ,œ,ō - 7,ú,ü,û,ù,ū + é,ë + í,ï + ó,ô,ò,õ,œ,ō + ú,ü,û,ù,ū ß,ś,š ñ,ń - 6,ý,ÿ + ý,ÿ ð ł å diff --git a/java/res/values-de-rZZ/donottranslate-more-keys.xml b/java/res/values-de-rZZ/donottranslate-more-keys.xml deleted file mode 100644 index e7ec5e152..000000000 --- a/java/res/values-de-rZZ/donottranslate-more-keys.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - 6 - - diff --git a/java/res/values-de/donottranslate-more-keys.xml b/java/res/values-de/donottranslate-more-keys.xml index 80aa32ae2..48462c59d 100644 --- a/java/res/values-de/donottranslate-more-keys.xml +++ b/java/res/values-de/donottranslate-more-keys.xml @@ -19,11 +19,9 @@ --> ä,â,à,á,æ,ã,å,ā - 3,ė - 9,ö,ô,ò,ó,õ,œ,ø,ō - 7,ü,û,ù,ú,ū + ė + ö,ô,ò,ó,õ,œ,ø,ō + ü,û,ù,ú,ū ß,ś,š ñ,ń - - 6 diff --git a/java/res/values-en/donottranslate-more-keys.xml b/java/res/values-en/donottranslate-more-keys.xml index bc26c6aa0..9073d3b4f 100644 --- a/java/res/values-en/donottranslate-more-keys.xml +++ b/java/res/values-en/donottranslate-more-keys.xml @@ -19,11 +19,11 @@ --> à,á,â,ä,æ,ã,å,ā - 3,è,é,ê,ë,ē - 8,î,ï,í,ī,ì - 9,ô,ö,ò,ó,œ,ø,ō,õ + è,é,ê,ë,ē + î,ï,í,ī,ì + ô,ö,ò,ó,œ,ø,ō,õ ß - 7,û,ü,ù,ú,ū + û,ü,ù,ú,ū ñ ç diff --git a/java/res/values-es/donottranslate-more-keys.xml b/java/res/values-es/donottranslate-more-keys.xml index d5a8ed19d..429273647 100644 --- a/java/res/values-es/donottranslate-more-keys.xml +++ b/java/res/values-es/donottranslate-more-keys.xml @@ -19,10 +19,10 @@ --> á,à,ä,â,ã,å,ą,æ,ā,ª - 3,é,è,ë,ê,ę,ė,ē - 8,í,ï,ì,î,į,ī - 9,ó,ò,ö,ô,õ,ø,œ,ō,º - 7,ú,ü,ù,û,ū + é,è,ë,ê,ę,ė,ē + í,ï,ì,î,į,ī + ó,ò,ö,ô,õ,ø,œ,ō,º + ú,ü,ù,û,ū ñ,ń ç,ć,č "\\,,\?,!,¿,¡,:,-,\',\",),(,/,;,+,&,\@" diff --git a/java/res/values-et/donottranslate-more-keys.xml b/java/res/values-et/donottranslate-more-keys.xml index 1011347cd..bda22fcec 100644 --- a/java/res/values-et/donottranslate-more-keys.xml +++ b/java/res/values-et/donottranslate-more-keys.xml @@ -19,17 +19,17 @@ --> ä,ā,à,á,â,ã,å,æ,ą - 3,ē,è,ė,é,ê,ë,ę,ě - 8,ī,ì,į,í,î,ï,ı - 9,ö,õ,ò,ó,ô,œ,ő,ø - 7,ü,ū,ų,ù,ú,û,ů,ű + ē,è,ė,é,ê,ë,ę,ě + ī,ì,į,í,î,ï,ı + ö,õ,ò,ó,ô,œ,ő,ø + ü,ū,ų,ù,ú,û,ů,ű š,ß,ś,ş ņ,ñ,ń,ń č,ç,ć - 6,ý,ÿ + ý,ÿ ď - 4,ŗ,ř,ŕ - 5,ţ,ť + ŗ,ř,ŕ + ţ,ť ž,ż,ź ķ ļ,ł,ĺ,ľ diff --git a/java/res/values-fi/donottranslate-more-keys.xml b/java/res/values-fi/donottranslate-more-keys.xml index e1dfa2bcf..b922fe21d 100644 --- a/java/res/values-fi/donottranslate-more-keys.xml +++ b/java/res/values-fi/donottranslate-more-keys.xml @@ -19,8 +19,8 @@ --> æ,à,á,â,ã,ā - 9,ø,ô,ò,ó,õ,œ,ō - 7,ü + ø,ô,ò,ó,õ,œ,ō + ü š,ß,ś ž,ź,ż å diff --git a/java/res/values-fr-rCA/donottranslate-more-keys.xml b/java/res/values-fr-rCA/donottranslate-more-keys.xml deleted file mode 100644 index 80e9d9346..000000000 --- a/java/res/values-fr-rCA/donottranslate-more-keys.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - à,â,æ,á,ä,ã,å,ā,ª - 1 - 2 - - diff --git a/java/res/values-fr-rCH/donottranslate-more-keys.xml b/java/res/values-fr-rCH/donottranslate-more-keys.xml deleted file mode 100644 index 561c5e52f..000000000 --- a/java/res/values-fr-rCH/donottranslate-more-keys.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - à,â,æ,á,ä,ã,å,ā,ª - ÿ - 1 - 2 - 6 - diff --git a/java/res/values-fr/donottranslate-more-keys.xml b/java/res/values-fr/donottranslate-more-keys.xml index cd6d49bad..0f78e7cd9 100644 --- a/java/res/values-fr/donottranslate-more-keys.xml +++ b/java/res/values-fr/donottranslate-more-keys.xml @@ -18,14 +18,11 @@ */ --> - à,â,1,æ,á,ä,ã,å,ā,ª - é,è,ê,ë,3,ę,ė,ē - î,8,ï,ì,í,į,ī - ô,œ,9,ö,ò,ó,õ,ø,ō,º - ù,û,7,ü,ú,ū + à,â,%,æ,á,ä,ã,å,ā,ª + é,è,ê,ë,%,ę,ė,ē + î,%,ï,ì,í,į,ī + ô,œ,%,ö,ò,ó,õ,ø,ō,º + ù,û,%,ü,ú,ū ç,ć,č - 6,ÿ - - - 2 + %,ÿ diff --git a/java/res/values-hr/donottranslate-more-keys.xml b/java/res/values-hr/donottranslate-more-keys.xml index c34e0e646..112c444c3 100644 --- a/java/res/values-hr/donottranslate-more-keys.xml +++ b/java/res/values-hr/donottranslate-more-keys.xml @@ -21,7 +21,7 @@ š,ś,ß ñ,ń - 6,ž,ź,ż + ž,ź,ż č,ć,ç đ diff --git a/java/res/values-hu/donottranslate-more-keys.xml b/java/res/values-hu/donottranslate-more-keys.xml index 42b330199..cc23dff48 100644 --- a/java/res/values-hu/donottranslate-more-keys.xml +++ b/java/res/values-hu/donottranslate-more-keys.xml @@ -19,10 +19,8 @@ --> á,à,â,ä,æ,ã,å,ā - 3,é,è,ê,ë,ę,ė,ē - 8,í,î,ï,ì,į,ī - 9,ó,ö,ő,ô,ò,õ,œ,ø,ō - 7,ú,ü,ű,û,ù,ū - - 6 + é,è,ê,ë,ę,ė,ē + í,î,ï,ì,į,ī + ó,ö,ő,ô,ò,õ,œ,ø,ō + ú,ü,ű,û,ù,ū diff --git a/java/res/values-it/donottranslate-more-keys.xml b/java/res/values-it/donottranslate-more-keys.xml index fa1537bec..69659a389 100644 --- a/java/res/values-it/donottranslate-more-keys.xml +++ b/java/res/values-it/donottranslate-more-keys.xml @@ -19,8 +19,8 @@ --> à,á,â,ä,æ,ã,å,ā,ª - 3,è,é,ê,ë,ę,ė,ē - 8,ì,í,î,ï,į,ī - 9,ò,ó,ô,ö,õ,œ,ø,ō,º - 7,ù,ú,û,ü,ū + è,é,ê,ë,ę,ė,ē + ì,í,î,ï,į,ī + ò,ó,ô,ö,õ,œ,ø,ō,º + ù,ú,û,ü,ū diff --git a/java/res/values-ky/donottranslate-more-keys.xml b/java/res/values-ky/donottranslate-more-keys.xml index d56cde577..44720aa7f 100644 --- a/java/res/values-ky/donottranslate-more-keys.xml +++ b/java/res/values-ky/donottranslate-more-keys.xml @@ -18,7 +18,7 @@ */ --> - 3,ү - 6,ң + ү + ң ө diff --git a/java/res/values-lt/donottranslate-more-keys.xml b/java/res/values-lt/donottranslate-more-keys.xml index e36ce6a66..fc6c84b2d 100644 --- a/java/res/values-lt/donottranslate-more-keys.xml +++ b/java/res/values-lt/donottranslate-more-keys.xml @@ -19,17 +19,17 @@ --> ą,ä,ā,à,á,â,ã,å,æ - 3,ė,ę,ē,è,é,ê,ë,ě - 8,į,ī,ì,í,î,ï,ı - 9,ö,õ,ò,ó,ô,œ,ő,ø - 7,ū,ų,ü,ū,ù,ú,û,ů,ű + ė,ę,ē,è,é,ê,ë,ě + į,ī,ì,í,î,ï,ı + ö,õ,ò,ó,ô,œ,ő,ø + ū,ų,ü,ū,ù,ú,û,ů,ű š,ß,ś,ş ņ,ñ,ń,ń č,ç,ć - 6,ý,ÿ + ý,ÿ ď - 4,ŗ,ř,ŕ - 5,ţ,ť + ŗ,ř,ŕ + ţ,ť ž,ż,ź ķ ļ,ł,ĺ,ľ diff --git a/java/res/values-lv/donottranslate-more-keys.xml b/java/res/values-lv/donottranslate-more-keys.xml index 8514e738d..3b937dfe3 100644 --- a/java/res/values-lv/donottranslate-more-keys.xml +++ b/java/res/values-lv/donottranslate-more-keys.xml @@ -19,17 +19,17 @@ --> ā,à,á,â,ã,ä,å,æ,ą - 3,ē,ė,è,é,ê,ë,ę,ě - 8,ī,į,ì,í,î,ï,ı - 9,ò,ó,ô,õ,ö,œ,ő,ø - 7,ū,ų,ù,ú,û,ü,ů,ű + ē,ė,è,é,ê,ë,ę,ě + ī,į,ì,í,î,ï,ı + ò,ó,ô,õ,ö,œ,ő,ø + ū,ų,ù,ú,û,ü,ů,ű š,ß,ś,ş ņ,ñ,ń,ń č,ç,ć - 6,ý,ÿ + ý,ÿ ď - 4,ŗ,ř,ŕ - 5,ţ,ť + ŗ,ř,ŕ + ţ,ť ž,ż,ź ķ ļ,ł,ĺ,ľ diff --git a/java/res/values-nb/donottranslate-more-keys.xml b/java/res/values-nb/donottranslate-more-keys.xml index e83d6b768..cf6e4d1ce 100644 --- a/java/res/values-nb/donottranslate-more-keys.xml +++ b/java/res/values-nb/donottranslate-more-keys.xml @@ -19,9 +19,9 @@ --> à,ä,á,â,ã,ā - 3,é,è,ê,ë,ę,ė,ē - 9,ô,ò,ó,ö,õ,œ,ō - 7,ü,û,ù,ú,ū + é,è,ê,ë,ę,ė,ē + ô,ò,ó,ö,õ,œ,ō + ü,û,ù,ú,ū å ø æ diff --git a/java/res/values-nl/donottranslate-more-keys.xml b/java/res/values-nl/donottranslate-more-keys.xml index 49cc41964..ac03872f3 100644 --- a/java/res/values-nl/donottranslate-more-keys.xml +++ b/java/res/values-nl/donottranslate-more-keys.xml @@ -19,9 +19,9 @@ --> á,ä,â,à,æ,ã,å,ā - 3,é,ë,ê,è,ę,ė,ē - 8,í,ï,ì,î,į,ī - 9,ó,ö,ô,ò,õ,œ,ø,ō - 7,ú,ü,û,ù,ū + é,ë,ê,è,ę,ė,ē + í,ï,ì,î,į,ī + ó,ö,ô,ò,õ,œ,ø,ō + ú,ü,û,ù,ū ñ,ń diff --git a/java/res/values-pl/donottranslate-more-keys.xml b/java/res/values-pl/donottranslate-more-keys.xml index 18e149991..84e74e849 100644 --- a/java/res/values-pl/donottranslate-more-keys.xml +++ b/java/res/values-pl/donottranslate-more-keys.xml @@ -19,8 +19,8 @@ --> ą,á,à,â,ä,æ,ã,å,ā - 3,ę,è,é,ê,ë,ė,ē - 9,ó,ö,ô,ò,õ,œ,ø,ō + ę,è,é,ê,ë,ė,ē + ó,ö,ô,ò,õ,œ,ø,ō ś,ß,š ń,ñ ć,ç,č diff --git a/java/res/values-pt/donottranslate-more-keys.xml b/java/res/values-pt/donottranslate-more-keys.xml index 31d9417ab..868fe7824 100644 --- a/java/res/values-pt/donottranslate-more-keys.xml +++ b/java/res/values-pt/donottranslate-more-keys.xml @@ -19,9 +19,9 @@ --> á,ã,à,â,ä,å,æ,ª - 3,é,ê,è,ę,ė,ē,ë - 8,í,î,ì,ï,į,ī - 9,ó,õ,ô,ò,ö,œ,ø,ō,º - 7,ú,ü,ù,û,ū + é,ê,è,ę,ė,ē,ë + í,î,ì,ï,į,ī + ó,õ,ô,ò,ö,œ,ø,ō,º + ú,ü,ù,û,ū ç,č,ć diff --git a/java/res/values-rm/donottranslate-more-keys.xml b/java/res/values-rm/donottranslate-more-keys.xml index ea9a55944..c40c29b13 100644 --- a/java/res/values-rm/donottranslate-more-keys.xml +++ b/java/res/values-rm/donottranslate-more-keys.xml @@ -18,5 +18,5 @@ */ --> - 9,ò,ó,ö,ô,õ,œ,ø + ò,ó,ö,ô,õ,œ,ø diff --git a/java/res/values-ro/donottranslate-more-keys.xml b/java/res/values-ro/donottranslate-more-keys.xml index 51df56099..42fd91336 100644 --- a/java/res/values-ro/donottranslate-more-keys.xml +++ b/java/res/values-ro/donottranslate-more-keys.xml @@ -19,7 +19,7 @@ --> â,ã,ă,à,á,ä,æ,å,ā - 8,î,ï,ì,í,į,ī + î,ï,ì,í,į,ī ș,ß,ś,š - 5,ț + ț diff --git a/java/res/values-ru/donottranslate-more-keys.xml b/java/res/values-ru/donottranslate-more-keys.xml index 7ae9ffbda..b7e74660d 100644 --- a/java/res/values-ru/donottranslate-more-keys.xml +++ b/java/res/values-ru/donottranslate-more-keys.xml @@ -18,5 +18,5 @@ */ --> - 5,ё + ё diff --git a/java/res/values-sk/donottranslate-more-keys.xml b/java/res/values-sk/donottranslate-more-keys.xml index b6b35c1a3..574eedb1f 100644 --- a/java/res/values-sk/donottranslate-more-keys.xml +++ b/java/res/values-sk/donottranslate-more-keys.xml @@ -19,17 +19,17 @@ --> á,ä,ā,à,â,ã,å,æ,ą - 3,é,ě,ē,ė,è,ê,ë,ę - 8,í,ī,į,ì,î,ï,ı - 9,ô,ó,ö,ò,õ,œ,ő,ø - 7,ú,ů,ü,ū,ų,ù,û,ű + é,ě,ē,ė,è,ê,ë,ę + í,ī,į,ì,î,ï,ı + ô,ó,ö,ò,õ,œ,ő,ø + ú,ů,ü,ū,ų,ù,û,ű š,ß,ś,ş ň,ņ,ñ,ń,ń č,ç,ć - 6,ý,ÿ + ý,ÿ ď - 4,ŕ,ř,ŗ - 5,ť,ţ + ŕ,ř,ŗ + ť,ţ ž,ż,ź ķ ľ,ĺ,ļ,ł diff --git a/java/res/values-sv/donottranslate-more-keys.xml b/java/res/values-sv/donottranslate-more-keys.xml index d391be5ab..6d9800e57 100644 --- a/java/res/values-sv/donottranslate-more-keys.xml +++ b/java/res/values-sv/donottranslate-more-keys.xml @@ -18,9 +18,9 @@ */ --> - 3,é,è,ê,ë,ę - 9,œ,ô,ò,ó,õ,ō - 7,ü,û,ù,ú,ū + é,è,ê,ë,ę + œ,ô,ò,ó,õ,ō + ü,û,ù,ú,ū ß,ś,š å ö diff --git a/java/res/values-sw600dp/config.xml b/java/res/values-sw600dp/config.xml index 35da3009f..40c674190 100644 --- a/java/res/values-sw600dp/config.xml +++ b/java/res/values-sw600dp/config.xml @@ -24,7 +24,6 @@ false false false - false false true diff --git a/java/res/values-sw768dp/config.xml b/java/res/values-sw768dp/config.xml index ddeadaf0f..98d722aba 100644 --- a/java/res/values-sw768dp/config.xml +++ b/java/res/values-sw768dp/config.xml @@ -24,7 +24,6 @@ false false false - false false true diff --git a/java/res/values-tr/donottranslate-more-keys.xml b/java/res/values-tr/donottranslate-more-keys.xml index 6906b3580..227ebf98c 100644 --- a/java/res/values-tr/donottranslate-more-keys.xml +++ b/java/res/values-tr/donottranslate-more-keys.xml @@ -19,9 +19,9 @@ --> â - 8,ı,î,ï,ì,í,į,ī - 9,ö,ô,œ,ò,ó,õ,ø,ō - 7,ü,û,ù,ú,ū + ı,î,ï,ì,í,į,ī + ö,ô,œ,ò,ó,õ,ø,ō + ü,û,ù,ú,ū ş,ß,ś,š ğ ç,ć,č diff --git a/java/res/values-vi/donottranslate-more-keys.xml b/java/res/values-vi/donottranslate-more-keys.xml index 97a7d79ae..9e2f6b8fd 100644 --- a/java/res/values-vi/donottranslate-more-keys.xml +++ b/java/res/values-vi/donottranslate-more-keys.xml @@ -19,10 +19,10 @@ --> à,á,ả,ã,ạ,ă,ằ,ắ,ẳ,ẵ,ặ,â,ầ,ấ,ẩ,ẫ,ậ - 3,è,é,ẻ,ẽ,ẹ,ê,ề,ế,ể,ễ,ệ - 8,ì,í,ỉ,ĩ,ị - 9,ò,ó,ỏ,õ,ọ,ô,ồ,ố,ổ,ỗ,ộ,ơ,ờ,ớ,ở,ỡ,ợ - 7,ù,ú,ủ,ũ,ụ,ư,ừ,ứ,ử,ữ,ự - 6,ỳ,ý,ỷ,ỹ,ỵ + è,é,ẻ,ẽ,ẹ,ê,ề,ế,ể,ễ,ệ + ì,í,ỉ,ĩ,ị + ò,ó,ỏ,õ,ọ,ô,ồ,ố,ổ,ỗ,ộ,ơ,ờ,ớ,ở,ỡ,ợ + ù,ú,ủ,ũ,ụ,ư,ừ,ứ,ử,ữ,ự + ỳ,ý,ỷ,ỹ,ỵ đ diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml index bd7c550c1..8d00f7aa5 100644 --- a/java/res/values/attrs.xml +++ b/java/res/values/attrs.xml @@ -227,6 +227,12 @@ + + diff --git a/java/res/values/config.xml b/java/res/values/config.xml index 32041df74..c3f8edf8a 100644 --- a/java/res/values/config.xml +++ b/java/res/values/config.xml @@ -27,7 +27,6 @@ true true - true true - 3 - 8 - 9 - 7 + + + + - 6 - 1 - 2 + - 4 - 5 + + - 0 @@ -46,9 +43,9 @@ щ ы и - 3 - 5 - 6 + + + ъ @@ -74,6 +71,16 @@ 8 9 0 + + + + + + + + + + ¹,½,⅓,¼,⅛ ²,⅔ ³,¾,⅜ diff --git a/java/res/xml-sw600dp/row_qwerty1.xml b/java/res/xml-sw600dp/row_qwerty1.xml index 07d8e2296..3d3a1a8ff 100644 --- a/java/res/xml-sw600dp/row_qwerty1.xml +++ b/java/res/xml-sw600dp/row_qwerty1.xml @@ -25,11 +25,9 @@ latin:keyWidth="9.0%p" > + latin:keyLabel="q" /> + latin:keyLabel="w" /> @@ -52,8 +50,7 @@ latin:keyLabel="o" latin:moreKeys="@string/more_keys_for_o" /> + latin:keyLabel="p" /> + latin:keyLabel="p" /> + latin:keyLabel="w" /> + latin:keyLabel="q" /> + latin:keyLabel="w" /> @@ -54,8 +52,7 @@ latin:keyLabel="o" latin:moreKeys="@string/more_keys_for_o" /> + latin:keyLabel="p" /> + latin:keyLabel="q" /> + latin:keyLabel="w" /> @@ -54,8 +52,7 @@ latin:keyLabel="o" latin:moreKeys="@string/more_keys_for_o" /> + latin:keyLabel="p" /> + latin:keyLabel="q" /> + latin:keyLabel="w" /> @@ -56,8 +54,7 @@ latin:keyLabel="o" latin:moreKeys="@string/more_keys_for_o" /> + latin:keyLabel="p" /> + latin:keyLabel="p" /> + latin:keyLabel="q" /> @@ -110,8 +108,7 @@ latin:keyStyle="shiftKeyStyle" latin:keyWidth="13.829%p" /> + latin:keyLabel="w" /> + latin:keyLabel="q" /> + latin:keyLabel="w" /> @@ -58,8 +56,7 @@ latin:keyLabel="o" latin:moreKeys="@string/more_keys_for_o" /> + latin:keyLabel="p" /> + latin:keyLabel="q" /> + latin:keyLabel="w" /> @@ -58,8 +56,7 @@ latin:keyLabel="o" latin:moreKeys="@string/more_keys_for_o" /> + latin:keyLabel="p" /> + latin:additionalMoreKeys="1" /> + latin:additionalMoreKeys="2" /> diff --git a/java/res/xml/rows_arabic.xml b/java/res/xml/rows_arabic.xml index dcee10ef5..2dcd831c2 100644 --- a/java/res/xml/rows_arabic.xml +++ b/java/res/xml/rows_arabic.xml @@ -30,18 +30,19 @@ + latin:additionalMoreKeys="1,١" /> + latin:additionalMoreKeys="2,٢" /> + latin:additionalMoreKeys="3,٣" + latin:moreKeys="\u06a8" /> + latin:additionalMoreKeys="5,٥" /> + latin:additionalMoreKeys="6,٦" /> + latin:additionalMoreKeys="7,٧" + latin:moreKeys="\ufeeb|\u0647\u200D" /> + latin:additionalMoreKeys="8,٨" /> + latin:additionalMoreKeys="9,٩" /> + latin:keyLabel="q" /> @@ -107,8 +115,7 @@ latin:keyWidth="15%p" latin:visualInsetsRight="1%p" /> + latin:keyLabel="w" /> + latin:additionalMoreKeys="1" /> + latin:additionalMoreKeys="2" /> + latin:additionalMoreKeys="3" /> + latin:additionalMoreKeys="4" /> + latin:additionalMoreKeys="5" /> + latin:additionalMoreKeys="6" /> + latin:additionalMoreKeys="7" /> + latin:additionalMoreKeys="8" + latin:moreKeys="ѝ" /> + latin:additionalMoreKeys="9" /> + latin:additionalMoreKeys="0" /> diff --git a/java/res/xml/rows_qwertz.xml b/java/res/xml/rows_qwertz.xml index e578f9aaa..11fd9332c 100644 --- a/java/res/xml/rows_qwertz.xml +++ b/java/res/xml/rows_qwertz.xml @@ -29,43 +29,50 @@ + latin:additionalMoreKeys="1" /> + latin:additionalMoreKeys="2" /> + latin:additionalMoreKeys="1" /> + latin:additionalMoreKeys="2" /> + latin:additionalMoreKeys="0" /> diff --git a/java/res/xml/rows_serbian.xml b/java/res/xml/rows_serbian.xml index beb04d524..d2203ce9c 100644 --- a/java/res/xml/rows_serbian.xml +++ b/java/res/xml/rows_serbian.xml @@ -29,43 +29,43 @@ + latin:additionalMoreKeys="1" /> + latin:additionalMoreKeys="2" /> + latin:additionalMoreKeys="3" /> + latin:additionalMoreKeys="4" /> + latin:additionalMoreKeys="5" /> + latin:additionalMoreKeys="6" /> + latin:additionalMoreKeys="7" /> + latin:additionalMoreKeys="8" /> + latin:additionalMoreKeys="9" /> + latin:additionalMoreKeys="0" /> diff --git a/java/res/xml/rows_slavic.xml b/java/res/xml/rows_slavic.xml index 52f5af4c9..71e442c7c 100644 --- a/java/res/xml/rows_slavic.xml +++ b/java/res/xml/rows_slavic.xml @@ -29,43 +29,46 @@ + latin:additionalMoreKeys="1" /> + latin:additionalMoreKeys="2" /> + latin:additionalMoreKeys="4" /> + latin:additionalMoreKeys="7" /> + latin:additionalMoreKeys="8" /> + latin:additionalMoreKeys="9" /> + latin:additionalMoreKeys="0" /> diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java index bb90653c1..a2d379643 100644 --- a/java/src/com/android/inputmethod/keyboard/Key.java +++ b/java/src/com/android/inputmethod/keyboard/Key.java @@ -285,22 +285,17 @@ public class Key { mLabelFlags = style.getFlag(keyAttr, R.styleable.Keyboard_Key_keyLabelFlags, 0); final boolean preserveCase = (mLabelFlags & LABEL_FLAGS_PRESERVE_CASE) != 0; - final String[] moreKeys = style.getStringArray(keyAttr, R.styleable.Keyboard_Key_moreKeys); + final String[] additionalMoreKeys = style.getStringArray( + keyAttr, R.styleable.Keyboard_Key_additionalMoreKeys); + final String[] moreKeys = MoreKeySpecParser.insertAddtionalMoreKeys(style.getStringArray( + keyAttr, R.styleable.Keyboard_Key_moreKeys), additionalMoreKeys); if (moreKeys != null) { for (int i = 0; i < moreKeys.length; i++) { moreKeys[i] = adjustCaseOfStringForKeyboardId( moreKeys[i], preserveCase, params.mId); } } - // TODO: Add new key label flag to control this. - // In Arabic symbol layouts, we'd like to keep digits in more keys regardless of - // config_digit_more_keys_enabled. - if (params.mId.isAlphabetKeyboard() - && !res.getBoolean(R.bool.config_digit_more_keys_enabled)) { - mMoreKeys = MoreKeySpecParser.filterOut(res, moreKeys, MoreKeySpecParser.DIGIT_FILTER); - } else { - mMoreKeys = moreKeys; - } + mMoreKeys = moreKeys; mMaxMoreKeysColumn = style.getInt(keyAttr, R.styleable.Keyboard_Key_maxMoreKeysColumn, params.mMaxMiniKeyboardColumn); diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java b/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java index b7215ec1b..1450192b2 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java +++ b/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java @@ -173,6 +173,7 @@ public class KeyStyles { readString(keyAttr, R.styleable.Keyboard_Key_keyOutputText); readString(keyAttr, R.styleable.Keyboard_Key_keyHintLabel); readStringArray(keyAttr, R.styleable.Keyboard_Key_moreKeys); + readStringArray(keyAttr, R.styleable.Keyboard_Key_additionalMoreKeys); readFlag(keyAttr, R.styleable.Keyboard_Key_keyLabelFlags); readInt(keyAttr, R.styleable.Keyboard_Key_keyIcon); readInt(keyAttr, R.styleable.Keyboard_Key_keyIconDisabled); diff --git a/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParser.java b/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParser.java index 16777733e..abebfec01 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParser.java +++ b/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParser.java @@ -20,10 +20,12 @@ import android.content.res.Resources; import android.text.TextUtils; import com.android.inputmethod.keyboard.Keyboard; +import com.android.inputmethod.latin.LatinImeLogger; import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.Utils; import java.util.ArrayList; +import java.util.Arrays; /** * String parser of moreKeys attribute of Key. @@ -38,9 +40,11 @@ import java.util.ArrayList; * See {@link KeyboardIconsSet} about icon_number. */ public class MoreKeySpecParser { + private static final boolean DEBUG = LatinImeLogger.sDBG; private static final char LABEL_END = '|'; private static final String PREFIX_ICON = Utils.PREFIX_AT + "icon" + Utils.SUFFIX_SLASH; private static final String PREFIX_CODE = Utils.PREFIX_AT + "integer" + Utils.SUFFIX_SLASH; + private static final String ADDITIONAL_MORE_KEY_MARKER = "%"; private MoreKeySpecParser() { // Intentional empty constructor for utility class. @@ -173,51 +177,80 @@ public class MoreKeySpecParser { return KeyboardIconsSet.ICON_UNDEFINED; } + public static String[] insertAddtionalMoreKeys(String[] moreKeys, String[] additionalMoreKeys) { + final int moreKeysCount = (moreKeys != null) ? moreKeys.length : 0; + final int additionalCount = (additionalMoreKeys != null) ? additionalMoreKeys.length : 0; + ArrayList out = null; + int additionalIndex = 0; + for (int moreKeyIndex = 0; moreKeyIndex < moreKeysCount; moreKeyIndex++) { + final String moreKeySpec = moreKeys[moreKeyIndex]; + if (moreKeySpec.equals(ADDITIONAL_MORE_KEY_MARKER)) { + if (additionalIndex < additionalCount) { + // Replace '%' marker with additional more key specification. + final String additionalMoreKey = additionalMoreKeys[additionalIndex]; + if (out != null) { + out.add(additionalMoreKey); + } else { + moreKeys[moreKeyIndex] = additionalMoreKey; + } + additionalIndex++; + } else { + // Filter out excessive '%' marker. + if (out == null) { + out = new ArrayList(moreKeyIndex); + for (int i = 0; i < moreKeyIndex; i++) { + out.add(moreKeys[i]); + } + } + } + } else { + if (out != null) { + out.add(moreKeySpec); + } + } + } + if (additionalCount > 0 && additionalIndex == 0) { + // No '%' marker is found in more keys. + // Insert all additional more keys to the head of more keys. + if (DEBUG && out != null) { + throw new RuntimeException("Internal logic error:" + + " moreKeys=" + Arrays.toString(moreKeys) + + " additionalMoreKeys=" + Arrays.toString(additionalMoreKeys)); + } + out = new ArrayList(additionalCount + moreKeysCount); + for (int i = additionalIndex; i < additionalCount; i++) { + out.add(additionalMoreKeys[i]); + } + for (int i = 0; i < moreKeysCount; i++) { + out.add(moreKeys[i]); + } + } else if (additionalIndex < additionalCount) { + // The number of '%' markers are less than additional more keys. + // Append remained additional more keys to the tail of more keys. + if (DEBUG && out != null) { + throw new RuntimeException("Internal logic error:" + + " moreKeys=" + Arrays.toString(moreKeys) + + " additionalMoreKeys=" + Arrays.toString(additionalMoreKeys)); + } + out = new ArrayList(moreKeysCount); + for (int i = 0; i < moreKeysCount; i++) { + out.add(moreKeys[i]); + } + for (int i = additionalIndex; i < additionalCount; i++) { + out.add(additionalMoreKeys[additionalIndex]); + } + } + if (out != null) { + return out.size() > 0 ? out.toArray(new String[out.size()]) : null; + } else { + return moreKeys; + } + } + @SuppressWarnings("serial") public static class MoreKeySpecParserError extends RuntimeException { public MoreKeySpecParserError(String message) { super(message); } } - - public interface CodeFilter { - public boolean shouldFilterOut(int code); - } - - public static final CodeFilter DIGIT_FILTER = new CodeFilter() { - @Override - public boolean shouldFilterOut(int code) { - return Character.isDigit(code); - } - }; - - public static String[] filterOut(Resources res, String[] moreKeys, CodeFilter filter) { - if (moreKeys == null || moreKeys.length < 1) { - return null; - } - if (moreKeys.length == 1 && filter.shouldFilterOut(getCode(res, moreKeys[0]))) { - return null; - } - ArrayList filtered = null; - for (int i = 0; i < moreKeys.length; i++) { - final String moreKeySpec = moreKeys[i]; - if (filter.shouldFilterOut(getCode(res, moreKeySpec))) { - if (filtered == null) { - filtered = new ArrayList(); - for (int j = 0; j < i; j++) { - filtered.add(moreKeys[j]); - } - } - } else if (filtered != null) { - filtered.add(moreKeySpec); - } - } - if (filtered == null) { - return moreKeys; - } - if (filtered.size() == 0) { - return null; - } - return filtered.toArray(new String[filtered.size()]); - } } diff --git a/tests/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParserTests.java b/tests/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParserTests.java index 74aaf9af8..bc38cc16c 100644 --- a/tests/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParserTests.java +++ b/tests/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParserTests.java @@ -22,6 +22,8 @@ import android.test.AndroidTestCase; import com.android.inputmethod.keyboard.Keyboard; import com.android.inputmethod.latin.R; +import java.util.Arrays; + public class MoreKeySpecParserTests extends AndroidTestCase { private Resources mRes; @@ -217,4 +219,212 @@ public class MoreKeySpecParserTests extends AndroidTestCase { ICON_SETTINGS + "|" + CODE_SETTINGS + "|c", null, null, ICON_SETTINGS_KEY, mCodeSettings); } + + private void assertMoreKeys(String message, String[] moreKeys, String[] additionalMoreKeys, + String[] expected) { + final String[] actual = MoreKeySpecParser.insertAddtionalMoreKeys( + moreKeys, additionalMoreKeys); + if (expected == null && actual == null) { + return; + } + if (expected == null || actual == null) { + assertEquals(message, Arrays.toString(expected), Arrays.toString(actual)); + } else { + if (expected.length != actual.length) { + assertEquals(message, Arrays.toString(expected), Arrays.toString(actual)); + } + for (int i = 0; i < expected.length; i++) { + if (!actual[i].equals(expected[i])) { + assertEquals(message, Arrays.toString(expected), Arrays.toString(actual)); + } + } + } + } + + public void testInsertAdditionalMoreKeys() { + // Escaped marker. + assertMoreKeys("escaped marker", + new String[] { "\\%", "%-)" }, + new String[] { "1", "2" }, + new String[] { "1", "2", "\\%", "%-)" }); + + // 0 more key. + assertMoreKeys("null & null", null, null, null); + assertMoreKeys("null & 1 additional", + null, + new String[] { "1" }, + new String[] { "1" }); + assertMoreKeys("null & 2 additionals", + null, + new String[] { "1", "2" }, + new String[] { "1", "2" }); + + // 0 additional more key. + assertMoreKeys("1 more key & null", + new String[] { "A" }, + null, + new String[] { "A" }); + assertMoreKeys("2 more keys & null", + new String[] { "A", "B" }, + null, + new String[] { "A", "B" }); + + // No marker. + assertMoreKeys("1 more key & 1 addtional & no marker", + new String[] { "A" }, + new String[] { "1" }, + new String[] { "1", "A" }); + assertMoreKeys("1 more key & 2 addtionals & no marker", + new String[] { "A" }, + new String[] { "1", "2" }, + new String[] { "1", "2", "A" }); + assertMoreKeys("2 more keys & 1 addtional & no marker", + new String[] { "A", "B" }, + new String[] { "1" }, + new String[] { "1", "A", "B" }); + assertMoreKeys("2 more keys & 2 addtionals & no marker", + new String[] { "A", "B" }, + new String[] { "1", "2" }, + new String[] { "1", "2", "A", "B" }); + + // 1 marker. + assertMoreKeys("1 more key & 1 additional & marker at head", + new String[] { "%", "A" }, + new String[] { "1" }, + new String[] { "1", "A" }); + assertMoreKeys("1 more key & 1 additional & marker at tail", + new String[] { "A", "%" }, + new String[] { "1" }, + new String[] { "A", "1" }); + assertMoreKeys("2 more keys & 1 additional & marker at middle", + new String[] { "A", "%", "B" }, + new String[] { "1" }, + new String[] { "A", "1", "B" }); + + // 1 marker & excess additional more keys. + assertMoreKeys("1 more key & 2 additionals & marker at head", + new String[] { "%", "A", "B" }, + new String[] { "1", "2" }, + new String[] { "1", "A", "B", "2" }); + assertMoreKeys("1 more key & 2 additionals & marker at tail", + new String[] { "A", "B", "%" }, + new String[] { "1", "2" }, + new String[] { "A", "B", "1", "2" }); + assertMoreKeys("2 more keys & 2 additionals & marker at middle", + new String[] { "A", "%", "B" }, + new String[] { "1", "2" }, + new String[] { "A", "1", "B", "2" }); + + // 2 markers. + assertMoreKeys("0 more key & 2 addtional & 2 markers", + new String[] { "%", "%" }, + new String[] { "1", "2" }, + new String[] { "1", "2" }); + assertMoreKeys("1 more key & 2 addtional & 2 markers at head", + new String[] { "%", "%", "A" }, + new String[] { "1", "2" }, + new String[] { "1", "2", "A" }); + assertMoreKeys("1 more key & 2 addtional & 2 markers at tail", + new String[] { "A", "%", "%" }, + new String[] { "1", "2" }, + new String[] { "A", "1", "2" }); + assertMoreKeys("2 more keys & 2 addtional & 2 markers at middle", + new String[] { "A", "%", "%", "B" }, + new String[] { "1", "2" }, + new String[] { "A", "1", "2", "B" }); + assertMoreKeys("2 more keys & 2 addtional & 2 markers at head & middle", + new String[] { "%", "A", "%", "B" }, + new String[] { "1", "2" }, + new String[] { "1", "A", "2", "B" }); + assertMoreKeys("2 more keys & 2 addtional & 2 markers at head & tail", + new String[] { "%", "A", "B", "%" }, + new String[] { "1", "2" }, + new String[] { "1", "A", "B", "2" }); + assertMoreKeys("2 more keys & 2 addtional & 2 markers at middle & tail", + new String[] { "A", "%", "B", "%" }, + new String[] { "1", "2" }, + new String[] { "A", "1", "B", "2" }); + + // 2 markers & excess additional keys. + assertMoreKeys("0 more key & 2 addtional & 2 markers", + new String[] { "%", "%" }, + new String[] { "1", "2", "3" }, + new String[] { "1", "2", "3" }); + assertMoreKeys("1 more key & 2 addtional & 2 markers at head", + new String[] { "%", "%", "A" }, + new String[] { "1", "2", "3" }, + new String[] { "1", "2", "A", "3" }); + assertMoreKeys("1 more key & 2 addtional & 2 markers at tail", + new String[] { "A", "%", "%" }, + new String[] { "1", "2", "3" }, + new String[] { "A", "1", "2", "3" }); + assertMoreKeys("2 more keys & 2 addtional & 2 markers at middle", + new String[] { "A", "%", "%", "B" }, + new String[] { "1", "2", "3" }, + new String[] { "A", "1", "2", "B", "3" }); + assertMoreKeys("2 more keys & 2 addtional & 2 markers at head & middle", + new String[] { "%", "A", "%", "B" }, + new String[] { "1", "2", "3" }, + new String[] { "1", "A", "2", "B", "3" }); + assertMoreKeys("2 more keys & 2 addtional & 2 markers at head & tail", + new String[] { "%", "A", "B", "%" }, + new String[] { "1", "2", "3" }, + new String[] { "1", "A", "B", "2", "3" }); + assertMoreKeys("2 more keys & 2 addtional & 2 markers at middle & tail", + new String[] { "A", "%", "B", "%" }, + new String[] { "1", "2", "3" }, + new String[] { "A", "1", "B", "2", "3" }); + + // 0 addtional more key and excess markers. + assertMoreKeys("0 more key & null & excess marker", + new String[] { "%" }, + null, + null); + assertMoreKeys("1 more key & null & excess marker at head", + new String[] { "%", "A" }, + null, + new String[] { "A" }); + assertMoreKeys("1 more key & null & excess marker at tail", + new String[] { "A", "%" }, + null, + new String[] { "A" }); + assertMoreKeys("2 more keys & null & excess marker at middle", + new String[] { "A", "%", "B" }, + null, + new String[] { "A", "B" }); + assertMoreKeys("2 more keys & null & excess markers", + new String[] { "%", "A", "%", "B", "%" }, + null, + new String[] { "A", "B" }); + + // Excess markers. + assertMoreKeys("0 more key & 1 addtional & excess marker", + new String[] { "%", "%" }, + new String[] { "1" }, + new String[] { "1" }); + assertMoreKeys("1 more key & 1 addtional & excess marker at head", + new String[] { "%", "%", "A" }, + new String[] { "1" }, + new String[] { "1", "A" }); + assertMoreKeys("1 more key & 1 addtional & excess marker at tail", + new String[] { "A", "%", "%" }, + new String[] { "1" }, + new String[] { "A", "1" }); + assertMoreKeys("2 more keys & 1 addtional & excess marker at middle", + new String[] { "A", "%", "%", "B" }, + new String[] { "1" }, + new String[] { "A", "1", "B" }); + assertMoreKeys("2 more keys & 1 addtional & excess markers", + new String[] { "%", "A", "%", "B", "%" }, + new String[] { "1" }, + new String[] { "1", "A", "B" }); + assertMoreKeys("2 more keys & 2 addtionals & excess markers", + new String[] { "%", "A", "%", "B", "%" }, + new String[] { "1", "2" }, + new String[] { "1", "A", "2", "B" }); + assertMoreKeys("2 more keys & 3 addtionals & excess markers", + new String[] { "%", "A", "%", "%", "B", "%" }, + new String[] { "1", "2", "3" }, + new String[] { "1", "A", "2", "3", "B" }); + } }