From ed509695a42455874aa9c047ed4343f636ef527b Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Mon, 10 Feb 2014 18:21:24 +0900 Subject: [PATCH] Get nicer output of make-keyboard-text Change-Id: I6d30127aac2198d55b1335002f7a66b4aaebf82d --- .../keyboard/internal/KeyboardTextsTable.java | 109 +++++++++--------- .../keyboard/internal/KeyboardTextsTable.tmpl | 1 + .../tools/ArrayInitializerFormatter.java | 10 +- .../keyboard/tools/MoreKeysResources.java | 30 +++-- .../keyboard/tools/StringResourceMap.java | 14 +++ 5 files changed, 97 insertions(+), 67 deletions(-) diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java index 14991f587..e8e9743f4 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java +++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java @@ -3476,60 +3476,61 @@ public final class KeyboardTextsTable { // TODO: Use the language + "_" + region representation for the locale string key. // Currently we are dropping the region from the key. private static final Object[] LANGUAGES_AND_TEXTS = { - "DEFAULT", LANGUAGE_DEFAULT, /* default */ - "af", LANGUAGE_af, /* Afrikaans */ - "ar", LANGUAGE_ar, /* Arabic */ - "az" /* "az_AZ" */, LANGUAGE_az_AZ, /* Azerbaijani (Azerbaijan) */ - "be" /* "be_BY" */, LANGUAGE_be_BY, /* Belarusian (Belarus) */ - "bg", LANGUAGE_bg, /* Bulgarian */ - "ca", LANGUAGE_ca, /* Catalan */ - "cs", LANGUAGE_cs, /* Czech */ - "da", LANGUAGE_da, /* Danish */ - "de", LANGUAGE_de, /* German */ - "el", LANGUAGE_el, /* Greek */ - "en", LANGUAGE_en, /* English */ - "eo", LANGUAGE_eo, /* Esperanto */ - "es", LANGUAGE_es, /* Spanish */ - "et" /* "et_EE" */, LANGUAGE_et_EE, /* Estonian (Estonia) */ - "fa", LANGUAGE_fa, /* Persian */ - "fi", LANGUAGE_fi, /* Finnish */ - "fr", LANGUAGE_fr, /* French */ - "hi", LANGUAGE_hi, /* Hindi */ - "hr", LANGUAGE_hr, /* Croatian */ - "hu", LANGUAGE_hu, /* Hungarian */ - "hy" /* "hy_AM" */, LANGUAGE_hy_AM, /* Armenian (Armenia) */ - "is", LANGUAGE_is, /* Icelandic */ - "it", LANGUAGE_it, /* Italian */ - "iw", LANGUAGE_iw, /* Hebrew */ - "ka" /* "ka_GE" */, LANGUAGE_ka_GE, /* Georgian (Georgia) */ - "kk", LANGUAGE_kk, /* Kazakh */ - "km" /* "km_KH" */, LANGUAGE_km_KH, /* Khmer (Cambodia) */ - "ky", LANGUAGE_ky, /* Kirghiz */ - "lo" /* "lo_LA" */, LANGUAGE_lo_LA, /* Lao (Laos) */ - "lt", LANGUAGE_lt, /* Lithuanian */ - "lv", LANGUAGE_lv, /* Latvian */ - "mk", LANGUAGE_mk, /* Macedonian */ - "mn" /* "mn_MN" */, LANGUAGE_mn_MN, /* Mongolian (Mongolia) */ - "nb", LANGUAGE_nb, /* Norwegian Bokmål */ - "ne" /* "ne_NP" */, LANGUAGE_ne_NP, /* Nepali (Nepal) */ - "nl", LANGUAGE_nl, /* Dutch */ - "pl", LANGUAGE_pl, /* Polish */ - "pt", LANGUAGE_pt, /* Portuguese */ - "rm", LANGUAGE_rm, /* Raeto-Romance */ - "ro", LANGUAGE_ro, /* Romanian */ - "ru", LANGUAGE_ru, /* Russian */ - "sk", LANGUAGE_sk, /* Slovak */ - "sl", LANGUAGE_sl, /* Slovenian */ - "sr", LANGUAGE_sr, /* Serbian */ - "sv", LANGUAGE_sv, /* Swedish */ - "sw", LANGUAGE_sw, /* Swahili */ - "th", LANGUAGE_th, /* Thai */ - "tl", LANGUAGE_tl, /* Tagalog */ - "tr", LANGUAGE_tr, /* Turkish */ - "uk", LANGUAGE_uk, /* Ukrainian */ - "vi", LANGUAGE_vi, /* Vietnamese */ - "zu", LANGUAGE_zu, /* Zulu */ - "zz", LANGUAGE_zz, /* Alphabet */ + // "locale", TEXT_ARRAY, /* numberOfNonNullText/lengthOf_TEXT_ARRAY localeName */ + "DEFAULT", LANGUAGE_DEFAULT, /* 156/156 default */ + "af", LANGUAGE_af, /* 8/ 9 Afrikaans */ + "ar", LANGUAGE_ar, /* 48/119 Arabic */ + "az", LANGUAGE_az_AZ, /* 8/ 16 Azerbaijani (Azerbaijan) */ + "be", LANGUAGE_be_BY, /* 10/ 54 Belarusian (Belarus) */ + "bg", LANGUAGE_bg, /* 2/ 54 Bulgarian */ + "ca", LANGUAGE_ca, /* 11/126 Catalan */ + "cs", LANGUAGE_cs, /* 17/ 56 Czech */ + "da", LANGUAGE_da, /* 19/ 56 Danish */ + "de", LANGUAGE_de, /* 16/ 56 German */ + "el", LANGUAGE_el, /* 1/ 52 Greek */ + "en", LANGUAGE_en, /* 8/ 8 English */ + "eo", LANGUAGE_eo, /* 26/126 Esperanto */ + "es", LANGUAGE_es, /* 8/ 60 Spanish */ + "et", LANGUAGE_et_EE, /* 22/ 54 Estonian (Estonia) */ + "fa", LANGUAGE_fa, /* 49/119 Persian */ + "fi", LANGUAGE_fi, /* 10/ 25 Finnish */ + "fr", LANGUAGE_fr, /* 13/ 51 French */ + "hi", LANGUAGE_hi, /* 24/ 91 Hindi */ + "hr", LANGUAGE_hr, /* 9/ 56 Croatian */ + "hu", LANGUAGE_hu, /* 9/ 56 Hungarian */ + "hy", LANGUAGE_hy_AM, /* 7/117 Armenian (Armenia) */ + "is", LANGUAGE_is, /* 13/ 54 Icelandic */ + "it", LANGUAGE_it, /* 5/ 5 Italian */ + "iw", LANGUAGE_iw, /* 14/ 68 Hebrew */ + "ka", LANGUAGE_ka_GE, /* 3/ 54 Georgian (Georgia) */ + "kk", LANGUAGE_kk, /* 16/ 52 Kazakh */ + "km", LANGUAGE_km_KH, /* 2/ 57 Khmer (Cambodia) */ + "ky", LANGUAGE_ky, /* 11/ 52 Kirghiz */ + "lo", LANGUAGE_lo_LA, /* 2/ 58 Lao (Laos) */ + "lt", LANGUAGE_lt, /* 18/ 54 Lithuanian */ + "lv", LANGUAGE_lv, /* 18/ 54 Latvian */ + "mk", LANGUAGE_mk, /* 9/ 54 Macedonian */ + "mn", LANGUAGE_mn_MN, /* 2/ 58 Mongolian (Mongolia) */ + "nb", LANGUAGE_nb, /* 11/ 54 Norwegian Bokmål */ + "ne", LANGUAGE_ne_NP, /* 24/ 91 Nepali (Nepal) */ + "nl", LANGUAGE_nl, /* 9/ 54 Dutch */ + "pl", LANGUAGE_pl, /* 10/ 54 Polish */ + "pt", LANGUAGE_pt, /* 6/ 8 Portuguese */ + "rm", LANGUAGE_rm, /* 1/ 4 Raeto-Romance */ + "ro", LANGUAGE_ro, /* 6/ 54 Romanian */ + "ru", LANGUAGE_ru, /* 10/ 54 Russian */ + "sk", LANGUAGE_sk, /* 20/ 56 Slovak */ + "sl", LANGUAGE_sl, /* 8/ 56 Slovenian */ + "sr", LANGUAGE_sr, /* 11/ 56 Serbian */ + "sv", LANGUAGE_sv, /* 21/ 56 Swedish */ + "sw", LANGUAGE_sw, /* 9/ 16 Swahili */ + "th", LANGUAGE_th, /* 2/ 58 Thai */ + "tl", LANGUAGE_tl, /* 7/ 8 Tagalog */ + "tr", LANGUAGE_tr, /* 7/ 16 Turkish */ + "uk", LANGUAGE_uk, /* 12/ 58 Ukrainian */ + "vi", LANGUAGE_vi, /* 8/ 58 Vietnamese */ + "zu", LANGUAGE_zu, /* 8/ 8 Zulu */ + "zz", LANGUAGE_zz, /* 19/ 20 Alphabet */ }; static { 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 d95de2923..eadeb1e31 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 @@ -77,6 +77,7 @@ public final class KeyboardTextsTable { // TODO: Use the language + "_" + region representation for the locale string key. // Currently we are dropping the region from the key. private static final Object[] LANGUAGES_AND_TEXTS = { + // "locale", TEXT_ARRAY, /* numberOfNonNullText/lengthOf_TEXT_ARRAY localeName */ /* @LANGUAGES_AND_TEXTS@ */ }; 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 331003e67..d2763e024 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 @@ -29,12 +29,16 @@ public class ArrayInitializerFormatter { private int mBufferedLen; private int mBufferedIndex = Integer.MIN_VALUE; - public ArrayInitializerFormatter(PrintStream out, int width, String indent) { + public ArrayInitializerFormatter(final PrintStream out, final int width, final String indent) { mOut = out; mMaxWidth = width - indent.length(); mIndent = indent; } + public int getCurrentIndex() { + return mCurrentIndex; + } + public void flush() { if (mBuffer.length() == 0) { return; @@ -59,13 +63,13 @@ public class ArrayInitializerFormatter { mBufferedLen = 0; } - public void outCommentLines(String lines) { + public void outCommentLines(final String lines) { flush(); mOut.print(lines); mFixedElement = null; } - public void outElement(String element) { + public void outElement(final String element) { if (!element.equals(mFixedElement)) { flush(); mBufferedIndex = mCurrentIndex; 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 dddb3d6c8..97a12d707 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 @@ -38,7 +38,6 @@ public class MoreKeysResources { private static final String MARK_TEXTS = "@TEXTS@"; private static final String MARK_LANGUAGES_AND_TEXTS = "@LANGUAGES_AND_TEXTS@"; private static final String DEFAULT_LANGUAGE_NAME = "DEFAULT"; - private static final String ARRAY_NAME_FOR_LANGUAGE = "LANGUAGE_%s"; private static final String EMPTY_STRING_VAR = "EMPTY"; private static final String NO_LANGUAGE_CODE = "zz"; @@ -144,7 +143,12 @@ public class MoreKeysResources { private void dumpDefaultTexts(final PrintStream out) { final StringResourceMap defaultResMap = mResourcesMap.get(DEFAULT_LANGUAGE_NAME); - dumpTextsInternal(out, defaultResMap, defaultResMap); + final int outputArraySize = dumpTextsInternal(out, defaultResMap, defaultResMap); + defaultResMap.setOutputArraySize(outputArraySize); + } + + private static String getArrayNameForLanguage(final String language) { + return "LANGUAGE_" + language; } private void dumpTexts(final PrintStream out) { @@ -157,8 +161,8 @@ public class MoreKeysResources { continue; } out.format(" /* Language %s: %s */\n", language, getLanguageDisplayName(language)); - out.format(" private static final String[] " + ARRAY_NAME_FOR_LANGUAGE + " = {\n", - 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)) { @@ -166,7 +170,8 @@ public class MoreKeysResources { + " doesn't have default resource"); } } - dumpTextsInternal(out, resMap, defaultResMap); + final int outputArraySize = dumpTextsInternal(out, resMap, defaultResMap); + resMap.setOutputArraySize(outputArraySize); out.format(" };\n\n"); } } @@ -176,13 +181,15 @@ public class MoreKeysResources { allLanguages.addAll(mResourcesMap.keySet()); Collections.sort(allLanguages); for (final String language : allLanguages) { + final StringResourceMap resMap = mResourcesMap.get(language); final Locale locale = LocaleUtils.constructLocaleFromString(language); - // If we use a different key, dump the original as comment for now. final String languageKeyToDump = locale.getCountry().isEmpty() ? String.format("\"%s\"", language) - : String.format("\"%s\" /* \"%s\" */", locale.getLanguage(), language); - out.format(" %s, " + ARRAY_NAME_FOR_LANGUAGE + ", /* %s */\n", - languageKeyToDump, language, getLanguageDisplayName(language)); + : String.format("\"%s\"", locale.getLanguage()); + out.format(" %s, %-15s /* %3d/%3d %s */\n", + languageKeyToDump, getArrayNameForLanguage(language) + ",", + resMap.getResources().size(), resMap.getOutputArraySize(), + getLanguageDisplayName(language)); } } @@ -194,10 +201,11 @@ public class MoreKeysResources { return locale.getDisplayName(Locale.ENGLISH); } - private static void dumpTextsInternal(final PrintStream out, final StringResourceMap resMap, + private static int dumpTextsInternal(final PrintStream out, final StringResourceMap resMap, final StringResourceMap defaultResMap) { final ArrayInitializerFormatter formatter = new ArrayInitializerFormatter(out, 100, " "); + int outputArraySize = 0; boolean successiveNull = false; for (final StringResource defaultRes : defaultResMap.getResources()) { if (resMap.contains(defaultRes.mName)) { @@ -212,6 +220,7 @@ public class MoreKeysResources { formatter.outElement(String.format("\"%s\",", escaped)); } successiveNull = false; + outputArraySize = formatter.getCurrentIndex(); } else { formatter.outElement("null,"); successiveNull = true; @@ -220,6 +229,7 @@ public class MoreKeysResources { if (!successiveNull) { formatter.flush(); } + return outputArraySize; } private static String addPrefix(final String prefix, final String lines) { diff --git a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/StringResourceMap.java b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/StringResourceMap.java index cc7ff6a9c..4eff8a24b 100644 --- a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/StringResourceMap.java +++ b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/StringResourceMap.java @@ -39,6 +39,12 @@ public class StringResourceMap { // Name to string resource map. private final Map mResourcesMap; + // The length of String[] that is created from this {@link StringResourceMap}. The length is + // calculated in {@link MoreKeysResources#dumpTexts(OutputStream)} and recorded by + // {@link #setOutputArraySize(int)}. The recorded length is used as a part of comment by + // {@link MoreKeysResources#dumpLanguageMap(OutputStream)} via {@link #getOutputArraySize()}. + private int mOutputArraySize; + public StringResourceMap(final InputStream is) { final StringResourceHandler handler = new StringResourceHandler(); final SAXParserFactory factory = SAXParserFactory.newInstance(); @@ -77,6 +83,14 @@ public class StringResourceMap { return mResourcesMap.get(name); } + public void setOutputArraySize(final int arraySize) { + mOutputArraySize = arraySize; + } + + public int getOutputArraySize() { + return mOutputArraySize; + } + static class StringResourceHandler extends DefaultHandler2 { private static final String TAG_RESOURCES = "resources"; private static final String TAG_STRING = "string";