am 7ae6721f: Remove RTL aware !code and add corresponding !text

* commit '7ae6721ffad1e79ee446de87d13f18a27619830b':
  Remove RTL aware !code and add corresponding !text
This commit is contained in:
Tadashi G. Takaoka 2014-02-13 01:37:30 -08:00 committed by Android Git Automerger
commit 8950f96b84
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" xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
> >
<Key <Key
latin:keySpec="{|!code/key_left_curly_bracket" /> latin:keySpec="!text/keyspec_left_curly_bracket" />
<Key <Key
latin:keySpec="}|!code/key_right_curly_bracket" /> latin:keySpec="!text/keyspec_right_curly_bracket" />
</merge> </merge>

View file

@ -25,25 +25,22 @@
<case <case
latin:languageCode="fa" 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 <Key
latin:keySpec="&#x00AB;|&#x00BB;" latin:keySpec="!text/keyspec_left_double_angle_quote"
latin:backgroundType="functional" latin:backgroundType="functional"
latin:moreKeys="!text/more_keys_for_less_than" /> latin:moreKeys="!text/more_keys_for_less_than" />
<Key <Key
latin:keySpec="&#x00BB;|&#x00AB;" latin:keySpec="!text/keyspec_right_double_angle_quote"
latin:backgroundType="functional" latin:backgroundType="functional"
latin:moreKeys="!text/more_keys_for_greater_than" /> latin:moreKeys="!text/more_keys_for_greater_than" />
</case> </case>
<default> <default>
<Key <Key
latin:keySpec="&lt;|!code/key_less_than" latin:keySpec="!text/keyspec_less_than"
latin:backgroundType="functional" latin:backgroundType="functional"
latin:moreKeys="!text/more_keys_for_less_than" /> latin:moreKeys="!text/more_keys_for_less_than" />
<Key <Key
latin:keySpec="&gt;|!code/key_greater_than" latin:keySpec="!text/keyspec_greater_than"
latin:backgroundType="functional" latin:backgroundType="functional"
latin:moreKeys="!text/more_keys_for_greater_than" /> latin:moreKeys="!text/more_keys_for_greater_than" />
</default> </default>

View file

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

View file

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

View file

@ -28,14 +28,11 @@
<case <case
latin:languageCode="fa" 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 <Key
latin:keySpec="&#x00AB;|&#x00BB;" latin:keySpec="!text/keyspec_left_double_angle_quote"
latin:moreKeys="!text/more_keys_for_double_quote" /> latin:moreKeys="!text/more_keys_for_double_quote" />
<Key <Key
latin:keySpec="&#x00BB;|&#x00AB;" latin:keySpec="!text/keyspec_right_double_angle_quote"
latin:moreKeys="!text/more_keys_for_single_quote" /> latin:moreKeys="!text/more_keys_for_single_quote" />
</case> </case>
<default> <default>

View file

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

View file

@ -184,7 +184,7 @@ public final class KeySpecParser {
return (StringUtils.codePointCount(label) == 1) ? null : label; 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) { if (keySpec == null) {
// TODO: Throw {@link KeySpecParserError} once Key.keyLabel attribute becomes mandatory. // TODO: Throw {@link KeySpecParserError} once Key.keyLabel attribute becomes mandatory.
return CODE_UNSPECIFIED; return CODE_UNSPECIFIED;
@ -192,7 +192,7 @@ public final class KeySpecParser {
final int labelEnd = indexOfLabelEnd(keySpec); final int labelEnd = indexOfLabelEnd(keySpec);
if (hasCode(keySpec, labelEnd)) { if (hasCode(keySpec, labelEnd)) {
checkDoubleLabelEnd(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); final String outputText = getOutputTextInternal(keySpec, labelEnd);
if (outputText != null) { if (outputText != null) {
@ -211,13 +211,12 @@ public final class KeySpecParser {
return (StringUtils.codePointCount(label) == 1) ? label.codePointAt(0) : CODE_OUTPUT_TEXT; return (StringUtils.codePointCount(label) == 1) ? label.codePointAt(0) : CODE_OUTPUT_TEXT;
} }
public static int parseCode(final String text, final KeyboardCodesSet codesSet, public static int parseCode(final String text, final int defaultCode) {
final int defaultCode) {
if (text == null) { if (text == null) {
return defaultCode; return defaultCode;
} }
if (text.startsWith(KeyboardCodesSet.PREFIX_CODE)) { 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 // 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. // 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.mThemeId = keyboardAttr.getInt(R.styleable.Keyboard_themeId, 0);
params.mIconsSet.loadIcons(keyboardAttr); params.mIconsSet.loadIcons(keyboardAttr);
final Locale locale = params.mId.mLocale; final Locale locale = params.mId.mLocale;
params.mCodesSet.setLocale(locale);
params.mTextsSet.setLocale(locale); params.mTextsSet.setLocale(locale);
final RunInLocale<Void> job = new RunInLocale<Void>() { final RunInLocale<Void> job = new RunInLocale<Void>() {
@Override @Override

View file

@ -18,26 +18,22 @@ package com.android.inputmethod.keyboard.internal;
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.CollectionUtils;
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
import java.util.HashMap; import java.util.HashMap;
import java.util.Locale;
public final class KeyboardCodesSet { public final class KeyboardCodesSet {
public static final String PREFIX_CODE = "!code/"; public static final String PREFIX_CODE = "!code/";
private static final HashMap<String, Integer> sNameToIdMap = CollectionUtils.newHashMap(); private static final HashMap<String, Integer> sNameToIdMap = CollectionUtils.newHashMap();
private int[] mCodes = DEFAULT; private KeyboardCodesSet() {
// This utility class is not publicly instantiable.
public void setLocale(final Locale locale) {
mCodes = SubtypeLocaleUtils.isRtlLanguage(locale) ? RTL : DEFAULT;
} }
public int getCode(final String name) { public static int getCode(final String name) {
Integer id = sNameToIdMap.get(name); Integer id = sNameToIdMap.get(name);
if (id == null) throw new RuntimeException("Unknown key code: " + name); if (id == null) throw new RuntimeException("Unknown key code: " + name);
return mCodes[id]; return DEFAULT[id];
} }
private static final String[] ID_TO_NAME = { private static final String[] ID_TO_NAME = {
@ -58,26 +54,8 @@ public final class KeyboardCodesSet {
"key_emoji", "key_emoji",
"key_alpha_from_emoji", "key_alpha_from_emoji",
"key_unspecified", "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 = { private static final int[] DEFAULT = {
Constants.CODE_TAB, Constants.CODE_TAB,
Constants.CODE_ENTER, Constants.CODE_ENTER,
@ -96,48 +74,9 @@ public final class KeyboardCodesSet {
Constants.CODE_EMOJI, Constants.CODE_EMOJI,
Constants.CODE_ALPHA_FROM_EMOJI, Constants.CODE_ALPHA_FROM_EMOJI,
Constants.CODE_UNSPECIFIED, 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 { 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++) { for (int i = 0; i < ID_TO_NAME.length; i++) {
sNameToIdMap.put(ID_TO_NAME[i], 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> mShiftKeys = CollectionUtils.newArrayList();
public final ArrayList<Key> mAltCodeKeysWhileTyping = CollectionUtils.newArrayList(); public final ArrayList<Key> mAltCodeKeysWhileTyping = CollectionUtils.newArrayList();
public final KeyboardIconsSet mIconsSet = new KeyboardIconsSet(); public final KeyboardIconsSet mIconsSet = new KeyboardIconsSet();
public final KeyboardCodesSet mCodesSet = new KeyboardCodesSet();
public final KeyboardTextsSet mTextsSet = new KeyboardTextsSet(); public final KeyboardTextsSet mTextsSet = new KeyboardTextsSet();
public final KeyStylesSet mKeyStyles = new KeyStylesSet(mTextsSet); public final KeyStylesSet mKeyStyles = new KeyStylesSet(mTextsSet);

View file

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

View file

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

View file

@ -32,7 +32,6 @@ import java.util.Locale;
abstract class KeySpecParserTestsBase extends AndroidTestCase { abstract class KeySpecParserTestsBase extends AndroidTestCase {
private final static Locale TEST_LOCALE = Locale.ENGLISH; private final static Locale TEST_LOCALE = Locale.ENGLISH;
protected final KeyboardCodesSet mCodesSet = new KeyboardCodesSet();
protected final KeyboardTextsSet mTextsSet = new KeyboardTextsSet(); protected final KeyboardTextsSet mTextsSet = new KeyboardTextsSet();
private static final String CODE_SETTINGS_NAME = "key_settings"; private static final String CODE_SETTINGS_NAME = "key_settings";
@ -52,7 +51,6 @@ abstract class KeySpecParserTestsBase extends AndroidTestCase {
protected void setUp() throws Exception { protected void setUp() throws Exception {
super.setUp(); super.setUp();
mCodesSet.setLocale(TEST_LOCALE);
mTextsSet.setLocale(TEST_LOCALE); mTextsSet.setLocale(TEST_LOCALE);
final Context context = getContext(); final Context context = getContext();
new RunInLocale<Void>() { new RunInLocale<Void>() {
@ -63,8 +61,8 @@ abstract class KeySpecParserTestsBase extends AndroidTestCase {
} }
}.runInLocale(context.getResources(), TEST_LOCALE); }.runInLocale(context.getResources(), TEST_LOCALE);
mCodeSettings = mCodesSet.getCode(CODE_SETTINGS_NAME); mCodeSettings = KeyboardCodesSet.getCode(CODE_SETTINGS_NAME);
mCodeActionNext = mCodesSet.getCode("key_action_next"); mCodeActionNext = KeyboardCodesSet.getCode("key_action_next");
mSettingsIconId = KeyboardIconsSet.getIconId(ICON_SETTINGS_NAME); 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 String expectedLabel, final String expectedOutputText, final int expectedIconId,
final int expectedCode) { final int expectedCode) {
final String labelResolved = mTextsSet.resolveTextReference(moreKeySpec); final String labelResolved = mTextsSet.resolveTextReference(moreKeySpec);
final MoreKeySpec spec = new MoreKeySpec(labelResolved, false /* needsToUpperCase */, final MoreKeySpec spec = new MoreKeySpec(
Locale.US, mCodesSet); labelResolved, false /* needsToUpperCase */, Locale.US);
assertEquals(message + " [label]", expectedLabel, spec.mLabel); assertEquals(message + " [label]", expectedLabel, spec.mLabel);
assertEquals(message + " [ouptputText]", expectedOutputText, spec.mOutputText); assertEquals(message + " [ouptputText]", expectedOutputText, spec.mOutputText);
assertEquals(message + " [icon]", assertEquals(message + " [icon]",

View file

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

View file

@ -86,13 +86,13 @@
U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK --> U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -->
<string name="keylabel_for_tablet_comma">"&#x060C;"</string> <string name="keylabel_for_tablet_comma">"&#x060C;"</string>
<string name="keyhintlabel_for_tablet_comma">"&#x061F;"</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 --> <!-- U+FDFC: "﷼" RIAL SIGN -->
<string name="keylabel_for_currency">&#xFDFC;</string> <string name="keylabel_for_currency">&#xFDFC;</string>
<!-- U+061F: "؟" ARABIC QUESTION MARK <!-- U+061F: "؟" ARABIC QUESTION MARK
U+060C: "،" ARABIC COMMA U+060C: "،" ARABIC COMMA
U+061B: "؛" ARABIC SEMICOLON --> 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 --> <!-- U+266A: "♪" EIGHTH NOTE -->
<string name="more_keys_for_bullet">&#x266A;</string> <string name="more_keys_for_bullet">&#x266A;</string>
<!-- U+2605: "★" BLACK STAR <!-- U+2605: "★" BLACK STAR
@ -102,18 +102,30 @@
http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt --> http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt -->
<!-- U+FD3E: "" ORNATE LEFT PARENTHESIS <!-- U+FD3E: "" ORNATE LEFT PARENTHESIS
U+FD3F: "﴿" ORNATE RIGHT 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_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;,&gt;|&lt;,}|{,]|[</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+2264: "≤" LESS-THAN OR EQUAL TO
U+2265: "≥" GREATER-THAN EQUAL TO U+2265: "≥" GREATER-THAN EQUAL TO
U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
U+2039: "" SINGLE LEFT-POINTING ANGLE QUOTATION MARK U+2039: "" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
U+203A: "" SINGLE RIGHT-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_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,&#x203A;|&#x2039;,&#x2265;|&#x2264;,&gt;|&lt;</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="single_angle_quotes">!text/single_laqm_raqm_rtl</string> <string name="keyspec_left_parenthesis">(|)</string>
<string name="double_angle_quotes">!text/double_laqm_raqm_rtl</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+0655: "ٕ" ARABIC HAMZA BELOW
U+0652: "ْ" ARABIC SUKUN U+0652: "ْ" ARABIC SUKUN
U+0651: "ّ" ARABIC SHADDA U+0651: "ّ" ARABIC SHADDA

View file

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

View file

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