diff options
19 files changed, 133 insertions, 166 deletions
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java index cace069c4..387ed3945 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java +++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java @@ -101,10 +101,10 @@ public final class KeyboardTextsTable { /* 19: 9 */ "keylabel_for_currency", /* 20: 8 */ "more_keys_for_r", /* 21: 6 */ "more_keys_for_k", - /* 22: 6 */ "keylabel_for_nordic_row1_11", - /* 23: 6 */ "keylabel_for_nordic_row2_10", - /* 24: 6 */ "keylabel_for_nordic_row2_11", - /* 25: 6 */ "more_keys_for_cyrillic_ie", + /* 22: 6 */ "more_keys_for_cyrillic_ie", + /* 23: 5 */ "keylabel_for_nordic_row1_11", + /* 24: 5 */ "keylabel_for_nordic_row2_10", + /* 25: 5 */ "keylabel_for_nordic_row2_11", /* 26: 5 */ "more_keys_for_nordic_row2_10", /* 27: 5 */ "keylabel_for_east_slavic_row1_9", /* 28: 5 */ "keylabel_for_east_slavic_row2_2", @@ -714,11 +714,13 @@ public final class KeyboardTextsTable { // U+0412: "В" CYRILLIC CAPITAL LETTER VE /* label_to_alpha_key */ "\u0410\u0411\u0412", /* more_keys_for_y ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ keylabel_for_nordic_row2_11 */ + null, null, null, null, null, null, null, null, null, null, null, + /* ~ more_keys_for_k */ // U+0451: "ё" CYRILLIC SMALL LETTER IO /* more_keys_for_cyrillic_ie */ "\u0451", - /* more_keys_for_nordic_row2_10 */ null, + /* keylabel_for_nordic_row1_11 ~ */ + null, null, null, null, + /* ~ more_keys_for_nordic_row2_10 */ // U+045E: "ў" CYRILLIC SMALL LETTER SHORT U /* keylabel_for_east_slavic_row1_9 */ "\u045E", // U+044B: "ы" CYRILLIC SMALL LETTER YERU @@ -959,15 +961,14 @@ public final class KeyboardTextsTable { /* single_angle_quotes */ "!text/single_raqm_laqm", /* double_angle_quotes */ "!text/double_raqm_laqm", /* keylabel_for_currency ~ */ - null, null, null, - /* ~ more_keys_for_k */ + null, null, null, null, + /* ~ more_keys_for_cyrillic_ie */ // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE /* keylabel_for_nordic_row1_11 */ "\u00E5", // U+00E6: "æ" LATIN SMALL LETTER AE /* keylabel_for_nordic_row2_10 */ "\u00E6", // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE /* keylabel_for_nordic_row2_11 */ "\u00F8", - /* more_keys_for_cyrillic_ie */ null, // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS /* more_keys_for_nordic_row2_10 */ "\u00E4", /* keylabel_for_east_slavic_row1_9 ~ */ @@ -1220,7 +1221,7 @@ public final class KeyboardTextsTable { // U+0137: "ķ" LATIN SMALL LETTER K WITH CEDILLA // U+0138: "ĸ" LATIN SMALL LETTER KRA /* more_keys_for_k */ "\u0137,\u0138", - /* keylabel_for_nordic_row1_11 ~ */ + /* more_keys_for_cyrillic_ie ~ */ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, @@ -1382,8 +1383,7 @@ public final class KeyboardTextsTable { // U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - /* more_keys_for_n */ "\u0146,\u00F1,\u0144,\u0144", + /* more_keys_for_n */ "\u0146,\u00F1,\u0144", /* label_to_alpha_key */ null, // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS @@ -1414,13 +1414,13 @@ public final class KeyboardTextsTable { /* more_keys_for_r */ "\u0157,\u0159,\u0155", // U+0137: "ķ" LATIN SMALL LETTER K WITH CEDILLA /* more_keys_for_k */ "\u0137", + /* more_keys_for_cyrillic_ie */ null, // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS /* keylabel_for_nordic_row1_11 */ "\u00FC", // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS /* keylabel_for_nordic_row2_10 */ "\u00F6", // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS /* keylabel_for_nordic_row2_11 */ "\u00E4", - /* more_keys_for_cyrillic_ie */ null, // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE /* more_keys_for_nordic_row2_10 */ "\u00F5", }; @@ -1605,15 +1605,14 @@ public final class KeyboardTextsTable { // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE /* more_keys_for_z */ "\u017E,\u017A,\u017C", /* more_keys_for_t ~ */ - null, null, null, null, null, null, null, null, - /* ~ more_keys_for_k */ + null, null, null, null, null, null, null, null, null, + /* ~ more_keys_for_cyrillic_ie */ // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE /* keylabel_for_nordic_row1_11 */ "\u00E5", // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS /* keylabel_for_nordic_row2_10 */ "\u00F6", // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS /* keylabel_for_nordic_row2_11 */ "\u00E4", - /* more_keys_for_cyrillic_ie */ null, // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE /* more_keys_for_nordic_row2_10 */ "\u00F8", /* keylabel_for_east_slavic_row1_9 ~ */ @@ -1943,15 +1942,6 @@ public final class KeyboardTextsTable { /* more_keys_for_z */ null, // U+00FE: "þ" LATIN SMALL LETTER THORN /* more_keys_for_t */ "\u00FE", - /* more_keys_for_l ~ */ - null, null, null, null, null, null, null, - /* ~ more_keys_for_k */ - // U+00F0: "ð" LATIN SMALL LETTER ETH - /* keylabel_for_nordic_row1_11 */ "\u00F0", - // U+00E6: "æ" LATIN SMALL LETTER AE - /* keylabel_for_nordic_row2_10 */ "\u00E6", - // U+00FE: "þ" LATIN SMALL LETTER THORN - /* keylabel_for_nordic_row2_11 */ "\u00FE", }; /* Language it: Italian */ @@ -2086,11 +2076,13 @@ public final class KeyboardTextsTable { // U+0412: "В" CYRILLIC CAPITAL LETTER VE /* label_to_alpha_key */ "\u0410\u0411\u0412", /* more_keys_for_y ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ keylabel_for_nordic_row2_11 */ + null, null, null, null, null, null, null, null, null, null, null, + /* ~ more_keys_for_k */ // U+0451: "ё" CYRILLIC SMALL LETTER IO /* more_keys_for_cyrillic_ie */ "\u0451", - /* more_keys_for_nordic_row2_10 */ null, + /* keylabel_for_nordic_row1_11 ~ */ + null, null, null, null, + /* ~ more_keys_for_nordic_row2_10 */ // U+0449: "щ" CYRILLIC SMALL LETTER SHCHA /* keylabel_for_east_slavic_row1_9 */ "\u0449", // U+044B: "ы" CYRILLIC SMALL LETTER YERU @@ -2163,11 +2155,13 @@ public final class KeyboardTextsTable { // U+0412: "В" CYRILLIC CAPITAL LETTER VE /* label_to_alpha_key */ "\u0410\u0411\u0412", /* more_keys_for_y ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ keylabel_for_nordic_row2_11 */ + null, null, null, null, null, null, null, null, null, null, null, + /* ~ more_keys_for_k */ // U+0451: "ё" CYRILLIC SMALL LETTER IO /* more_keys_for_cyrillic_ie */ "\u0451", - /* more_keys_for_nordic_row2_10 */ null, + /* keylabel_for_nordic_row1_11 ~ */ + null, null, null, null, + /* ~ more_keys_for_nordic_row2_10 */ // U+0449: "щ" CYRILLIC SMALL LETTER SHCHA /* keylabel_for_east_slavic_row1_9 */ "\u0449", // U+044B: "ы" CYRILLIC SMALL LETTER YERU @@ -2272,8 +2266,7 @@ public final class KeyboardTextsTable { // U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - /* more_keys_for_n */ "\u0146,\u00F1,\u0144,\u0144", + /* more_keys_for_n */ "\u0146,\u00F1,\u0144", /* label_to_alpha_key */ null, // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS @@ -2367,8 +2360,7 @@ public final class KeyboardTextsTable { // U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - /* more_keys_for_n */ "\u0146,\u00F1,\u0144,\u0144", + /* more_keys_for_n */ "\u0146,\u00F1,\u0144", /* label_to_alpha_key */ null, // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS @@ -2417,15 +2409,15 @@ public final class KeyboardTextsTable { // U+0412: "В" CYRILLIC CAPITAL LETTER VE /* label_to_alpha_key */ "\u0410\u0411\u0412", /* more_keys_for_y ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ keylabel_for_nordic_row2_11 */ + null, null, null, null, null, null, null, null, null, null, null, + /* ~ more_keys_for_k */ // U+0450: "ѐ" CYRILLIC SMALL LETTER IE WITH GRAVE /* more_keys_for_cyrillic_ie */ "\u0450", - /* more_keys_for_nordic_row2_10 ~ */ + /* keylabel_for_nordic_row1_11 ~ */ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, null, /* ~ more_keys_for_cyrillic_o */ // U+0455: "ѕ" CYRILLIC SMALL LETTER DZE /* keylabel_for_south_slavic_row1_6 */ "\u0455", @@ -2492,14 +2484,14 @@ public final class KeyboardTextsTable { /* single_quotes */ "!text/single_9qm_rqm", /* more_keys_for_c ~ */ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ more_keys_for_k */ + null, + /* ~ more_keys_for_cyrillic_ie */ // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE /* keylabel_for_nordic_row1_11 */ "\u00E5", // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE /* keylabel_for_nordic_row2_10 */ "\u00F8", // U+00E6: "æ" LATIN SMALL LETTER AE /* keylabel_for_nordic_row2_11 */ "\u00E6", - /* more_keys_for_cyrillic_ie */ null, // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS /* more_keys_for_nordic_row2_10 */ "\u00F6", /* keylabel_for_east_slavic_row1_9 ~ */ @@ -2790,11 +2782,13 @@ public final class KeyboardTextsTable { // U+0412: "В" CYRILLIC CAPITAL LETTER VE /* label_to_alpha_key */ "\u0410\u0411\u0412", /* more_keys_for_y ~ */ - null, null, null, null, null, null, null, null, null, null, null, null, null, null, - /* ~ keylabel_for_nordic_row2_11 */ + null, null, null, null, null, null, null, null, null, null, null, + /* ~ more_keys_for_k */ // U+0451: "ё" CYRILLIC SMALL LETTER IO /* more_keys_for_cyrillic_ie */ "\u0451", - /* more_keys_for_nordic_row2_10 */ null, + /* keylabel_for_nordic_row1_11 ~ */ + null, null, null, null, + /* ~ more_keys_for_nordic_row2_10 */ // U+0449: "щ" CYRILLIC SMALL LETTER SHCHA /* keylabel_for_east_slavic_row1_9 */ "\u0449", // U+044B: "ы" CYRILLIC SMALL LETTER YERU @@ -2869,8 +2863,7 @@ public final class KeyboardTextsTable { // U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - /* more_keys_for_n */ "\u0148,\u0146,\u00F1,\u0144,\u0144", + /* more_keys_for_n */ "\u0148,\u0146,\u00F1,\u0144", /* label_to_alpha_key */ null, // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS @@ -2951,15 +2944,15 @@ public final class KeyboardTextsTable { /* single_angle_quotes */ "!text/single_raqm_laqm", /* double_angle_quotes */ "!text/double_raqm_laqm", /* keylabel_for_currency ~ */ - null, null, null, null, null, null, - /* ~ keylabel_for_nordic_row2_11 */ + null, null, null, + /* ~ more_keys_for_k */ // U+0450: "ѐ" CYRILLIC SMALL LETTER IE WITH GRAVE /* more_keys_for_cyrillic_ie */ "\u0450", - /* more_keys_for_nordic_row2_10 ~ */ + /* keylabel_for_nordic_row1_11 ~ */ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, null, null, null, /* ~ more_keys_for_cyrillic_o */ // TODO: Move these to sr-Latn once we can handle IETF language tag with script name specified. // BEGIN: More keys definitions for Serbian (Latin) @@ -3040,8 +3033,7 @@ public final class KeyboardTextsTable { /* label_to_alpha_key */ null, // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - /* more_keys_for_y */ "\u00FD,\u00FF,\u00FC", + /* more_keys_for_y */ "\u00FD,\u00FF", // U+00F0: "ð" LATIN SMALL LETTER ETH // U+010F: "ď" LATIN SMALL LETTER D WITH CARON /* more_keys_for_d */ "\u00F0,\u010F", @@ -3061,13 +3053,13 @@ public final class KeyboardTextsTable { // U+0159: "ř" LATIN SMALL LETTER R WITH CARON /* more_keys_for_r */ "\u0159", /* more_keys_for_k */ null, + /* more_keys_for_cyrillic_ie */ null, // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE /* keylabel_for_nordic_row1_11 */ "\u00E5", // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS /* keylabel_for_nordic_row2_10 */ "\u00F6", // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS /* keylabel_for_nordic_row2_11 */ "\u00E4", - /* more_keys_for_cyrillic_ie */ null, // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE // U+0153: "œ" LATIN SMALL LIGATURE OE /* more_keys_for_nordic_row2_10 */ "\u00F8,\u0153", @@ -3443,7 +3435,7 @@ public final class KeyboardTextsTable { // U+0103: "ă" LATIN SMALL LETTER A WITH BREVE // U+0105: "ą" LATIN SMALL LETTER A WITH OGONEK // U+00AA: "ª" FEMININE ORDINAL INDICATOR - /* more_keys_for_a */ "\u00E0,\u00E1,\u00E2,\u00E3,\u00E4,\u00E5,\u00E6,\u00E3,\u00E5,\u0101,\u0103,\u0105,\u00AA", + /* more_keys_for_a */ "\u00E0,\u00E1,\u00E2,\u00E3,\u00E4,\u00E5,\u00E6,\u0101,\u0103,\u0105,\u00AA", // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX @@ -3550,7 +3542,7 @@ public final class KeyboardTextsTable { // U+0137: "ķ" LATIN SMALL LETTER K WITH CEDILLA // U+0138: "ĸ" LATIN SMALL LETTER KRA /* more_keys_for_k */ "\u0137,\u0138", - /* keylabel_for_nordic_row1_11 ~ */ + /* more_keys_for_cyrillic_ie ~ */ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, @@ -3595,7 +3587,7 @@ public final class KeyboardTextsTable { "hr", LANGUAGE_hr, /* 9/ 19 Croatian */ "hu", LANGUAGE_hu, /* 9/ 19 Hungarian */ "hy", LANGUAGE_hy_AM, /* 8/122 Armenian (Armenia) */ - "is", LANGUAGE_is, /* 13/ 25 Icelandic */ + "is", LANGUAGE_is, /* 10/ 15 Icelandic */ "it", LANGUAGE_it, /* 5/ 5 Italian */ "iw", LANGUAGE_iw, /* 20/117 Hebrew */ "ka", LANGUAGE_ka_GE, /* 3/ 11 Georgian (Georgia) */ diff --git a/native/jni/src/suggest/core/dicnode/dic_node.h b/native/jni/src/suggest/core/dicnode/dic_node.h index b812f8ff4..65dad5677 100644 --- a/native/jni/src/suggest/core/dicnode/dic_node.h +++ b/native/jni/src/suggest/core/dicnode/dic_node.h @@ -36,7 +36,7 @@ #define DUMP_WORD_AND_SCORE(header) \ do { char charBuf[50]; char prevWordCharBuf[50]; \ INTS_TO_CHARS(getOutputWordBuf(), getNodeCodePointCount(), charBuf, NELEMS(charBuf)); \ - INTS_TO_CHARS(mDicNodeState.mDicNodeStatePrevWord.mPrevWord, \ + INTS_TO_CHARS(mDicNodeState.mDicNodeStatePrevWord.getPrevWordBuf(), \ mDicNodeState.mDicNodeStatePrevWord.getPrevWordLength(), prevWordCharBuf, \ NELEMS(prevWordCharBuf)); \ AKLOGI("#%8s, %5f, %5f, %5f, %5f, %s, %s, %d, %5f,", header, \ @@ -97,7 +97,7 @@ class DicNode { DicNode(const DicNode &dicNode); DicNode &operator=(const DicNode &dicNode); - virtual ~DicNode() {} + ~DicNode() {} // Init for copy void initByCopy(const DicNode *const dicNode) { @@ -130,22 +130,9 @@ class DicNode { NOT_A_PROBABILITY /* probability */, false /* isTerminal */, true /* hasChildren */, false /* isBlacklistedOrNotAWord */, 0 /* depth */, 0 /* terminalDepth */); - // TODO: Move to dicNodeState? - mDicNodeState.mDicNodeStateOutput.init(); // reset for next word - mDicNodeState.mDicNodeStateInput.init( - &dicNode->mDicNodeState.mDicNodeStateInput, true /* resetTerminalDiffCost */); - mDicNodeState.mDicNodeStateScoring.init( - &dicNode->mDicNodeState.mDicNodeStateScoring); - mDicNodeState.mDicNodeStatePrevWord.init( - dicNode->mDicNodeState.mDicNodeStatePrevWord.getPrevWordCount() + 1, - dicNode->mDicNodeProperties.getProbability(), + mDicNodeState.initAsRootWithPreviousWord(&dicNode->mDicNodeState, dicNode->mDicNodeProperties.getPtNodePos(), - dicNode->mDicNodeState.mDicNodeStatePrevWord.mPrevWord, - dicNode->mDicNodeState.mDicNodeStatePrevWord.getPrevWordLength(), - dicNode->getOutputWordBuf(), - dicNode->mDicNodeProperties.getDepth(), - dicNode->mDicNodeState.mDicNodeStatePrevWord.getSecondWordFirstInputIndex(), - mDicNodeState.mDicNodeStateInput.getInputIndex(0) /* lastInputIndex */); + dicNode->mDicNodeProperties.getDepth()); PROF_NODE_COPY(&dicNode->mProfiler, mProfiler); } @@ -231,7 +218,7 @@ class DicNode { } bool isFirstCharUppercase() const { - const int c = getOutputWordBuf()[0]; + const int c = mDicNodeState.mDicNodeStateOutput.getCodePointAt(0); return CharUtils::isAsciiUpper(c); } @@ -326,7 +313,7 @@ class DicNode { void outputResult(int *dest) const { const uint16_t prevWordLength = mDicNodeState.mDicNodeStatePrevWord.getPrevWordLength(); const uint16_t currentDepth = getNodeCodePointCount(); - DicNodeUtils::appendTwoWords(mDicNodeState.mDicNodeStatePrevWord.mPrevWord, + DicNodeUtils::appendTwoWords(mDicNodeState.mDicNodeStatePrevWord.getPrevWordBuf(), prevWordLength, getOutputWordBuf(), currentDepth, dest); DUMP_WORD_AND_SCORE("OUTPUT"); } @@ -337,7 +324,7 @@ class DicNode { // are concatenated together in mPrevWord - which contains a space at the end. int getTotalNodeSpaceCount() const { if (isFirstWord()) return 0; - return CharUtils::getSpaceCount(mDicNodeState.mDicNodeStatePrevWord.mPrevWord, + return CharUtils::getSpaceCount(mDicNodeState.mDicNodeStatePrevWord.getPrevWordBuf(), mDicNodeState.mDicNodeStatePrevWord.getPrevWordLength()); } @@ -389,7 +376,7 @@ class DicNode { } AK_FORCE_INLINE const int *getOutputWordBuf() const { - return mDicNodeState.mDicNodeStateOutput.mCodePointsBuf; + return mDicNodeState.mDicNodeStateOutput.getCodePointBuf(); } int getPrevCodePointG(int pointerId) const { diff --git a/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp b/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp index a6ea68c29..48752f2cd 100644 --- a/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp +++ b/native/jni/src/suggest/core/dicnode/dic_node_utils.cpp @@ -16,7 +16,6 @@ #include "suggest/core/dicnode/dic_node_utils.h" -#include <algorithm> #include <cstring> #include "suggest/core/dicnode/dic_node.h" diff --git a/native/jni/src/suggest/core/dicnode/dic_node_vector.h b/native/jni/src/suggest/core/dicnode/dic_node_vector.h index 9364e7751..cb28e57d8 100644 --- a/native/jni/src/suggest/core/dicnode/dic_node_vector.h +++ b/native/jni/src/suggest/core/dicnode/dic_node_vector.h @@ -32,10 +32,10 @@ class DicNodeVector { #else static const int DEFAULT_NODES_SIZE_FOR_OPTIMIZATION = 60; #endif - AK_FORCE_INLINE DicNodeVector() : mDicNodes(0), mLock(false), mEmptyNode() {} + AK_FORCE_INLINE DicNodeVector() : mDicNodes(), mLock(false) {} // Specify the capacity of the vector - AK_FORCE_INLINE DicNodeVector(const int size) : mDicNodes(0), mLock(false), mEmptyNode() { + AK_FORCE_INLINE DicNodeVector(const int size) : mDicNodes(), mLock(false) { mDicNodes.reserve(size); } @@ -52,13 +52,9 @@ class DicNodeVector { return static_cast<int>(mDicNodes.size()); } - bool exceeds(const size_t limit) const { - return mDicNodes.size() >= limit; - } - void pushPassingChild(DicNode *dicNode) { ASSERT(!mLock); - mDicNodes.push_back(mEmptyNode); + mDicNodes.emplace_back(); mDicNodes.back().initAsPassingChild(dicNode); } @@ -67,7 +63,7 @@ class DicNodeVector { const bool hasChildren, const bool isBlacklistedOrNotAWord, const uint16_t mergedNodeCodePointCount, const int *const mergedNodeCodePoints) { ASSERT(!mLock); - mDicNodes.push_back(mEmptyNode); + mDicNodes.emplace_back(); mDicNodes.back().initAsChild(dicNode, ptNodePos, childrenPtNodeArrayPos, probability, isTerminal, hasChildren, isBlacklistedOrNotAWord, mergedNodeCodePointCount, mergedNodeCodePoints); @@ -80,14 +76,13 @@ class DicNodeVector { DicNode *front() { ASSERT(1 <= static_cast<int>(mDicNodes.size())); - return &mDicNodes[0]; + return &mDicNodes.front(); } private: DISALLOW_COPY_AND_ASSIGN(DicNodeVector); std::vector<DicNode> mDicNodes; bool mLock; - DicNode mEmptyNode; }; } // namespace latinime #endif // LATINIME_DIC_NODE_VECTOR_H diff --git a/native/jni/src/suggest/core/dicnode/internal/dic_node_properties.h b/native/jni/src/suggest/core/dicnode/internal/dic_node_properties.h index c41a7243a..ab02e6192 100644 --- a/native/jni/src/suggest/core/dicnode/internal/dic_node_properties.h +++ b/native/jni/src/suggest/core/dicnode/internal/dic_node_properties.h @@ -33,7 +33,7 @@ class DicNodeProperties { mIsTerminal(false), mHasChildrenPtNodes(false), mIsBlacklistedOrNotAWord(false), mDepth(0), mLeavingDepth(0) {} - virtual ~DicNodeProperties() {} + ~DicNodeProperties() {} // Should be called only once per DicNode is initialized. void init(const int pos, const int childrenPos, const int nodeCodePoint, const int probability, diff --git a/native/jni/src/suggest/core/dicnode/internal/dic_node_state.h b/native/jni/src/suggest/core/dicnode/internal/dic_node_state.h index b0fddb724..a41667567 100644 --- a/native/jni/src/suggest/core/dicnode/internal/dic_node_state.h +++ b/native/jni/src/suggest/core/dicnode/internal/dic_node_state.h @@ -37,7 +37,18 @@ class DicNodeState { mDicNodeStateScoring() { } - virtual ~DicNodeState() {} + ~DicNodeState() {} + + DicNodeState &operator=(const DicNodeState& src) { + init(&src); + return *this; + } + + DicNodeState(const DicNodeState& src) + : mDicNodeStateInput(), mDicNodeStateOutput(), mDicNodeStatePrevWord(), + mDicNodeStateScoring() { + init(&src); + } // Init with prevWordPos void init(const int prevWordPos) { @@ -47,6 +58,24 @@ class DicNodeState { mDicNodeStateScoring.init(); } + // Init with previous word. + void initAsRootWithPreviousWord(const DicNodeState *prevWordDicNodeState, + const int prevWordPos, const int prevWordCodePointCount) { + mDicNodeStateOutput.init(); // reset for next word + mDicNodeStateInput.init( + &prevWordDicNodeState->mDicNodeStateInput, true /* resetTerminalDiffCost */); + mDicNodeStateScoring.init(&prevWordDicNodeState->mDicNodeStateScoring); + mDicNodeStatePrevWord.init( + prevWordDicNodeState->mDicNodeStatePrevWord.getPrevWordCount() + 1, + prevWordPos, + prevWordDicNodeState->mDicNodeStatePrevWord.getPrevWordBuf(), + prevWordDicNodeState->mDicNodeStatePrevWord.getPrevWordLength(), + prevWordDicNodeState->mDicNodeStateOutput.getCodePointBuf(), + prevWordCodePointCount, + prevWordDicNodeState->mDicNodeStatePrevWord.getSecondWordFirstInputIndex(), + prevWordDicNodeState->mDicNodeStateInput.getInputIndex(0) /* lastInputIndex */); + } + // Init by copy AK_FORCE_INLINE void init(const DicNodeState *const src) { mDicNodeStateInput.init(&src->mDicNodeStateInput); @@ -62,11 +91,6 @@ class DicNodeState { mDicNodeStateOutput.addMergedNodeCodePoints( mergedNodeCodePointCount, mergedNodeCodePoints); } - - private: - // Caution!!! - // Use a default copy constructor and an assign operator because shallow copies are ok - // for this class }; } // namespace latinime #endif // LATINIME_DIC_NODE_STATE_H diff --git a/native/jni/src/suggest/core/dicnode/internal/dic_node_state_input.h b/native/jni/src/suggest/core/dicnode/internal/dic_node_state_input.h index bbd9435b5..3d788114f 100644 --- a/native/jni/src/suggest/core/dicnode/internal/dic_node_state_input.h +++ b/native/jni/src/suggest/core/dicnode/internal/dic_node_state_input.h @@ -25,7 +25,7 @@ namespace latinime { class DicNodeStateInput { public: DicNodeStateInput() {} - virtual ~DicNodeStateInput() {} + ~DicNodeStateInput() {} // TODO: Merge into DicNodeStatePrevWord::truncate void truncate(const int commitPoint) { @@ -89,9 +89,8 @@ class DicNodeStateInput { } private: - // Caution!!! - // Use a default copy constructor and an assign operator because shallow copies are ok - // for this class + DISALLOW_COPY_AND_ASSIGN(DicNodeStateInput); + int mInputIndex[MAX_POINTER_COUNT_G]; int mPrevCodePoint[MAX_POINTER_COUNT_G]; float mTerminalDiffCost[MAX_POINTER_COUNT_G]; diff --git a/native/jni/src/suggest/core/dicnode/internal/dic_node_state_output.h b/native/jni/src/suggest/core/dicnode/internal/dic_node_state_output.h index abafc0edf..bdb182c1d 100644 --- a/native/jni/src/suggest/core/dicnode/internal/dic_node_state_output.h +++ b/native/jni/src/suggest/core/dicnode/internal/dic_node_state_output.h @@ -27,11 +27,9 @@ namespace latinime { class DicNodeStateOutput { public: - DicNodeStateOutput() : mOutputtedCodePointCount(0) { - init(); - } + DicNodeStateOutput() : mOutputtedCodePointCount(0) {} - virtual ~DicNodeStateOutput() {} + ~DicNodeStateOutput() {} void init() { mOutputtedCodePointCount = 0; @@ -63,19 +61,19 @@ class DicNodeStateOutput { } } - // TODO: Remove int getCodePointAt(const int index) const { return mCodePointsBuf[index]; } - // TODO: Move to private - int mCodePointsBuf[MAX_WORD_LENGTH]; + const int *getCodePointBuf() const { + return mCodePointsBuf; + } private: - // Caution!!! - // Use a default copy constructor and an assign operator because shallow copies are ok - // for this class + DISALLOW_COPY_AND_ASSIGN(DicNodeStateOutput); + uint16_t mOutputtedCodePointCount; + int mCodePointsBuf[MAX_WORD_LENGTH]; }; } // namespace latinime #endif // LATINIME_DIC_NODE_STATE_OUTPUT_H diff --git a/native/jni/src/suggest/core/dicnode/internal/dic_node_state_prevword.h b/native/jni/src/suggest/core/dicnode/internal/dic_node_state_prevword.h index 7868f7853..f2b1ce8f7 100644 --- a/native/jni/src/suggest/core/dicnode/internal/dic_node_state_prevword.h +++ b/native/jni/src/suggest/core/dicnode/internal/dic_node_state_prevword.h @@ -30,29 +30,18 @@ namespace latinime { class DicNodeStatePrevWord { public: AK_FORCE_INLINE DicNodeStatePrevWord() - : mPrevWordCount(0), mPrevWordLength(0), mPrevWordStart(0), mPrevWordProbability(0), - mPrevWordPtNodePos(NOT_A_DICT_POS), mSecondWordFirstInputIndex(NOT_AN_INDEX) { - memset(mPrevWord, 0, sizeof(mPrevWord)); - } + : mPrevWordCount(0), mPrevWordLength(0), mPrevWordStart(0), + mPrevWordPtNodePos(NOT_A_DICT_POS), mSecondWordFirstInputIndex(NOT_AN_INDEX) {} - virtual ~DicNodeStatePrevWord() {} - - void init() { - mPrevWordLength = 0; - mPrevWordCount = 0; - mPrevWordStart = 0; - mPrevWordProbability = -1; - mPrevWordPtNodePos = NOT_A_DICT_POS; - mSecondWordFirstInputIndex = NOT_AN_INDEX; - } + ~DicNodeStatePrevWord() {} void init(const int prevWordNodePos) { mPrevWordLength = 0; mPrevWordCount = 0; mPrevWordStart = 0; - mPrevWordProbability = -1; mPrevWordPtNodePos = prevWordNodePos; mSecondWordFirstInputIndex = NOT_AN_INDEX; + mPrevWord[0] = 0; } // Init by copy @@ -60,18 +49,15 @@ class DicNodeStatePrevWord { mPrevWordLength = prevWord->mPrevWordLength; mPrevWordCount = prevWord->mPrevWordCount; mPrevWordStart = prevWord->mPrevWordStart; - mPrevWordProbability = prevWord->mPrevWordProbability; mPrevWordPtNodePos = prevWord->mPrevWordPtNodePos; mSecondWordFirstInputIndex = prevWord->mSecondWordFirstInputIndex; memmove(mPrevWord, prevWord->mPrevWord, prevWord->mPrevWordLength * sizeof(mPrevWord[0])); } - void init(const int16_t prevWordCount, const int16_t prevWordProbability, - const int prevWordNodePos, const int *const src0, const int16_t length0, - const int *const src1, const int16_t length1, + void init(const int16_t prevWordCount, const int prevWordNodePos, const int *const src0, + const int16_t length0, const int *const src1, const int16_t length1, const int prevWordSecondWordFirstInputIndex, const int lastInputIndex) { mPrevWordCount = std::min(prevWordCount, static_cast<int16_t>(MAX_RESULTS)); - mPrevWordProbability = prevWordProbability; mPrevWordPtNodePos = prevWordNodePos; int twoWordsLen = DicNodeUtils::appendTwoWords(src0, length0, src1, length1, mPrevWord); @@ -137,19 +123,19 @@ class DicNodeStatePrevWord { return true; } - // TODO: Move to private - int mPrevWord[MAX_WORD_LENGTH]; + const int *getPrevWordBuf() const { + return mPrevWord; + } private: - // Caution!!! - // Use a default copy constructor and an assign operator because shallow copies are ok - // for this class + DISALLOW_COPY_AND_ASSIGN(DicNodeStatePrevWord); + int16_t mPrevWordCount; int16_t mPrevWordLength; int16_t mPrevWordStart; - int16_t mPrevWordProbability; int mPrevWordPtNodePos; int mSecondWordFirstInputIndex; + int mPrevWord[MAX_WORD_LENGTH]; }; } // namespace latinime #endif // LATINIME_DIC_NODE_STATE_PREVWORD_H diff --git a/native/jni/src/suggest/core/dicnode/internal/dic_node_state_scoring.h b/native/jni/src/suggest/core/dicnode/internal/dic_node_state_scoring.h index 18b7d736a..458eac81b 100644 --- a/native/jni/src/suggest/core/dicnode/internal/dic_node_state_scoring.h +++ b/native/jni/src/suggest/core/dicnode/internal/dic_node_state_scoring.h @@ -37,7 +37,7 @@ class DicNodeStateScoring { mNormalizedCompoundDistanceAfterFirstWord(MAX_VALUE_FOR_WEIGHTING) { } - virtual ~DicNodeStateScoring() {} + ~DicNodeStateScoring() {} void init() { mEditCorrectionCount = 0; @@ -175,9 +175,8 @@ class DicNodeStateScoring { } private: - // Caution!!! - // Use a default copy constructor and an assign operator because shallow copies are ok - // for this class + DISALLOW_COPY_AND_ASSIGN(DicNodeStateScoring); + DoubleLetterLevel mDoubleLetterLevel; DigraphUtils::DigraphCodePointIndex mDigraphIndex; diff --git a/native/jni/src/suggest/core/suggest.cpp b/native/jni/src/suggest/core/suggest.cpp index c3b670337..f60a210d4 100644 --- a/native/jni/src/suggest/core/suggest.cpp +++ b/native/jni/src/suggest/core/suggest.cpp @@ -248,17 +248,16 @@ void Suggest::processTerminalDicNode( if (dicNode->shouldBeFilteredBySafetyNetForBigram()) { return; } + if (!dicNode->hasMatchedOrProximityCodePoints()) { + return; + } // Create a non-cached node here. - DicNode terminalDicNode; - DicNodeUtils::initByCopy(dicNode, &terminalDicNode); + DicNode terminalDicNode(*dicNode); if (TRAVERSAL->needsToTraverseAllUserInput() && dicNode->getInputIndex(0) < traverseSession->getInputSize()) { Weighting::addCostAndForwardInputIndex(WEIGHTING, CT_TERMINAL_INSERTION, traverseSession, 0, &terminalDicNode, traverseSession->getMultiBigramMap()); } - if (!dicNode->hasMatchedOrProximityCodePoints()) { - return; - } Weighting::addCostAndForwardInputIndex(WEIGHTING, CT_TERMINAL, traverseSession, 0, &terminalDicNode, traverseSession->getMultiBigramMap()); traverseSession->getDicTraverseCache()->copyPushTerminal(&terminalDicNode); @@ -375,6 +374,7 @@ void Suggest::processDicNodeAsTransposition(DicTraverseSession *traverseSession, DicNode *dicNode) const { const int16_t pointIndex = dicNode->getInputIndex(0); DicNodeVector childDicNodes1; + DicNodeVector childDicNodes2; DicNodeUtils::getAllChildDicNodes(dicNode, traverseSession->getDictionaryStructurePolicy(), &childDicNodes1); const int childSize1 = childDicNodes1.getSizeAndLock(); @@ -386,7 +386,7 @@ void Suggest::processDicNodeAsTransposition(DicTraverseSession *traverseSession, continue; } if (childDicNodes1[i]->hasChildren()) { - DicNodeVector childDicNodes2; + childDicNodes2.clear(); DicNodeUtils::getAllChildDicNodes(childDicNodes1[i], traverseSession->getDictionaryStructurePolicy(), &childDicNodes2); const int childSize2 = childDicNodes2.getSizeAndLock(); diff --git a/native/jni/src/suggest/policyimpl/typing/typing_traversal.h b/native/jni/src/suggest/policyimpl/typing/typing_traversal.h index 3db00ad3a..7c86b7dc9 100644 --- a/native/jni/src/suggest/policyimpl/typing/typing_traversal.h +++ b/native/jni/src/suggest/policyimpl/typing/typing_traversal.h @@ -162,9 +162,8 @@ class TypingTraversal : public Traversal { if (probability < ScoringParams::THRESHOLD_NEXT_WORD_PROBABILITY) { return false; } - const int c = dicNode->getOutputWordBuf()[0]; const bool shortCappedWord = dicNode->getNodeCodePointCount() - < ScoringParams::THRESHOLD_SHORT_WORD_LENGTH && CharUtils::isAsciiUpper(c); + < ScoringParams::THRESHOLD_SHORT_WORD_LENGTH && dicNode->isFirstCharUppercase(); return !shortCappedWord || probability >= ScoringParams::THRESHOLD_NEXT_WORD_PROBABILITY_FOR_CAPPED; } diff --git a/tools/make-keyboard-text/res/values-et-rEE/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-et-rEE/donottranslate-more-keys.xml index d037044bd..e9bd9faf7 100644 --- a/tools/make-keyboard-text/res/values-et-rEE/donottranslate-more-keys.xml +++ b/tools/make-keyboard-text/res/values-et-rEE/donottranslate-more-keys.xml @@ -70,9 +70,8 @@ <string name="more_keys_for_s">š,ß,ś,ş</string> <!-- U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE --> - <string name="more_keys_for_n">ņ,ñ,ń,ń</string> + <string name="more_keys_for_n">ņ,ñ,ń</string> <!-- U+010D: "č" LATIN SMALL LETTER C WITH CARON U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE --> diff --git a/tools/make-keyboard-text/res/values-is/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-is/donottranslate-more-keys.xml index 4b4d986b8..2886d015e 100644 --- a/tools/make-keyboard-text/res/values-is/donottranslate-more-keys.xml +++ b/tools/make-keyboard-text/res/values-is/donottranslate-more-keys.xml @@ -64,12 +64,6 @@ <string name="more_keys_for_d">ð</string> <!-- U+00FE: "þ" LATIN SMALL LETTER THORN --> <string name="more_keys_for_t">þ</string> - <!-- U+00F0: "ð" LATIN SMALL LETTER ETH --> - <string name="keylabel_for_nordic_row1_11">ð</string> - <!-- U+00E6: "æ" LATIN SMALL LETTER AE --> - <string name="keylabel_for_nordic_row2_10">æ</string> - <!-- U+00FE: "þ" LATIN SMALL LETTER THORN --> - <string name="keylabel_for_nordic_row2_11">þ</string> <string name="single_quotes">!text/single_9qm_lqm</string> <string name="double_quotes">!text/double_9qm_lqm</string> </resources> diff --git a/tools/make-keyboard-text/res/values-lt/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-lt/donottranslate-more-keys.xml index 7e2b8a076..c1c596059 100644 --- a/tools/make-keyboard-text/res/values-lt/donottranslate-more-keys.xml +++ b/tools/make-keyboard-text/res/values-lt/donottranslate-more-keys.xml @@ -71,9 +71,8 @@ <string name="more_keys_for_s">š,ß,ś,ş</string> <!-- U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE --> - <string name="more_keys_for_n">ņ,ñ,ń,ń</string> + <string name="more_keys_for_n">ņ,ñ,ń</string> <!-- U+010D: "č" LATIN SMALL LETTER C WITH CARON U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE --> diff --git a/tools/make-keyboard-text/res/values-lv/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-lv/donottranslate-more-keys.xml index c64e37bc8..c27458b7c 100644 --- a/tools/make-keyboard-text/res/values-lv/donottranslate-more-keys.xml +++ b/tools/make-keyboard-text/res/values-lv/donottranslate-more-keys.xml @@ -70,9 +70,8 @@ <string name="more_keys_for_s">š,ß,ś,ş</string> <!-- U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE --> - <string name="more_keys_for_n">ņ,ñ,ń,ń</string> + <string name="more_keys_for_n">ņ,ñ,ń</string> <!-- U+010D: "č" LATIN SMALL LETTER C WITH CARON U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE --> diff --git a/tools/make-keyboard-text/res/values-sk/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-sk/donottranslate-more-keys.xml index 2ed538e5b..cf2238f67 100644 --- a/tools/make-keyboard-text/res/values-sk/donottranslate-more-keys.xml +++ b/tools/make-keyboard-text/res/values-sk/donottranslate-more-keys.xml @@ -71,9 +71,8 @@ <!-- U+0148: "ň" LATIN SMALL LETTER N WITH CARON U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE --> - <string name="more_keys_for_n">ň,ņ,ñ,ń,ń</string> + <string name="more_keys_for_n">ň,ņ,ñ,ń</string> <!-- U+010D: "č" LATIN SMALL LETTER C WITH CARON U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE --> diff --git a/tools/make-keyboard-text/res/values-sv/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-sv/donottranslate-more-keys.xml index 2472364d0..0da027258 100644 --- a/tools/make-keyboard-text/res/values-sv/donottranslate-more-keys.xml +++ b/tools/make-keyboard-text/res/values-sv/donottranslate-more-keys.xml @@ -71,9 +71,8 @@ U+016B: "ū" LATIN SMALL LETTER U WITH MACRON --> <string name="more_keys_for_u">ü,ú,ù,û,ū</string> <!-- U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE - U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS - U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS --> - <string name="more_keys_for_y">ý,ÿ,ü</string> + U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS --> + <string name="more_keys_for_y">ý,ÿ</string> <!-- U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE U+017E: "ž" LATIN SMALL LETTER Z WITH CARON U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE --> diff --git a/tools/make-keyboard-text/res/values-zz/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-zz/donottranslate-more-keys.xml index eb984a469..ad69019a3 100644 --- a/tools/make-keyboard-text/res/values-zz/donottranslate-more-keys.xml +++ b/tools/make-keyboard-text/res/values-zz/donottranslate-more-keys.xml @@ -29,7 +29,7 @@ U+0103: "ă" LATIN SMALL LETTER A WITH BREVE U+0105: "ą" LATIN SMALL LETTER A WITH OGONEK U+00AA: "ª" FEMININE ORDINAL INDICATOR --> - <string name="more_keys_for_a">à,á,â,ã,ä,å,æ,ã,å,ā,ă,ą,ª</string> + <string name="more_keys_for_a">à,á,â,ã,ä,å,æ,ā,ă,ą,ª</string> <!-- U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX |