aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
authorTadashi G. Takaoka <takaoka@google.com>2012-04-19 21:21:18 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-04-19 21:21:18 -0700
commit050b577bfb9a033cfa049b2d4be2a15609ea7ce2 (patch)
tree796a8c3bfd8a0e770dac200dd6be5fbc7fba2a0d /java
parent5b92113cdb3158adfebc27eb4842765a8459d635 (diff)
parent2f16fd40faab7287dfcae4899050b9df360d0c29 (diff)
downloadlatinime-050b577bfb9a033cfa049b2d4be2a15609ea7ce2.tar.gz
latinime-050b577bfb9a033cfa049b2d4be2a15609ea7ce2.tar.xz
latinime-050b577bfb9a033cfa049b2d4be2a15609ea7ce2.zip
Merge "Make KeySpecParser case insensitive"
Diffstat (limited to 'java')
-rw-r--r--java/res/xml-sw600dp/key_styles_common.xml4
-rw-r--r--java/res/xml-sw768dp/key_styles_common.xml7
-rw-r--r--java/res/xml/key_styles_common.xml10
-rw-r--r--java/res/xml/key_styles_enter.xml2
-rw-r--r--java/res/xml/rowkeys_georgian1.xml20
-rw-r--r--java/res/xml/rowkeys_georgian2.xml54
-rw-r--r--java/res/xml/rowkeys_georgian3.xml42
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeySpecParser.java33
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java5
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java11
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardLabelsSet.java22
11 files changed, 86 insertions, 124 deletions
diff --git a/java/res/xml-sw600dp/key_styles_common.xml b/java/res/xml-sw600dp/key_styles_common.xml
index e0676e890..0d54dfedb 100644
--- a/java/res/xml-sw600dp/key_styles_common.xml
+++ b/java/res/xml-sw600dp/key_styles_common.xml
@@ -98,7 +98,6 @@
latin:code="!code/key_shortcut"
latin:keyIcon="iconShortcutKey"
latin:keyIconDisabled="iconDisabledShortcutKey"
- latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview|altCodeWhileTyping"
latin:backgroundType="functional" />
<key-style
@@ -132,7 +131,6 @@
latin:styleName="toSymbolKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="!label/label_to_symbol_key"
- latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
@@ -146,14 +144,12 @@
latin:styleName="toMoreSymbolKeyStyle"
latin:code="!code/key_shift"
latin:keyLabel="!label/label_to_more_symbol_for_tablet_key"
- latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="backFromMoreSymbolKeyStyle"
latin:code="!code/key_shift"
latin:keyLabel="!label/label_to_symbol_key"
- latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
diff --git a/java/res/xml-sw768dp/key_styles_common.xml b/java/res/xml-sw768dp/key_styles_common.xml
index c3e2fd93d..596bccb47 100644
--- a/java/res/xml-sw768dp/key_styles_common.xml
+++ b/java/res/xml-sw768dp/key_styles_common.xml
@@ -97,7 +97,6 @@
latin:code="!code/key_shortcut"
latin:keyIcon="iconShortcutKey"
latin:keyIconDisabled="iconDisabledShortcutKey"
- latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview|altCodeWhileTyping"
latin:backgroundType="functional" />
<key-style
@@ -131,7 +130,7 @@
latin:styleName="toSymbolKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="!label/label_to_symbol_key"
- latin:keyLabelFlags="fontNormal|preserveCase"
+ latin:keyLabelFlags="fontNormal"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
@@ -145,14 +144,14 @@
latin:styleName="toMoreSymbolKeyStyle"
latin:code="!code/key_shift"
latin:keyLabel="!label/label_to_more_symbol_for_tablet_key"
- latin:keyLabelFlags="fontNormal|preserveCase"
+ latin:keyLabelFlags="fontNormal"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="backFromMoreSymbolKeyStyle"
latin:code="!code/key_shift"
latin:keyLabel="!label/label_to_symbol_key"
- latin:keyLabelFlags="fontNormal|preserveCase"
+ latin:keyLabelFlags="fontNormal"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
diff --git a/java/res/xml/key_styles_common.xml b/java/res/xml/key_styles_common.xml
index ec011d08b..f8b6e37fc 100644
--- a/java/res/xml/key_styles_common.xml
+++ b/java/res/xml/key_styles_common.xml
@@ -34,7 +34,7 @@
<default>
<key-style
latin:styleName="f1MoreKeysStyle"
- latin:keyLabelFlags="hasPopupHint|preserveCase"
+ latin:keyLabelFlags="hasPopupHint"
latin:moreKeys="!label/settings_as_more_key"
latin:backgroundType="functional" />
</default>
@@ -122,7 +122,6 @@
latin:code="!code/key_shortcut"
latin:keyIcon="iconShortcutKey"
latin:keyIconDisabled="iconDisabledShortcutKey"
- latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview|altCodeWhileTyping"
latin:altCode="!code/key_space"
latin:parentStyle="f1MoreKeysStyle" />
@@ -159,7 +158,7 @@
latin:code="!code/key_switch_alpha_symbol"
latin:keyIcon="iconShortcutForLabel"
latin:keyLabel="!label/label_to_symbol_with_microphone_key"
- latin:keyLabelFlags="withIconRight|preserveCase"
+ latin:keyLabelFlags="withIconRight"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
</case>
@@ -168,7 +167,6 @@
latin:styleName="toSymbolKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="!label/label_to_symbol_key"
- latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
</default>
@@ -184,21 +182,19 @@
latin:styleName="toMoreSymbolKeyStyle"
latin:code="!code/key_shift"
latin:keyLabel="!label/label_to_more_symbol_key"
- latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="backFromMoreSymbolKeyStyle"
latin:code="!code/key_shift"
latin:keyLabel="!label/label_to_symbol_key"
- latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="punctuationKeyStyle"
latin:keyLabel="."
latin:keyHintLabel="!label/keyhintlabel_for_punctuation"
- latin:keyLabelFlags="hasPopupHint|preserveCase"
+ latin:keyLabelFlags="hasPopupHint"
latin:moreKeys="!label/more_keys_for_punctuation"
latin:backgroundType="functional" />
</merge>
diff --git a/java/res/xml/key_styles_enter.xml b/java/res/xml/key_styles_enter.xml
index f4c7ad46b..506ed47d6 100644
--- a/java/res/xml/key_styles_enter.xml
+++ b/java/res/xml/key_styles_enter.xml
@@ -94,7 +94,7 @@
latin:styleName="defaultEnterKeyStyle"
latin:code="!code/key_enter"
latin:keyIcon="iconReturnKey"
- latin:keyLabelFlags="autoXScale|preserveCase|followKeyLabelRatio"
+ latin:keyLabelFlags="autoXScale|followKeyLabelRatio"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional"
latin:parentStyle="navigateMoreKeysStyle" />
diff --git a/java/res/xml/rowkeys_georgian1.xml b/java/res/xml/rowkeys_georgian1.xml
index fcdf3fa58..d31a4c79c 100644
--- a/java/res/xml/rowkeys_georgian1.xml
+++ b/java/res/xml/rowkeys_georgian1.xml
@@ -27,55 +27,45 @@
>
<Key
latin:keyLabel="Q"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="1"
latin:additionalMoreKeys="1" />
<!-- U+10ED: "ჭ" GEORGIAN LETTER CHAR -->
<Key
latin:keyLabel="&#x10ED;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="2"
latin:additionalMoreKeys="2" />
<Key
latin:keyLabel="E"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="3"
latin:additionalMoreKeys="3" />
<!-- U+10E6: "ღ" GEORGIAN LETTER GHAN -->
<Key
latin:keyLabel="&#x10E6;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="4"
latin:additionalMoreKeys="4" />
<!-- U+10D7: "თ" GEORGIAN LETTER TAN -->
<Key
latin:keyLabel="&#x10D7;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="5"
latin:additionalMoreKeys="5" />
<Key
latin:keyLabel="Y"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="6"
latin:additionalMoreKeys="6" />
<Key
latin:keyLabel="U"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="7"
latin:additionalMoreKeys="7" />
<Key
latin:keyLabel="I"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="8"
latin:additionalMoreKeys="8" />
<Key
latin:keyLabel="O"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="9"
latin:additionalMoreKeys="9" />
<Key
latin:keyLabel="P"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="0"
latin:additionalMoreKeys="0" />
</case>
@@ -83,13 +73,11 @@
<!-- U+10E5: "ქ" GEORGIAN LETTER GHAN -->
<Key
latin:keyLabel="&#x10E5;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="1"
latin:additionalMoreKeys="1" />
<!-- U+10EC: "წ" GEORGIAN LETTER CIL -->
<Key
latin:keyLabel="&#x10EC;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="2"
latin:additionalMoreKeys="2" />
<!-- U+10D4: "ე" GEORGIAN LETTER EN
@@ -97,19 +85,16 @@
<Key
latin:keyLabel="&#x10D4;"
latin:moreKeys="&#x10F1;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="3"
latin:additionalMoreKeys="3" />
<!-- U+10E0: "რ" GEORGIAN LETTER RAE -->
<Key
latin:keyLabel="&#x10E0;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="4"
latin:additionalMoreKeys="4" />
<!-- U+10E2: "ტ" GEORGIAN LETTER TAR -->
<Key
latin:keyLabel="&#x10E2;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="5"
latin:additionalMoreKeys="5" />
<!-- U+10E7: "ყ" GEORGIAN LETTER QAR
@@ -117,13 +102,11 @@
<Key
latin:keyLabel="&#x10E7;"
latin:moreKeys="&#x10F8;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="6"
latin:additionalMoreKeys="6" />
<!-- U+10E3: "უ" GEORGIAN LETTER UN -->
<Key
latin:keyLabel="&#x10E3;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="7"
latin:additionalMoreKeys="7" />
<!-- U+10D8: "ი" GEORGIAN LETTER IN
@@ -131,19 +114,16 @@
<Key
latin:keyLabel="&#x10D8;"
latin:moreKeys="&#x10F2;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="8"
latin:additionalMoreKeys="8" />
<!-- U+10DD: "ო" GEORGIAN LETTER ON -->
<Key
latin:keyLabel="&#x10DD;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="9"
latin:additionalMoreKeys="9" />
<!-- U+10DE: "პ" GEORGIAN LETTER PAR -->
<Key
latin:keyLabel="&#x10DE;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="0"
latin:additionalMoreKeys="0" />
</default>
diff --git a/java/res/xml/rowkeys_georgian2.xml b/java/res/xml/rowkeys_georgian2.xml
index 5673b9002..cdccda31f 100644
--- a/java/res/xml/rowkeys_georgian2.xml
+++ b/java/res/xml/rowkeys_georgian2.xml
@@ -26,82 +26,64 @@
latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted"
>
<Key
- latin:keyLabel="A"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="A" />
<!-- U+10E8: "შ" GEORGIAN LETTER SHIN -->
<Key
- latin:keyLabel="&#x10E8;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10E8;" />
<Key
- latin:keyLabel="D"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="D" />
<Key
- latin:keyLabel="F"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="F" />
<Key
- latin:keyLabel="G"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="G" />
<Key
- latin:keyLabel="H"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="H" />
<!-- U+10DF: "ჟ" GEORGIAN LETTER ZHAR -->
<Key
- latin:keyLabel="&#x10DF;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10DF;" />
<Key
- latin:keyLabel="K"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="K" />
<Key
- latin:keyLabel="L"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="L" />
</case>
<default>
<!-- U+10D0: "ა" GEORGIAN LETTER AN
U+10FA: "ჺ" GEORGIAN LETTER AIN -->
<Key
latin:keyLabel="&#x10D0;"
- latin:moreKeys="&#x10FA;"
- latin:keyLabelFlags="preserveCase" />
+ latin:moreKeys="&#x10FA;" />
<!-- U+10E1: "ს" GEORGIAN LETTER SAN -->
<Key
- latin:keyLabel="&#x10E1;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10E1;" />
<!-- U+10D3: "დ" GEORGIAN LETTER DON -->
<Key
- latin:keyLabel="&#x10D3;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10D3;" />
<!-- U+10E4: "ფ" GEORGIAN LETTER PHAR
U+10F6: "ჶ" GEORGIAN LETTER FI -->
<Key
latin:keyLabel="&#x10E4;"
- latin:moreKeys="&#x10F6;"
- latin:keyLabelFlags="preserveCase" />
+ latin:moreKeys="&#x10F6;" />
<!-- U+10D2: "გ" GEORGIAN LETTER GAN
U+10F9: "ჹ" GEORGIAN LETTER TURNED GAN -->
<Key
latin:keyLabel="&#x10D2;"
- latin:moreKeys="&#x10F9;"
- latin:keyLabelFlags="preserveCase" />
+ latin:moreKeys="&#x10F9;" />
<!-- U+10F0: "ჰ" GEORGIAN LETTER HAE
U+10F5: "ჵ" GEORGIAN LETTER HOE -->
<Key
latin:keyLabel="&#x10F0;"
- latin:moreKeys="&#x10F5;"
- latin:keyLabelFlags="preserveCase" />
+ latin:moreKeys="&#x10F5;" />
<!-- U+10EF: "ჯ" GEORGIAN LETTER JHAN
U+10F7: "ჷ" GEORGIAN LETTER YN -->
<Key
latin:keyLabel="&#x10EF;"
- latin:moreKeys="&#x10F7;"
- latin:keyLabelFlags="preserveCase" />
+ latin:moreKeys="&#x10F7;" />
<!-- U+10D9: "კ" GEORGIAN LETTER KAN -->
<Key
- latin:keyLabel="&#x10D9;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10D9;" />
<!-- U+10DA: "ლ" GEORGIAN LETTER LAS -->
<Key
- latin:keyLabel="&#x10DA;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10DA;" />
</default>
</switch>
</merge>
diff --git a/java/res/xml/rowkeys_georgian3.xml b/java/res/xml/rowkeys_georgian3.xml
index 1c0f45bef..a3714586f 100644
--- a/java/res/xml/rowkeys_georgian3.xml
+++ b/java/res/xml/rowkeys_georgian3.xml
@@ -27,63 +27,49 @@
>
<!-- U+10EB: "ძ" GEORGIAN LETTER JIL -->
<Key
- latin:keyLabel="&#x10EB;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10EB;" />
<Key
- latin:keyLabel="X"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="X" />
<!-- U+10E9: "ჩ" GEORGIAN LETTER CHIN -->
<Key
- latin:keyLabel="&#x10E9;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10E9;" />
<Key
- latin:keyLabel="V"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="V" />
<Key
- latin:keyLabel="B"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="B" />
<Key
- latin:keyLabel="N"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="N" />
<Key
- latin:keyLabel="M"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="M" />
</case>
<default>
<!-- U+10D6: "ზ" GEORGIAN LETTER ZEN -->
<Key
- latin:keyLabel="&#x10D6;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10D6;" />
<!-- U+10EE: "ხ" GEORGIAN LETTER XAN
U+10F4: "ჴ" GEORGIAN LETTER HAR -->
<Key
latin:keyLabel="&#x10EE;"
- latin:moreKeys="&#x10F4;"
- latin:keyLabelFlags="preserveCase" />
+ latin:moreKeys="&#x10F4;" />
<!-- U+10EA: "ც" GEORGIAN LETTER CAN -->
<Key
- latin:keyLabel="&#x10EA;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10EA;" />
<!-- U+10D5: "ვ" GEORGIAN LETTER VIN
U+10F3: "ჳ" GEORGIAN LETTER WE -->
<Key
latin:keyLabel="&#x10D5;"
- latin:moreKeys="&#x10F3;"
- latin:keyLabelFlags="preserveCase" />
+ latin:moreKeys="&#x10F3;" />
<!-- U+10D1: "ბ" GEORGIAN LETTER BAN -->
<Key
- latin:keyLabel="&#x10D1;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10D1;" />
<!-- U+10DC: "ნ" GEORGIAN LETTER NAR
U+10FC: "ჼ" MODIFIER LETTER GEORGIAN NAR -->
<Key
latin:keyLabel="&#x10DC;"
- latin:moreKeys="&#x10FC;"
- latin:keyLabelFlags="preserveCase" />
+ latin:moreKeys="&#x10FC;" />
<!-- U+10DB: "მ" GEORGIAN LETTER MAN -->
<Key
- latin:keyLabel="&#x10DB;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10DB;" />
</default>
</switch>
</merge>
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeySpecParser.java b/java/src/com/android/inputmethod/keyboard/internal/KeySpecParser.java
index 8261400b2..e24cfa0e7 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeySpecParser.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeySpecParser.java
@@ -76,7 +76,7 @@ public class KeySpecParser {
}
private static boolean hasIcon(String moreKeySpec) {
- if (moreKeySpec.startsWith(PREFIX_ICON)) {
+ if (moreKeySpec.regionMatches(true, 0, PREFIX_ICON, 0, PREFIX_ICON.length())) {
final int end = indexOfLabelEnd(moreKeySpec, 0);
if (end > 0) {
return true;
@@ -88,8 +88,8 @@ public class KeySpecParser {
private static boolean hasCode(String moreKeySpec) {
final int end = indexOfLabelEnd(moreKeySpec, 0);
- if (end > 0 && end + 1 < moreKeySpec.length()
- && moreKeySpec.substring(end + 1).startsWith(PREFIX_CODE)) {
+ if (end > 0 && end + 1 < moreKeySpec.length() && moreKeySpec.regionMatches(
+ true, end + 1, PREFIX_CODE, 0, PREFIX_CODE.length())) {
return true;
}
return false;
@@ -210,9 +210,9 @@ public class KeySpecParser {
public static int parseCode(String text, KeyboardCodesSet codesSet, int defCode) {
if (text == null) return defCode;
- if (text.startsWith(PREFIX_CODE)) {
+ if (text.regionMatches(true, 0, PREFIX_CODE, 0, PREFIX_CODE.length())) {
return codesSet.getCode(text.substring(PREFIX_CODE.length()));
- } else if (text.startsWith(PREFIX_HEX)) {
+ } else if (text.regionMatches(true, 0, PREFIX_HEX, 0, PREFIX_HEX.length())) {
return Integer.parseInt(text.substring(PREFIX_HEX.length()), 16);
} else {
return Integer.parseInt(text);
@@ -350,20 +350,22 @@ public class KeySpecParser {
throw new RuntimeException("too many @string/resource indirection: " + text);
}
+ final int prefixLen = PREFIX_LABEL.length();
final int size = text.length();
- if (size < PREFIX_LABEL.length()) {
+ if (size < prefixLen) {
return text;
}
sb = null;
for (int pos = 0; pos < size; pos++) {
final char c = text.charAt(pos);
- if (text.startsWith(PREFIX_LABEL, pos) && labelsSet != null) {
+ if (text.regionMatches(true, pos, PREFIX_LABEL, 0, prefixLen)
+ && labelsSet != null) {
if (sb == null) {
sb = new StringBuilder(text.substring(0, pos));
}
- final int end = searchLabelNameEnd(text, pos + PREFIX_LABEL.length());
- final String name = text.substring(pos + PREFIX_LABEL.length(), end);
+ final int end = searchLabelNameEnd(text, pos + prefixLen);
+ final String name = text.substring(pos + prefixLen, end);
sb.append(labelsSet.getLabel(name));
pos = end - 1;
} else if (c == ESCAPE_CHAR) {
@@ -389,8 +391,9 @@ public class KeySpecParser {
final int size = text.length();
for (int pos = start; pos < size; pos++) {
final char c = text.charAt(pos);
- // String resource name should be consisted of [a-z_0-9].
- if ((c >= 'a' && c <= 'z') || c == '_' || (c >= '0' && c <= '9')) {
+ // Label name should be consisted of [a-zA-Z_0-9].
+ if ((c >= 'a' && c <= 'z') || c == '_' || (c >= '0' && c <= '9')
+ || (c >= 'A' && c <= 'Z')) {
continue;
}
return pos;
@@ -442,17 +445,19 @@ public class KeySpecParser {
if (moreKeys == null) {
return defaultValue;
}
+ final int keyLen = key.length();
boolean foundValue = false;
int value = defaultValue;
for (int i = 0; i < moreKeys.length; i++) {
final String moreKeySpec = moreKeys[i];
- if (moreKeySpec == null || !moreKeySpec.startsWith(key)) {
+ if (moreKeySpec == null || !moreKeySpec.regionMatches(true, 0, key, 0, keyLen)) {
continue;
}
moreKeys[i] = null;
try {
if (!foundValue) {
- value = Integer.parseInt(moreKeySpec.substring(key.length()));
+ value = Integer.parseInt(moreKeySpec.substring(keyLen));
+ foundValue = true;
}
} catch (NumberFormatException e) {
throw new RuntimeException(
@@ -469,7 +474,7 @@ public class KeySpecParser {
boolean value = false;
for (int i = 0; i < moreKeys.length; i++) {
final String moreKeySpec = moreKeys[i];
- if (moreKeySpec == null || !moreKeySpec.equals(key)) {
+ if (moreKeySpec == null || !moreKeySpec.equalsIgnoreCase(key)) {
continue;
}
moreKeys[i] = null;
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java
index 736a96c56..c10a394c1 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java
@@ -33,7 +33,10 @@ public class KeyboardCodesSet {
}
public int getCode(final String name) {
- final Integer id = sNameToIdMap.get(name);
+ Integer id = sNameToIdMap.get(name);
+ if (id == null) {
+ id = sNameToIdMap.get(name.toLowerCase());
+ }
if (id == null) throw new RuntimeException("Unknown key code: " + name);
return mCodes[id];
}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
index ded89b1b8..07636249f 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
@@ -36,7 +36,9 @@ public class KeyboardIconsSet {
private static final HashMap<Integer, Integer> ATTR_ID_TO_ICON_ID
= new HashMap<Integer, Integer>();
- private static final HashMap<String, Integer> NAME_TO_ICON_ID = new HashMap<String, Integer>();
+ // Lower case icon name to icon id map.
+ private static final HashMap<String, Integer> sLowerCaseNameToIdsMap =
+ new HashMap<String, Integer>();
private static final String[] ICON_NAMES = new String[NUM_ICONS + 1];
private static final int ATTR_UNDEFINED = 0;
@@ -66,7 +68,7 @@ public class KeyboardIconsSet {
if (attrId != ATTR_UNDEFINED) {
ATTR_ID_TO_ICON_ID.put(attrId, iconId);
}
- NAME_TO_ICON_ID.put(name, iconId);
+ sLowerCaseNameToIdsMap.put(name.toLowerCase(), iconId);
ICON_NAMES[iconId] = name;
}
@@ -94,7 +96,10 @@ public class KeyboardIconsSet {
}
public static int getIconId(final String name) {
- final Integer iconId = NAME_TO_ICON_ID.get(name);
+ Integer iconId = sLowerCaseNameToIdsMap.get(name);
+ if (iconId == null) {
+ iconId = sLowerCaseNameToIdsMap.get(name.toLowerCase());
+ }
if (iconId != null) {
return iconId;
}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardLabelsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardLabelsSet.java
index 0518b07ff..bd95848a9 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardLabelsSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardLabelsSet.java
@@ -31,7 +31,8 @@ public final class KeyboardLabelsSet {
// Language to labels map.
private static final HashMap<String, String[]> sLocaleToLabelsMap =
new HashMap<String, String[]>();
- private static final HashMap<String, Integer> sNameToIdMap = new HashMap<String, Integer>();
+ private static final HashMap<String, Integer> sLowerCaseNameToIdsMap =
+ new HashMap<String, Integer>();
private String[] mLabels;
// Resource name to label map.
@@ -60,12 +61,21 @@ public final class KeyboardLabelsSet {
}
public String getLabel(final String name) {
- if (mResourceNameToLabelsMap.containsKey(name)) {
- return mResourceNameToLabelsMap.get(name);
+ String lowerCaseName = null;
+ String label = mResourceNameToLabelsMap.get(name);
+ if (label == null) {
+ lowerCaseName = name.toLowerCase();
+ label = mResourceNameToLabelsMap.get(lowerCaseName);
+ }
+ if (label != null) {
+ return label;
+ }
+ Integer id = sLowerCaseNameToIdsMap.get(name);
+ if (id == null) {
+ id = sLowerCaseNameToIdsMap.get(lowerCaseName); // lowerCaseName != null
}
- final Integer id = sNameToIdMap.get(name);
if (id == null) throw new RuntimeException("Unknown label: " + name);
- final String label = (id < mLabels.length) ? mLabels[id] : null;
+ label = (id < mLabels.length) ? mLabels[id] : null;
return (label == null) ? LANGUAGE_DEFAULT[id] : label;
}
@@ -2492,7 +2502,7 @@ public final class KeyboardLabelsSet {
static {
int id = 0;
for (final String name : NAMES) {
- sNameToIdMap.put(name, id++);
+ sLowerCaseNameToIdsMap.put(name, id++);
}
for (int i = 0; i < LANGUAGES_AND_LABELS.length; i += 2) {