diff options
Diffstat (limited to 'tools')
8 files changed, 198 insertions, 113 deletions
diff --git a/tools/make-keyboard-text/res/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.tmpl b/tools/make-keyboard-text/res/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.tmpl index eadeb1e31..f56cfd91b 100644 --- a/tools/make-keyboard-text/res/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.tmpl +++ b/tools/make-keyboard-text/res/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.tmpl @@ -63,6 +63,7 @@ public final class KeyboardTextsTable { } private static final String[] NAMES = { + // /* index:histogram */ "name", /* @NAMES@ */ }; diff --git a/tools/make-keyboard-text/res/values-ar/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-ar/donottranslate-more-keys.xml index f8050a395..9b0a05945 100644 --- a/tools/make-keyboard-text/res/values-ar/donottranslate-more-keys.xml +++ b/tools/make-keyboard-text/res/values-ar/donottranslate-more-keys.xml @@ -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,﴾|﴿,<|>,{|},[|]</string> - <string name="more_keys_for_right_parenthesis">!fixedColumnOrder!4,﴿|﴾,>|<,}|{,]|[</string> + <string name="more_keys_for_left_parenthesis">!fixedColumnOrder!4,﴾|﴿,!text/keyspecs_for_left_parenthesis_more_keys</string> + <string name="more_keys_for_right_parenthesis">!fixedColumnOrder!4,﴿|﴾,!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,‹|›,≤|≥,«|»</string> - <string name="more_keys_for_greater_than">!fixedColumnOrder!3,›|‹,≥|≤,»|«</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"><|></string> + <string name="keyspec_greater_than">>|<</string> + <string name="keyspec_less_than_equal">≤|≥</string> + <string name="keyspec_greater_than_equal">≥|≤</string> + <string name="keyspec_left_double_angle_quote">«|»</string> + <string name="keyspec_right_double_angle_quote">»|«</string> + <string name="keyspec_left_single_angle_quote">‹|›</string> + <string name="keyspec_right_single_angle_quote">›|‹</string> <!-- U+0655: "ٕ" ARABIC HAMZA BELOW U+0654: "ٔ" ARABIC HAMZA ABOVE U+0652: "ْ" ARABIC SUKUN diff --git a/tools/make-keyboard-text/res/values-fa/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-fa/donottranslate-more-keys.xml index a053a8885..3f12784e5 100644 --- a/tools/make-keyboard-text/res/values-fa/donottranslate-more-keys.xml +++ b/tools/make-keyboard-text/res/values-fa/donottranslate-more-keys.xml @@ -86,13 +86,13 @@ U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK --> <string name="keylabel_for_tablet_comma">"،"</string> <string name="keyhintlabel_for_tablet_comma">"؟"</string> - <string name="more_keys_for_tablet_comma">"!fixedColumnOrder!4,:,!,؟,؛,-,/,«|»,»|«"</string> + <string name="more_keys_for_tablet_comma">"!fixedColumnOrder!4,:,!,؟,؛,-,/,!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote"</string> <!-- U+FDFC: "﷼" RIAL SIGN --> <string name="keylabel_for_currency">﷼</string> <!-- U+061F: "؟" ARABIC QUESTION MARK U+060C: "،" ARABIC COMMA U+061B: "؛" ARABIC SEMICOLON --> - <string name="more_keys_for_punctuation">"!fixedColumnOrder!8,\",\',#,-,:,!,،,؟,\@,&,\\%,+,؛,/,(|),)|("</string> + <string name="more_keys_for_punctuation">"!fixedColumnOrder!8,\",\',#,-,:,!,،,؟,\@,&,\\%,+,؛,/,!text/keyspec_left_parenthesis,!text/keyspec_right_parenthesis"</string> <!-- U+266A: "♪" EIGHTH NOTE --> <string name="more_keys_for_bullet">♪</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,﴾|﴿,<|>,{|},[|]</string> - <string name="more_keys_for_right_parenthesis">!fixedColumnOrder!4,﴿|﴾,>|<,}|{,]|[</string> + <string name="more_keys_for_left_parenthesis">!fixedColumnOrder!4,﴾|﴿,!text/keyspecs_for_left_parenthesis_more_keys</string> + <string name="more_keys_for_right_parenthesis">!fixedColumnOrder!4,﴿|﴾,!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,‹|›,≤|≥,<|></string> - <string name="more_keys_for_greater_than">!fixedColumnOrder!3,›|‹,≥|≤,>|<</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"><|></string> + <string name="keyspec_greater_than">>|<</string> + <string name="keyspec_less_than_equal">≤|≥</string> + <string name="keyspec_greater_than_equal">≥|≤</string> + <string name="keyspec_left_double_angle_quote">«|»</string> + <string name="keyspec_right_double_angle_quote">»|«</string> + <string name="keyspec_left_single_angle_quote">‹|›</string> + <string name="keyspec_right_single_angle_quote">›|‹</string> <!-- U+0655: "ٕ" ARABIC HAMZA BELOW U+0652: "ْ" ARABIC SUKUN U+0651: "ّ" ARABIC SHADDA diff --git a/tools/make-keyboard-text/res/values-hy-rAM/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-hy-rAM/donottranslate-more-keys.xml index 73fe927ab..a17dc101d 100644 --- a/tools/make-keyboard-text/res/values-hy-rAM/donottranslate-more-keys.xml +++ b/tools/make-keyboard-text/res/values-hy-rAM/donottranslate-more-keys.xml @@ -18,6 +18,11 @@ */ --> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- Label for "switch to alphabetic" key. + U+0531: "Ա" ARMENIAN CAPITAL LETTER AYB + U+0532: "Բ" ARMENIAN CAPITAL LETTER BEN + U+0533: "Գ" ARMENIAN CAPITAL LETTER GIM --> + <string name="label_to_alpha_key">ԱԲԳ</string> <!-- U+058A: "֊" ARMENIAN HYPHEN --> <!-- U+055C: "՜" ARMENIAN EXCLAMATION MARK --> <!-- U+055D: "՝" ARMENIAN COMMA --> diff --git a/tools/make-keyboard-text/res/values-iw/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-iw/donottranslate-more-keys.xml index e231a398e..8314ae5da 100644 --- a/tools/make-keyboard-text/res/values-iw/donottranslate-more-keys.xml +++ b/tools/make-keyboard-text/res/values-iw/donottranslate-more-keys.xml @@ -28,31 +28,30 @@ <!-- U+00B1: "±" PLUS-MINUS SIGN U+FB29: "﬩" HEBREW LETTER ALTERNATIVE PLUS SIGN --> <string name="more_keys_for_plus">±,﬩</string> - <string name="more_keys_for_punctuation">"!fixedColumnOrder!8,;,/,(|),)|(,#,!,\\,,\?,&,\\%,+,\",-,:,',\@"</string> - <string name="more_keys_for_tablet_punctuation">"!fixedColumnOrder!7,;,/,(|),)|(,#,',\\,,&,\\%,+,\",-,:,\@"</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,<|>,{|},[|]</string> - <string name="more_keys_for_right_parenthesis">!fixedColumnOrder!3,>|<,}|{,]|[</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,‹|›,≤|≥,«|»</string> - <string name="more_keys_for_greater_than">!fixedColumnOrder!3,›|‹,≥|≤,»|«</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">‘,’,‚</string> - <string name="double_quotes">“,”,„</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"><|></string> + <string name="keyspec_greater_than">>|<</string> + <string name="keyspec_less_than_equal">≤|≥</string> + <string name="keyspec_greater_than_equal">≥|≤</string> + <string name="keyspec_left_double_angle_quote">«|»</string> + <string name="keyspec_right_double_angle_quote">»|«</string> + <string name="keyspec_left_single_angle_quote">‹|›</string> + <string name="keyspec_right_single_angle_quote">›|‹</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">₪</string> </resources> diff --git a/tools/make-keyboard-text/res/values/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values/donottranslate-more-keys.xml index 7f1c8038b..8d3d61c72 100644 --- a/tools/make-keyboard-text/res/values/donottranslate-more-keys.xml +++ b/tools/make-keyboard-text/res/values/donottranslate-more-keys.xml @@ -83,8 +83,8 @@ <string name="more_keys_for_currency_dollar">¢,£,€,¥,₱</string> <string name="keylabel_for_currency">$</string> <string name="more_keys_for_currency">$,¢,€,£,¥,₱</string> - <string name="more_keys_for_punctuation">"!fixedColumnOrder!8,;,/,(,),#,!,\\,,\?,&,\\%,+,\",-,:,',\@"</string> - <string name="more_keys_for_tablet_punctuation">"!fixedColumnOrder!7,;,/,(,),#,',\\,,&,\\%,+,\",-,:,\@"</string> + <string name="more_keys_for_punctuation">"!fixedColumnOrder!8,;,/,!text/keyspec_left_parenthesis,!text/keyspec_right_parenthesis,#,!,\\,,\?,&,\\%,+,\",-,:,',\@"</string> + <string name="more_keys_for_tablet_punctuation">"!fixedColumnOrder!7,;,/,!text/keyspec_left_parenthesis,!text/keyspec_right_parenthesis,#,',\\,,&,\\%,+,\",-,:,\@"</string> <!-- U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE --> <string name="keylabel_for_spanish_row2_10">ñ</string> <!-- U+2020: "†" DAGGER @@ -99,18 +99,10 @@ <string name="more_keys_for_bullet">♪,♥,♠,♦,♣</string> <!-- U+00B1: "±" PLUS-MINUS SIGN --> <string name="more_keys_for_plus">±</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,<,{,[</string> - <string name="more_keys_for_right_parenthesis">!fixedColumnOrder!3,>,},]</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,‹,≤,«</string> - <string name="more_keys_for_greater_than">!fixedColumnOrder!3,›,≥,»</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">ⁿ,∅</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"><</string> + <string name="keyspec_greater_than">></string> + <string name="keyspec_less_than_equal">≤</string> + <string name="keyspec_greater_than_equal">≥</string> + <string name="keyspec_left_double_angle_quote">«</string> + <string name="keyspec_right_double_angle_quote">»</string> + <string name="keyspec_left_single_angle_quote">‹</string> + <string name="keyspec_right_single_angle_quote">›</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">‹,›</string> - <string name="single_laqm_raqm_rtl">‹|›,›|‹</string> - <string name="single_raqm_laqm">›,‹</string> - <string name="double_laqm_raqm">«,»</string> - <string name="double_laqm_raqm_rtl">«|»,»|«</string> - <string name="double_raqm_laqm">»,«</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">‚,‘,’</string> <string name="single_9qm_lqm">’,‚,‘</string> <string name="single_9qm_rqm">‘,‚,’</string> + <string name="single_rqm_9qm">‘,’,‚</string> <string name="double_lqm_rqm">„,“,”</string> <string name="double_9qm_lqm">”,„,“</string> <string name="double_9qm_rqm">“,„,”</string> + <string name="double_rqm_9qm">“,”,„</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> diff --git a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/ArrayInitializerFormatter.java b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/ArrayInitializerFormatter.java index d2763e024..48bf8010a 100644 --- a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/ArrayInitializerFormatter.java +++ b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/ArrayInitializerFormatter.java @@ -22,17 +22,22 @@ public class ArrayInitializerFormatter { private final PrintStream mOut; private final int mMaxWidth; private final String mIndent; + // String resource names array; indexed by {@link #CurrentIndex} and + // {@link #mStartIndexOfBuffer}. + private final String[] mResourceNames; private int mCurrentIndex = 0; - private String mFixedElement; + private String mLastElement; private final StringBuilder mBuffer = new StringBuilder(); private int mBufferedLen; - private int mBufferedIndex = Integer.MIN_VALUE; + private int mStartIndexOfBuffer = Integer.MIN_VALUE; - public ArrayInitializerFormatter(final PrintStream out, final int width, final String indent) { + public ArrayInitializerFormatter(final PrintStream out, final int width, final String indent, + final String[] resourceNames) { mOut = out; mMaxWidth = width - indent.length(); mIndent = indent; + mResourceNames = resourceNames; } public int getCurrentIndex() { @@ -44,20 +49,24 @@ public class ArrayInitializerFormatter { return; } final int lastIndex = mCurrentIndex - 1; - if (mBufferedIndex == lastIndex) { - mOut.format("%s/* %d */ %s\n", mIndent, mBufferedIndex, mBuffer); - } else if (mBufferedIndex == lastIndex - 1) { - final String[] elements = mBuffer.toString().split(" "); - mOut.format("%s/* %d */ %s\n" - + "%s/* %d */ %s\n", - mIndent, mBufferedIndex, elements[0], - mIndent, lastIndex, elements[1]); + if (mStartIndexOfBuffer == lastIndex) { + mOut.format("%s/* %s */ %s\n", + mIndent, mResourceNames[mStartIndexOfBuffer], mBuffer); + } else if (mStartIndexOfBuffer == lastIndex - 1) { + final String startElement = mBuffer.toString() + .substring(0, mBuffer.length() - mLastElement.length()) + .trim(); + mOut.format("%s/* %s */ %s\n" + + "%s/* %s */ %s\n", + mIndent, mResourceNames[mStartIndexOfBuffer], startElement, + mIndent, mResourceNames[lastIndex], mLastElement); } else { - mOut.format("%s/* %d~ */\n" + mOut.format("%s/* %s ~ */\n" + "%s%s\n" - + "%s/* ~%d */\n", mIndent, mBufferedIndex, + + "%s/* ~ %s */\n", + mIndent, mResourceNames[mStartIndexOfBuffer], mIndent, mBuffer, - mIndent, lastIndex); + mIndent, mResourceNames[lastIndex]); } mBuffer.setLength(0); mBufferedLen = 0; @@ -66,20 +75,22 @@ public class ArrayInitializerFormatter { public void outCommentLines(final String lines) { flush(); mOut.print(lines); - mFixedElement = null; + mLastElement = null; } public void outElement(final String element) { - if (!element.equals(mFixedElement)) { + if (!element.equals(mLastElement)) { flush(); - mBufferedIndex = mCurrentIndex; + mStartIndexOfBuffer = mCurrentIndex; } final int nextLen = mBufferedLen + " ".length() + element.length(); if (mBufferedLen != 0 && nextLen < mMaxWidth) { + // Element can fit in the current line. mBuffer.append(' '); mBuffer.append(element); mBufferedLen = nextLen; } else { + // Element should be on the next line. if (mBufferedLen != 0) { mBuffer.append('\n'); mBuffer.append(mIndent); @@ -88,6 +99,6 @@ public class ArrayInitializerFormatter { mBufferedLen = element.length(); } mCurrentIndex++; - mFixedElement = element; + mLastElement = element; } } diff --git a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/MoreKeysResources.java b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/MoreKeysResources.java index 97a12d707..872ef19e3 100644 --- a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/MoreKeysResources.java +++ b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/MoreKeysResources.java @@ -25,6 +25,7 @@ import java.io.LineNumberReader; import java.io.PrintStream; import java.util.ArrayList; import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.Locale; import java.util.jar.JarFile; @@ -47,8 +48,19 @@ public class MoreKeysResources { // Language to string resources map. private final HashMap<String, StringResourceMap> mResourcesMap = new HashMap<String, StringResourceMap>(); - // Name to id map. - private final HashMap<String, Integer> mNameToIdMap = new HashMap<String,Integer>(); + // Sorted languages list. The language is taken from string resource directories + // (values-<language>/) or {@link #DEFAULT_LANGUAGE_NAME} for the default string resource + // directory (values/). + private final ArrayList<String> mSortedLanguagesList = new ArrayList<String>(); + // Default string resources map. + private final StringResourceMap mDefaultResourceMap; + // Histogram of string resource names. This is used to sort {@link #mSortedResourceNames}. + private final HashMap<String, Integer> mNameHistogram = new HashMap<String, Integer>(); + // Sorted string resource names array; Descending order of histogram count. + // The string resource name is specified as an attribute "name" in string resource files. + // The string resource can be accessed by specifying name "!text/<name>" + // via {@link KeyboardTextsSet#getText(String)}. + private final String[] mSortedResourceNames; public MoreKeysResources(final JarFile jar) { mJar = jar; @@ -65,6 +77,45 @@ public class MoreKeysResources { close(stream); } } + mDefaultResourceMap = mResourcesMap.get(DEFAULT_LANGUAGE_NAME); + mSortedLanguagesList.addAll(mResourcesMap.keySet()); + Collections.sort(mSortedLanguagesList); + + // Initialize name histogram and names list. + final HashMap<String, Integer> nameHistogram = mNameHistogram; + final ArrayList<String> resourceNamesList = new ArrayList<String>(); + for (final StringResource res : mDefaultResourceMap.getResources()) { + nameHistogram.put(res.mName, 0); // Initialize histogram value. + resourceNamesList.add(res.mName); + } + // Make name histogram. + for (final String language : mResourcesMap.keySet()) { + final StringResourceMap resMap = mResourcesMap.get(language); + if (resMap == mDefaultResourceMap) continue; + for (final StringResource res : resMap.getResources()) { + if (!mDefaultResourceMap.contains(res.mName)) { + throw new RuntimeException(res.mName + " in " + language + + " doesn't have default resource"); + } + final int histogramValue = nameHistogram.get(res.mName); + nameHistogram.put(res.mName, histogramValue + 1); + } + } + // Sort names list. + Collections.sort(resourceNamesList, new Comparator<String>() { + @Override + public int compare(final String leftName, final String rightName) { + final int leftCount = nameHistogram.get(leftName); + final int rightCount = nameHistogram.get(rightName); + // Descending order of histogram count. + if (leftCount > rightCount) return -1; + if (leftCount < rightCount) return 1; + // TODO: Add further criteria to order the same histogram value names to be able to + // minimize footprints of string resources arrays. + return 0; + } + }); + mSortedResourceNames = resourceNamesList.toArray(new String[resourceNamesList.size()]); } private static String getLanguageFromResDir(final String dirName) { @@ -132,19 +183,17 @@ public class MoreKeysResources { } private void dumpNames(final PrintStream out) { - final StringResourceMap defaultResMap = mResourcesMap.get(DEFAULT_LANGUAGE_NAME); - int id = 0; - for (final StringResource res : defaultResMap.getResources()) { - out.format(" /* %2d */ \"%s\",\n", id, res.mName); - mNameToIdMap.put(res.mName, id); - id++; + final int namesCount = mSortedResourceNames.length; + for (int index = 0; index < namesCount; index++) { + final String name = mSortedResourceNames[index]; + final int histogramValue = mNameHistogram.get(name); + out.format(" /* %3d:%2d */ \"%s\",\n", index, histogramValue, name); } } private void dumpDefaultTexts(final PrintStream out) { - final StringResourceMap defaultResMap = mResourcesMap.get(DEFAULT_LANGUAGE_NAME); - final int outputArraySize = dumpTextsInternal(out, defaultResMap, defaultResMap); - defaultResMap.setOutputArraySize(outputArraySize); + final int outputArraySize = dumpTextsInternal(out, mDefaultResourceMap); + mDefaultResourceMap.setOutputArraySize(outputArraySize); } private static String getArrayNameForLanguage(final String language) { @@ -152,35 +201,20 @@ public class MoreKeysResources { } private void dumpTexts(final PrintStream out) { - final StringResourceMap defaultResMap = mResourcesMap.get(DEFAULT_LANGUAGE_NAME); - final ArrayList<String> allLanguages = new ArrayList<String>(); - allLanguages.addAll(mResourcesMap.keySet()); - Collections.sort(allLanguages); - for (final String language : allLanguages) { - if (language.equals(DEFAULT_LANGUAGE_NAME)) { - continue; - } + for (final String language : mSortedLanguagesList) { + final StringResourceMap resMap = mResourcesMap.get(language); + if (resMap == mDefaultResourceMap) continue; out.format(" /* Language %s: %s */\n", language, getLanguageDisplayName(language)); out.format(" private static final String[] " + getArrayNameForLanguage(language) + " = {\n"); - final StringResourceMap resMap = mResourcesMap.get(language); - for (final StringResource res : resMap.getResources()) { - if (!defaultResMap.contains(res.mName)) { - throw new RuntimeException(res.mName + " in " + language - + " doesn't have default resource"); - } - } - final int outputArraySize = dumpTextsInternal(out, resMap, defaultResMap); + final int outputArraySize = dumpTextsInternal(out, resMap); resMap.setOutputArraySize(outputArraySize); out.format(" };\n\n"); } } private void dumpLanguageMap(final PrintStream out) { - final ArrayList<String> allLanguages = new ArrayList<String>(); - allLanguages.addAll(mResourcesMap.keySet()); - Collections.sort(allLanguages); - for (final String language : allLanguages) { + for (final String language : mSortedLanguagesList) { final StringResourceMap resMap = mResourcesMap.get(language); final Locale locale = LocaleUtils.constructLocaleFromString(language); final String languageKeyToDump = locale.getCountry().isEmpty() @@ -201,15 +235,17 @@ public class MoreKeysResources { return locale.getDisplayName(Locale.ENGLISH); } - private static int dumpTextsInternal(final PrintStream out, final StringResourceMap resMap, - final StringResourceMap defaultResMap) { + private int dumpTextsInternal(final PrintStream out, final StringResourceMap resMap) { final ArrayInitializerFormatter formatter = - new ArrayInitializerFormatter(out, 100, " "); + new ArrayInitializerFormatter(out, 100, " ", mSortedResourceNames); int outputArraySize = 0; boolean successiveNull = false; - for (final StringResource defaultRes : defaultResMap.getResources()) { - if (resMap.contains(defaultRes.mName)) { - final StringResource res = resMap.get(defaultRes.mName); + final int namesCount = mSortedResourceNames.length; + for (int index = 0; index < namesCount; index++) { + final String name = mSortedResourceNames[index]; + final StringResource res = resMap.get(name); + if (res != null) { + // TODO: Check whether the resource value is equal to the default. if (res.mComment != null) { formatter.outCommentLines(addPrefix(" // ", res. mComment)); } @@ -270,7 +306,7 @@ public class MoreKeysResources { return t; } - private static void close(Closeable stream) { + private static void close(final Closeable stream) { try { if (stream != null) { stream.close(); |