Remove RTL aware !code and add corresponding !text

Change-Id: I9021c8fa1cf2d4ac07579237a939c15551509a0b
main
Tadashi G. Takaoka 2014-02-10 17:48:35 +09:00
parent 3cb77678f5
commit 7ae6721ffa
19 changed files with 507 additions and 516 deletions

View File

@ -22,7 +22,7 @@
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
<Key
latin:keySpec="{|!code/key_left_curly_bracket" />
latin:keySpec="!text/keyspec_left_curly_bracket" />
<Key
latin:keySpec="}|!code/key_right_curly_bracket" />
latin:keySpec="!text/keyspec_right_curly_bracket" />
</merge>

View File

@ -25,25 +25,22 @@
<case
latin:languageCode="fa"
>
<!-- TODO: Introduce !code/key_{left,right}_angle_quotation. -->
<!-- U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -->
<Key
latin:keySpec="&#x00AB;|&#x00BB;"
latin:keySpec="!text/keyspec_left_double_angle_quote"
latin:backgroundType="functional"
latin:moreKeys="!text/more_keys_for_less_than" />
<Key
latin:keySpec="&#x00BB;|&#x00AB;"
latin:keySpec="!text/keyspec_right_double_angle_quote"
latin:backgroundType="functional"
latin:moreKeys="!text/more_keys_for_greater_than" />
</case>
<default>
<Key
latin:keySpec="&lt;|!code/key_less_than"
latin:keySpec="!text/keyspec_less_than"
latin:backgroundType="functional"
latin:moreKeys="!text/more_keys_for_less_than" />
<Key
latin:keySpec="&gt;|!code/key_greater_than"
latin:keySpec="!text/keyspec_greater_than"
latin:backgroundType="functional"
latin:moreKeys="!text/more_keys_for_greater_than" />
</default>

View File

@ -22,9 +22,9 @@
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
<Key
latin:keySpec="(|!code/key_left_parenthesis"
latin:keySpec="!text/keyspec_left_parenthesis"
latin:moreKeys="!text/more_keys_for_left_parenthesis" />
<Key
latin:keySpec=")|!code/key_right_parenthesis"
latin:keySpec="!text/keyspec_right_parenthesis"
latin:moreKeys="!text/more_keys_for_right_parenthesis" />
</merge>

View File

@ -22,7 +22,7 @@
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
<Key
latin:keySpec="[|!code/key_left_square_bracket" />
latin:keySpec="!text/keyspec_left_square_bracket" />
<Key
latin:keySpec="]|!code/key_right_square_bracket" />
latin:keySpec="!text/keyspec_right_square_bracket" />
</merge>

View File

@ -28,14 +28,11 @@
<case
latin:languageCode="fa"
>
<!-- TODO: Introduce !code/key_{left,right}_angle_quotation. -->
<!-- U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -->
<Key
latin:keySpec="&#x00AB;|&#x00BB;"
latin:keySpec="!text/keyspec_left_double_angle_quote"
latin:moreKeys="!text/more_keys_for_double_quote" />
<Key
latin:keySpec="&#x00BB;|&#x00AB;"
latin:keySpec="!text/keyspec_right_double_angle_quote"
latin:moreKeys="!text/more_keys_for_single_quote" />
</case>
<default>

View File

@ -292,8 +292,7 @@ public class Key implements Comparable<Key> {
actionFlags |= ACTION_FLAGS_ENABLE_LONG_PRESS;
mMoreKeys = new MoreKeySpec[moreKeys.length];
for (int i = 0; i < moreKeys.length; i++) {
mMoreKeys[i] = new MoreKeySpec(
moreKeys[i], needsToUpperCase, locale, params.mCodesSet);
mMoreKeys[i] = new MoreKeySpec(moreKeys[i], needsToUpperCase, locale);
}
} else {
mMoreKeys = null;
@ -306,7 +305,7 @@ public class Key implements Comparable<Key> {
final int previewIconId = KeySpecParser.getIconId(style.getString(keyAttr,
R.styleable.Keyboard_Key_keyIconPreview));
final int code = KeySpecParser.getCode(keySpec, params.mCodesSet);
final int code = KeySpecParser.getCode(keySpec);
if ((mLabelFlags & LABEL_FLAGS_FROM_CUSTOM_ACTION_LABEL) != 0) {
mLabel = params.mId.mCustomActionLabel;
} else if (code >= Character.MIN_SUPPLEMENTARY_CODE_POINT) {
@ -353,8 +352,8 @@ public class Key implements Comparable<Key> {
} else {
mCode = StringUtils.toUpperCaseOfCodeForLocale(code, needsToUpperCase, locale);
}
final int altCodeInAttr = KeySpecParser.parseCode(style.getString(keyAttr,
R.styleable.Keyboard_Key_altCode), params.mCodesSet, CODE_UNSPECIFIED);
final int altCodeInAttr = KeySpecParser.parseCode(
style.getString(keyAttr, R.styleable.Keyboard_Key_altCode), CODE_UNSPECIFIED);
final int altCode = StringUtils.toUpperCaseOfCodeForLocale(
altCodeInAttr, needsToUpperCase, locale);
mOptionalAttributes = OptionalAttributes.newInstance(outputText, altCode,

View File

@ -184,7 +184,7 @@ public final class KeySpecParser {
return (StringUtils.codePointCount(label) == 1) ? null : label;
}
public static int getCode(final String keySpec, final KeyboardCodesSet codesSet) {
public static int getCode(final String keySpec) {
if (keySpec == null) {
// TODO: Throw {@link KeySpecParserError} once Key.keyLabel attribute becomes mandatory.
return CODE_UNSPECIFIED;
@ -192,7 +192,7 @@ public final class KeySpecParser {
final int labelEnd = indexOfLabelEnd(keySpec);
if (hasCode(keySpec, labelEnd)) {
checkDoubleLabelEnd(keySpec, labelEnd);
return parseCode(getAfterLabelEnd(keySpec, labelEnd), codesSet, CODE_UNSPECIFIED);
return parseCode(getAfterLabelEnd(keySpec, labelEnd), CODE_UNSPECIFIED);
}
final String outputText = getOutputTextInternal(keySpec, labelEnd);
if (outputText != null) {
@ -211,13 +211,12 @@ public final class KeySpecParser {
return (StringUtils.codePointCount(label) == 1) ? label.codePointAt(0) : CODE_OUTPUT_TEXT;
}
public static int parseCode(final String text, final KeyboardCodesSet codesSet,
final int defaultCode) {
public static int parseCode(final String text, final int defaultCode) {
if (text == null) {
return defaultCode;
}
if (text.startsWith(KeyboardCodesSet.PREFIX_CODE)) {
return codesSet.getCode(text.substring(KeyboardCodesSet.PREFIX_CODE.length()));
return KeyboardCodesSet.getCode(text.substring(KeyboardCodesSet.PREFIX_CODE.length()));
}
// This is a workaround to have a key that has a supplementary code point. We can't put a
// string in resource as a XML entity of a supplementary code point or a surrogate pair.

View File

@ -279,7 +279,6 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
params.mThemeId = keyboardAttr.getInt(R.styleable.Keyboard_themeId, 0);
params.mIconsSet.loadIcons(keyboardAttr);
final Locale locale = params.mId.mLocale;
params.mCodesSet.setLocale(locale);
params.mTextsSet.setLocale(locale);
final RunInLocale<Void> job = new RunInLocale<Void>() {
@Override

View File

@ -18,26 +18,22 @@ package com.android.inputmethod.keyboard.internal;
import com.android.inputmethod.latin.Constants;
import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
import java.util.HashMap;
import java.util.Locale;
public final class KeyboardCodesSet {
public static final String PREFIX_CODE = "!code/";
private static final HashMap<String, Integer> sNameToIdMap = CollectionUtils.newHashMap();
private int[] mCodes = DEFAULT;
public void setLocale(final Locale locale) {
mCodes = SubtypeLocaleUtils.isRtlLanguage(locale) ? RTL : DEFAULT;
private KeyboardCodesSet() {
// This utility class is not publicly instantiable.
}
public int getCode(final String name) {
public static int getCode(final String name) {
Integer id = sNameToIdMap.get(name);
if (id == null) throw new RuntimeException("Unknown key code: " + name);
return mCodes[id];
return DEFAULT[id];
}
private static final String[] ID_TO_NAME = {
@ -58,26 +54,8 @@ public final class KeyboardCodesSet {
"key_emoji",
"key_alpha_from_emoji",
"key_unspecified",
"key_left_parenthesis",
"key_right_parenthesis",
"key_less_than",
"key_greater_than",
"key_left_square_bracket",
"key_right_square_bracket",
"key_left_curly_bracket",
"key_right_curly_bracket",
};
private static final int CODE_LEFT_PARENTHESIS = '(';
private static final int CODE_RIGHT_PARENTHESIS = ')';
private static final int CODE_LESS_THAN_SIGN = '<';
private static final int CODE_GREATER_THAN_SIGN = '>';
private static final int CODE_LEFT_SQUARE_BRACKET = '[';
private static final int CODE_RIGHT_SQUARE_BRACKET = ']';
private static final int CODE_LEFT_CURLY_BRACKET = '{';
private static final int CODE_RIGHT_CURLY_BRACKET = '}';
// This array should be aligned with the array RTL below.
private static final int[] DEFAULT = {
Constants.CODE_TAB,
Constants.CODE_ENTER,
@ -96,48 +74,9 @@ public final class KeyboardCodesSet {
Constants.CODE_EMOJI,
Constants.CODE_ALPHA_FROM_EMOJI,
Constants.CODE_UNSPECIFIED,
CODE_LEFT_PARENTHESIS,
CODE_RIGHT_PARENTHESIS,
CODE_LESS_THAN_SIGN,
CODE_GREATER_THAN_SIGN,
CODE_LEFT_SQUARE_BRACKET,
CODE_RIGHT_SQUARE_BRACKET,
CODE_LEFT_CURLY_BRACKET,
CODE_RIGHT_CURLY_BRACKET,
};
private static final int[] RTL = {
DEFAULT[0],
DEFAULT[1],
DEFAULT[2],
DEFAULT[3],
DEFAULT[4],
DEFAULT[5],
DEFAULT[6],
DEFAULT[7],
DEFAULT[8],
DEFAULT[9],
DEFAULT[10],
DEFAULT[11],
DEFAULT[12],
DEFAULT[13],
DEFAULT[14],
DEFAULT[15],
DEFAULT[16],
CODE_RIGHT_PARENTHESIS,
CODE_LEFT_PARENTHESIS,
CODE_GREATER_THAN_SIGN,
CODE_LESS_THAN_SIGN,
CODE_RIGHT_SQUARE_BRACKET,
CODE_LEFT_SQUARE_BRACKET,
CODE_RIGHT_CURLY_BRACKET,
CODE_LEFT_CURLY_BRACKET,
};
static {
if (DEFAULT.length != RTL.length || DEFAULT.length != ID_TO_NAME.length) {
throw new RuntimeException("Internal inconsistency");
}
for (int i = 0; i < ID_TO_NAME.length; i++) {
sNameToIdMap.put(ID_TO_NAME[i], i);
}

View File

@ -62,7 +62,6 @@ public class KeyboardParams {
public final ArrayList<Key> mShiftKeys = CollectionUtils.newArrayList();
public final ArrayList<Key> mAltCodeKeysWhileTyping = CollectionUtils.newArrayList();
public final KeyboardIconsSet mIconsSet = new KeyboardIconsSet();
public final KeyboardCodesSet mCodesSet = new KeyboardCodesSet();
public final KeyboardTextsSet mTextsSet = new KeyboardTextsSet();
public final KeyStylesSet mKeyStyles = new KeyStylesSet(mTextsSet);

View File

@ -46,15 +46,14 @@ public final class MoreKeySpec {
public final String mOutputText;
public final int mIconId;
public MoreKeySpec(final String moreKeySpec, boolean needsToUpperCase, final Locale locale,
final KeyboardCodesSet codesSet) {
public MoreKeySpec(final String moreKeySpec, boolean needsToUpperCase, final Locale locale) {
if (TextUtils.isEmpty(moreKeySpec)) {
throw new KeySpecParser.KeySpecParserError("Empty more key spec");
}
mLabel = StringUtils.toUpperCaseOfStringForLocale(
KeySpecParser.getLabel(moreKeySpec), needsToUpperCase, locale);
final int code = StringUtils.toUpperCaseOfCodeForLocale(
KeySpecParser.getCode(moreKeySpec, codesSet), needsToUpperCase, locale);
KeySpecParser.getCode(moreKeySpec), needsToUpperCase, locale);
if (code == Constants.CODE_UNSPECIFIED) {
// Some letter, for example German Eszett (U+00DF: "ß"), has multiple characters
// upper case representation ("SS").

View File

@ -33,7 +33,7 @@ public final class KeySpecParserTests extends KeySpecParserTestsBase {
final String actualLabel = KeySpecParser.getLabel(keySpecResolved);
final String actualOutputText = KeySpecParser.getOutputText(keySpecResolved);
final int actualIcon = KeySpecParser.getIconId(keySpecResolved);
final int actualCode = KeySpecParser.getCode(keySpecResolved, mCodesSet);
final int actualCode = KeySpecParser.getCode(keySpecResolved);
assertEquals(message + " [label]", expectedLabel, actualLabel);
assertEquals(message + " [ouptputText]", expectedOutputText, actualOutputText);
assertEquals(message + " [icon]",

View File

@ -32,7 +32,6 @@ import java.util.Locale;
abstract class KeySpecParserTestsBase extends AndroidTestCase {
private final static Locale TEST_LOCALE = Locale.ENGLISH;
protected final KeyboardCodesSet mCodesSet = new KeyboardCodesSet();
protected final KeyboardTextsSet mTextsSet = new KeyboardTextsSet();
private static final String CODE_SETTINGS_NAME = "key_settings";
@ -52,7 +51,6 @@ abstract class KeySpecParserTestsBase extends AndroidTestCase {
protected void setUp() throws Exception {
super.setUp();
mCodesSet.setLocale(TEST_LOCALE);
mTextsSet.setLocale(TEST_LOCALE);
final Context context = getContext();
new RunInLocale<Void>() {
@ -63,8 +61,8 @@ abstract class KeySpecParserTestsBase extends AndroidTestCase {
}
}.runInLocale(context.getResources(), TEST_LOCALE);
mCodeSettings = mCodesSet.getCode(CODE_SETTINGS_NAME);
mCodeActionNext = mCodesSet.getCode("key_action_next");
mCodeSettings = KeyboardCodesSet.getCode(CODE_SETTINGS_NAME);
mCodeActionNext = KeyboardCodesSet.getCode("key_action_next");
mSettingsIconId = KeyboardIconsSet.getIconId(ICON_SETTINGS_NAME);
}

View File

@ -33,8 +33,8 @@ public final class MoreKeySpecTests extends KeySpecParserTestsBase {
final String expectedLabel, final String expectedOutputText, final int expectedIconId,
final int expectedCode) {
final String labelResolved = mTextsSet.resolveTextReference(moreKeySpec);
final MoreKeySpec spec = new MoreKeySpec(labelResolved, false /* needsToUpperCase */,
Locale.US, mCodesSet);
final MoreKeySpec spec = new MoreKeySpec(
labelResolved, false /* needsToUpperCase */, Locale.US);
assertEquals(message + " [label]", expectedLabel, spec.mLabel);
assertEquals(message + " [ouptputText]", expectedOutputText, spec.mOutputText);
assertEquals(message + " [icon]",

View File

@ -95,18 +95,28 @@
http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt -->
<!-- U+FD3E: "" ORNATE LEFT PARENTHESIS
U+FD3F: "﴿" ORNATE RIGHT PARENTHESIS -->
<string name="more_keys_for_left_parenthesis">!fixedColumnOrder!4,&#xFD3E;|&#xFD3F;,&lt;|&gt;,{|},[|]</string>
<string name="more_keys_for_right_parenthesis">!fixedColumnOrder!4,&#xFD3F;|&#xFD3E;,&gt;|&lt;,}|{,]|[</string>
<string name="more_keys_for_left_parenthesis">!fixedColumnOrder!4,&#xFD3E;|&#xFD3F;,!text/keyspecs_for_left_parenthesis_more_keys</string>
<string name="more_keys_for_right_parenthesis">!fixedColumnOrder!4,&#xFD3F;|&#xFD3E;,!text/keyspecs_for_right_parenthesis_more_keys</string>
<!-- U+2264: "≤" LESS-THAN OR EQUAL TO
U+2265: "≥" GREATER-THAN EQUAL TO
U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
U+2039: "" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
U+203A: "" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -->
<string name="more_keys_for_less_than">!fixedColumnOrder!3,&#x2039;|&#x203A;,&#x2264;|&#x2265;,&#x00AB;|&#x00BB;</string>
<string name="more_keys_for_greater_than">!fixedColumnOrder!3,&#x203A;|&#x2039;,&#x2265;|&#x2264;,&#x00BB;|&#x00AB;</string>
<string name="single_angle_quotes">!text/single_laqm_raqm_rtl</string>
<string name="double_angle_quotes">!text/double_laqm_raqm_rtl</string>
<string name="keyspec_left_parenthesis">(|)</string>
<string name="keyspec_right_parenthesis">)|(</string>
<string name="keyspec_left_square_bracket">[|]</string>
<string name="keyspec_right_square_bracket">]|[</string>
<string name="keyspec_left_curly_bracket">{|}</string>
<string name="keyspec_right_curly_bracket">}|{</string>
<string name="keyspec_less_than">&lt;|&gt;</string>
<string name="keyspec_greater_than">&gt;|&lt;</string>
<string name="keyspec_less_than_equal">&#x2264;|&#x2265;</string>
<string name="keyspec_greater_than_equal">&#x2265;|&#x2264;</string>
<string name="keyspec_left_double_angle_quote">&#x00AB;|&#x00BB;</string>
<string name="keyspec_right_double_angle_quote">&#x00BB;|&#x00AB;</string>
<string name="keyspec_left_single_angle_quote">&#x2039;|&#x203A;</string>
<string name="keyspec_right_single_angle_quote">&#x203A;|&#x2039;</string>
<!-- U+0655: "ٕ" ARABIC HAMZA BELOW
U+0654: "ٔ" ARABIC HAMZA ABOVE
U+0652: "ْ" ARABIC SUKUN

View File

@ -86,13 +86,13 @@
U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -->
<string name="keylabel_for_tablet_comma">"&#x060C;"</string>
<string name="keyhintlabel_for_tablet_comma">"&#x061F;"</string>
<string name="more_keys_for_tablet_comma">"!fixedColumnOrder!4,:,!,&#x061F;,&#x061B;,-,/,&#x00AB;|&#x00BB;,&#x00BB;|&#x00AB;"</string>
<string name="more_keys_for_tablet_comma">"!fixedColumnOrder!4,:,!,&#x061F;,&#x061B;,-,/,!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote"</string>
<!-- U+FDFC: "﷼" RIAL SIGN -->
<string name="keylabel_for_currency">&#xFDFC;</string>
<!-- U+061F: "؟" ARABIC QUESTION MARK
U+060C: "،" ARABIC COMMA
U+061B: "؛" ARABIC SEMICOLON -->
<string name="more_keys_for_punctuation">"!fixedColumnOrder!8,\",\',#,-,:,!,&#x060C;,&#x061F;,\@,&amp;,\\%,+,&#x061B;,/,(|),)|("</string>
<string name="more_keys_for_punctuation">"!fixedColumnOrder!8,\",\',#,-,:,!,&#x060C;,&#x061F;,\@,&amp;,\\%,+,&#x061B;,/,!text/keyspec_left_parenthesis,!text/keyspec_right_parenthesis"</string>
<!-- U+266A: "♪" EIGHTH NOTE -->
<string name="more_keys_for_bullet">&#x266A;</string>
<!-- U+2605: "★" BLACK STAR
@ -102,18 +102,30 @@
http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt -->
<!-- U+FD3E: "" ORNATE LEFT PARENTHESIS
U+FD3F: "﴿" ORNATE RIGHT PARENTHESIS -->
<string name="more_keys_for_left_parenthesis">!fixedColumnOrder!4,&#xFD3E;|&#xFD3F;,&lt;|&gt;,{|},[|]</string>
<string name="more_keys_for_right_parenthesis">!fixedColumnOrder!4,&#xFD3F;|&#xFD3E;,&gt;|&lt;,}|{,]|[</string>
<string name="more_keys_for_left_parenthesis">!fixedColumnOrder!4,&#xFD3E;|&#xFD3F;,!text/keyspecs_for_left_parenthesis_more_keys</string>
<string name="more_keys_for_right_parenthesis">!fixedColumnOrder!4,&#xFD3F;|&#xFD3E;,!text/keyspecs_for_right_parenthesis_more_keys</string>
<!-- U+2264: "≤" LESS-THAN OR EQUAL TO
U+2265: "≥" GREATER-THAN EQUAL TO
U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
U+2039: "" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
U+203A: "" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -->
<string name="more_keys_for_less_than">!fixedColumnOrder!3,&#x2039;|&#x203A;,&#x2264;|&#x2265;,&lt;|&gt;</string>
<string name="more_keys_for_greater_than">!fixedColumnOrder!3,&#x203A;|&#x2039;,&#x2265;|&#x2264;,&gt;|&lt;</string>
<string name="single_angle_quotes">!text/single_laqm_raqm_rtl</string>
<string name="double_angle_quotes">!text/double_laqm_raqm_rtl</string>
<string name="more_keys_for_less_than">!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote;,!text/keyspec_less_than_equal;,!text/keyspec_less_than</string>
<string name="more_keys_for_greater_than">!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote;,!text/keyspec_greater_than_equal;,!text/keyspec_greater_than</string>
<string name="keyspec_left_parenthesis">(|)</string>
<string name="keyspec_right_parenthesis">)|(</string>
<string name="keyspec_left_square_bracket">[|]</string>
<string name="keyspec_right_square_bracket">]|[</string>
<string name="keyspec_left_curly_bracket">{|}</string>
<string name="keyspec_right_curly_bracket">}|{</string>
<string name="keyspec_less_than">&lt;|&gt;</string>
<string name="keyspec_greater_than">&gt;|&lt;</string>
<string name="keyspec_less_than_equal">&#x2264;|&#x2265;</string>
<string name="keyspec_greater_than_equal">&#x2265;|&#x2264;</string>
<string name="keyspec_left_double_angle_quote">&#x00AB;|&#x00BB;</string>
<string name="keyspec_right_double_angle_quote">&#x00BB;|&#x00AB;</string>
<string name="keyspec_left_single_angle_quote">&#x2039;|&#x203A;</string>
<string name="keyspec_right_single_angle_quote">&#x203A;|&#x2039;</string>
<!-- U+0655: "ٕ" ARABIC HAMZA BELOW
U+0652: "ْ" ARABIC SUKUN
U+0651: "ّ" ARABIC SHADDA

View File

@ -28,31 +28,30 @@
<!-- U+00B1: "±" PLUS-MINUS SIGN
U+FB29: "﬩" HEBREW LETTER ALTERNATIVE PLUS SIGN -->
<string name="more_keys_for_plus">&#x00B1;,&#xFB29;</string>
<string name="more_keys_for_punctuation">"!fixedColumnOrder!8,;,/,(|),)|(,#,!,\\,,\?,&amp;,\\%,+,\",-,:,',\@"</string>
<string name="more_keys_for_tablet_punctuation">"!fixedColumnOrder!7,;,/,(|),)|(,#,',\\,,&amp;,\\%,+,\",-,:,\@"</string>
<!-- The all letters need to be mirrored are found at
http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt -->
<string name="more_keys_for_left_parenthesis">!fixedColumnOrder!3,&lt;|&gt;,{|},[|]</string>
<string name="more_keys_for_right_parenthesis">!fixedColumnOrder!3,&gt;|&lt;,}|{,]|[</string>
<!-- U+2264: "≤" LESS-THAN OR EQUAL TO
U+2265: "≥" GREATER-THAN EQUAL TO
U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
U+2039: "" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
U+203A: "" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -->
<string name="more_keys_for_less_than">!fixedColumnOrder!3,&#x2039;|&#x203A;,&#x2264;|&#x2265;,&#x00AB;|&#x00BB;</string>
<string name="more_keys_for_greater_than">!fixedColumnOrder!3,&#x203A;|&#x2039;,&#x2265;|&#x2264;,&#x00BB;|&#x00AB;</string>
<!-- The following characters don't need BIDI mirroring.
U+2018: "" LEFT SINGLE QUOTATION MARK
U+2019: "" RIGHT SINGLE QUOTATION MARK
U+201A: "" SINGLE LOW-9 QUOTATION MARK
U+201C: "“" LEFT DOUBLE QUOTATION MARK
U+201D: "”" RIGHT DOUBLE QUOTATION MARK
U+201E: "„" DOUBLE LOW-9 QUOTATION MARK -->
<string name="single_quotes">&#x2018;,&#x2019;,&#x201A;</string>
<string name="double_quotes">&#x201C;,&#x201D;,&#x201E;</string>
<string name="single_angle_quotes">!text/single_laqm_raqm_rtl</string>
<string name="double_angle_quotes">!text/double_laqm_raqm_rtl</string>
<string name="keyspec_left_parenthesis">(|)</string>
<string name="keyspec_right_parenthesis">)|(</string>
<string name="keyspec_left_square_bracket">[|]</string>
<string name="keyspec_right_square_bracket">]|[</string>
<string name="keyspec_left_curly_bracket">{|}</string>
<string name="keyspec_right_curly_bracket">}|{</string>
<string name="keyspec_less_than">&lt;|&gt;</string>
<string name="keyspec_greater_than">&gt;|&lt;</string>
<string name="keyspec_less_than_equal">&#x2264;|&#x2265;</string>
<string name="keyspec_greater_than_equal">&#x2265;|&#x2264;</string>
<string name="keyspec_left_double_angle_quote">&#x00AB;|&#x00BB;</string>
<string name="keyspec_right_double_angle_quote">&#x00BB;|&#x00AB;</string>
<string name="keyspec_left_single_angle_quote">&#x2039;|&#x203A;</string>
<string name="keyspec_right_single_angle_quote">&#x203A;|&#x2039;</string>
<string name="single_quotes">!text/single_rqm_9qm</string>
<string name="double_quotes">!text/double_rqm_9qm</string>
<!-- U+20AA: "₪" NEW SHEQEL SIGN -->
<string name="keylabel_for_currency">&#x20AA;</string>
</resources>

View File

@ -83,8 +83,8 @@
<string name="more_keys_for_currency_dollar">&#x00A2;,&#x00A3;,&#x20AC;,&#x00A5;,&#x20B1;</string>
<string name="keylabel_for_currency">$</string>
<string name="more_keys_for_currency">$,&#x00A2;,&#x20AC;,&#x00A3;,&#x00A5;,&#x20B1;</string>
<string name="more_keys_for_punctuation">"!fixedColumnOrder!8,;,/,(,),#,!,\\,,\?,&amp;,\\%,+,\",-,:,',\@"</string>
<string name="more_keys_for_tablet_punctuation">"!fixedColumnOrder!7,;,/,(,),#,',\\,,&amp;,\\%,+,\",-,:,\@"</string>
<string name="more_keys_for_punctuation">"!fixedColumnOrder!8,;,/,!text/keyspec_left_parenthesis,!text/keyspec_right_parenthesis,#,!,\\,,\?,&amp;,\\%,+,\",-,:,',\@"</string>
<string name="more_keys_for_tablet_punctuation">"!fixedColumnOrder!7,;,/,!text/keyspec_left_parenthesis,!text/keyspec_right_parenthesis,#,',\\,,&amp;,\\%,+,\",-,:,\@"</string>
<!-- U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE -->
<string name="keylabel_for_spanish_row2_10">&#x00F1;</string>
<!-- U+2020: "†" DAGGER
@ -99,18 +99,10 @@
<string name="more_keys_for_bullet">&#x266A;,&#x2665;,&#x2660;,&#x2666;,&#x2663;</string>
<!-- U+00B1: "±" PLUS-MINUS SIGN -->
<string name="more_keys_for_plus">&#x00B1;</string>
<!-- The all letters need to be mirrored are found at
http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt -->
<string name="more_keys_for_left_parenthesis">!fixedColumnOrder!3,&lt;,{,[</string>
<string name="more_keys_for_right_parenthesis">!fixedColumnOrder!3,&gt;,},]</string>
<!-- U+2039: "" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
U+203A: "" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
U+2264: "≤" LESS-THAN OR EQUAL TO
U+2265: "≥" GREATER-THAN EQUAL TO
U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -->
<string name="more_keys_for_less_than">!fixedColumnOrder!3,&#x2039;,&#x2264;,&#x00AB;</string>
<string name="more_keys_for_greater_than">!fixedColumnOrder!3,&#x203A;,&#x2265;,&#x00BB;</string>
<string name="more_keys_for_left_parenthesis">!fixedColumnOrder!3,!text/keyspecs_for_left_parenthesis_more_keys</string>
<string name="more_keys_for_right_parenthesis">!fixedColumnOrder!3,!text/keyspecs_for_right_parenthesis_more_keys</string>
<string name="more_keys_for_less_than">!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_left_double_angle_quote</string>
<string name="more_keys_for_greater_than">!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_right_double_angle_quote</string>
<string name="more_keys_for_arabic_diacritics"></string>
<string name="keylabel_for_symbols_1">1</string>
<string name="keylabel_for_symbols_2">2</string>
@ -162,6 +154,28 @@
<!-- U+207F: "ⁿ" SUPERSCRIPT LATIN SMALL LETTER N
U+2205: "∅" EMPTY SET -->
<string name="more_keys_for_symbols_0">&#x207F;,&#x2205;</string>
<!-- The all letters need to be mirrored are found at
http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
U+2039: "" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
U+203A: "" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
U+2264: "≤" LESS-THAN OR EQUAL TO
U+2265: "≥" GREATER-THAN EQUAL TO
U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -->
<string name="keyspec_left_parenthesis">(</string>
<string name="keyspec_right_parenthesis">)</string>
<string name="keyspec_left_square_bracket">[</string>
<string name="keyspec_right_square_bracket">]</string>
<string name="keyspec_left_curly_bracket">{</string>
<string name="keyspec_right_curly_bracket">}</string>
<string name="keyspec_less_than">&lt;</string>
<string name="keyspec_greater_than">&gt;</string>
<string name="keyspec_less_than_equal">&#x2264;</string>
<string name="keyspec_greater_than_equal">&#x2265;</string>
<string name="keyspec_left_double_angle_quote">&#x00AB;</string>
<string name="keyspec_right_double_angle_quote">&#x00BB;</string>
<string name="keyspec_left_single_angle_quote">&#x2039;</string>
<string name="keyspec_right_single_angle_quote">&#x203A;</string>
<!-- Comma key -->
<string name="keylabel_for_comma">,</string>
<string name="more_keys_for_comma"></string>
@ -215,11 +229,9 @@
<string name="keylabel_for_popular_domain">".com"</string>
<!-- popular web domains for the locale - most popular, displayed on the keyboard -->
<string name="more_keys_for_popular_domain">"!hasLabels!,.net,.org,.gov,.edu"</string>
<!-- U+2039: "" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
U+203A: "" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
The following characters don't need BIDI mirroring.
<string name="keyspecs_for_left_parenthesis_more_keys">!text/keyspec_less_than,!text/keyspec_left_curly_bracket,!text/keyspec_left_square_bracket</string>
<string name="keyspecs_for_right_parenthesis_more_keys">!text/keyspec_greater_than,!text/keyspec_right_curly_bracket,!text/keyspec_right_square_bracket</string>
<!-- The following characters don't need BIDI mirroring.
U+2018: "" LEFT SINGLE QUOTATION MARK
U+2019: "" RIGHT SINGLE QUOTATION MARK
U+201A: "" SINGLE LOW-9 QUOTATION MARK
@ -229,28 +241,27 @@
<!-- Abbreviations are:
laqm: LEFT-POINTING ANGLE QUOTATION MARK
raqm: RIGHT-POINTING ANGLE QUOTATION MARK
rtl: Right-To-Left script order
lqm: LEFT QUOTATION MARK
rqm: RIGHT QUOTATION MARK
9qm: LOW-9 QUOTATION MARK -->
<!-- The following each quotation mark pair consist of
<opening quotation mark>, <closing quotation mark>
and is named after (single|double)_<opening quotation mark>_<closing quotation mark>. -->
<string name="single_laqm_raqm">&#x2039;,&#x203A;</string>
<string name="single_laqm_raqm_rtl">&#x2039;|&#x203A;,&#x203A;|&#x2039;</string>
<string name="single_raqm_laqm">&#x203A;,&#x2039;</string>
<string name="double_laqm_raqm">&#x00AB;,&#x00BB;</string>
<string name="double_laqm_raqm_rtl">&#x00AB;|&#x00BB;,&#x00BB;|&#x00AB;</string>
<string name="double_raqm_laqm">&#x00BB;,&#x00AB;</string>
<string name="single_laqm_raqm">!text/keyspec_left_single_angle_quote,!text/keyspec_right_single_angle_quote</string>
<string name="single_raqm_laqm">!text/keyspec_right_single_angle_quote,!text/keyspec_left_single_angle_quote</string>
<string name="double_laqm_raqm">!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote</string>
<string name="double_raqm_laqm">!text/keyspec_right_double_angle_quote,!text/keyspec_left_double_angle_quote</string>
<!-- The following each quotation mark triplet consists of
<another quotation mark>, <opening quotation mark>, <closing quotation mark>
and is named after (single|double)_<opening quotation mark>_<closing quotation mark>. -->
<string name="single_lqm_rqm">&#x201A;,&#x2018;,&#x2019;</string>
<string name="single_9qm_lqm">&#x2019;,&#x201A;,&#x2018;</string>
<string name="single_9qm_rqm">&#x2018;,&#x201A;,&#x2019;</string>
<string name="single_rqm_9qm">&#x2018;,&#x2019;,&#x201A;</string>
<string name="double_lqm_rqm">&#x201E;,&#x201C;,&#x201D;</string>
<string name="double_9qm_lqm">&#x201D;,&#x201E;,&#x201C;</string>
<string name="double_9qm_rqm">&#x201C;,&#x201E;,&#x201D;</string>
<string name="double_rqm_9qm">&#x201C;,&#x201D;,&#x201E;</string>
<string name="more_keys_for_single_quote">!fixedColumnOrder!5,!text/single_quotes,!text/single_angle_quotes</string>
<string name="more_keys_for_double_quote">!fixedColumnOrder!5,!text/double_quotes,!text/double_angle_quotes</string>
<string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,!text/double_quotes,!text/single_quotes,!text/double_angle_quotes,!text/single_angle_quotes</string>