aboutsummaryrefslogtreecommitdiffstats
path: root/java/src
diff options
context:
space:
mode:
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/inputmethod/event/CombinerChain.java16
-rw-r--r--java/src/com/android/inputmethod/event/Event.java2
-rw-r--r--java/src/com/android/inputmethod/keyboard/EmojiPalettesView.java4
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java2
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java2238
-rw-r--r--java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java3
-rw-r--r--java/src/com/android/inputmethod/latin/Suggest.java7
-rw-r--r--java/src/com/android/inputmethod/latin/WordComposer.java29
-rw-r--r--java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java2
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/AbstractDictDecoder.java104
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderUtils.java365
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/BinaryDictEncoderUtils.java881
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java272
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/DictDecoder.java222
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/DictEncoder.java38
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/FormatSpec.java38
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java717
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/MakedictLog.java47
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/PendingAttribute.java32
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/PtNodeInfo.java51
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/Ver2DictDecoder.java324
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/Ver2DictEncoder.java240
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/Ver4DictDecoder.java115
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/Ver4DictEncoder.java127
-rw-r--r--java/src/com/android/inputmethod/latin/utils/ByteArrayDictBuffer.java81
-rw-r--r--java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java2
26 files changed, 1148 insertions, 4811 deletions
diff --git a/java/src/com/android/inputmethod/event/CombinerChain.java b/java/src/com/android/inputmethod/event/CombinerChain.java
index 5ca9842c1..8b59dc52a 100644
--- a/java/src/com/android/inputmethod/event/CombinerChain.java
+++ b/java/src/com/android/inputmethod/event/CombinerChain.java
@@ -17,7 +17,9 @@
package com.android.inputmethod.event;
import android.text.SpannableStringBuilder;
+import android.text.TextUtils;
+import com.android.inputmethod.latin.Constants;
import com.android.inputmethod.latin.utils.CollectionUtils;
import java.util.ArrayList;
@@ -84,7 +86,19 @@ public class CombinerChain {
}
}
if (null != event) {
- mCombinedText.append(event.getTextToCommit());
+ // TODO: figure out the generic way of doing this
+ if (Constants.CODE_DELETE == event.mKeyCode) {
+ final int length = mCombinedText.length();
+ if (length > 0) {
+ final int lastCodePoint = mCombinedText.codePointBefore(length);
+ mCombinedText.delete(length - Character.charCount(lastCodePoint), length);
+ }
+ } else {
+ final CharSequence textToCommit = event.getTextToCommit();
+ if (!TextUtils.isEmpty(textToCommit)) {
+ mCombinedText.append(textToCommit);
+ }
+ }
}
mStateFeedback.clear();
for (int i = mCombiners.size() - 1; i >= 0; --i) {
diff --git a/java/src/com/android/inputmethod/event/Event.java b/java/src/com/android/inputmethod/event/Event.java
index 2bfe0732d..646590948 100644
--- a/java/src/com/android/inputmethod/event/Event.java
+++ b/java/src/com/android/inputmethod/event/Event.java
@@ -229,9 +229,9 @@ public class Event {
switch (mType) {
case EVENT_MODE_KEY:
case EVENT_NOT_HANDLED:
+ case EVENT_TOGGLE:
return "";
case EVENT_INPUT_KEYPRESS:
- case EVENT_TOGGLE:
return StringUtils.newSingleCodePointString(mCodePoint);
case EVENT_GESTURE:
case EVENT_SOFTWARE_GENERATED_STRING:
diff --git a/java/src/com/android/inputmethod/keyboard/EmojiPalettesView.java b/java/src/com/android/inputmethod/keyboard/EmojiPalettesView.java
index 7fff46aaf..7e2166769 100644
--- a/java/src/com/android/inputmethod/keyboard/EmojiPalettesView.java
+++ b/java/src/com/android/inputmethod/keyboard/EmojiPalettesView.java
@@ -632,7 +632,9 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange
}
public void setHardwareAcceleratedDrawingEnabled(final boolean enabled) {
- // TODO:
+ if (!enabled) return;
+ // TODO: Should use LAYER_TYPE_SOFTWARE when hardware acceleration is off?
+ setLayerType(LAYER_TYPE_HARDWARE, null);
}
private static void setupAlphabetKey(final TextView alphabetKey, final String label,
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
index 044cd119e..56acdde8d 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
@@ -31,7 +31,7 @@ import java.util.Locale;
public final class KeyboardTextsSet {
public static final String PREFIX_TEXT = "!text/";
- public static final String SWITCH_TO_ALPHA_KEY_LABEL = "label_to_alpha_key";
+ public static final String SWITCH_TO_ALPHA_KEY_LABEL = "keylabel_to_alpha";
private static final char BACKSLASH = Constants.CODE_BACKSLASH;
private static final int MAX_STRING_REFERENCE_INDIRECTION = 10;
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
index 1d9ee90fb..fc67f0879 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
@@ -79,221 +79,217 @@ public final class KeyboardTextsTable {
private static final String[] NAMES = {
// /* index:histogram */ "name",
- /* 0:32 */ "more_keys_for_a",
- /* 1:32 */ "more_keys_for_o",
- /* 2:30 */ "more_keys_for_u",
- /* 3:29 */ "more_keys_for_e",
- /* 4:28 */ "more_keys_for_i",
- /* 5:23 */ "more_keys_for_c",
+ /* 0:32 */ "morekeys_a",
+ /* 1:32 */ "morekeys_o",
+ /* 2:30 */ "morekeys_u",
+ /* 3:29 */ "morekeys_e",
+ /* 4:28 */ "morekeys_i",
+ /* 5:23 */ "morekeys_c",
/* 6:23 */ "double_quotes",
- /* 7:22 */ "more_keys_for_n",
+ /* 7:22 */ "morekeys_n",
/* 8:22 */ "single_quotes",
- /* 9:21 */ "label_to_alpha_key",
- /* 10:20 */ "more_keys_for_s",
- /* 11:14 */ "more_keys_for_y",
- /* 12:13 */ "more_keys_for_d",
- /* 13:12 */ "more_keys_for_z",
- /* 14:10 */ "more_keys_for_t",
- /* 15:10 */ "more_keys_for_l",
- /* 16: 9 */ "more_keys_for_g",
+ /* 9:21 */ "keylabel_to_alpha",
+ /* 10:20 */ "morekeys_s",
+ /* 11:14 */ "morekeys_y",
+ /* 12:13 */ "morekeys_d",
+ /* 13:12 */ "morekeys_z",
+ /* 14:10 */ "morekeys_t",
+ /* 15:10 */ "morekeys_l",
+ /* 16: 9 */ "morekeys_g",
/* 17: 9 */ "single_angle_quotes",
/* 18: 9 */ "double_angle_quotes",
- /* 19: 9 */ "keylabel_for_currency",
- /* 20: 8 */ "more_keys_for_r",
- /* 21: 6 */ "more_keys_for_k",
- /* 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",
- /* 29: 5 */ "keylabel_for_east_slavic_row2_11",
- /* 30: 5 */ "keylabel_for_east_slavic_row3_5",
- /* 31: 5 */ "more_keys_for_cyrillic_soft_sign",
- /* 32: 4 */ "more_keys_for_nordic_row2_11",
- /* 33: 4 */ "keylabel_for_symbols_1",
- /* 34: 4 */ "keylabel_for_symbols_2",
- /* 35: 4 */ "keylabel_for_symbols_3",
- /* 36: 4 */ "keylabel_for_symbols_4",
- /* 37: 4 */ "keylabel_for_symbols_5",
- /* 38: 4 */ "keylabel_for_symbols_6",
- /* 39: 4 */ "keylabel_for_symbols_7",
- /* 40: 4 */ "keylabel_for_symbols_8",
- /* 41: 4 */ "keylabel_for_symbols_9",
- /* 42: 4 */ "keylabel_for_symbols_0",
- /* 43: 4 */ "label_to_symbol_key",
- /* 44: 4 */ "label_to_symbol_with_microphone_key",
- /* 45: 4 */ "additional_more_keys_for_symbols_1",
- /* 46: 4 */ "additional_more_keys_for_symbols_2",
- /* 47: 4 */ "additional_more_keys_for_symbols_3",
- /* 48: 4 */ "additional_more_keys_for_symbols_4",
- /* 49: 4 */ "additional_more_keys_for_symbols_5",
- /* 50: 4 */ "additional_more_keys_for_symbols_6",
- /* 51: 4 */ "additional_more_keys_for_symbols_7",
- /* 52: 4 */ "additional_more_keys_for_symbols_8",
- /* 53: 4 */ "additional_more_keys_for_symbols_9",
- /* 54: 4 */ "additional_more_keys_for_symbols_0",
- /* 55: 3 */ "more_keys_for_punctuation",
- /* 56: 3 */ "more_keys_for_star",
- /* 57: 3 */ "keyspec_left_parenthesis",
- /* 58: 3 */ "keyspec_right_parenthesis",
- /* 59: 3 */ "keyspec_left_square_bracket",
- /* 60: 3 */ "keyspec_right_square_bracket",
- /* 61: 3 */ "keyspec_left_curly_bracket",
- /* 62: 3 */ "keyspec_right_curly_bracket",
- /* 63: 3 */ "keyspec_less_than",
- /* 64: 3 */ "keyspec_greater_than",
- /* 65: 3 */ "keyspec_less_than_equal",
- /* 66: 3 */ "keyspec_greater_than_equal",
- /* 67: 3 */ "keyspec_left_double_angle_quote",
- /* 68: 3 */ "keyspec_right_double_angle_quote",
- /* 69: 3 */ "keyspec_left_single_angle_quote",
- /* 70: 3 */ "keyspec_right_single_angle_quote",
- /* 71: 3 */ "keylabel_for_tablet_comma",
- /* 72: 3 */ "more_keys_for_tablet_period",
- /* 73: 3 */ "more_keys_for_question",
- /* 74: 2 */ "more_keys_for_h",
- /* 75: 2 */ "more_keys_for_w",
- /* 76: 2 */ "more_keys_for_cyrillic_u",
- /* 77: 2 */ "more_keys_for_cyrillic_en",
- /* 78: 2 */ "more_keys_for_cyrillic_ghe",
- /* 79: 2 */ "more_keys_for_east_slavic_row2_2",
- /* 80: 2 */ "more_keys_for_cyrillic_o",
- /* 81: 2 */ "keylabel_for_south_slavic_row1_6",
- /* 82: 2 */ "keylabel_for_south_slavic_row2_11",
- /* 83: 2 */ "keylabel_for_south_slavic_row3_1",
- /* 84: 2 */ "keylabel_for_south_slavic_row3_8",
- /* 85: 2 */ "more_keys_for_cyrillic_i",
- /* 86: 2 */ "keylabel_for_swiss_row1_11",
- /* 87: 2 */ "keylabel_for_swiss_row2_10",
- /* 88: 2 */ "keylabel_for_swiss_row2_11",
- /* 89: 2 */ "more_keys_for_swiss_row1_11",
- /* 90: 2 */ "more_keys_for_swiss_row2_10",
- /* 91: 2 */ "more_keys_for_swiss_row2_11",
- /* 92: 2 */ "keylabel_for_spanish_row2_10",
- /* 93: 2 */ "more_keys_for_bullet",
- /* 94: 2 */ "more_keys_for_left_parenthesis",
- /* 95: 2 */ "more_keys_for_right_parenthesis",
- /* 96: 2 */ "more_keys_for_arabic_diacritics",
- /* 97: 2 */ "keylabel_for_comma",
- /* 98: 2 */ "keyhintlabel_for_tablet_comma",
- /* 99: 2 */ "more_keys_for_tablet_comma",
- /* 100: 2 */ "keyhintlabel_for_period",
- /* 101: 2 */ "more_keys_for_period",
- /* 102: 2 */ "keyhintlabel_for_tablet_period",
- /* 103: 2 */ "keylabel_for_symbols_question",
- /* 104: 2 */ "keylabel_for_symbols_semicolon",
- /* 105: 2 */ "keylabel_for_symbols_percent",
- /* 106: 2 */ "more_keys_for_symbols_semicolon",
- /* 107: 2 */ "more_keys_for_symbols_percent",
- /* 108: 1 */ "more_keys_for_v",
- /* 109: 1 */ "more_keys_for_j",
- /* 110: 1 */ "more_keys_for_cyrillic_ka",
- /* 111: 1 */ "more_keys_for_cyrillic_a",
- /* 112: 1 */ "more_keys_for_east_slavic_row2_11",
- /* 113: 1 */ "more_keys_for_currency_dollar",
- /* 114: 1 */ "more_keys_for_tablet_punctuation",
- /* 115: 1 */ "more_keys_for_plus",
- /* 116: 1 */ "more_keys_for_less_than",
- /* 117: 1 */ "more_keys_for_greater_than",
- /* 118: 1 */ "keylabel_for_period",
- /* 119: 1 */ "keylabel_for_tablet_period",
- /* 120: 1 */ "more_keys_for_exclamation",
- /* 121: 1 */ "more_keys_for_q",
- /* 122: 1 */ "more_keys_for_x",
- /* 123: 1 */ "keylabel_for_q",
- /* 124: 1 */ "keylabel_for_w",
- /* 125: 1 */ "keylabel_for_y",
- /* 126: 1 */ "keylabel_for_x",
- /* 127: 0 */ "more_keys_for_currency",
- /* 128: 0 */ "more_keys_for_symbols_1",
- /* 129: 0 */ "more_keys_for_symbols_2",
- /* 130: 0 */ "more_keys_for_symbols_3",
- /* 131: 0 */ "more_keys_for_symbols_4",
- /* 132: 0 */ "more_keys_for_symbols_5",
- /* 133: 0 */ "more_keys_for_symbols_6",
- /* 134: 0 */ "more_keys_for_symbols_7",
- /* 135: 0 */ "more_keys_for_symbols_8",
- /* 136: 0 */ "more_keys_for_symbols_9",
- /* 137: 0 */ "more_keys_for_symbols_0",
- /* 138: 0 */ "more_keys_for_am_pm",
- /* 139: 0 */ "settings_as_more_key",
- /* 140: 0 */ "shortcut_as_more_key",
- /* 141: 0 */ "action_next_as_more_key",
- /* 142: 0 */ "action_previous_as_more_key",
- /* 143: 0 */ "label_to_more_symbol_key",
- /* 144: 0 */ "label_to_more_symbol_for_tablet_key",
- /* 145: 0 */ "label_to_phone_numeric_key",
- /* 146: 0 */ "label_to_phone_symbols_key",
- /* 147: 0 */ "label_time_am",
- /* 148: 0 */ "label_time_pm",
- /* 149: 0 */ "keylabel_for_popular_domain",
- /* 150: 0 */ "more_keys_for_popular_domain",
- /* 151: 0 */ "keyspecs_for_left_parenthesis_more_keys",
- /* 152: 0 */ "keyspecs_for_right_parenthesis_more_keys",
- /* 153: 0 */ "single_laqm_raqm",
- /* 154: 0 */ "single_raqm_laqm",
- /* 155: 0 */ "double_laqm_raqm",
- /* 156: 0 */ "double_raqm_laqm",
- /* 157: 0 */ "single_lqm_rqm",
- /* 158: 0 */ "single_9qm_lqm",
- /* 159: 0 */ "single_9qm_rqm",
- /* 160: 0 */ "single_rqm_9qm",
- /* 161: 0 */ "double_lqm_rqm",
- /* 162: 0 */ "double_9qm_lqm",
- /* 163: 0 */ "double_9qm_rqm",
- /* 164: 0 */ "double_rqm_9qm",
- /* 165: 0 */ "more_keys_for_single_quote",
- /* 166: 0 */ "more_keys_for_double_quote",
- /* 167: 0 */ "more_keys_for_tablet_double_quote",
- /* 168: 0 */ "emoji_key_as_more_key",
+ /* 19: 9 */ "keyspec_currency",
+ /* 20: 8 */ "morekeys_r",
+ /* 21: 6 */ "morekeys_k",
+ /* 22: 6 */ "morekeys_cyrillic_ie",
+ /* 23: 5 */ "keyspec_nordic_row1_11",
+ /* 24: 5 */ "keyspec_nordic_row2_10",
+ /* 25: 5 */ "keyspec_nordic_row2_11",
+ /* 26: 5 */ "morekeys_nordic_row2_10",
+ /* 27: 5 */ "keyspec_east_slavic_row1_9",
+ /* 28: 5 */ "keyspec_east_slavic_row2_2",
+ /* 29: 5 */ "keyspec_east_slavic_row2_11",
+ /* 30: 5 */ "keyspec_east_slavic_row3_5",
+ /* 31: 5 */ "morekeys_cyrillic_soft_sign",
+ /* 32: 4 */ "morekeys_nordic_row2_11",
+ /* 33: 4 */ "keyspec_symbols_1",
+ /* 34: 4 */ "keyspec_symbols_2",
+ /* 35: 4 */ "keyspec_symbols_3",
+ /* 36: 4 */ "keyspec_symbols_4",
+ /* 37: 4 */ "keyspec_symbols_5",
+ /* 38: 4 */ "keyspec_symbols_6",
+ /* 39: 4 */ "keyspec_symbols_7",
+ /* 40: 4 */ "keyspec_symbols_8",
+ /* 41: 4 */ "keyspec_symbols_9",
+ /* 42: 4 */ "keyspec_symbols_0",
+ /* 43: 4 */ "keylabel_to_symbol",
+ /* 44: 4 */ "additional_morekeys_symbols_1",
+ /* 45: 4 */ "additional_morekeys_symbols_2",
+ /* 46: 4 */ "additional_morekeys_symbols_3",
+ /* 47: 4 */ "additional_morekeys_symbols_4",
+ /* 48: 4 */ "additional_morekeys_symbols_5",
+ /* 49: 4 */ "additional_morekeys_symbols_6",
+ /* 50: 4 */ "additional_morekeys_symbols_7",
+ /* 51: 4 */ "additional_morekeys_symbols_8",
+ /* 52: 4 */ "additional_morekeys_symbols_9",
+ /* 53: 4 */ "additional_morekeys_symbols_0",
+ /* 54: 3 */ "morekeys_punctuation",
+ /* 55: 3 */ "morekeys_star",
+ /* 56: 3 */ "keyspec_left_parenthesis",
+ /* 57: 3 */ "keyspec_right_parenthesis",
+ /* 58: 3 */ "keyspec_left_square_bracket",
+ /* 59: 3 */ "keyspec_right_square_bracket",
+ /* 60: 3 */ "keyspec_left_curly_bracket",
+ /* 61: 3 */ "keyspec_right_curly_bracket",
+ /* 62: 3 */ "keyspec_less_than",
+ /* 63: 3 */ "keyspec_greater_than",
+ /* 64: 3 */ "keyspec_less_than_equal",
+ /* 65: 3 */ "keyspec_greater_than_equal",
+ /* 66: 3 */ "keyspec_left_double_angle_quote",
+ /* 67: 3 */ "keyspec_right_double_angle_quote",
+ /* 68: 3 */ "keyspec_left_single_angle_quote",
+ /* 69: 3 */ "keyspec_right_single_angle_quote",
+ /* 70: 3 */ "keyspec_tablet_comma",
+ /* 71: 3 */ "morekeys_tablet_period",
+ /* 72: 3 */ "morekeys_question",
+ /* 73: 2 */ "morekeys_h",
+ /* 74: 2 */ "morekeys_w",
+ /* 75: 2 */ "morekeys_east_slavic_row2_2",
+ /* 76: 2 */ "morekeys_cyrillic_u",
+ /* 77: 2 */ "morekeys_cyrillic_en",
+ /* 78: 2 */ "morekeys_cyrillic_ghe",
+ /* 79: 2 */ "morekeys_cyrillic_o",
+ /* 80: 2 */ "morekeys_cyrillic_i",
+ /* 81: 2 */ "keyspec_south_slavic_row1_6",
+ /* 82: 2 */ "keyspec_south_slavic_row2_11",
+ /* 83: 2 */ "keyspec_south_slavic_row3_1",
+ /* 84: 2 */ "keyspec_south_slavic_row3_8",
+ /* 85: 2 */ "keyspec_swiss_row1_11",
+ /* 86: 2 */ "keyspec_swiss_row2_10",
+ /* 87: 2 */ "keyspec_swiss_row2_11",
+ /* 88: 2 */ "morekeys_swiss_row1_11",
+ /* 89: 2 */ "morekeys_swiss_row2_10",
+ /* 90: 2 */ "morekeys_swiss_row2_11",
+ /* 91: 2 */ "keyspec_spanish_row2_10",
+ /* 92: 2 */ "morekeys_bullet",
+ /* 93: 2 */ "morekeys_left_parenthesis",
+ /* 94: 2 */ "morekeys_right_parenthesis",
+ /* 95: 2 */ "morekeys_arabic_diacritics",
+ /* 96: 2 */ "keyspec_comma",
+ /* 97: 2 */ "keyhintlabel_tablet_comma",
+ /* 98: 2 */ "morekeys_tablet_comma",
+ /* 99: 2 */ "keyhintlabel_period",
+ /* 100: 2 */ "morekeys_period",
+ /* 101: 2 */ "keyhintlabel_tablet_period",
+ /* 102: 2 */ "keyspec_symbols_question",
+ /* 103: 2 */ "keyspec_symbols_semicolon",
+ /* 104: 2 */ "keyspec_symbols_percent",
+ /* 105: 2 */ "morekeys_symbols_semicolon",
+ /* 106: 2 */ "morekeys_symbols_percent",
+ /* 107: 1 */ "morekeys_v",
+ /* 108: 1 */ "morekeys_j",
+ /* 109: 1 */ "morekeys_east_slavic_row2_11",
+ /* 110: 1 */ "morekeys_cyrillic_ka",
+ /* 111: 1 */ "morekeys_cyrillic_a",
+ /* 112: 1 */ "morekeys_currency_dollar",
+ /* 113: 1 */ "morekeys_tablet_punctuation",
+ /* 114: 1 */ "morekeys_plus",
+ /* 115: 1 */ "morekeys_less_than",
+ /* 116: 1 */ "morekeys_greater_than",
+ /* 117: 1 */ "keyspec_period",
+ /* 118: 1 */ "keyspec_tablet_period",
+ /* 119: 1 */ "morekeys_exclamation",
+ /* 120: 1 */ "morekeys_q",
+ /* 121: 1 */ "morekeys_x",
+ /* 122: 1 */ "keyspec_q",
+ /* 123: 1 */ "keyspec_w",
+ /* 124: 1 */ "keyspec_y",
+ /* 125: 1 */ "keyspec_x",
+ /* 126: 0 */ "morekeys_currency",
+ /* 127: 0 */ "morekeys_symbols_1",
+ /* 128: 0 */ "morekeys_symbols_2",
+ /* 129: 0 */ "morekeys_symbols_3",
+ /* 130: 0 */ "morekeys_symbols_4",
+ /* 131: 0 */ "morekeys_symbols_5",
+ /* 132: 0 */ "morekeys_symbols_6",
+ /* 133: 0 */ "morekeys_symbols_7",
+ /* 134: 0 */ "morekeys_symbols_8",
+ /* 135: 0 */ "morekeys_symbols_9",
+ /* 136: 0 */ "morekeys_symbols_0",
+ /* 137: 0 */ "morekeys_am_pm",
+ /* 138: 0 */ "keyspec_settings",
+ /* 139: 0 */ "keyspec_shortcut",
+ /* 140: 0 */ "keyspec_action_next",
+ /* 141: 0 */ "keyspec_action_previous",
+ /* 142: 0 */ "keylabel_to_more_symbol",
+ /* 143: 0 */ "keylabel_tablet_to_more_symbol",
+ /* 144: 0 */ "keylabel_to_phone_numeric",
+ /* 145: 0 */ "keylabel_to_phone_symbols",
+ /* 146: 0 */ "keylabel_time_am",
+ /* 147: 0 */ "keylabel_time_pm",
+ /* 148: 0 */ "keyspec_popular_domain",
+ /* 149: 0 */ "morekeys_popular_domain",
+ /* 150: 0 */ "keyspecs_left_parenthesis_more_keys",
+ /* 151: 0 */ "keyspecs_right_parenthesis_more_keys",
+ /* 152: 0 */ "single_laqm_raqm",
+ /* 153: 0 */ "single_raqm_laqm",
+ /* 154: 0 */ "double_laqm_raqm",
+ /* 155: 0 */ "double_raqm_laqm",
+ /* 156: 0 */ "single_lqm_rqm",
+ /* 157: 0 */ "single_9qm_lqm",
+ /* 158: 0 */ "single_9qm_rqm",
+ /* 159: 0 */ "single_rqm_9qm",
+ /* 160: 0 */ "double_lqm_rqm",
+ /* 161: 0 */ "double_9qm_lqm",
+ /* 162: 0 */ "double_9qm_rqm",
+ /* 163: 0 */ "double_rqm_9qm",
+ /* 164: 0 */ "morekeys_single_quote",
+ /* 165: 0 */ "morekeys_double_quote",
+ /* 166: 0 */ "morekeys_tablet_double_quote",
+ /* 167: 0 */ "keyspec_emoji_key",
};
private static final String EMPTY = "";
/* Default texts */
private static final String[] LANGUAGE_DEFAULT = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
- /* ~ more_keys_for_c */
+ /* ~ morekeys_c */
/* double_quotes */ "!text/double_lqm_rqm",
- /* more_keys_for_n */ EMPTY,
+ /* morekeys_n */ EMPTY,
/* single_quotes */ "!text/single_lqm_rqm",
// Label for "switch to alphabetic" key.
- /* label_to_alpha_key */ "ABC",
- /* more_keys_for_s ~ */
+ /* keylabel_to_alpha */ "ABC",
+ /* morekeys_s ~ */
EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
- /* ~ more_keys_for_g */
+ /* ~ morekeys_g */
/* single_angle_quotes */ "!text/single_laqm_raqm",
/* double_angle_quotes */ "!text/double_laqm_raqm",
- /* keylabel_for_currency */ "$",
- /* more_keys_for_r ~ */
+ /* keyspec_currency */ "$",
+ /* morekeys_r ~ */
EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
- /* ~ more_keys_for_nordic_row2_11 */
- /* keylabel_for_symbols_1 */ "1",
- /* keylabel_for_symbols_2 */ "2",
- /* keylabel_for_symbols_3 */ "3",
- /* keylabel_for_symbols_4 */ "4",
- /* keylabel_for_symbols_5 */ "5",
- /* keylabel_for_symbols_6 */ "6",
- /* keylabel_for_symbols_7 */ "7",
- /* keylabel_for_symbols_8 */ "8",
- /* keylabel_for_symbols_9 */ "9",
- /* keylabel_for_symbols_0 */ "0",
+ /* ~ morekeys_nordic_row2_11 */
+ /* keyspec_symbols_1 */ "1",
+ /* keyspec_symbols_2 */ "2",
+ /* keyspec_symbols_3 */ "3",
+ /* keyspec_symbols_4 */ "4",
+ /* keyspec_symbols_5 */ "5",
+ /* keyspec_symbols_6 */ "6",
+ /* keyspec_symbols_7 */ "7",
+ /* keyspec_symbols_8 */ "8",
+ /* keyspec_symbols_9 */ "9",
+ /* keyspec_symbols_0 */ "0",
// Label for "switch to symbols" key.
- /* label_to_symbol_key */ "?123",
- // Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
- // part because it'll be appended by the code.
- /* label_to_symbol_with_microphone_key */ "123",
- /* additional_more_keys_for_symbols_1 ~ */
+ /* keylabel_to_symbol */ "?123",
+ /* additional_morekeys_symbols_1 ~ */
EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
- /* ~ additional_more_keys_for_symbols_0 */
- /* more_keys_for_punctuation */ "!autoColumnOrder!8,\\,,?,!,#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,',@,:,-,\",+,\\%,&",
+ /* ~ additional_morekeys_symbols_0 */
+ /* morekeys_punctuation */ "!autoColumnOrder!8,\\,,?,!,#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,',@,:,-,\",+,\\%,&",
// U+2020: "†" DAGGER
// U+2021: "‡" DOUBLE DAGGER
// U+2605: "★" BLACK STAR
- /* more_keys_for_star */ "\u2020,\u2021,\u2605",
+ /* morekeys_star */ "\u2020,\u2021,\u2605",
// 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
@@ -316,113 +312,113 @@ public final class KeyboardTextsTable {
/* keyspec_right_double_angle_quote */ "\u00BB",
/* keyspec_left_single_angle_quote */ "\u2039",
/* keyspec_right_single_angle_quote */ "\u203A",
- /* keylabel_for_tablet_comma */ ",",
- /* more_keys_for_tablet_period */ "!text/more_keys_for_tablet_punctuation",
+ /* keyspec_tablet_comma */ ",",
+ /* morekeys_tablet_period */ "!text/morekeys_tablet_punctuation",
// U+00BF: "¿" INVERTED QUESTION MARK
- /* more_keys_for_question */ "\u00BF",
- /* more_keys_for_h ~ */
+ /* morekeys_question */ "\u00BF",
+ /* morekeys_h ~ */
EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
- /* ~ more_keys_for_swiss_row2_11 */
+ /* ~ morekeys_swiss_row2_11 */
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
- /* keylabel_for_spanish_row2_10 */ "\u00F1",
+ /* keyspec_spanish_row2_10 */ "\u00F1",
// U+266A: "♪" EIGHTH NOTE
// U+2665: "♥" BLACK HEART SUIT
// U+2660: "♠" BLACK SPADE SUIT
// U+2666: "♦" BLACK DIAMOND SUIT
// U+2663: "♣" BLACK CLUB SUIT
- /* more_keys_for_bullet */ "\u266A,\u2665,\u2660,\u2666,\u2663",
- /* more_keys_for_left_parenthesis */ "!fixedColumnOrder!3,!text/keyspecs_for_left_parenthesis_more_keys",
- /* more_keys_for_right_parenthesis */ "!fixedColumnOrder!3,!text/keyspecs_for_right_parenthesis_more_keys",
- /* more_keys_for_arabic_diacritics */ EMPTY,
+ /* morekeys_bullet */ "\u266A,\u2665,\u2660,\u2666,\u2663",
+ /* morekeys_left_parenthesis */ "!fixedColumnOrder!3,!text/keyspecs_left_parenthesis_more_keys",
+ /* morekeys_right_parenthesis */ "!fixedColumnOrder!3,!text/keyspecs_right_parenthesis_more_keys",
+ /* morekeys_arabic_diacritics */ EMPTY,
// Comma key
- /* keylabel_for_comma */ ",",
- /* keyhintlabel_for_tablet_comma ~ */
+ /* keyspec_comma */ ",",
+ /* keyhintlabel_tablet_comma ~ */
EMPTY, EMPTY, EMPTY,
- /* ~ keyhintlabel_for_period */
- /* more_keys_for_period */ "!text/more_keys_for_punctuation",
- /* keyhintlabel_for_tablet_period */ EMPTY,
- /* keylabel_for_symbols_question */ "?",
- /* keylabel_for_symbols_semicolon */ ";",
- /* keylabel_for_symbols_percent */ "%",
- /* more_keys_for_symbols_semicolon */ EMPTY,
+ /* ~ keyhintlabel_period */
+ /* morekeys_period */ "!text/morekeys_punctuation",
+ /* keyhintlabel_tablet_period */ EMPTY,
+ /* keyspec_symbols_question */ "?",
+ /* keyspec_symbols_semicolon */ ";",
+ /* keyspec_symbols_percent */ "%",
+ /* morekeys_symbols_semicolon */ EMPTY,
// U+2030: "‰" PER MILLE SIGN
- /* more_keys_for_symbols_percent */ "\u2030",
- /* more_keys_for_v ~ */
+ /* morekeys_symbols_percent */ "\u2030",
+ /* morekeys_v ~ */
EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
- /* ~ more_keys_for_east_slavic_row2_11 */
+ /* ~ morekeys_cyrillic_a */
// U+00A2: "¢" CENT SIGN
// U+00A3: "£" POUND SIGN
// U+20AC: "€" EURO SIGN
// U+00A5: "¥" YEN SIGN
// U+20B1: "₱" PESO SIGN
- /* more_keys_for_currency_dollar */ "\u00A2,\u00A3,\u20AC,\u00A5,\u20B1",
- /* more_keys_for_tablet_punctuation */ "!autoColumnOrder!7,\\,,',#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,@,:,-,\",+,\\%,&",
+ /* morekeys_currency_dollar */ "\u00A2,\u00A3,\u20AC,\u00A5,\u20B1",
+ /* morekeys_tablet_punctuation */ "!autoColumnOrder!7,\\,,',#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,@,:,-,\",+,\\%,&",
// U+00B1: "±" PLUS-MINUS SIGN
- /* more_keys_for_plus */ "\u00B1",
- /* more_keys_for_less_than */ "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_left_double_angle_quote",
- /* more_keys_for_greater_than */ "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_right_double_angle_quote",
+ /* morekeys_plus */ "\u00B1",
+ /* morekeys_less_than */ "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_left_double_angle_quote",
+ /* morekeys_greater_than */ "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_right_double_angle_quote",
// Period key
- /* keylabel_for_period */ ".",
- /* keylabel_for_tablet_period */ ".",
+ /* keyspec_period */ ".",
+ /* keyspec_tablet_period */ ".",
// U+00A1: "¡" INVERTED EXCLAMATION MARK
- /* more_keys_for_exclamation */ "\u00A1",
- /* more_keys_for_q */ EMPTY,
- /* more_keys_for_x */ EMPTY,
- /* keylabel_for_q */ "q",
- /* keylabel_for_w */ "w",
- /* keylabel_for_y */ "y",
- /* keylabel_for_x */ "x",
- /* more_keys_for_currency */ "$,\u00A2,\u20AC,\u00A3,\u00A5,\u20B1",
+ /* morekeys_exclamation */ "\u00A1",
+ /* morekeys_q */ EMPTY,
+ /* morekeys_x */ EMPTY,
+ /* keyspec_q */ "q",
+ /* keyspec_w */ "w",
+ /* keyspec_y */ "y",
+ /* keyspec_x */ "x",
+ /* morekeys_currency */ "$,\u00A2,\u20AC,\u00A3,\u00A5,\u20B1",
// U+00B9: "¹" SUPERSCRIPT ONE
// U+00BD: "½" VULGAR FRACTION ONE HALF
// U+2153: "⅓" VULGAR FRACTION ONE THIRD
// U+00BC: "¼" VULGAR FRACTION ONE QUARTER
// U+215B: "⅛" VULGAR FRACTION ONE EIGHTH
- /* more_keys_for_symbols_1 */ "\u00B9,\u00BD,\u2153,\u00BC,\u215B",
+ /* morekeys_symbols_1 */ "\u00B9,\u00BD,\u2153,\u00BC,\u215B",
// U+00B2: "²" SUPERSCRIPT TWO
// U+2154: "⅔" VULGAR FRACTION TWO THIRDS
- /* more_keys_for_symbols_2 */ "\u00B2,\u2154",
+ /* morekeys_symbols_2 */ "\u00B2,\u2154",
// U+00B3: "³" SUPERSCRIPT THREE
// U+00BE: "¾" VULGAR FRACTION THREE QUARTERS
// U+215C: "⅜" VULGAR FRACTION THREE EIGHTHS
- /* more_keys_for_symbols_3 */ "\u00B3,\u00BE,\u215C",
+ /* morekeys_symbols_3 */ "\u00B3,\u00BE,\u215C",
// U+2074: "⁴" SUPERSCRIPT FOUR
- /* more_keys_for_symbols_4 */ "\u2074",
+ /* morekeys_symbols_4 */ "\u2074",
// U+215D: "⅝" VULGAR FRACTION FIVE EIGHTHS
- /* more_keys_for_symbols_5 */ "\u215D",
- /* more_keys_for_symbols_6 */ EMPTY,
+ /* morekeys_symbols_5 */ "\u215D",
+ /* morekeys_symbols_6 */ EMPTY,
// U+215E: "⅞" VULGAR FRACTION SEVEN EIGHTHS
- /* more_keys_for_symbols_7 */ "\u215E",
- /* more_keys_for_symbols_8 */ EMPTY,
- /* more_keys_for_symbols_9 */ EMPTY,
+ /* morekeys_symbols_7 */ "\u215E",
+ /* morekeys_symbols_8 */ EMPTY,
+ /* morekeys_symbols_9 */ EMPTY,
// U+207F: "ⁿ" SUPERSCRIPT LATIN SMALL LETTER N
// U+2205: "∅" EMPTY SET
- /* more_keys_for_symbols_0 */ "\u207F,\u2205",
- /* more_keys_for_am_pm */ "!fixedColumnOrder!2,!hasLabels!,!text/label_time_am,!text/label_time_pm",
- /* settings_as_more_key */ "!icon/settings_key|!code/key_settings",
- /* shortcut_as_more_key */ "!icon/shortcut_key|!code/key_shortcut",
- /* action_next_as_more_key */ "!hasLabels!,!text/label_next_key|!code/key_action_next",
- /* action_previous_as_more_key */ "!hasLabels!,!text/label_previous_key|!code/key_action_previous",
+ /* morekeys_symbols_0 */ "\u207F,\u2205",
+ /* morekeys_am_pm */ "!fixedColumnOrder!2,!hasLabels!,!text/keylabel_time_am,!text/keylabel_time_pm",
+ /* keyspec_settings */ "!icon/settings_key|!code/key_settings",
+ /* keyspec_shortcut */ "!icon/shortcut_key|!code/key_shortcut",
+ /* keyspec_action_next */ "!hasLabels!,!text/label_next_key|!code/key_action_next",
+ /* keyspec_action_previous */ "!hasLabels!,!text/label_previous_key|!code/key_action_previous",
// Label for "switch to more symbol" modifier key ("= \ <"). Must be short to fit on key!
- /* label_to_more_symbol_key */ "= \\\\ <",
+ /* keylabel_to_more_symbol */ "= \\\\ <",
// Label for "switch to more symbol" modifier key on tablets. Must be short to fit on key!
- /* label_to_more_symbol_for_tablet_key */ "~ [ <",
+ /* keylabel_tablet_to_more_symbol */ "~ [ <",
// Label for "switch to phone numeric" key. Must be short to fit on key!
- /* label_to_phone_numeric_key */ "123",
+ /* keylabel_to_phone_numeric */ "123",
// Label for "switch to phone symbols" key. Must be short to fit on key!
// U+FF0A: "*" FULLWIDTH ASTERISK
// U+FF03: "#" FULLWIDTH NUMBER SIGN
- /* label_to_phone_symbols_key */ "\uFF0A\uFF03",
+ /* keylabel_to_phone_symbols */ "\uFF0A\uFF03",
// Key label for "ante meridiem"
- /* label_time_am */ "AM",
+ /* keylabel_time_am */ "AM",
// Key label for "post meridiem"
- /* label_time_pm */ "PM",
- /* keylabel_for_popular_domain */ ".com",
+ /* keylabel_time_pm */ "PM",
+ /* keyspec_popular_domain */ ".com",
// popular web domains for the locale - most popular, displayed on the keyboard
- /* more_keys_for_popular_domain */ "!hasLabels!,.net,.org,.gov,.edu",
- /* keyspecs_for_left_parenthesis_more_keys */ "!text/keyspec_less_than,!text/keyspec_left_curly_bracket,!text/keyspec_left_square_bracket",
- /* keyspecs_for_right_parenthesis_more_keys */ "!text/keyspec_greater_than,!text/keyspec_right_curly_bracket,!text/keyspec_right_square_bracket",
+ /* morekeys_popular_domain */ "!hasLabels!,.net,.org,.gov,.edu",
+ /* keyspecs_left_parenthesis_more_keys */ "!text/keyspec_less_than,!text/keyspec_left_curly_bracket,!text/keyspec_left_square_bracket",
+ /* keyspecs_right_parenthesis_more_keys */ "!text/keyspec_greater_than,!text/keyspec_right_curly_bracket,!text/keyspec_right_square_bracket",
// The following characters don't need BIDI mirroring.
// U+2018: "‘" LEFT SINGLE QUOTATION MARK
// U+2019: "’" RIGHT SINGLE QUOTATION MARK
@@ -454,10 +450,10 @@ public final class KeyboardTextsTable {
/* double_9qm_lqm */ "\u201D,\u201E,\u201C",
/* double_9qm_rqm */ "\u201C,\u201E,\u201D",
/* double_rqm_9qm */ "\u201C,\u201D,\u201E",
- /* more_keys_for_single_quote */ "!fixedColumnOrder!5,!text/single_quotes,!text/single_angle_quotes",
- /* more_keys_for_double_quote */ "!fixedColumnOrder!5,!text/double_quotes,!text/double_angle_quotes",
- /* more_keys_for_tablet_double_quote */ "!fixedColumnOrder!6,!text/double_quotes,!text/single_quotes,!text/double_angle_quotes,!text/single_angle_quotes",
- /* emoji_key_as_more_key */ "!icon/emoji_key|!code/key_emoji",
+ /* morekeys_single_quote */ "!fixedColumnOrder!5,!text/single_quotes,!text/single_angle_quotes",
+ /* morekeys_double_quote */ "!fixedColumnOrder!5,!text/double_quotes,!text/double_angle_quotes",
+ /* morekeys_tablet_double_quote */ "!fixedColumnOrder!6,!text/double_quotes,!text/single_quotes,!text/double_angle_quotes,!text/single_angle_quotes",
+ /* keyspec_emoji_key */ "!icon/emoji_key|!code/key_emoji",
};
/* Language af: Afrikaans */
@@ -471,7 +467,7 @@ public final class KeyboardTextsTable {
// U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE
// U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
// U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
- /* more_keys_for_a */ "\u00E1,\u00E2,\u00E4,\u00E0,\u00E6,\u00E3,\u00E5,\u0101",
+ /* morekeys_a */ "\u00E1,\u00E2,\u00E4,\u00E0,\u00E6,\u00E3,\u00E5,\u0101",
// U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
// U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
@@ -480,13 +476,13 @@ public final class KeyboardTextsTable {
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
- /* more_keys_for_o */ "\u00F3,\u00F4,\u00F6,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
+ /* morekeys_o */ "\u00F3,\u00F4,\u00F6,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00FA,\u00FB,\u00FC,\u00F9,\u016B",
+ /* morekeys_u */ "\u00FA,\u00FB,\u00FC,\u00F9,\u016B",
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
// U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX
@@ -494,7 +490,7 @@ public final class KeyboardTextsTable {
// U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
// U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
- /* more_keys_for_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113",
+ /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113",
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
@@ -502,23 +498,23 @@ public final class KeyboardTextsTable {
// U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
// U+0133: "ij" LATIN SMALL LIGATURE IJ
- /* more_keys_for_i */ "\u00ED,\u00EC,\u00EF,\u00EE,\u012F,\u012B,\u0133",
- /* more_keys_for_c */ null,
+ /* morekeys_i */ "\u00ED,\u00EC,\u00EF,\u00EE,\u012F,\u012B,\u0133",
+ /* morekeys_c */ null,
/* double_quotes */ null,
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
// U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
- /* more_keys_for_n */ "\u00F1,\u0144",
+ /* morekeys_n */ "\u00F1,\u0144",
/* single_quotes ~ */
null, null, null,
- /* ~ more_keys_for_s */
+ /* ~ morekeys_s */
// U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
// U+0133: "ij" LATIN SMALL LIGATURE IJ
- /* more_keys_for_y */ "\u00FD,\u0133",
+ /* morekeys_y */ "\u00FD,\u0133",
};
/* Language ar: Arabic */
private static final String[] LANGUAGE_ar = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null, null, null, null, null,
/* ~ single_quotes */
// Label for "switch to alphabetic" key.
@@ -526,53 +522,50 @@ public final class KeyboardTextsTable {
// U+200C: ZERO WIDTH NON-JOINER
// U+0628: "ب" ARABIC LETTER BEH
// U+062C: "ج" ARABIC LETTER JEEM
- /* label_to_alpha_key */ "\u0623\u200C\u0628\u200C\u062C",
- /* more_keys_for_s ~ */
+ /* keylabel_to_alpha */ "\u0623\u200C\u0628\u200C\u062C",
+ /* morekeys_s ~ */
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_nordic_row2_11 */
+ /* ~ morekeys_nordic_row2_11 */
// U+0661: "١" ARABIC-INDIC DIGIT ONE
- /* keylabel_for_symbols_1 */ "\u0661",
+ /* keyspec_symbols_1 */ "\u0661",
// U+0662: "٢" ARABIC-INDIC DIGIT TWO
- /* keylabel_for_symbols_2 */ "\u0662",
+ /* keyspec_symbols_2 */ "\u0662",
// U+0663: "٣" ARABIC-INDIC DIGIT THREE
- /* keylabel_for_symbols_3 */ "\u0663",
+ /* keyspec_symbols_3 */ "\u0663",
// U+0664: "٤" ARABIC-INDIC DIGIT FOUR
- /* keylabel_for_symbols_4 */ "\u0664",
+ /* keyspec_symbols_4 */ "\u0664",
// U+0665: "٥" ARABIC-INDIC DIGIT FIVE
- /* keylabel_for_symbols_5 */ "\u0665",
+ /* keyspec_symbols_5 */ "\u0665",
// U+0666: "٦" ARABIC-INDIC DIGIT SIX
- /* keylabel_for_symbols_6 */ "\u0666",
+ /* keyspec_symbols_6 */ "\u0666",
// U+0667: "٧" ARABIC-INDIC DIGIT SEVEN
- /* keylabel_for_symbols_7 */ "\u0667",
+ /* keyspec_symbols_7 */ "\u0667",
// U+0668: "٨" ARABIC-INDIC DIGIT EIGHT
- /* keylabel_for_symbols_8 */ "\u0668",
+ /* keyspec_symbols_8 */ "\u0668",
// U+0669: "٩" ARABIC-INDIC DIGIT NINE
- /* keylabel_for_symbols_9 */ "\u0669",
+ /* keyspec_symbols_9 */ "\u0669",
// U+0660: "٠" ARABIC-INDIC DIGIT ZERO
- /* keylabel_for_symbols_0 */ "\u0660",
+ /* keyspec_symbols_0 */ "\u0660",
// Label for "switch to symbols" key.
// U+061F: "؟" ARABIC QUESTION MARK
- /* label_to_symbol_key */ "\u0663\u0662\u0661\u061F",
- // Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
- // part because it'll be appended by the code.
- /* label_to_symbol_with_microphone_key */ "\u0663\u0662\u0661",
- /* additional_more_keys_for_symbols_1 */ "1",
- /* additional_more_keys_for_symbols_2 */ "2",
- /* additional_more_keys_for_symbols_3 */ "3",
- /* additional_more_keys_for_symbols_4 */ "4",
- /* additional_more_keys_for_symbols_5 */ "5",
- /* additional_more_keys_for_symbols_6 */ "6",
- /* additional_more_keys_for_symbols_7 */ "7",
- /* additional_more_keys_for_symbols_8 */ "8",
- /* additional_more_keys_for_symbols_9 */ "9",
+ /* keylabel_to_symbol */ "\u0663\u0662\u0661\u061F",
+ /* additional_morekeys_symbols_1 */ "1",
+ /* additional_morekeys_symbols_2 */ "2",
+ /* additional_morekeys_symbols_3 */ "3",
+ /* additional_morekeys_symbols_4 */ "4",
+ /* additional_morekeys_symbols_5 */ "5",
+ /* additional_morekeys_symbols_6 */ "6",
+ /* additional_morekeys_symbols_7 */ "7",
+ /* additional_morekeys_symbols_8 */ "8",
+ /* additional_morekeys_symbols_9 */ "9",
// U+066B: "٫" ARABIC DECIMAL SEPARATOR
// U+066C: "٬" ARABIC THOUSANDS SEPARATOR
- /* additional_more_keys_for_symbols_0 */ "0,\u066B,\u066C",
- /* more_keys_for_punctuation */ null,
+ /* additional_morekeys_symbols_0 */ "0,\u066B,\u066C",
+ /* morekeys_punctuation */ null,
// U+2605: "★" BLACK STAR
// U+066D: "٭" ARABIC FIVE POINTED STAR
- /* more_keys_for_star */ "\u2605,\u066D",
+ /* morekeys_star */ "\u2605,\u066D",
// U+2264: "≤" LESS-THAN OR EQUAL TO
// U+2265: "≥" GREATER-THAN EQUAL TO
// U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
@@ -596,22 +589,22 @@ public final class KeyboardTextsTable {
// U+061F: "؟" ARABIC QUESTION MARK
// U+060C: "،" ARABIC COMMA
// U+061B: "؛" ARABIC SEMICOLON
- /* keylabel_for_tablet_comma */ "\u060C",
- /* more_keys_for_tablet_period */ "!text/more_keys_for_arabic_diacritics",
+ /* keyspec_tablet_comma */ "\u060C",
+ /* morekeys_tablet_period */ "!text/morekeys_arabic_diacritics",
// U+00BF: "¿" INVERTED QUESTION MARK
- /* more_keys_for_question */ "?,\u00BF",
- /* more_keys_for_h ~ */
+ /* morekeys_question */ "?,\u00BF",
+ /* morekeys_h ~ */
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null,
- /* ~ keylabel_for_spanish_row2_10 */
+ /* ~ keyspec_spanish_row2_10 */
// U+266A: "♪" EIGHTH NOTE
- /* more_keys_for_bullet */ "\u266A",
+ /* morekeys_bullet */ "\u266A",
// The all letters need to be mirrored are found at
// http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
// U+FD3E: "﴾" ORNATE LEFT PARENTHESIS
// U+FD3F: "﴿" ORNATE RIGHT PARENTHESIS
- /* more_keys_for_left_parenthesis */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,!text/keyspecs_for_left_parenthesis_more_keys",
- /* more_keys_for_right_parenthesis */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,!text/keyspecs_for_right_parenthesis_more_keys",
+ /* morekeys_left_parenthesis */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,!text/keyspecs_left_parenthesis_more_keys",
+ /* morekeys_right_parenthesis */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,!text/keyspecs_right_parenthesis_more_keys",
// U+0655: "ٕ" ARABIC HAMZA BELOW
// U+0654: "ٔ" ARABIC HAMZA ABOVE
// U+0652: "ْ" ARABIC SUKUN
@@ -628,28 +621,28 @@ public final class KeyboardTextsTable {
// U+0640: "ـ" ARABIC TATWEEL
// In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label.
// Note: The space character is needed as a preceding letter to draw Arabic diacritics characters correctly.
- /* more_keys_for_arabic_diacritics */ "!fixedColumnOrder!7, \u0655|\u0655, \u0654|\u0654, \u0652|\u0652, \u064D|\u064D, \u064C|\u064C, \u064B|\u064B, \u0651|\u0651, \u0656|\u0656, \u0670|\u0670, \u0653|\u0653, \u0650|\u0650, \u064F|\u064F, \u064E|\u064E,\u0640\u0640\u0640|\u0640",
+ /* morekeys_arabic_diacritics */ "!fixedColumnOrder!7, \u0655|\u0655, \u0654|\u0654, \u0652|\u0652, \u064D|\u064D, \u064C|\u064C, \u064B|\u064B, \u0651|\u0651, \u0656|\u0656, \u0670|\u0670, \u0653|\u0653, \u0650|\u0650, \u064F|\u064F, \u064E|\u064E,\u0640\u0640\u0640|\u0640",
// U+060C: "،" ARABIC COMMA
- /* keylabel_for_comma */ "\u060C",
- /* keyhintlabel_for_tablet_comma */ "\u061F",
- /* more_keys_for_tablet_comma */ "!fixedColumnOrder!4,:,!,\u061F,\u061B,-,/,\",\'",
+ /* keyspec_comma */ "\u060C",
+ /* keyhintlabel_tablet_comma */ "\u061F",
+ /* morekeys_tablet_comma */ "!fixedColumnOrder!4,:,!,\u061F,\u061B,-,/,\",\'",
// U+0651: "ّ" ARABIC SHADDA
- /* keyhintlabel_for_period */ "\u0651",
- /* more_keys_for_period */ "!text/more_keys_for_arabic_diacritics",
- /* keyhintlabel_for_tablet_period */ "\u0651",
- /* keylabel_for_symbols_question */ "\u061F",
- /* keylabel_for_symbols_semicolon */ "\u061B",
+ /* keyhintlabel_period */ "\u0651",
+ /* morekeys_period */ "!text/morekeys_arabic_diacritics",
+ /* keyhintlabel_tablet_period */ "\u0651",
+ /* keyspec_symbols_question */ "\u061F",
+ /* keyspec_symbols_semicolon */ "\u061B",
// U+066A: "٪" ARABIC PERCENT SIGN
- /* keylabel_for_symbols_percent */ "\u066A",
- /* more_keys_for_symbols_semicolon */ ";",
+ /* keyspec_symbols_percent */ "\u066A",
+ /* morekeys_symbols_semicolon */ ";",
// U+2030: "‰" PER MILLE SIGN
- /* more_keys_for_symbols_percent */ "\\%,\u2030",
+ /* morekeys_symbols_percent */ "\\%,\u2030",
};
/* Language az_AZ: Azerbaijani (Azerbaijan) */
private static final String[] LANGUAGE_az_AZ = {
// U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX
- /* more_keys_for_a */ "\u00E2",
+ /* morekeys_a */ "\u00E2",
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
// U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
// U+0153: "œ" LATIN SMALL LIGATURE OE
@@ -658,15 +651,15 @@ public final class KeyboardTextsTable {
// U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
- /* more_keys_for_o */ "\u00F6,\u00F4,\u0153,\u00F2,\u00F3,\u00F5,\u00F8,\u014D",
+ /* morekeys_o */ "\u00F6,\u00F4,\u0153,\u00F2,\u00F3,\u00F5,\u00F8,\u014D",
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B",
+ /* morekeys_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B",
// U+0259: "ə" LATIN SMALL LETTER SCHWA
- /* more_keys_for_e */ "\u0259",
+ /* morekeys_e */ "\u0259",
// U+0131: "ı" LATIN SMALL LETTER DOTLESS I
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
@@ -674,73 +667,73 @@ public final class KeyboardTextsTable {
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
- /* more_keys_for_i */ "\u0131,\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B",
+ /* morekeys_i */ "\u0131,\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B",
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
// U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
// U+010D: "č" LATIN SMALL LETTER C WITH CARON
- /* more_keys_for_c */ "\u00E7,\u0107,\u010D",
+ /* morekeys_c */ "\u00E7,\u0107,\u010D",
/* double_quotes ~ */
null, null, null, null,
- /* ~ label_to_alpha_key */
+ /* ~ keylabel_to_alpha */
// U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA
// U+00DF: "ß" LATIN SMALL LETTER SHARP S
// U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
// U+0161: "š" LATIN SMALL LETTER S WITH CARON
- /* more_keys_for_s */ "\u015F,\u00DF,\u015B,\u0161",
- /* more_keys_for_y ~ */
+ /* morekeys_s */ "\u015F,\u00DF,\u015B,\u0161",
+ /* morekeys_y ~ */
null, null, null, null, null,
- /* ~ more_keys_for_l */
+ /* ~ morekeys_l */
// U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
- /* more_keys_for_g */ "\u011F",
+ /* morekeys_g */ "\u011F",
};
/* Language be_BY: Belarusian (Belarus) */
private static final String[] LANGUAGE_be_BY = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null, null,
- /* ~ more_keys_for_c */
+ /* ~ morekeys_c */
/* double_quotes */ "!text/double_9qm_lqm",
- /* more_keys_for_n */ null,
+ /* morekeys_n */ null,
/* single_quotes */ "!text/single_9qm_lqm",
// Label for "switch to alphabetic" key.
// U+0410: "А" CYRILLIC CAPITAL LETTER A
// U+0411: "Б" CYRILLIC CAPITAL LETTER BE
// U+0412: "В" CYRILLIC CAPITAL LETTER VE
- /* label_to_alpha_key */ "\u0410\u0411\u0412",
- /* more_keys_for_s ~ */
+ /* keylabel_to_alpha */ "\u0410\u0411\u0412",
+ /* morekeys_s ~ */
null, null, null, null, null, null, null, null, null, null, null, null,
- /* ~ more_keys_for_k */
+ /* ~ morekeys_k */
// U+0451: "ё" CYRILLIC SMALL LETTER IO
- /* more_keys_for_cyrillic_ie */ "\u0451",
- /* keylabel_for_nordic_row1_11 ~ */
+ /* morekeys_cyrillic_ie */ "\u0451",
+ /* keyspec_nordic_row1_11 ~ */
null, null, null, null,
- /* ~ more_keys_for_nordic_row2_10 */
+ /* ~ morekeys_nordic_row2_10 */
// U+045E: "ў" CYRILLIC SMALL LETTER SHORT U
- /* keylabel_for_east_slavic_row1_9 */ "\u045E",
+ /* keyspec_east_slavic_row1_9 */ "\u045E",
// U+044B: "ы" CYRILLIC SMALL LETTER YERU
- /* keylabel_for_east_slavic_row2_2 */ "\u044B",
+ /* keyspec_east_slavic_row2_2 */ "\u044B",
// U+044D: "э" CYRILLIC SMALL LETTER E
- /* keylabel_for_east_slavic_row2_11 */ "\u044D",
+ /* keyspec_east_slavic_row2_11 */ "\u044D",
// U+0456: "і" CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
- /* keylabel_for_east_slavic_row3_5 */ "\u0456",
+ /* keyspec_east_slavic_row3_5 */ "\u0456",
// U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN
- /* more_keys_for_cyrillic_soft_sign */ "\u044A",
+ /* morekeys_cyrillic_soft_sign */ "\u044A",
};
/* Language bg: Bulgarian */
private static final String[] LANGUAGE_bg = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null, null,
- /* ~ more_keys_for_c */
+ /* ~ morekeys_c */
// single_quotes of Bulgarian is default single_quotes_right_left.
/* double_quotes */ "!text/double_9qm_lqm",
- /* more_keys_for_n */ null,
+ /* morekeys_n */ null,
/* single_quotes */ null,
// Label for "switch to alphabetic" key.
// U+0410: "А" CYRILLIC CAPITAL LETTER A
// U+0411: "Б" CYRILLIC CAPITAL LETTER BE
// U+0412: "В" CYRILLIC CAPITAL LETTER VE
- /* label_to_alpha_key */ "\u0410\u0411\u0412",
+ /* keylabel_to_alpha */ "\u0410\u0411\u0412",
};
/* Language ca: Catalan */
@@ -755,7 +748,7 @@ public final class KeyboardTextsTable {
// U+00E6: "æ" LATIN SMALL LETTER AE
// U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
// U+00AA: "ª" FEMININE ORDINAL INDICATOR
- /* more_keys_for_a */ "\u00E0,\u00E1,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA",
+ /* morekeys_a */ "\u00E0,\u00E1,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA",
// U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE
// U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
@@ -765,13 +758,13 @@ public final class KeyboardTextsTable {
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
// U+00BA: "º" MASCULINE ORDINAL INDICATOR
- /* more_keys_for_o */ "\u00F2,\u00F3,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA",
+ /* morekeys_o */ "\u00F2,\u00F3,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA",
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
+ /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS
@@ -779,47 +772,47 @@ public final class KeyboardTextsTable {
// U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
// U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
- /* more_keys_for_e */ "\u00E8,\u00E9,\u00EB,\u00EA,\u0119,\u0117,\u0113",
+ /* morekeys_e */ "\u00E8,\u00E9,\u00EB,\u00EA,\u0119,\u0117,\u0113",
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
- /* more_keys_for_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
+ /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
// U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
// U+010D: "č" LATIN SMALL LETTER C WITH CARON
- /* more_keys_for_c */ "\u00E7,\u0107,\u010D",
+ /* morekeys_c */ "\u00E7,\u0107,\u010D",
/* double_quotes */ null,
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
// U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
- /* more_keys_for_n */ "\u00F1,\u0144",
+ /* morekeys_n */ "\u00F1,\u0144",
/* single_quotes ~ */
null, null, null, null, null, null, null,
- /* ~ more_keys_for_t */
+ /* ~ morekeys_t */
// U+00B7: "·" MIDDLE DOT
// U+0142: "ł" LATIN SMALL LETTER L WITH STROKE
- /* more_keys_for_l */ "l\u00B7l,\u0142",
- /* more_keys_for_g ~ */
+ /* morekeys_l */ "l\u00B7l,\u0142",
+ /* morekeys_g ~ */
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,
- /* ~ additional_more_keys_for_symbols_0 */
+ null, null, null, null, null, null, null, null,
+ /* ~ additional_morekeys_symbols_0 */
// U+00B7: "·" MIDDLE DOT
- /* more_keys_for_punctuation */ "!autoColumnOrder!9,\\,,?,!,\u00B7,#,),(,/,;,',@,:,-,\",+,\\%,&",
- /* more_keys_for_star ~ */
+ /* morekeys_punctuation */ "!autoColumnOrder!9,\\,,?,!,\u00B7,#,),(,/,;,',@,:,-,\",+,\\%,&",
+ /* morekeys_star ~ */
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_swiss_row2_11 */
+ /* ~ morekeys_swiss_row2_11 */
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
- /* keylabel_for_spanish_row2_10 */ "\u00E7",
- /* more_keys_for_bullet ~ */
+ /* keyspec_spanish_row2_10 */ "\u00E7",
+ /* morekeys_bullet ~ */
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null,
- /* ~ more_keys_for_currency_dollar */
- /* more_keys_for_tablet_punctuation */ "!autoColumnOrder!8,\\,,',\u00B7,#,),(,/,;,@,:,-,\",+,\\%,&",
+ /* ~ morekeys_currency_dollar */
+ /* morekeys_tablet_punctuation */ "!autoColumnOrder!8,\\,,',\u00B7,#,),(,/,;,@,:,-,\",+,\\%,&",
};
/* Language cs: Czech */
@@ -832,7 +825,7 @@ public final class KeyboardTextsTable {
// U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE
// U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
// U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
- /* more_keys_for_a */ "\u00E1,\u00E0,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
+ /* morekeys_a */ "\u00E1,\u00E0,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
// U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
// U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
@@ -841,14 +834,14 @@ public final class KeyboardTextsTable {
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
- /* more_keys_for_o */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
+ /* morekeys_o */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+016F: "ů" LATIN SMALL LETTER U WITH RING ABOVE
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00FA,\u016F,\u00FB,\u00FC,\u00F9,\u016B",
+ /* morekeys_u */ "\u00FA,\u016F,\u00FB,\u00FC,\u00F9,\u016B",
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+011B: "ě" LATIN SMALL LETTER E WITH CARON
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
@@ -857,47 +850,47 @@ public final class KeyboardTextsTable {
// U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
// U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
- /* more_keys_for_e */ "\u00E9,\u011B,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113",
+ /* morekeys_e */ "\u00E9,\u011B,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113",
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
// U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
- /* more_keys_for_i */ "\u00ED,\u00EE,\u00EF,\u00EC,\u012F,\u012B",
+ /* morekeys_i */ "\u00ED,\u00EE,\u00EF,\u00EC,\u012F,\u012B",
// U+010D: "č" LATIN SMALL LETTER C WITH CARON
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
// U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
- /* more_keys_for_c */ "\u010D,\u00E7,\u0107",
+ /* morekeys_c */ "\u010D,\u00E7,\u0107",
/* double_quotes */ "!text/double_9qm_lqm",
// U+0148: "ň" LATIN SMALL LETTER N WITH CARON
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
// U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
- /* more_keys_for_n */ "\u0148,\u00F1,\u0144",
+ /* morekeys_n */ "\u0148,\u00F1,\u0144",
/* single_quotes */ "!text/single_9qm_lqm",
- /* label_to_alpha_key */ null,
+ /* keylabel_to_alpha */ null,
// U+0161: "š" LATIN SMALL LETTER S WITH CARON
// U+00DF: "ß" LATIN SMALL LETTER SHARP S
// U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
- /* more_keys_for_s */ "\u0161,\u00DF,\u015B",
+ /* morekeys_s */ "\u0161,\u00DF,\u015B",
// U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
// U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
- /* more_keys_for_y */ "\u00FD,\u00FF",
+ /* morekeys_y */ "\u00FD,\u00FF",
// U+010F: "ď" LATIN SMALL LETTER D WITH CARON
- /* more_keys_for_d */ "\u010F",
+ /* morekeys_d */ "\u010F",
// U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
// U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
// U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
- /* more_keys_for_z */ "\u017E,\u017A,\u017C",
+ /* morekeys_z */ "\u017E,\u017A,\u017C",
// U+0165: "ť" LATIN SMALL LETTER T WITH CARON
- /* more_keys_for_t */ "\u0165",
- /* more_keys_for_l */ null,
- /* more_keys_for_g */ null,
+ /* morekeys_t */ "\u0165",
+ /* morekeys_l */ null,
+ /* morekeys_g */ null,
/* single_angle_quotes */ "!text/single_raqm_laqm",
/* double_angle_quotes */ "!text/double_raqm_laqm",
- /* keylabel_for_currency */ null,
+ /* keyspec_currency */ null,
// U+0159: "ř" LATIN SMALL LETTER R WITH CARON
- /* more_keys_for_r */ "\u0159",
+ /* morekeys_r */ "\u0159",
};
/* Language da: Danish */
@@ -908,65 +901,65 @@ public final class KeyboardTextsTable {
// U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX
// U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE
// U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
- /* more_keys_for_a */ "\u00E1,\u00E4,\u00E0,\u00E2,\u00E3,\u0101",
+ /* morekeys_a */ "\u00E1,\u00E4,\u00E0,\u00E2,\u00E3,\u0101",
// U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
// U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
// U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE
// U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
- /* more_keys_for_o */ "\u00F3,\u00F4,\u00F2,\u00F5,\u0153,\u014D",
+ /* morekeys_o */ "\u00F3,\u00F4,\u00F2,\u00F5,\u0153,\u014D",
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00FA,\u00FC,\u00FB,\u00F9,\u016B",
+ /* morekeys_u */ "\u00FA,\u00FC,\u00FB,\u00F9,\u016B",
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS
- /* more_keys_for_e */ "\u00E9,\u00EB",
+ /* morekeys_e */ "\u00E9,\u00EB",
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
- /* more_keys_for_i */ "\u00ED,\u00EF",
- /* more_keys_for_c */ null,
+ /* morekeys_i */ "\u00ED,\u00EF",
+ /* morekeys_c */ null,
/* double_quotes */ "!text/double_9qm_lqm",
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
// U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
- /* more_keys_for_n */ "\u00F1,\u0144",
+ /* morekeys_n */ "\u00F1,\u0144",
/* single_quotes */ "!text/single_9qm_lqm",
- /* label_to_alpha_key */ null,
+ /* keylabel_to_alpha */ null,
// U+00DF: "ß" LATIN SMALL LETTER SHARP S
// U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
// U+0161: "š" LATIN SMALL LETTER S WITH CARON
- /* more_keys_for_s */ "\u00DF,\u015B,\u0161",
+ /* morekeys_s */ "\u00DF,\u015B,\u0161",
// U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
// U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
- /* more_keys_for_y */ "\u00FD,\u00FF",
+ /* morekeys_y */ "\u00FD,\u00FF",
// U+00F0: "ð" LATIN SMALL LETTER ETH
- /* more_keys_for_d */ "\u00F0",
- /* more_keys_for_z */ null,
- /* more_keys_for_t */ null,
+ /* morekeys_d */ "\u00F0",
+ /* morekeys_z */ null,
+ /* morekeys_t */ null,
// U+0142: "ł" LATIN SMALL LETTER L WITH STROKE
- /* more_keys_for_l */ "\u0142",
- /* more_keys_for_g */ null,
+ /* morekeys_l */ "\u0142",
+ /* morekeys_g */ null,
/* single_angle_quotes */ "!text/single_raqm_laqm",
/* double_angle_quotes */ "!text/double_raqm_laqm",
- /* keylabel_for_currency ~ */
+ /* keyspec_currency ~ */
null, null, null, null,
- /* ~ more_keys_for_cyrillic_ie */
+ /* ~ morekeys_cyrillic_ie */
// U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
- /* keylabel_for_nordic_row1_11 */ "\u00E5",
+ /* keyspec_nordic_row1_11 */ "\u00E5",
// U+00E6: "æ" LATIN SMALL LETTER AE
- /* keylabel_for_nordic_row2_10 */ "\u00E6",
+ /* keyspec_nordic_row2_10 */ "\u00E6",
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
- /* keylabel_for_nordic_row2_11 */ "\u00F8",
+ /* keyspec_nordic_row2_11 */ "\u00F8",
// U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS
- /* more_keys_for_nordic_row2_10 */ "\u00E4",
- /* keylabel_for_east_slavic_row1_9 ~ */
+ /* morekeys_nordic_row2_10 */ "\u00E4",
+ /* keyspec_east_slavic_row1_9 ~ */
null, null, null, null, null,
- /* ~ more_keys_for_cyrillic_soft_sign */
+ /* ~ morekeys_cyrillic_soft_sign */
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
- /* more_keys_for_nordic_row2_11 */ "\u00F6",
+ /* morekeys_nordic_row2_11 */ "\u00F6",
};
/* Language de: German */
@@ -979,7 +972,7 @@ public final class KeyboardTextsTable {
// U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE
// U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
// U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
- /* more_keys_for_a */ "\u00E4,\u00E2,\u00E0,\u00E1,\u00E6,\u00E3,\u00E5,\u0101",
+ /* morekeys_a */ "\u00E4,\u00E2,\u00E0,\u00E1,\u00E6,\u00E3,\u00E5,\u0101",
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
// U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
// U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE
@@ -988,67 +981,67 @@ public final class KeyboardTextsTable {
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
- /* more_keys_for_o */ "\u00F6,\u00F4,\u00F2,\u00F3,\u00F5,\u0153,\u00F8,\u014D",
+ /* morekeys_o */ "\u00F6,\u00F4,\u00F2,\u00F3,\u00F5,\u0153,\u00F8,\u014D",
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B",
+ /* morekeys_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B",
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
// U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX
// U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS
// U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
- /* more_keys_for_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0117",
- /* more_keys_for_i */ null,
- /* more_keys_for_c */ null,
+ /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0117",
+ /* morekeys_i */ null,
+ /* morekeys_c */ null,
/* double_quotes */ "!text/double_9qm_lqm",
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
// U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
- /* more_keys_for_n */ "\u00F1,\u0144",
+ /* morekeys_n */ "\u00F1,\u0144",
/* single_quotes */ "!text/single_9qm_lqm",
- /* label_to_alpha_key */ null,
+ /* keylabel_to_alpha */ null,
// U+00DF: "ß" LATIN SMALL LETTER SHARP S
// U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
// U+0161: "š" LATIN SMALL LETTER S WITH CARON
- /* more_keys_for_s */ "\u00DF,\u015B,\u0161",
- /* more_keys_for_y ~ */
+ /* morekeys_s */ "\u00DF,\u015B,\u0161",
+ /* morekeys_y ~ */
null, null, null, null, null, null,
- /* ~ more_keys_for_g */
+ /* ~ morekeys_g */
/* single_angle_quotes */ "!text/single_raqm_laqm",
/* double_angle_quotes */ "!text/double_raqm_laqm",
- /* keylabel_for_currency ~ */
+ /* keyspec_currency ~ */
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_i */
+ null, null, null, null, null, null,
+ /* ~ keyspec_south_slavic_row3_8 */
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
- /* keylabel_for_swiss_row1_11 */ "\u00FC",
+ /* keyspec_swiss_row1_11 */ "\u00FC",
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
- /* keylabel_for_swiss_row2_10 */ "\u00F6",
+ /* keyspec_swiss_row2_10 */ "\u00F6",
// U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS
- /* keylabel_for_swiss_row2_11 */ "\u00E4",
+ /* keyspec_swiss_row2_11 */ "\u00E4",
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
- /* more_keys_for_swiss_row1_11 */ "\u00E8",
+ /* morekeys_swiss_row1_11 */ "\u00E8",
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
- /* more_keys_for_swiss_row2_10 */ "\u00E9",
+ /* morekeys_swiss_row2_10 */ "\u00E9",
// U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE
- /* more_keys_for_swiss_row2_11 */ "\u00E0",
+ /* morekeys_swiss_row2_11 */ "\u00E0",
};
/* Language el: Greek */
private static final String[] LANGUAGE_el = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null, null, null, null, null,
/* ~ single_quotes */
// Label for "switch to alphabetic" key.
// U+0391: "Α" GREEK CAPITAL LETTER ALPHA
// U+0392: "Β" GREEK CAPITAL LETTER BETA
// U+0393: "Γ" GREEK CAPITAL LETTER GAMMA
- /* label_to_alpha_key */ "\u0391\u0392\u0393",
+ /* keylabel_to_alpha */ "\u0391\u0392\u0393",
};
/* Language en: English */
@@ -1061,7 +1054,7 @@ public final class KeyboardTextsTable {
// U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE
// U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
// U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
- /* more_keys_for_a */ "\u00E0,\u00E1,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
+ /* morekeys_a */ "\u00E0,\u00E1,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
// U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
// U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE
@@ -1070,34 +1063,34 @@ public final class KeyboardTextsTable {
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
// U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE
- /* more_keys_for_o */ "\u00F4,\u00F6,\u00F2,\u00F3,\u0153,\u00F8,\u014D,\u00F5",
+ /* morekeys_o */ "\u00F4,\u00F6,\u00F2,\u00F3,\u0153,\u00F8,\u014D,\u00F5",
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00FB,\u00FC,\u00F9,\u00FA,\u016B",
+ /* morekeys_u */ "\u00FB,\u00FC,\u00F9,\u00FA,\u016B",
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX
// U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
- /* more_keys_for_e */ "\u00E8,\u00E9,\u00EA,\u00EB,\u0113",
+ /* morekeys_e */ "\u00E8,\u00E9,\u00EA,\u00EB,\u0113",
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
- /* more_keys_for_i */ "\u00EE,\u00EF,\u00ED,\u012B,\u00EC",
+ /* morekeys_i */ "\u00EE,\u00EF,\u00ED,\u012B,\u00EC",
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
- /* more_keys_for_c */ "\u00E7",
+ /* morekeys_c */ "\u00E7",
/* double_quotes */ null,
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
- /* more_keys_for_n */ "\u00F1",
+ /* morekeys_n */ "\u00F1",
/* single_quotes */ null,
- /* label_to_alpha_key */ null,
+ /* keylabel_to_alpha */ null,
// U+00DF: "ß" LATIN SMALL LETTER SHARP S
- /* more_keys_for_s */ "\u00DF",
+ /* morekeys_s */ "\u00DF",
};
/* Language eo: Esperanto */
@@ -1113,7 +1106,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 */ "\u00E1,\u00E0,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101,\u0103,\u0105,\u00AA",
+ /* morekeys_a */ "\u00E1,\u00E0,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101,\u0103,\u0105,\u00AA",
// U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
// U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
@@ -1124,7 +1117,7 @@ public final class KeyboardTextsTable {
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
// U+0151: "ő" LATIN SMALL LETTER O WITH DOUBLE ACUTE
// U+00BA: "º" MASCULINE ORDINAL INDICATOR
- /* more_keys_for_o */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D,\u0151,\u00BA",
+ /* morekeys_o */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D,\u0151,\u00BA",
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+016F: "ů" LATIN SMALL LETTER U WITH RING ABOVE
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
@@ -1135,7 +1128,7 @@ public final class KeyboardTextsTable {
// U+0171: "ű" LATIN SMALL LETTER U WITH DOUBLE ACUTE
// U+0173: "ų" LATIN SMALL LETTER U WITH OGONEK
// U+00B5: "µ" MICRO SIGN
- /* more_keys_for_u */ "\u00FA,\u016F,\u00FB,\u00FC,\u00F9,\u016B,\u0169,\u0171,\u0173,\u00B5",
+ /* morekeys_u */ "\u00FA,\u016F,\u00FB,\u00FC,\u00F9,\u016B,\u0169,\u0171,\u0173,\u00B5",
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+011B: "ě" LATIN SMALL LETTER E WITH CARON
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
@@ -1144,7 +1137,7 @@ public final class KeyboardTextsTable {
// U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
// U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
- /* more_keys_for_e */ "\u00E9,\u011B,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113",
+ /* morekeys_e */ "\u00E9,\u011B,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113",
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
@@ -1154,12 +1147,12 @@ public final class KeyboardTextsTable {
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
// U+0131: "ı" LATIN SMALL LETTER DOTLESS I
// U+0133: "ij" LATIN SMALL LIGATURE IJ
- /* more_keys_for_i */ "\u00ED,\u00EE,\u00EF,\u0129,\u00EC,\u012F,\u012B,\u0131,\u0133",
+ /* morekeys_i */ "\u00ED,\u00EE,\u00EF,\u0129,\u00EC,\u012F,\u012B,\u0131,\u0133",
// U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
// U+010D: "č" LATIN SMALL LETTER C WITH CARON
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
// U+010B: "ċ" LATIN SMALL LETTER C WITH DOT ABOVE
- /* more_keys_for_c */ "\u0107,\u010D,\u00E7,\u010B",
+ /* morekeys_c */ "\u0107,\u010D,\u00E7,\u010B",
/* double_quotes */ null,
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
// U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
@@ -1167,88 +1160,88 @@ public final class KeyboardTextsTable {
// U+0148: "ň" LATIN SMALL LETTER N WITH CARON
// U+0149: "ʼn" LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
// U+014B: "ŋ" LATIN SMALL LETTER ENG
- /* more_keys_for_n */ "\u00F1,\u0144,\u0146,\u0148,\u0149,\u014B",
+ /* morekeys_n */ "\u00F1,\u0144,\u0146,\u0148,\u0149,\u014B",
/* single_quotes */ null,
- /* label_to_alpha_key */ null,
+ /* keylabel_to_alpha */ null,
// U+00DF: "ß" LATIN SMALL LETTER SHARP S
// U+0161: "š" LATIN SMALL LETTER S WITH CARON
// U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
// U+0219: "ș" LATIN SMALL LETTER S WITH COMMA BELOW
// U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA
- /* more_keys_for_s */ "\u00DF,\u0161,\u015B,\u0219,\u015F",
+ /* morekeys_s */ "\u00DF,\u0161,\u015B,\u0219,\u015F",
// U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
// U+0177: "ŷ" LATIN SMALL LETTER Y WITH CIRCUMFLEX
// U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
// U+00FE: "þ" LATIN SMALL LETTER THORN
- /* more_keys_for_y */ "y,\u00FD,\u0177,\u00FF,\u00FE",
+ /* morekeys_y */ "y,\u00FD,\u0177,\u00FF,\u00FE",
// U+00F0: "ð" LATIN SMALL LETTER ETH
// U+010F: "ď" LATIN SMALL LETTER D WITH CARON
// U+0111: "đ" LATIN SMALL LETTER D WITH STROKE
- /* more_keys_for_d */ "\u00F0,\u010F,\u0111",
+ /* morekeys_d */ "\u00F0,\u010F,\u0111",
// U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
// U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
// U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
- /* more_keys_for_z */ "\u017A,\u017C,\u017E",
+ /* morekeys_z */ "\u017A,\u017C,\u017E",
// U+0165: "ť" LATIN SMALL LETTER T WITH CARON
// U+021B: "ț" LATIN SMALL LETTER T WITH COMMA BELOW
// U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA
// U+0167: "ŧ" LATIN SMALL LETTER T WITH STROKE
- /* more_keys_for_t */ "\u0165,\u021B,\u0163,\u0167",
+ /* morekeys_t */ "\u0165,\u021B,\u0163,\u0167",
// U+013A: "ĺ" LATIN SMALL LETTER L WITH ACUTE
// U+013C: "ļ" LATIN SMALL LETTER L WITH CEDILLA
// U+013E: "ľ" LATIN SMALL LETTER L WITH CARON
// U+0140: "ŀ" LATIN SMALL LETTER L WITH MIDDLE DOT
// U+0142: "ł" LATIN SMALL LETTER L WITH STROKE
- /* more_keys_for_l */ "\u013A,\u013C,\u013E,\u0140,\u0142",
+ /* morekeys_l */ "\u013A,\u013C,\u013E,\u0140,\u0142",
// U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
// U+0121: "ġ" LATIN SMALL LETTER G WITH DOT ABOVE
// U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA
- /* more_keys_for_g */ "\u011F,\u0121,\u0123",
+ /* morekeys_g */ "\u011F,\u0121,\u0123",
/* single_angle_quotes ~ */
null, null, null,
- /* ~ keylabel_for_currency */
+ /* ~ keyspec_currency */
// U+0159: "ř" LATIN SMALL LETTER R WITH CARON
// U+0155: "ŕ" LATIN SMALL LETTER R WITH ACUTE
// U+0157: "ŗ" LATIN SMALL LETTER R WITH CEDILLA
- /* more_keys_for_r */ "\u0159,\u0155,\u0157",
+ /* morekeys_r */ "\u0159,\u0155,\u0157",
// U+0137: "ķ" LATIN SMALL LETTER K WITH CEDILLA
// U+0138: "ĸ" LATIN SMALL LETTER KRA
- /* more_keys_for_k */ "\u0137,\u0138",
- /* more_keys_for_cyrillic_ie ~ */
+ /* morekeys_k */ "\u0137,\u0138",
+ /* morekeys_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,
- null, null, null, null, null, null, null,
- /* ~ more_keys_for_question */
+ null, null, null, null, null, null,
+ /* ~ morekeys_question */
// U+0125: "ĥ" LATIN SMALL LETTER H WITH CIRCUMFLEX
// U+0127: "ħ" LATIN SMALL LETTER H WITH STROKE
- /* more_keys_for_h */ "\u0125,\u0127",
+ /* morekeys_h */ "\u0125,\u0127",
// U+0175: "ŵ" LATIN SMALL LETTER W WITH CIRCUMFLEX
- /* more_keys_for_w */ "w,\u0175",
- /* more_keys_for_cyrillic_u ~ */
+ /* morekeys_w */ "w,\u0175",
+ /* morekeys_east_slavic_row2_2 ~ */
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null,
- /* ~ more_keys_for_swiss_row2_11 */
+ /* ~ morekeys_swiss_row2_11 */
// U+0135: "ĵ" LATIN SMALL LETTER J WITH CIRCUMFLEX
- /* keylabel_for_spanish_row2_10 */ "\u0135",
- /* more_keys_for_bullet ~ */
+ /* keyspec_spanish_row2_10 */ "\u0135",
+ /* morekeys_bullet ~ */
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- /* ~ more_keys_for_symbols_percent */
+ /* ~ morekeys_symbols_percent */
// U+0175: "ŵ" LATIN SMALL LETTER W WITH CIRCUMFLEX
- /* more_keys_for_v */ "w,\u0175",
- /* more_keys_for_j ~ */
+ /* morekeys_v */ "w,\u0175",
+ /* morekeys_j ~ */
null, null, null, null, null, null, null, null, null, null, null, null,
- /* ~ more_keys_for_exclamation */
- /* more_keys_for_q */ "q",
- /* more_keys_for_x */ "x",
+ /* ~ morekeys_exclamation */
+ /* morekeys_q */ "q",
+ /* morekeys_x */ "x",
// U+015D: "ŝ" LATIN SMALL LETTER S WITH CIRCUMFLEX
- /* keylabel_for_q */ "\u015D",
+ /* keyspec_q */ "\u015D",
// U+011D: "ĝ" LATIN SMALL LETTER G WITH CIRCUMFLEX
- /* keylabel_for_w */ "\u011D",
+ /* keyspec_w */ "\u011D",
// U+016D: "ŭ" LATIN SMALL LETTER U WITH BREVE
- /* keylabel_for_y */ "\u016D",
+ /* keyspec_y */ "\u016D",
// U+0109: "ĉ" LATIN SMALL LETTER C WITH CIRCUMFLEX
- /* keylabel_for_x */ "\u0109",
+ /* keyspec_x */ "\u0109",
};
/* Language es: Spanish */
@@ -1263,7 +1256,7 @@ public final class KeyboardTextsTable {
// U+00E6: "æ" LATIN SMALL LETTER AE
// U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
// U+00AA: "ª" FEMININE ORDINAL INDICATOR
- /* more_keys_for_a */ "\u00E1,\u00E0,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA",
+ /* morekeys_a */ "\u00E1,\u00E0,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA",
// U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
// U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
@@ -1273,13 +1266,13 @@ public final class KeyboardTextsTable {
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
// U+00BA: "º" MASCULINE ORDINAL INDICATOR
- /* more_keys_for_o */ "\u00F3,\u00F2,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA",
+ /* morekeys_o */ "\u00F3,\u00F2,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA",
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
+ /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
// U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS
@@ -1287,31 +1280,31 @@ public final class KeyboardTextsTable {
// U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
// U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
- /* more_keys_for_e */ "\u00E9,\u00E8,\u00EB,\u00EA,\u0119,\u0117,\u0113",
+ /* morekeys_e */ "\u00E9,\u00E8,\u00EB,\u00EA,\u0119,\u0117,\u0113",
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
- /* more_keys_for_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
+ /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
// U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
// U+010D: "č" LATIN SMALL LETTER C WITH CARON
- /* more_keys_for_c */ "\u00E7,\u0107,\u010D",
+ /* morekeys_c */ "\u00E7,\u0107,\u010D",
/* double_quotes */ null,
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
// U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
- /* more_keys_for_n */ "\u00F1,\u0144",
+ /* morekeys_n */ "\u00F1,\u0144",
/* single_quotes ~ */
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,
- /* ~ additional_more_keys_for_symbols_0 */
+ null,
+ /* ~ additional_morekeys_symbols_0 */
// U+00A1: "¡" INVERTED EXCLAMATION MARK
// U+00BF: "¿" INVERTED QUESTION MARK
- /* more_keys_for_punctuation */ "!autoColumnOrder!9,\\,,?,!,#,),(,/,;,\u00A1,',@,:,-,\",+,\\%,&,\u00BF",
+ /* morekeys_punctuation */ "!autoColumnOrder!9,\\,,?,!,#,),(,/,;,\u00A1,',@,:,-,\",+,\\%,&,\u00BF",
};
/* Language et_EE: Estonian (Estonia) */
@@ -1325,7 +1318,7 @@ public final class KeyboardTextsTable {
// U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
// U+00E6: "æ" LATIN SMALL LETTER AE
// U+0105: "ą" LATIN SMALL LETTER A WITH OGONEK
- /* more_keys_for_a */ "\u00E4,\u0101,\u00E0,\u00E1,\u00E2,\u00E3,\u00E5,\u00E6,\u0105",
+ /* morekeys_a */ "\u00E4,\u0101,\u00E0,\u00E1,\u00E2,\u00E3,\u00E5,\u00E6,\u0105",
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
// U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE
// U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE
@@ -1334,7 +1327,7 @@ public final class KeyboardTextsTable {
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+0151: "ő" LATIN SMALL LETTER O WITH DOUBLE ACUTE
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
- /* more_keys_for_o */ "\u00F6,\u00F5,\u00F2,\u00F3,\u00F4,\u0153,\u0151,\u00F8",
+ /* morekeys_o */ "\u00F6,\u00F5,\u00F2,\u00F3,\u00F4,\u0153,\u0151,\u00F8",
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
// U+0173: "ų" LATIN SMALL LETTER U WITH OGONEK
@@ -1343,7 +1336,7 @@ public final class KeyboardTextsTable {
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+016F: "ů" LATIN SMALL LETTER U WITH RING ABOVE
// U+0171: "ű" LATIN SMALL LETTER U WITH DOUBLE ACUTE
- /* more_keys_for_u */ "\u00FC,\u016B,\u0173,\u00F9,\u00FA,\u00FB,\u016F,\u0171",
+ /* morekeys_u */ "\u00FC,\u016B,\u0173,\u00F9,\u00FA,\u00FB,\u016F,\u0171",
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
// U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
@@ -1352,7 +1345,7 @@ public final class KeyboardTextsTable {
// U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS
// U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
// U+011B: "ě" LATIN SMALL LETTER E WITH CARON
- /* more_keys_for_e */ "\u0113,\u00E8,\u0117,\u00E9,\u00EA,\u00EB,\u0119,\u011B",
+ /* morekeys_e */ "\u0113,\u00E8,\u0117,\u00E9,\u00EA,\u00EB,\u0119,\u011B",
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
// U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
@@ -1360,61 +1353,61 @@ public final class KeyboardTextsTable {
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
// U+0131: "ı" LATIN SMALL LETTER DOTLESS I
- /* more_keys_for_i */ "\u012B,\u00EC,\u012F,\u00ED,\u00EE,\u00EF,\u0131",
+ /* morekeys_i */ "\u012B,\u00EC,\u012F,\u00ED,\u00EE,\u00EF,\u0131",
// U+010D: "č" LATIN SMALL LETTER C WITH CARON
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
// U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
- /* more_keys_for_c */ "\u010D,\u00E7,\u0107",
+ /* morekeys_c */ "\u010D,\u00E7,\u0107",
/* double_quotes */ "!text/double_9qm_lqm",
// U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
// U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
- /* more_keys_for_n */ "\u0146,\u00F1,\u0144",
+ /* morekeys_n */ "\u0146,\u00F1,\u0144",
/* single_quotes */ "!text/single_9qm_lqm",
- /* label_to_alpha_key */ null,
+ /* keylabel_to_alpha */ null,
// U+0161: "š" LATIN SMALL LETTER S WITH CARON
// U+00DF: "ß" LATIN SMALL LETTER SHARP S
// U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
// U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA
- /* more_keys_for_s */ "\u0161,\u00DF,\u015B,\u015F",
+ /* morekeys_s */ "\u0161,\u00DF,\u015B,\u015F",
// U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
// U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
- /* more_keys_for_y */ "\u00FD,\u00FF",
+ /* morekeys_y */ "\u00FD,\u00FF",
// U+010F: "ď" LATIN SMALL LETTER D WITH CARON
- /* more_keys_for_d */ "\u010F",
+ /* morekeys_d */ "\u010F",
// U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
// U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
// U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
- /* more_keys_for_z */ "\u017E,\u017C,\u017A",
+ /* morekeys_z */ "\u017E,\u017C,\u017A",
// U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA
// U+0165: "ť" LATIN SMALL LETTER T WITH CARON
- /* more_keys_for_t */ "\u0163,\u0165",
+ /* morekeys_t */ "\u0163,\u0165",
// U+013C: "ļ" LATIN SMALL LETTER L WITH CEDILLA
// U+0142: "ł" LATIN SMALL LETTER L WITH STROKE
// U+013A: "ĺ" LATIN SMALL LETTER L WITH ACUTE
// U+013E: "ľ" LATIN SMALL LETTER L WITH CARON
- /* more_keys_for_l */ "\u013C,\u0142,\u013A,\u013E",
+ /* morekeys_l */ "\u013C,\u0142,\u013A,\u013E",
// U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA
// U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
- /* more_keys_for_g */ "\u0123,\u011F",
+ /* morekeys_g */ "\u0123,\u011F",
/* single_angle_quotes ~ */
null, null, null,
- /* ~ keylabel_for_currency */
+ /* ~ keyspec_currency */
// U+0157: "ŗ" LATIN SMALL LETTER R WITH CEDILLA
// U+0159: "ř" LATIN SMALL LETTER R WITH CARON
// U+0155: "ŕ" LATIN SMALL LETTER R WITH ACUTE
- /* more_keys_for_r */ "\u0157,\u0159,\u0155",
+ /* morekeys_r */ "\u0157,\u0159,\u0155",
// U+0137: "ķ" LATIN SMALL LETTER K WITH CEDILLA
- /* more_keys_for_k */ "\u0137",
- /* more_keys_for_cyrillic_ie */ null,
+ /* morekeys_k */ "\u0137",
+ /* morekeys_cyrillic_ie */ null,
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
- /* keylabel_for_nordic_row1_11 */ "\u00FC",
+ /* keyspec_nordic_row1_11 */ "\u00FC",
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
- /* keylabel_for_nordic_row2_10 */ "\u00F6",
+ /* keyspec_nordic_row2_10 */ "\u00F6",
// U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS
- /* keylabel_for_nordic_row2_11 */ "\u00E4",
+ /* keyspec_nordic_row2_11 */ "\u00E4",
// U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE
- /* more_keys_for_nordic_row2_10 */ "\u00F5",
+ /* morekeys_nordic_row2_10 */ "\u00F5",
};
/* Language eu_ES: Basque (Spain) */
@@ -1429,7 +1422,7 @@ public final class KeyboardTextsTable {
// U+00E6: "æ" LATIN SMALL LETTER AE
// U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
// U+00AA: "ª" FEMININE ORDINAL INDICATOR
- /* more_keys_for_a */ "\u00E1,\u00E0,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA",
+ /* morekeys_a */ "\u00E1,\u00E0,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA",
// U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
// U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
@@ -1439,13 +1432,13 @@ public final class KeyboardTextsTable {
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
// U+00BA: "º" MASCULINE ORDINAL INDICATOR
- /* more_keys_for_o */ "\u00F3,\u00F2,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA",
+ /* morekeys_o */ "\u00F3,\u00F2,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA",
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
+ /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
// U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS
@@ -1453,27 +1446,27 @@ public final class KeyboardTextsTable {
// U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
// U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
- /* more_keys_for_e */ "\u00E9,\u00E8,\u00EB,\u00EA,\u0119,\u0117,\u0113",
+ /* morekeys_e */ "\u00E9,\u00E8,\u00EB,\u00EA,\u0119,\u0117,\u0113",
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
- /* more_keys_for_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
+ /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
// U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
// U+010D: "č" LATIN SMALL LETTER C WITH CARON
- /* more_keys_for_c */ "\u00E7,\u0107,\u010D",
+ /* morekeys_c */ "\u00E7,\u0107,\u010D",
/* double_quotes */ null,
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
// U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
- /* more_keys_for_n */ "\u00F1,\u0144",
+ /* morekeys_n */ "\u00F1,\u0144",
};
/* Language fa: Persian */
private static final String[] LANGUAGE_fa = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null, null, null, null, null,
/* ~ single_quotes */
// Label for "switch to alphabetic" key.
@@ -1481,57 +1474,54 @@ public final class KeyboardTextsTable {
// U+200C: ZERO WIDTH NON-JOINER
// U+0628: "ب" ARABIC LETTER BEH
// U+067E: "پ" ARABIC LETTER PEH
- /* label_to_alpha_key */ "\u0627\u200C\u0628\u200C\u067E",
- /* more_keys_for_s ~ */
+ /* keylabel_to_alpha */ "\u0627\u200C\u0628\u200C\u067E",
+ /* morekeys_s ~ */
null, null, null, null, null, null, null, null, null,
/* ~ double_angle_quotes */
// U+FDFC: "﷼" RIAL SIGN
- /* keylabel_for_currency */ "\uFDFC",
- /* more_keys_for_r ~ */
+ /* keyspec_currency */ "\uFDFC",
+ /* morekeys_r ~ */
null, null, null, null, null, null, null, null, null, null, null, null, null,
- /* ~ more_keys_for_nordic_row2_11 */
+ /* ~ morekeys_nordic_row2_11 */
// U+06F1: "۱" EXTENDED ARABIC-INDIC DIGIT ONE
- /* keylabel_for_symbols_1 */ "\u06F1",
+ /* keyspec_symbols_1 */ "\u06F1",
// U+06F2: "۲" EXTENDED ARABIC-INDIC DIGIT TWO
- /* keylabel_for_symbols_2 */ "\u06F2",
+ /* keyspec_symbols_2 */ "\u06F2",
// U+06F3: "۳" EXTENDED ARABIC-INDIC DIGIT THREE
- /* keylabel_for_symbols_3 */ "\u06F3",
+ /* keyspec_symbols_3 */ "\u06F3",
// U+06F4: "۴" EXTENDED ARABIC-INDIC DIGIT FOUR
- /* keylabel_for_symbols_4 */ "\u06F4",
+ /* keyspec_symbols_4 */ "\u06F4",
// U+06F5: "۵" EXTENDED ARABIC-INDIC DIGIT FIVE
- /* keylabel_for_symbols_5 */ "\u06F5",
+ /* keyspec_symbols_5 */ "\u06F5",
// U+06F6: "۶" EXTENDED ARABIC-INDIC DIGIT SIX
- /* keylabel_for_symbols_6 */ "\u06F6",
+ /* keyspec_symbols_6 */ "\u06F6",
// U+06F7: "۷" EXTENDED ARABIC-INDIC DIGIT SEVEN
- /* keylabel_for_symbols_7 */ "\u06F7",
+ /* keyspec_symbols_7 */ "\u06F7",
// U+06F8: "۸" EXTENDED ARABIC-INDIC DIGIT EIGHT
- /* keylabel_for_symbols_8 */ "\u06F8",
+ /* keyspec_symbols_8 */ "\u06F8",
// U+06F9: "۹" EXTENDED ARABIC-INDIC DIGIT NINE
- /* keylabel_for_symbols_9 */ "\u06F9",
+ /* keyspec_symbols_9 */ "\u06F9",
// U+06F0: "۰" EXTENDED ARABIC-INDIC DIGIT ZERO
- /* keylabel_for_symbols_0 */ "\u06F0",
+ /* keyspec_symbols_0 */ "\u06F0",
// Label for "switch to symbols" key.
// U+061F: "؟" ARABIC QUESTION MARK
- /* label_to_symbol_key */ "\u06F3\u06F2\u06F1\u061F",
- // Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
- // part because it'll be appended by the code.
- /* label_to_symbol_with_microphone_key */ "\u06F3\u06F2\u06F1",
- /* additional_more_keys_for_symbols_1 */ "1",
- /* additional_more_keys_for_symbols_2 */ "2",
- /* additional_more_keys_for_symbols_3 */ "3",
- /* additional_more_keys_for_symbols_4 */ "4",
- /* additional_more_keys_for_symbols_5 */ "5",
- /* additional_more_keys_for_symbols_6 */ "6",
- /* additional_more_keys_for_symbols_7 */ "7",
- /* additional_more_keys_for_symbols_8 */ "8",
- /* additional_more_keys_for_symbols_9 */ "9",
+ /* keylabel_to_symbol */ "\u06F3\u06F2\u06F1\u061F",
+ /* additional_morekeys_symbols_1 */ "1",
+ /* additional_morekeys_symbols_2 */ "2",
+ /* additional_morekeys_symbols_3 */ "3",
+ /* additional_morekeys_symbols_4 */ "4",
+ /* additional_morekeys_symbols_5 */ "5",
+ /* additional_morekeys_symbols_6 */ "6",
+ /* additional_morekeys_symbols_7 */ "7",
+ /* additional_morekeys_symbols_8 */ "8",
+ /* additional_morekeys_symbols_9 */ "9",
// U+066B: "٫" ARABIC DECIMAL SEPARATOR
// U+066C: "٬" ARABIC THOUSANDS SEPARATOR
- /* additional_more_keys_for_symbols_0 */ "0,\u066B,\u066C",
- /* more_keys_for_punctuation */ null,
+ /* additional_morekeys_symbols_0 */ "0,\u066B,\u066C",
+ /* morekeys_punctuation */ null,
// U+2605: "★" BLACK STAR
// U+066D: "٭" ARABIC FIVE POINTED STAR
- /* more_keys_for_star */ "\u2605,\u066D",
+ /* morekeys_star */ "\u2605,\u066D",
/* keyspec_left_parenthesis */ "(|)",
/* keyspec_right_parenthesis */ ")|(",
/* keyspec_left_square_bracket */ "[|]",
@@ -1551,22 +1541,22 @@ public final class KeyboardTextsTable {
// U+061F: "؟" ARABIC QUESTION MARK
// U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
// U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
- /* keylabel_for_tablet_comma */ "\u060C",
- /* more_keys_for_tablet_period */ "!text/more_keys_for_arabic_diacritics",
+ /* keyspec_tablet_comma */ "\u060C",
+ /* morekeys_tablet_period */ "!text/morekeys_arabic_diacritics",
// U+00BF: "¿" INVERTED QUESTION MARK
- /* more_keys_for_question */ "?,\u00BF",
- /* more_keys_for_h ~ */
+ /* morekeys_question */ "?,\u00BF",
+ /* morekeys_h ~ */
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null,
- /* ~ keylabel_for_spanish_row2_10 */
+ /* ~ keyspec_spanish_row2_10 */
// U+266A: "♪" EIGHTH NOTE
- /* more_keys_for_bullet */ "\u266A",
+ /* morekeys_bullet */ "\u266A",
// The all letters need to be mirrored are found at
// http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
// U+FD3E: "﴾" ORNATE LEFT PARENTHESIS
// U+FD3F: "﴿" ORNATE RIGHT PARENTHESIS
- /* more_keys_for_left_parenthesis */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,!text/keyspecs_for_left_parenthesis_more_keys",
- /* more_keys_for_right_parenthesis */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,!text/keyspecs_for_right_parenthesis_more_keys",
+ /* morekeys_left_parenthesis */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,!text/keyspecs_left_parenthesis_more_keys",
+ /* morekeys_right_parenthesis */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,!text/keyspecs_right_parenthesis_more_keys",
// U+0655: "ٕ" ARABIC HAMZA BELOW
// U+0652: "ْ" ARABIC SUKUN
// U+0651: "ّ" ARABIC SHADDA
@@ -1583,33 +1573,33 @@ public final class KeyboardTextsTable {
// U+0640: "ـ" ARABIC TATWEEL
// In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label.
// Note: The space character is needed as a preceding letter to draw Arabic diacritics characters correctly.
- /* more_keys_for_arabic_diacritics */ "!fixedColumnOrder!7, \u0655|\u0655, \u0652|\u0652, \u0651|\u0651, \u064C|\u064C, \u064D|\u064D, \u064B|\u064B, \u0654|\u0654, \u0656|\u0656, \u0670|\u0670, \u0653|\u0653, \u064F|\u064F, \u0650|\u0650, \u064E|\u064E,\u0640\u0640\u0640|\u0640",
+ /* morekeys_arabic_diacritics */ "!fixedColumnOrder!7, \u0655|\u0655, \u0652|\u0652, \u0651|\u0651, \u064C|\u064C, \u064D|\u064D, \u064B|\u064B, \u0654|\u0654, \u0656|\u0656, \u0670|\u0670, \u0653|\u0653, \u064F|\u064F, \u0650|\u0650, \u064E|\u064E,\u0640\u0640\u0640|\u0640",
// U+060C: "،" ARABIC COMMA
- /* keylabel_for_comma */ "\u060C",
- /* keyhintlabel_for_tablet_comma */ "\u061F",
- /* more_keys_for_tablet_comma */ "!fixedColumnOrder!4,:,!,\u061F,\u061B,-,/,!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote",
+ /* keyspec_comma */ "\u060C",
+ /* keyhintlabel_tablet_comma */ "\u061F",
+ /* morekeys_tablet_comma */ "!fixedColumnOrder!4,:,!,\u061F,\u061B,-,/,!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote",
// U+064B: "ً" ARABIC FATHATAN
- /* keyhintlabel_for_period */ "\u064B",
- /* more_keys_for_period */ "!text/more_keys_for_arabic_diacritics",
- /* keyhintlabel_for_tablet_period */ "\u064B",
- /* keylabel_for_symbols_question */ "\u061F",
- /* keylabel_for_symbols_semicolon */ "\u061B",
+ /* keyhintlabel_period */ "\u064B",
+ /* morekeys_period */ "!text/morekeys_arabic_diacritics",
+ /* keyhintlabel_tablet_period */ "\u064B",
+ /* keyspec_symbols_question */ "\u061F",
+ /* keyspec_symbols_semicolon */ "\u061B",
// U+066A: "٪" ARABIC PERCENT SIGN
- /* keylabel_for_symbols_percent */ "\u066A",
- /* more_keys_for_symbols_semicolon */ ";",
+ /* keyspec_symbols_percent */ "\u066A",
+ /* morekeys_symbols_semicolon */ ";",
// U+2030: "‰" PER MILLE SIGN
- /* more_keys_for_symbols_percent */ "\\%,\u2030",
- /* more_keys_for_v ~ */
+ /* morekeys_symbols_percent */ "\\%,\u2030",
+ /* morekeys_v ~ */
null, null, null, null, null, null, null, null,
- /* ~ more_keys_for_plus */
+ /* ~ morekeys_plus */
// 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
- /* more_keys_for_less_than */ "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_less_than",
- /* more_keys_for_greater_than */ "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_greater_than",
+ /* morekeys_less_than */ "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_less_than",
+ /* morekeys_greater_than */ "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_greater_than",
};
/* Language fi: Finnish */
@@ -1620,7 +1610,7 @@ public final class KeyboardTextsTable {
// U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX
// U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE
// U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
- /* more_keys_for_a */ "\u00E6,\u00E0,\u00E1,\u00E2,\u00E3,\u0101",
+ /* morekeys_a */ "\u00E6,\u00E0,\u00E1,\u00E2,\u00E3,\u0101",
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
// U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
// U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE
@@ -1628,38 +1618,38 @@ public final class KeyboardTextsTable {
// U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
- /* more_keys_for_o */ "\u00F8,\u00F4,\u00F2,\u00F3,\u00F5,\u0153,\u014D",
+ /* morekeys_o */ "\u00F8,\u00F4,\u00F2,\u00F3,\u00F5,\u0153,\u014D",
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
- /* more_keys_for_u */ "\u00FC",
- /* more_keys_for_e ~ */
+ /* morekeys_u */ "\u00FC",
+ /* morekeys_e ~ */
null, null, null, null, null, null, null,
- /* ~ label_to_alpha_key */
+ /* ~ keylabel_to_alpha */
// U+0161: "š" LATIN SMALL LETTER S WITH CARON
// U+00DF: "ß" LATIN SMALL LETTER SHARP S
// U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
- /* more_keys_for_s */ "\u0161,\u00DF,\u015B",
- /* more_keys_for_y */ null,
- /* more_keys_for_d */ null,
+ /* morekeys_s */ "\u0161,\u00DF,\u015B",
+ /* morekeys_y */ null,
+ /* morekeys_d */ null,
// U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
// U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
// U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
- /* more_keys_for_z */ "\u017E,\u017A,\u017C",
- /* more_keys_for_t ~ */
+ /* morekeys_z */ "\u017E,\u017A,\u017C",
+ /* morekeys_t ~ */
null, null, null, null, null, null, null, null, null,
- /* ~ more_keys_for_cyrillic_ie */
+ /* ~ morekeys_cyrillic_ie */
// U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
- /* keylabel_for_nordic_row1_11 */ "\u00E5",
+ /* keyspec_nordic_row1_11 */ "\u00E5",
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
- /* keylabel_for_nordic_row2_10 */ "\u00F6",
+ /* keyspec_nordic_row2_10 */ "\u00F6",
// U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS
- /* keylabel_for_nordic_row2_11 */ "\u00E4",
+ /* keyspec_nordic_row2_11 */ "\u00E4",
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
- /* more_keys_for_nordic_row2_10 */ "\u00F8",
- /* keylabel_for_east_slavic_row1_9 ~ */
+ /* morekeys_nordic_row2_10 */ "\u00F8",
+ /* keyspec_east_slavic_row1_9 ~ */
null, null, null, null, null,
- /* ~ more_keys_for_cyrillic_soft_sign */
+ /* ~ morekeys_cyrillic_soft_sign */
// U+00E6: "æ" LATIN SMALL LETTER AE
- /* more_keys_for_nordic_row2_11 */ "\u00E6",
+ /* morekeys_nordic_row2_11 */ "\u00E6",
};
/* Language fr: French */
@@ -1673,7 +1663,7 @@ public final class KeyboardTextsTable {
// U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
// U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
// U+00AA: "ª" FEMININE ORDINAL INDICATOR
- /* more_keys_for_a */ "\u00E0,\u00E2,%,\u00E6,\u00E1,\u00E4,\u00E3,\u00E5,\u0101,\u00AA",
+ /* morekeys_a */ "\u00E0,\u00E2,%,\u00E6,\u00E1,\u00E4,\u00E3,\u00E5,\u0101,\u00AA",
// U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
@@ -1683,13 +1673,13 @@ public final class KeyboardTextsTable {
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
// U+00BA: "º" MASCULINE ORDINAL INDICATOR
- /* more_keys_for_o */ "\u00F4,\u0153,%,\u00F6,\u00F2,\u00F3,\u00F5,\u00F8,\u014D,\u00BA",
+ /* morekeys_o */ "\u00F4,\u0153,%,\u00F6,\u00F2,\u00F3,\u00F5,\u00F8,\u014D,\u00BA",
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00F9,\u00FB,%,\u00FC,\u00FA,\u016B",
+ /* morekeys_u */ "\u00F9,\u00FB,%,\u00FC,\u00FA,\u016B",
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
// U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX
@@ -1697,42 +1687,42 @@ public final class KeyboardTextsTable {
// U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
// U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
- /* more_keys_for_e */ "\u00E9,\u00E8,\u00EA,\u00EB,%,\u0119,\u0117,\u0113",
+ /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,%,\u0119,\u0117,\u0113",
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
- /* more_keys_for_i */ "\u00EE,%,\u00EF,\u00EC,\u00ED,\u012F,\u012B",
+ /* morekeys_i */ "\u00EE,%,\u00EF,\u00EC,\u00ED,\u012F,\u012B",
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
// U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
// U+010D: "č" LATIN SMALL LETTER C WITH CARON
- /* more_keys_for_c */ "\u00E7,%,\u0107,\u010D",
+ /* morekeys_c */ "\u00E7,%,\u0107,\u010D",
/* double_quotes ~ */
null, null, null, null, null,
- /* ~ more_keys_for_s */
+ /* ~ morekeys_s */
// U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
- /* more_keys_for_y */ "%,\u00FF",
- /* more_keys_for_d ~ */
+ /* morekeys_y */ "%,\u00FF",
+ /* morekeys_d ~ */
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, null, null, null, null, null, null,
- /* ~ more_keys_for_cyrillic_i */
+ null, null, null, null, null, null, null, null, null, null, null, null, null,
+ /* ~ keyspec_south_slavic_row3_8 */
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
- /* keylabel_for_swiss_row1_11 */ "\u00E8",
+ /* keyspec_swiss_row1_11 */ "\u00E8",
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
- /* keylabel_for_swiss_row2_10 */ "\u00E9",
+ /* keyspec_swiss_row2_10 */ "\u00E9",
// U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE
- /* keylabel_for_swiss_row2_11 */ "\u00E0",
+ /* keyspec_swiss_row2_11 */ "\u00E0",
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
- /* more_keys_for_swiss_row1_11 */ "\u00FC",
+ /* morekeys_swiss_row1_11 */ "\u00FC",
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
- /* more_keys_for_swiss_row2_10 */ "\u00F6",
+ /* morekeys_swiss_row2_10 */ "\u00F6",
// U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS
- /* more_keys_for_swiss_row2_11 */ "\u00E4",
+ /* morekeys_swiss_row2_11 */ "\u00E4",
};
/* Language gl_ES: Gallegan (Spain) */
@@ -1747,7 +1737,7 @@ public final class KeyboardTextsTable {
// U+00E6: "æ" LATIN SMALL LETTER AE
// U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
// U+00AA: "ª" FEMININE ORDINAL INDICATOR
- /* more_keys_for_a */ "\u00E1,\u00E0,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA",
+ /* morekeys_a */ "\u00E1,\u00E0,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA",
// U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
// U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
@@ -1757,13 +1747,13 @@ public final class KeyboardTextsTable {
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
// U+00BA: "º" MASCULINE ORDINAL INDICATOR
- /* more_keys_for_o */ "\u00F3,\u00F2,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA",
+ /* morekeys_o */ "\u00F3,\u00F2,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA",
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
+ /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
// U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS
@@ -1771,108 +1761,105 @@ public final class KeyboardTextsTable {
// U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
// U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
- /* more_keys_for_e */ "\u00E9,\u00E8,\u00EB,\u00EA,\u0119,\u0117,\u0113",
+ /* morekeys_e */ "\u00E9,\u00E8,\u00EB,\u00EA,\u0119,\u0117,\u0113",
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
- /* more_keys_for_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
+ /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
// U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
// U+010D: "č" LATIN SMALL LETTER C WITH CARON
- /* more_keys_for_c */ "\u00E7,\u0107,\u010D",
+ /* morekeys_c */ "\u00E7,\u0107,\u010D",
/* double_quotes */ null,
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
// U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
- /* more_keys_for_n */ "\u00F1,\u0144",
+ /* morekeys_n */ "\u00F1,\u0144",
};
/* Language hi: Hindi */
private static final String[] LANGUAGE_hi = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null, null, null, null, null,
/* ~ single_quotes */
// Label for "switch to alphabetic" key.
// U+0915: "क" DEVANAGARI LETTER KA
// U+0916: "ख" DEVANAGARI LETTER KHA
// U+0917: "ग" DEVANAGARI LETTER GA
- /* label_to_alpha_key */ "\u0915\u0916\u0917",
- /* more_keys_for_s ~ */
+ /* keylabel_to_alpha */ "\u0915\u0916\u0917",
+ /* morekeys_s ~ */
null, null, null, null, null, null, null, null, null,
/* ~ double_angle_quotes */
// U+20B9: "₹" INDIAN RUPEE SIGN
- /* keylabel_for_currency */ "\u20B9",
- /* more_keys_for_r ~ */
+ /* keyspec_currency */ "\u20B9",
+ /* morekeys_r ~ */
null, null, null, null, null, null, null, null, null, null, null, null, null,
- /* ~ more_keys_for_nordic_row2_11 */
+ /* ~ morekeys_nordic_row2_11 */
// U+0967: "१" DEVANAGARI DIGIT ONE
- /* keylabel_for_symbols_1 */ "\u0967",
+ /* keyspec_symbols_1 */ "\u0967",
// U+0968: "२" DEVANAGARI DIGIT TWO
- /* keylabel_for_symbols_2 */ "\u0968",
+ /* keyspec_symbols_2 */ "\u0968",
// U+0969: "३" DEVANAGARI DIGIT THREE
- /* keylabel_for_symbols_3 */ "\u0969",
+ /* keyspec_symbols_3 */ "\u0969",
// U+096A: "४" DEVANAGARI DIGIT FOUR
- /* keylabel_for_symbols_4 */ "\u096A",
+ /* keyspec_symbols_4 */ "\u096A",
// U+096B: "५" DEVANAGARI DIGIT FIVE
- /* keylabel_for_symbols_5 */ "\u096B",
+ /* keyspec_symbols_5 */ "\u096B",
// U+096C: "६" DEVANAGARI DIGIT SIX
- /* keylabel_for_symbols_6 */ "\u096C",
+ /* keyspec_symbols_6 */ "\u096C",
// U+096D: "७" DEVANAGARI DIGIT SEVEN
- /* keylabel_for_symbols_7 */ "\u096D",
+ /* keyspec_symbols_7 */ "\u096D",
// U+096E: "८" DEVANAGARI DIGIT EIGHT
- /* keylabel_for_symbols_8 */ "\u096E",
+ /* keyspec_symbols_8 */ "\u096E",
// U+096F: "९" DEVANAGARI DIGIT NINE
- /* keylabel_for_symbols_9 */ "\u096F",
+ /* keyspec_symbols_9 */ "\u096F",
// U+0966: "०" DEVANAGARI DIGIT ZERO
- /* keylabel_for_symbols_0 */ "\u0966",
+ /* keyspec_symbols_0 */ "\u0966",
// Label for "switch to symbols" key.
- /* label_to_symbol_key */ "?\u0967\u0968\u0969",
- // Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
- // part because it'll be appended by the code.
- /* label_to_symbol_with_microphone_key */ "\u0967\u0968\u0969",
- /* additional_more_keys_for_symbols_1 */ "1",
- /* additional_more_keys_for_symbols_2 */ "2",
- /* additional_more_keys_for_symbols_3 */ "3",
- /* additional_more_keys_for_symbols_4 */ "4",
- /* additional_more_keys_for_symbols_5 */ "5",
- /* additional_more_keys_for_symbols_6 */ "6",
- /* additional_more_keys_for_symbols_7 */ "7",
- /* additional_more_keys_for_symbols_8 */ "8",
- /* additional_more_keys_for_symbols_9 */ "9",
- /* additional_more_keys_for_symbols_0 */ "0",
+ /* keylabel_to_symbol */ "?\u0967\u0968\u0969",
+ /* additional_morekeys_symbols_1 */ "1",
+ /* additional_morekeys_symbols_2 */ "2",
+ /* additional_morekeys_symbols_3 */ "3",
+ /* additional_morekeys_symbols_4 */ "4",
+ /* additional_morekeys_symbols_5 */ "5",
+ /* additional_morekeys_symbols_6 */ "6",
+ /* additional_morekeys_symbols_7 */ "7",
+ /* additional_morekeys_symbols_8 */ "8",
+ /* additional_morekeys_symbols_9 */ "9",
+ /* additional_morekeys_symbols_0 */ "0",
};
/* Language hr: Croatian */
private static final String[] LANGUAGE_hr = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null,
- /* ~ more_keys_for_i */
+ /* ~ morekeys_i */
// U+010D: "č" LATIN SMALL LETTER C WITH CARON
// U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
- /* more_keys_for_c */ "\u010D,\u0107,\u00E7",
+ /* morekeys_c */ "\u010D,\u0107,\u00E7",
/* double_quotes */ "!text/double_9qm_rqm",
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
// U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
- /* more_keys_for_n */ "\u00F1,\u0144",
+ /* morekeys_n */ "\u00F1,\u0144",
/* single_quotes */ "!text/single_9qm_rqm",
- /* label_to_alpha_key */ null,
+ /* keylabel_to_alpha */ null,
// U+0161: "š" LATIN SMALL LETTER S WITH CARON
// U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
// U+00DF: "ß" LATIN SMALL LETTER SHARP S
- /* more_keys_for_s */ "\u0161,\u015B,\u00DF",
- /* more_keys_for_y */ null,
+ /* morekeys_s */ "\u0161,\u015B,\u00DF",
+ /* morekeys_y */ null,
// U+0111: "đ" LATIN SMALL LETTER D WITH STROKE
- /* more_keys_for_d */ "\u0111",
+ /* morekeys_d */ "\u0111",
// U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
// U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
// U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
- /* more_keys_for_z */ "\u017E,\u017A,\u017C",
- /* more_keys_for_t ~ */
+ /* morekeys_z */ "\u017E,\u017A,\u017C",
+ /* morekeys_t ~ */
null, null, null,
- /* ~ more_keys_for_g */
+ /* ~ morekeys_g */
/* single_angle_quotes */ "!text/single_raqm_laqm",
/* double_angle_quotes */ "!text/double_raqm_laqm",
};
@@ -1887,7 +1874,7 @@ public final class KeyboardTextsTable {
// U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE
// U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
// U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
- /* more_keys_for_a */ "\u00E1,\u00E0,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
+ /* morekeys_a */ "\u00E1,\u00E0,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
// U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
// U+0151: "ő" LATIN SMALL LETTER O WITH DOUBLE ACUTE
@@ -1897,14 +1884,14 @@ public final class KeyboardTextsTable {
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
- /* more_keys_for_o */ "\u00F3,\u00F6,\u0151,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
+ /* morekeys_o */ "\u00F3,\u00F6,\u0151,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+0171: "ű" LATIN SMALL LETTER U WITH DOUBLE ACUTE
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00FA,\u00FC,\u0171,\u00FB,\u00F9,\u016B",
+ /* morekeys_u */ "\u00FA,\u00FC,\u0171,\u00FB,\u00F9,\u016B",
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
// U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX
@@ -1912,40 +1899,40 @@ public final class KeyboardTextsTable {
// U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
// U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
- /* more_keys_for_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113",
+ /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113",
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
// U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
- /* more_keys_for_i */ "\u00ED,\u00EE,\u00EF,\u00EC,\u012F,\u012B",
- /* more_keys_for_c */ null,
+ /* morekeys_i */ "\u00ED,\u00EE,\u00EF,\u00EC,\u012F,\u012B",
+ /* morekeys_c */ null,
/* double_quotes */ "!text/double_9qm_rqm",
- /* more_keys_for_n */ null,
+ /* morekeys_n */ null,
/* single_quotes */ "!text/single_9qm_rqm",
- /* label_to_alpha_key ~ */
+ /* keylabel_to_alpha ~ */
null, null, null, null, null, null, null, null,
- /* ~ more_keys_for_g */
+ /* ~ morekeys_g */
/* single_angle_quotes */ "!text/single_raqm_laqm",
/* double_angle_quotes */ "!text/double_raqm_laqm",
};
/* Language hy_AM: Armenian (Armenia) */
private static final String[] LANGUAGE_hy_AM = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null, null, null, null, null,
/* ~ single_quotes */
// Label for "switch to alphabetic" key.
// U+0531: "Ա" ARMENIAN CAPITAL LETTER AYB
// U+0532: "Բ" ARMENIAN CAPITAL LETTER BEN
// U+0533: "Գ" ARMENIAN CAPITAL LETTER GIM
- /* label_to_alpha_key */ "\u0531\u0532\u0533",
- /* more_keys_for_s ~ */
+ /* keylabel_to_alpha */ "\u0531\u0532\u0533",
+ /* morekeys_s ~ */
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,
- /* ~ additional_more_keys_for_symbols_0 */
+ null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+ /* ~ additional_morekeys_symbols_0 */
// U+055E: "՞" ARMENIAN QUESTION MARK
// U+055C: "՜" ARMENIAN EXCLAMATION MARK
// U+055A: "՚" ARMENIAN APOSTROPHE
@@ -1956,31 +1943,31 @@ public final class KeyboardTextsTable {
// U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
// U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
// U+055F: "՟" ARMENIAN ABBREVIATION MARK
- /* more_keys_for_punctuation */ "!autoColumnOrder!8,\\,,\u055E,\u055C,.,\u055A,\u0559,?,!,\u055D,\u055B,\u058A,\u00BB,\u00AB,\u055F,;,:",
- /* more_keys_for_star ~ */
+ /* morekeys_punctuation */ "!autoColumnOrder!8,\\,,\u055E,\u055C,.,\u055A,\u0559,?,!,\u055D,\u055B,\u058A,\u00BB,\u00AB,\u055F,;,:",
+ /* morekeys_star ~ */
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
/* ~ keyspec_right_single_angle_quote */
// U+058F: "֏" ARMENIAN DRAM SIGN
// TODO: Enable this when we have glyph for the following letter
- // <string name="keylabel_for_currency">&#x058F;</string>
+ // <string name="keyspec_currency">&#x058F;</string>
//
// U+055D: "՝" ARMENIAN COMMA
- /* keylabel_for_tablet_comma */ "\u055D",
- /* more_keys_for_tablet_period */ "!text/more_keys_for_punctuation",
+ /* keyspec_tablet_comma */ "\u055D",
+ /* morekeys_tablet_period */ "!text/morekeys_punctuation",
// U+055E: "՞" ARMENIAN QUESTION MARK
// U+00BF: "¿" INVERTED QUESTION MARK
- /* more_keys_for_question */ "\u055E,\u00BF",
- /* more_keys_for_h ~ */
+ /* morekeys_question */ "\u055E,\u00BF",
+ /* morekeys_h ~ */
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_greater_than */
+ /* ~ morekeys_greater_than */
// U+0589: "։" ARMENIAN FULL STOP
- /* keylabel_for_period */ "\u0589",
- /* keylabel_for_tablet_period */ "\u0589",
+ /* keyspec_period */ "\u0589",
+ /* keyspec_tablet_period */ "\u0589",
// U+055C: "՜" ARMENIAN EXCLAMATION MARK
// U+00A1: "¡" INVERTED EXCLAMATION MARK
- /* more_keys_for_exclamation */ "\u055C,\u00A1",
+ /* morekeys_exclamation */ "\u055C,\u00A1",
};
/* Language is: Icelandic */
@@ -1993,7 +1980,7 @@ public final class KeyboardTextsTable {
// U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX
// U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE
// U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
- /* more_keys_for_a */ "\u00E1,\u00E4,\u00E6,\u00E5,\u00E0,\u00E2,\u00E3,\u0101",
+ /* morekeys_a */ "\u00E1,\u00E4,\u00E6,\u00E5,\u00E0,\u00E2,\u00E3,\u0101",
// U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
// U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
@@ -2002,13 +1989,13 @@ public final class KeyboardTextsTable {
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
- /* more_keys_for_o */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
+ /* morekeys_o */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00FA,\u00FC,\u00FB,\u00F9,\u016B",
+ /* morekeys_u */ "\u00FA,\u00FC,\u00FB,\u00F9,\u016B",
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
@@ -2016,28 +2003,28 @@ public final class KeyboardTextsTable {
// U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
// U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
- /* more_keys_for_e */ "\u00E9,\u00EB,\u00E8,\u00EA,\u0119,\u0117,\u0113",
+ /* morekeys_e */ "\u00E9,\u00EB,\u00E8,\u00EA,\u0119,\u0117,\u0113",
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
// U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
- /* more_keys_for_i */ "\u00ED,\u00EF,\u00EE,\u00EC,\u012F,\u012B",
- /* more_keys_for_c */ null,
+ /* morekeys_i */ "\u00ED,\u00EF,\u00EE,\u00EC,\u012F,\u012B",
+ /* morekeys_c */ null,
/* double_quotes */ "!text/double_9qm_lqm",
- /* more_keys_for_n */ null,
+ /* morekeys_n */ null,
/* single_quotes */ "!text/single_9qm_lqm",
- /* label_to_alpha_key */ null,
- /* more_keys_for_s */ null,
+ /* keylabel_to_alpha */ null,
+ /* morekeys_s */ null,
// U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
// U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
- /* more_keys_for_y */ "\u00FD,\u00FF",
+ /* morekeys_y */ "\u00FD,\u00FF",
// U+00F0: "ð" LATIN SMALL LETTER ETH
- /* more_keys_for_d */ "\u00F0",
- /* more_keys_for_z */ null,
+ /* morekeys_d */ "\u00F0",
+ /* morekeys_z */ null,
// U+00FE: "þ" LATIN SMALL LETTER THORN
- /* more_keys_for_t */ "\u00FE",
+ /* morekeys_t */ "\u00FE",
};
/* Language it: Italian */
@@ -2051,7 +2038,7 @@ public final class KeyboardTextsTable {
// U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
// U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
// U+00AA: "ª" FEMININE ORDINAL INDICATOR
- /* more_keys_for_a */ "\u00E0,\u00E1,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101,\u00AA",
+ /* morekeys_a */ "\u00E0,\u00E1,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101,\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
@@ -2061,13 +2048,13 @@ public final class KeyboardTextsTable {
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
// U+00BA: "º" MASCULINE ORDINAL INDICATOR
- /* more_keys_for_o */ "\u00F2,\u00F3,\u00F4,\u00F6,\u00F5,\u0153,\u00F8,\u014D,\u00BA",
+ /* morekeys_o */ "\u00F2,\u00F3,\u00F4,\u00F6,\u00F5,\u0153,\u00F8,\u014D,\u00BA",
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00F9,\u00FA,\u00FB,\u00FC,\u016B",
+ /* morekeys_u */ "\u00F9,\u00FA,\u00FB,\u00FC,\u016B",
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX
@@ -2075,41 +2062,41 @@ public final class KeyboardTextsTable {
// U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
// U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
- /* more_keys_for_e */ "\u00E8,\u00E9,\u00EA,\u00EB,\u0119,\u0117,\u0113",
+ /* morekeys_e */ "\u00E8,\u00E9,\u00EA,\u00EB,\u0119,\u0117,\u0113",
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
// U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
- /* more_keys_for_i */ "\u00EC,\u00ED,\u00EE,\u00EF,\u012F,\u012B",
+ /* morekeys_i */ "\u00EC,\u00ED,\u00EE,\u00EF,\u012F,\u012B",
};
/* Language iw: Hebrew */
private static final String[] LANGUAGE_iw = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null, null,
- /* ~ more_keys_for_c */
+ /* ~ morekeys_c */
/* double_quotes */ "!text/double_rqm_9qm",
- /* more_keys_for_n */ null,
+ /* morekeys_n */ null,
/* single_quotes */ "!text/single_rqm_9qm",
// Label for "switch to alphabetic" key.
// U+05D0: "א" HEBREW LETTER ALEF
// U+05D1: "ב" HEBREW LETTER BET
// U+05D2: "ג" HEBREW LETTER GIMEL
- /* label_to_alpha_key */ "\u05D0\u05D1\u05D2",
- /* more_keys_for_s ~ */
+ /* keylabel_to_alpha */ "\u05D0\u05D1\u05D2",
+ /* morekeys_s ~ */
null, null, null, null, null, null, null, null, null,
/* ~ double_angle_quotes */
// U+20AA: "₪" NEW SHEQEL SIGN
- /* keylabel_for_currency */ "\u20AA",
- /* more_keys_for_r ~ */
+ /* keyspec_currency */ "\u20AA",
+ /* morekeys_r ~ */
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_punctuation */
+ null, null, null, null, null,
+ /* ~ morekeys_punctuation */
// U+2605: "★" BLACK STAR
- /* more_keys_for_star */ "\u2605",
+ /* morekeys_star */ "\u2605",
// The all letters need to be mirrored are found at
// http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
// U+2264: "≤" LESS-THAN OR EQUAL TO
@@ -2132,168 +2119,167 @@ public final class KeyboardTextsTable {
/* keyspec_right_double_angle_quote */ "\u00BB|\u00AB",
/* keyspec_left_single_angle_quote */ "\u2039|\u203A",
/* keyspec_right_single_angle_quote */ "\u203A|\u2039",
- /* keylabel_for_tablet_comma ~ */
+ /* keyspec_tablet_comma ~ */
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_tablet_punctuation */
+ /* ~ morekeys_tablet_punctuation */
// U+00B1: "±" PLUS-MINUS SIGN
// U+FB29: "﬩" HEBREW LETTER ALTERNATIVE PLUS SIGN
- /* more_keys_for_plus */ "\u00B1,\uFB29",
+ /* morekeys_plus */ "\u00B1,\uFB29",
};
/* Language ka_GE: Georgian (Georgia) */
private static final String[] LANGUAGE_ka_GE = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null, null,
- /* ~ more_keys_for_c */
+ /* ~ morekeys_c */
/* double_quotes */ "!text/double_9qm_lqm",
- /* more_keys_for_n */ null,
+ /* morekeys_n */ null,
/* single_quotes */ "!text/single_9qm_lqm",
// Label for "switch to alphabetic" key.
// U+10D0: "ა" GEORGIAN LETTER AN
// U+10D1: "ბ" GEORGIAN LETTER BAN
// U+10D2: "გ" GEORGIAN LETTER GAN
- /* label_to_alpha_key */ "\u10D0\u10D1\u10D2",
+ /* keylabel_to_alpha */ "\u10D0\u10D1\u10D2",
};
/* Language kk: Kazakh */
private static final String[] LANGUAGE_kk = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null, null, null, null, null,
/* ~ single_quotes */
// Label for "switch to alphabetic" key.
// U+0410: "А" CYRILLIC CAPITAL LETTER A
// U+0411: "Б" CYRILLIC CAPITAL LETTER BE
// U+0412: "В" CYRILLIC CAPITAL LETTER VE
- /* label_to_alpha_key */ "\u0410\u0411\u0412",
- /* more_keys_for_s ~ */
+ /* keylabel_to_alpha */ "\u0410\u0411\u0412",
+ /* morekeys_s ~ */
null, null, null, null, null, null, null, null, null, null, null, null,
- /* ~ more_keys_for_k */
+ /* ~ morekeys_k */
// U+0451: "ё" CYRILLIC SMALL LETTER IO
- /* more_keys_for_cyrillic_ie */ "\u0451",
- /* keylabel_for_nordic_row1_11 ~ */
+ /* morekeys_cyrillic_ie */ "\u0451",
+ /* keyspec_nordic_row1_11 ~ */
null, null, null, null,
- /* ~ more_keys_for_nordic_row2_10 */
+ /* ~ morekeys_nordic_row2_10 */
// U+0449: "щ" CYRILLIC SMALL LETTER SHCHA
- /* keylabel_for_east_slavic_row1_9 */ "\u0449",
+ /* keyspec_east_slavic_row1_9 */ "\u0449",
// U+044B: "ы" CYRILLIC SMALL LETTER YERU
- /* keylabel_for_east_slavic_row2_2 */ "\u044B",
+ /* keyspec_east_slavic_row2_2 */ "\u044B",
// U+044D: "э" CYRILLIC SMALL LETTER E
- /* keylabel_for_east_slavic_row2_11 */ "\u044D",
+ /* keyspec_east_slavic_row2_11 */ "\u044D",
// U+0438: "и" CYRILLIC SMALL LETTER I
- /* keylabel_for_east_slavic_row3_5 */ "\u0438",
+ /* keyspec_east_slavic_row3_5 */ "\u0438",
// U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN
- /* more_keys_for_cyrillic_soft_sign */ "\u044A",
- /* more_keys_for_nordic_row2_11 ~ */
+ /* morekeys_cyrillic_soft_sign */ "\u044A",
+ /* morekeys_nordic_row2_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,
- /* ~ more_keys_for_w */
+ null, null, null, null, null, null, null, null, null, null, null, null, null,
+ /* ~ morekeys_w */
+ // U+0456: "і" CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+ /* morekeys_east_slavic_row2_2 */ "\u0456",
// U+04AF: "ү" CYRILLIC SMALL LETTER STRAIGHT U
// U+04B1: "ұ" CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
- /* more_keys_for_cyrillic_u */ "\u04AF,\u04B1",
+ /* morekeys_cyrillic_u */ "\u04AF,\u04B1",
// U+04A3: "ң" CYRILLIC SMALL LETTER EN WITH DESCENDER
- /* more_keys_for_cyrillic_en */ "\u04A3",
+ /* morekeys_cyrillic_en */ "\u04A3",
// U+0493: "ғ" CYRILLIC SMALL LETTER GHE WITH STROKE
- /* more_keys_for_cyrillic_ghe */ "\u0493",
- // U+0456: "і" CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
- /* more_keys_for_east_slavic_row2_2 */ "\u0456",
+ /* morekeys_cyrillic_ghe */ "\u0493",
// U+04E9: "ө" CYRILLIC SMALL LETTER BARRED O
- /* more_keys_for_cyrillic_o */ "\u04E9",
- /* keylabel_for_south_slavic_row1_6 ~ */
+ /* morekeys_cyrillic_o */ "\u04E9",
+ /* morekeys_cyrillic_i ~ */
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_j */
+ /* ~ morekeys_j */
+ // U+04BB: "һ" CYRILLIC SMALL LETTER SHHA
+ /* morekeys_east_slavic_row2_11 */ "\u04BB",
// U+049B: "қ" CYRILLIC SMALL LETTER KA WITH DESCENDER
- /* more_keys_for_cyrillic_ka */ "\u049B",
+ /* morekeys_cyrillic_ka */ "\u049B",
// U+04D9: "ә" CYRILLIC SMALL LETTER SCHWA
- /* more_keys_for_cyrillic_a */ "\u04D9",
- // U+04BB: "һ" CYRILLIC SMALL LETTER SHHA
- /* more_keys_for_east_slavic_row2_11 */ "\u04BB",
+ /* morekeys_cyrillic_a */ "\u04D9",
};
/* Language km_KH: Khmer (Cambodia) */
private static final String[] LANGUAGE_km_KH = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null, null, null, null, null,
/* ~ single_quotes */
// Label for "switch to alphabetic" key.
// U+1780: "ក" KHMER LETTER KA
// U+1781: "ខ" KHMER LETTER KHA
// U+1782: "គ" KHMER LETTER KO
- /* label_to_alpha_key */ "\u1780\u1781\u1782",
- /* more_keys_for_s ~ */
+ /* keylabel_to_alpha */ "\u1780\u1781\u1782",
+ /* morekeys_s ~ */
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, 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_east_slavic_row2_11 */
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ /* ~ morekeys_cyrillic_a */
// U+17DB: "៛" KHMER CURRENCY SYMBOL RIEL
- /* more_keys_for_currency_dollar */ "\u17DB,\u00A2,\u00A3,\u20AC,\u00A5,\u20B1",
+ /* morekeys_currency_dollar */ "\u17DB,\u00A2,\u00A3,\u20AC,\u00A5,\u20B1",
};
/* Language ky: Kirghiz */
private static final String[] LANGUAGE_ky = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null, null, null, null, null,
/* ~ single_quotes */
// Label for "switch to alphabetic" key.
// U+0410: "А" CYRILLIC CAPITAL LETTER A
// U+0411: "Б" CYRILLIC CAPITAL LETTER BE
// U+0412: "В" CYRILLIC CAPITAL LETTER VE
- /* label_to_alpha_key */ "\u0410\u0411\u0412",
- /* more_keys_for_s ~ */
+ /* keylabel_to_alpha */ "\u0410\u0411\u0412",
+ /* morekeys_s ~ */
null, null, null, null, null, null, null, null, null, null, null, null,
- /* ~ more_keys_for_k */
+ /* ~ morekeys_k */
// U+0451: "ё" CYRILLIC SMALL LETTER IO
- /* more_keys_for_cyrillic_ie */ "\u0451",
- /* keylabel_for_nordic_row1_11 ~ */
+ /* morekeys_cyrillic_ie */ "\u0451",
+ /* keyspec_nordic_row1_11 ~ */
null, null, null, null,
- /* ~ more_keys_for_nordic_row2_10 */
+ /* ~ morekeys_nordic_row2_10 */
// U+0449: "щ" CYRILLIC SMALL LETTER SHCHA
- /* keylabel_for_east_slavic_row1_9 */ "\u0449",
+ /* keyspec_east_slavic_row1_9 */ "\u0449",
// U+044B: "ы" CYRILLIC SMALL LETTER YERU
- /* keylabel_for_east_slavic_row2_2 */ "\u044B",
+ /* keyspec_east_slavic_row2_2 */ "\u044B",
// U+044D: "э" CYRILLIC SMALL LETTER E
- /* keylabel_for_east_slavic_row2_11 */ "\u044D",
+ /* keyspec_east_slavic_row2_11 */ "\u044D",
// U+0438: "и" CYRILLIC SMALL LETTER I
- /* keylabel_for_east_slavic_row3_5 */ "\u0438",
+ /* keyspec_east_slavic_row3_5 */ "\u0438",
// U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN
- /* more_keys_for_cyrillic_soft_sign */ "\u044A",
- /* more_keys_for_nordic_row2_11 ~ */
+ /* morekeys_cyrillic_soft_sign */ "\u044A",
+ /* morekeys_nordic_row2_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,
- /* ~ more_keys_for_w */
+ /* ~ morekeys_east_slavic_row2_2 */
// U+04AF: "ү" CYRILLIC SMALL LETTER STRAIGHT U
- /* more_keys_for_cyrillic_u */ "\u04AF",
+ /* morekeys_cyrillic_u */ "\u04AF",
// U+04A3: "ң" CYRILLIC SMALL LETTER EN WITH DESCENDER
- /* more_keys_for_cyrillic_en */ "\u04A3",
- /* more_keys_for_cyrillic_ghe */ null,
- /* more_keys_for_east_slavic_row2_2 */ null,
+ /* morekeys_cyrillic_en */ "\u04A3",
+ /* morekeys_cyrillic_ghe */ null,
// U+04E9: "ө" CYRILLIC SMALL LETTER BARRED O
- /* more_keys_for_cyrillic_o */ "\u04E9",
+ /* morekeys_cyrillic_o */ "\u04E9",
};
/* Language lo_LA: Lao (Laos) */
private static final String[] LANGUAGE_lo_LA = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null, null, null, null, null,
/* ~ single_quotes */
// Label for "switch to alphabetic" key.
// U+0E81: "ກ" LAO LETTER KO
// U+0E82: "ຂ" LAO LETTER KHO SUNG
// U+0E84: "ຄ" LAO LETTER KHO TAM
- /* label_to_alpha_key */ "\u0E81\u0E82\u0E84",
- /* more_keys_for_s ~ */
+ /* keylabel_to_alpha */ "\u0E81\u0E82\u0E84",
+ /* morekeys_s ~ */
null, null, null, null, null, null, null, null, null,
/* ~ double_angle_quotes */
// U+20AD: "₭" KIP SIGN
- /* keylabel_for_currency */ "\u20AD",
+ /* keyspec_currency */ "\u20AD",
};
/* Language lt: Lithuanian */
@@ -2307,7 +2293,7 @@ public final class KeyboardTextsTable {
// U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE
// U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
// U+00E6: "æ" LATIN SMALL LETTER AE
- /* more_keys_for_a */ "\u0105,\u00E4,\u0101,\u00E0,\u00E1,\u00E2,\u00E3,\u00E5,\u00E6",
+ /* morekeys_a */ "\u0105,\u00E4,\u0101,\u00E0,\u00E1,\u00E2,\u00E3,\u00E5,\u00E6",
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
// U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE
// U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE
@@ -2316,7 +2302,7 @@ public final class KeyboardTextsTable {
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+0151: "ő" LATIN SMALL LETTER O WITH DOUBLE ACUTE
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
- /* more_keys_for_o */ "\u00F6,\u00F5,\u00F2,\u00F3,\u00F4,\u0153,\u0151,\u00F8",
+ /* morekeys_o */ "\u00F6,\u00F5,\u00F2,\u00F3,\u00F4,\u0153,\u0151,\u00F8",
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
// U+0173: "ų" LATIN SMALL LETTER U WITH OGONEK
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
@@ -2326,7 +2312,7 @@ public final class KeyboardTextsTable {
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+016F: "ů" LATIN SMALL LETTER U WITH RING ABOVE
// U+0171: "ű" LATIN SMALL LETTER U WITH DOUBLE ACUTE
- /* more_keys_for_u */ "\u016B,\u0173,\u00FC,\u016B,\u00F9,\u00FA,\u00FB,\u016F,\u0171",
+ /* morekeys_u */ "\u016B,\u0173,\u00FC,\u016B,\u00F9,\u00FA,\u00FB,\u016F,\u0171",
// U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
// U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
@@ -2335,7 +2321,7 @@ public final class KeyboardTextsTable {
// U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX
// U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS
// U+011B: "ě" LATIN SMALL LETTER E WITH CARON
- /* more_keys_for_e */ "\u0117,\u0119,\u0113,\u00E8,\u00E9,\u00EA,\u00EB,\u011B",
+ /* morekeys_e */ "\u0117,\u0119,\u0113,\u00E8,\u00E9,\u00EA,\u00EB,\u011B",
// U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
@@ -2343,52 +2329,52 @@ public final class KeyboardTextsTable {
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
// U+0131: "ı" LATIN SMALL LETTER DOTLESS I
- /* more_keys_for_i */ "\u012F,\u012B,\u00EC,\u00ED,\u00EE,\u00EF,\u0131",
+ /* morekeys_i */ "\u012F,\u012B,\u00EC,\u00ED,\u00EE,\u00EF,\u0131",
// U+010D: "č" LATIN SMALL LETTER C WITH CARON
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
// U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
- /* more_keys_for_c */ "\u010D,\u00E7,\u0107",
+ /* morekeys_c */ "\u010D,\u00E7,\u0107",
/* double_quotes */ "!text/double_9qm_lqm",
// U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
// U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
- /* more_keys_for_n */ "\u0146,\u00F1,\u0144",
+ /* morekeys_n */ "\u0146,\u00F1,\u0144",
/* single_quotes */ "!text/single_9qm_lqm",
- /* label_to_alpha_key */ null,
+ /* keylabel_to_alpha */ null,
// U+0161: "š" LATIN SMALL LETTER S WITH CARON
// U+00DF: "ß" LATIN SMALL LETTER SHARP S
// U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
// U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA
- /* more_keys_for_s */ "\u0161,\u00DF,\u015B,\u015F",
+ /* morekeys_s */ "\u0161,\u00DF,\u015B,\u015F",
// U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
// U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
- /* more_keys_for_y */ "\u00FD,\u00FF",
+ /* morekeys_y */ "\u00FD,\u00FF",
// U+010F: "ď" LATIN SMALL LETTER D WITH CARON
- /* more_keys_for_d */ "\u010F",
+ /* morekeys_d */ "\u010F",
// U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
// U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
// U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
- /* more_keys_for_z */ "\u017E,\u017C,\u017A",
+ /* morekeys_z */ "\u017E,\u017C,\u017A",
// U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA
// U+0165: "ť" LATIN SMALL LETTER T WITH CARON
- /* more_keys_for_t */ "\u0163,\u0165",
+ /* morekeys_t */ "\u0163,\u0165",
// U+013C: "ļ" LATIN SMALL LETTER L WITH CEDILLA
// U+0142: "ł" LATIN SMALL LETTER L WITH STROKE
// U+013A: "ĺ" LATIN SMALL LETTER L WITH ACUTE
// U+013E: "ľ" LATIN SMALL LETTER L WITH CARON
- /* more_keys_for_l */ "\u013C,\u0142,\u013A,\u013E",
+ /* morekeys_l */ "\u013C,\u0142,\u013A,\u013E",
// U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA
// U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
- /* more_keys_for_g */ "\u0123,\u011F",
+ /* morekeys_g */ "\u0123,\u011F",
/* single_angle_quotes ~ */
null, null, null,
- /* ~ keylabel_for_currency */
+ /* ~ keyspec_currency */
// U+0157: "ŗ" LATIN SMALL LETTER R WITH CEDILLA
// U+0159: "ř" LATIN SMALL LETTER R WITH CARON
// U+0155: "ŕ" LATIN SMALL LETTER R WITH ACUTE
- /* more_keys_for_r */ "\u0157,\u0159,\u0155",
+ /* morekeys_r */ "\u0157,\u0159,\u0155",
// U+0137: "ķ" LATIN SMALL LETTER K WITH CEDILLA
- /* more_keys_for_k */ "\u0137",
+ /* morekeys_k */ "\u0137",
};
/* Language lv: Latvian */
@@ -2402,7 +2388,7 @@ public final class KeyboardTextsTable {
// U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
// U+00E6: "æ" LATIN SMALL LETTER AE
// U+0105: "ą" LATIN SMALL LETTER A WITH OGONEK
- /* more_keys_for_a */ "\u0101,\u00E0,\u00E1,\u00E2,\u00E3,\u00E4,\u00E5,\u00E6,\u0105",
+ /* morekeys_a */ "\u0101,\u00E0,\u00E1,\u00E2,\u00E3,\u00E4,\u00E5,\u00E6,\u0105",
// U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE
// U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
// U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
@@ -2411,7 +2397,7 @@ public final class KeyboardTextsTable {
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+0151: "ő" LATIN SMALL LETTER O WITH DOUBLE ACUTE
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
- /* more_keys_for_o */ "\u00F2,\u00F3,\u00F4,\u00F5,\u00F6,\u0153,\u0151,\u00F8",
+ /* morekeys_o */ "\u00F2,\u00F3,\u00F4,\u00F5,\u00F6,\u0153,\u0151,\u00F8",
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
// U+0173: "ų" LATIN SMALL LETTER U WITH OGONEK
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
@@ -2420,7 +2406,7 @@ public final class KeyboardTextsTable {
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+016F: "ů" LATIN SMALL LETTER U WITH RING ABOVE
// U+0171: "ű" LATIN SMALL LETTER U WITH DOUBLE ACUTE
- /* more_keys_for_u */ "\u016B,\u0173,\u00F9,\u00FA,\u00FB,\u00FC,\u016F,\u0171",
+ /* morekeys_u */ "\u016B,\u0173,\u00F9,\u00FA,\u00FB,\u00FC,\u016F,\u0171",
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
// U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
@@ -2429,7 +2415,7 @@ public final class KeyboardTextsTable {
// U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS
// U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
// U+011B: "ě" LATIN SMALL LETTER E WITH CARON
- /* more_keys_for_e */ "\u0113,\u0117,\u00E8,\u00E9,\u00EA,\u00EB,\u0119,\u011B",
+ /* morekeys_e */ "\u0113,\u0117,\u00E8,\u00E9,\u00EA,\u00EB,\u0119,\u011B",
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
// U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
@@ -2437,117 +2423,117 @@ public final class KeyboardTextsTable {
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
// U+0131: "ı" LATIN SMALL LETTER DOTLESS I
- /* more_keys_for_i */ "\u012B,\u012F,\u00EC,\u00ED,\u00EE,\u00EF,\u0131",
+ /* morekeys_i */ "\u012B,\u012F,\u00EC,\u00ED,\u00EE,\u00EF,\u0131",
// U+010D: "č" LATIN SMALL LETTER C WITH CARON
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
// U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
- /* more_keys_for_c */ "\u010D,\u00E7,\u0107",
+ /* morekeys_c */ "\u010D,\u00E7,\u0107",
/* double_quotes */ "!text/double_9qm_lqm",
// U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
// U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
- /* more_keys_for_n */ "\u0146,\u00F1,\u0144",
+ /* morekeys_n */ "\u0146,\u00F1,\u0144",
/* single_quotes */ "!text/single_9qm_lqm",
- /* label_to_alpha_key */ null,
+ /* keylabel_to_alpha */ null,
// U+0161: "š" LATIN SMALL LETTER S WITH CARON
// U+00DF: "ß" LATIN SMALL LETTER SHARP S
// U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
// U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA
- /* more_keys_for_s */ "\u0161,\u00DF,\u015B,\u015F",
+ /* morekeys_s */ "\u0161,\u00DF,\u015B,\u015F",
// U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
// U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
- /* more_keys_for_y */ "\u00FD,\u00FF",
+ /* morekeys_y */ "\u00FD,\u00FF",
// U+010F: "ď" LATIN SMALL LETTER D WITH CARON
- /* more_keys_for_d */ "\u010F",
+ /* morekeys_d */ "\u010F",
// U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
// U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
// U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
- /* more_keys_for_z */ "\u017E,\u017C,\u017A",
+ /* morekeys_z */ "\u017E,\u017C,\u017A",
// U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA
// U+0165: "ť" LATIN SMALL LETTER T WITH CARON
- /* more_keys_for_t */ "\u0163,\u0165",
+ /* morekeys_t */ "\u0163,\u0165",
// U+013C: "ļ" LATIN SMALL LETTER L WITH CEDILLA
// U+0142: "ł" LATIN SMALL LETTER L WITH STROKE
// U+013A: "ĺ" LATIN SMALL LETTER L WITH ACUTE
// U+013E: "ľ" LATIN SMALL LETTER L WITH CARON
- /* more_keys_for_l */ "\u013C,\u0142,\u013A,\u013E",
+ /* morekeys_l */ "\u013C,\u0142,\u013A,\u013E",
// U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA
// U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
- /* more_keys_for_g */ "\u0123,\u011F",
+ /* morekeys_g */ "\u0123,\u011F",
/* single_angle_quotes ~ */
null, null, null,
- /* ~ keylabel_for_currency */
+ /* ~ keyspec_currency */
// U+0157: "ŗ" LATIN SMALL LETTER R WITH CEDILLA
// U+0159: "ř" LATIN SMALL LETTER R WITH CARON
// U+0155: "ŕ" LATIN SMALL LETTER R WITH ACUTE
- /* more_keys_for_r */ "\u0157,\u0159,\u0155",
+ /* morekeys_r */ "\u0157,\u0159,\u0155",
// U+0137: "ķ" LATIN SMALL LETTER K WITH CEDILLA
- /* more_keys_for_k */ "\u0137",
+ /* morekeys_k */ "\u0137",
};
/* Language mk: Macedonian */
private static final String[] LANGUAGE_mk = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null, null,
- /* ~ more_keys_for_c */
+ /* ~ morekeys_c */
/* double_quotes */ "!text/double_9qm_lqm",
- /* more_keys_for_n */ null,
+ /* morekeys_n */ null,
/* single_quotes */ "!text/single_9qm_lqm",
// Label for "switch to alphabetic" key.
// U+0410: "А" CYRILLIC CAPITAL LETTER A
// U+0411: "Б" CYRILLIC CAPITAL LETTER BE
// U+0412: "В" CYRILLIC CAPITAL LETTER VE
- /* label_to_alpha_key */ "\u0410\u0411\u0412",
- /* more_keys_for_s ~ */
+ /* keylabel_to_alpha */ "\u0410\u0411\u0412",
+ /* morekeys_s ~ */
null, null, null, null, null, null, null, null, null, null, null, null,
- /* ~ more_keys_for_k */
+ /* ~ morekeys_k */
// U+0450: "ѐ" CYRILLIC SMALL LETTER IE WITH GRAVE
- /* more_keys_for_cyrillic_ie */ "\u0450",
- /* keylabel_for_nordic_row1_11 ~ */
+ /* morekeys_cyrillic_ie */ "\u0450",
+ /* keyspec_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,
- /* ~ more_keys_for_cyrillic_o */
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ /* ~ morekeys_cyrillic_o */
+ // U+045D: "ѝ" CYRILLIC SMALL LETTER I WITH GRAVE
+ /* morekeys_cyrillic_i */ "\u045D",
// U+0455: "ѕ" CYRILLIC SMALL LETTER DZE
- /* keylabel_for_south_slavic_row1_6 */ "\u0455",
+ /* keyspec_south_slavic_row1_6 */ "\u0455",
// U+045C: "ќ" CYRILLIC SMALL LETTER KJE
- /* keylabel_for_south_slavic_row2_11 */ "\u045C",
+ /* keyspec_south_slavic_row2_11 */ "\u045C",
// U+0437: "з" CYRILLIC SMALL LETTER ZE
- /* keylabel_for_south_slavic_row3_1 */ "\u0437",
+ /* keyspec_south_slavic_row3_1 */ "\u0437",
// U+0453: "ѓ" CYRILLIC SMALL LETTER GJE
- /* keylabel_for_south_slavic_row3_8 */ "\u0453",
- // U+045D: "ѝ" CYRILLIC SMALL LETTER I WITH GRAVE
- /* more_keys_for_cyrillic_i */ "\u045D",
+ /* keyspec_south_slavic_row3_8 */ "\u0453",
};
/* Language mn_MN: Mongolian (Mongolia) */
private static final String[] LANGUAGE_mn_MN = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null, null, null, null, null,
/* ~ single_quotes */
// Label for "switch to alphabetic" key.
// U+0410: "А" CYRILLIC CAPITAL LETTER A
// U+0411: "Б" CYRILLIC CAPITAL LETTER BE
// U+0412: "В" CYRILLIC CAPITAL LETTER VE
- /* label_to_alpha_key */ "\u0410\u0411\u0412",
- /* more_keys_for_s ~ */
+ /* keylabel_to_alpha */ "\u0410\u0411\u0412",
+ /* morekeys_s ~ */
null, null, null, null, null, null, null, null, null,
/* ~ double_angle_quotes */
// U+20AE: "₮" TUGRIK SIGN
- /* keylabel_for_currency */ "\u20AE",
+ /* keyspec_currency */ "\u20AE",
};
/* Language my_MM: Burmese (Myanmar) */
private static final String[] LANGUAGE_my_MM = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null, null, null, null, null,
/* ~ single_quotes */
// Label for "switch to alphabetic" key.
// U+1000: "က" MYANMAR LETTER KA
// U+1001: "ခ" MYANMAR LETTER KHA
// U+1002: "ဂ" MYANMAR LETTER GA
- /* label_to_alpha_key */ "\u1000\u1001\u1002",
+ /* keylabel_to_alpha */ "\u1000\u1001\u1002",
};
/* Language nb: Norwegian Bokmål */
@@ -2558,7 +2544,7 @@ public final class KeyboardTextsTable {
// U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX
// U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE
// U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
- /* more_keys_for_a */ "\u00E0,\u00E4,\u00E1,\u00E2,\u00E3,\u0101",
+ /* morekeys_a */ "\u00E0,\u00E4,\u00E1,\u00E2,\u00E3,\u0101",
// U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
// U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE
// U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
@@ -2566,13 +2552,13 @@ public final class KeyboardTextsTable {
// U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
- /* more_keys_for_o */ "\u00F4,\u00F2,\u00F3,\u00F6,\u00F5,\u0153,\u014D",
+ /* morekeys_o */ "\u00F4,\u00F2,\u00F3,\u00F6,\u00F5,\u0153,\u014D",
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B",
+ /* morekeys_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B",
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
// U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX
@@ -2580,83 +2566,80 @@ public final class KeyboardTextsTable {
// U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
// U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
- /* more_keys_for_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113",
- /* more_keys_for_i */ null,
- /* more_keys_for_c */ null,
+ /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113",
+ /* morekeys_i */ null,
+ /* morekeys_c */ null,
/* double_quotes */ "!text/double_9qm_rqm",
- /* more_keys_for_n */ null,
+ /* morekeys_n */ null,
/* single_quotes */ "!text/single_9qm_rqm",
- /* label_to_alpha_key ~ */
+ /* keylabel_to_alpha ~ */
null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- /* ~ more_keys_for_cyrillic_ie */
+ /* ~ morekeys_cyrillic_ie */
// U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
- /* keylabel_for_nordic_row1_11 */ "\u00E5",
+ /* keyspec_nordic_row1_11 */ "\u00E5",
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
- /* keylabel_for_nordic_row2_10 */ "\u00F8",
+ /* keyspec_nordic_row2_10 */ "\u00F8",
// U+00E6: "æ" LATIN SMALL LETTER AE
- /* keylabel_for_nordic_row2_11 */ "\u00E6",
+ /* keyspec_nordic_row2_11 */ "\u00E6",
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
- /* more_keys_for_nordic_row2_10 */ "\u00F6",
- /* keylabel_for_east_slavic_row1_9 ~ */
+ /* morekeys_nordic_row2_10 */ "\u00F6",
+ /* keyspec_east_slavic_row1_9 ~ */
null, null, null, null, null,
- /* ~ more_keys_for_cyrillic_soft_sign */
+ /* ~ morekeys_cyrillic_soft_sign */
// U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS
- /* more_keys_for_nordic_row2_11 */ "\u00E4",
+ /* morekeys_nordic_row2_11 */ "\u00E4",
};
/* Language ne_NP: Nepali (Nepal) */
private static final String[] LANGUAGE_ne_NP = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null, null, null, null, null,
/* ~ single_quotes */
// Label for "switch to alphabetic" key.
// U+0915: "क" DEVANAGARI LETTER KA
// U+0916: "ख" DEVANAGARI LETTER KHA
// U+0917: "ग" DEVANAGARI LETTER GA
- /* label_to_alpha_key */ "\u0915\u0916\u0917",
- /* more_keys_for_s ~ */
+ /* keylabel_to_alpha */ "\u0915\u0916\u0917",
+ /* morekeys_s ~ */
null, null, null, null, null, null, null, null, null,
/* ~ double_angle_quotes */
// U+0930/U+0941/U+002E "रु." NEPALESE RUPEE SIGN
- /* keylabel_for_currency */ "\u0930\u0941.",
- /* more_keys_for_r ~ */
+ /* keyspec_currency */ "\u0930\u0941.",
+ /* morekeys_r ~ */
null, null, null, null, null, null, null, null, null, null, null, null, null,
- /* ~ more_keys_for_nordic_row2_11 */
+ /* ~ morekeys_nordic_row2_11 */
// U+0967: "१" DEVANAGARI DIGIT ONE
- /* keylabel_for_symbols_1 */ "\u0967",
+ /* keyspec_symbols_1 */ "\u0967",
// U+0968: "२" DEVANAGARI DIGIT TWO
- /* keylabel_for_symbols_2 */ "\u0968",
+ /* keyspec_symbols_2 */ "\u0968",
// U+0969: "३" DEVANAGARI DIGIT THREE
- /* keylabel_for_symbols_3 */ "\u0969",
+ /* keyspec_symbols_3 */ "\u0969",
// U+096A: "४" DEVANAGARI DIGIT FOUR
- /* keylabel_for_symbols_4 */ "\u096A",
+ /* keyspec_symbols_4 */ "\u096A",
// U+096B: "५" DEVANAGARI DIGIT FIVE
- /* keylabel_for_symbols_5 */ "\u096B",
+ /* keyspec_symbols_5 */ "\u096B",
// U+096C: "६" DEVANAGARI DIGIT SIX
- /* keylabel_for_symbols_6 */ "\u096C",
+ /* keyspec_symbols_6 */ "\u096C",
// U+096D: "७" DEVANAGARI DIGIT SEVEN
- /* keylabel_for_symbols_7 */ "\u096D",
+ /* keyspec_symbols_7 */ "\u096D",
// U+096E: "८" DEVANAGARI DIGIT EIGHT
- /* keylabel_for_symbols_8 */ "\u096E",
+ /* keyspec_symbols_8 */ "\u096E",
// U+096F: "९" DEVANAGARI DIGIT NINE
- /* keylabel_for_symbols_9 */ "\u096F",
+ /* keyspec_symbols_9 */ "\u096F",
// U+0966: "०" DEVANAGARI DIGIT ZERO
- /* keylabel_for_symbols_0 */ "\u0966",
+ /* keyspec_symbols_0 */ "\u0966",
// Label for "switch to symbols" key.
- /* label_to_symbol_key */ "?\u0967\u0968\u0969",
- // Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
- // part because it'll be appended by the code.
- /* label_to_symbol_with_microphone_key */ "\u0967\u0968\u0969",
- /* additional_more_keys_for_symbols_1 */ "1",
- /* additional_more_keys_for_symbols_2 */ "2",
- /* additional_more_keys_for_symbols_3 */ "3",
- /* additional_more_keys_for_symbols_4 */ "4",
- /* additional_more_keys_for_symbols_5 */ "5",
- /* additional_more_keys_for_symbols_6 */ "6",
- /* additional_more_keys_for_symbols_7 */ "7",
- /* additional_more_keys_for_symbols_8 */ "8",
- /* additional_more_keys_for_symbols_9 */ "9",
- /* additional_more_keys_for_symbols_0 */ "0",
+ /* keylabel_to_symbol */ "?\u0967\u0968\u0969",
+ /* additional_morekeys_symbols_1 */ "1",
+ /* additional_morekeys_symbols_2 */ "2",
+ /* additional_morekeys_symbols_3 */ "3",
+ /* additional_morekeys_symbols_4 */ "4",
+ /* additional_morekeys_symbols_5 */ "5",
+ /* additional_morekeys_symbols_6 */ "6",
+ /* additional_morekeys_symbols_7 */ "7",
+ /* additional_morekeys_symbols_8 */ "8",
+ /* additional_morekeys_symbols_9 */ "9",
+ /* additional_morekeys_symbols_0 */ "0",
};
/* Language nl: Dutch */
@@ -2669,7 +2652,7 @@ public final class KeyboardTextsTable {
// U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE
// U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
// U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
- /* more_keys_for_a */ "\u00E1,\u00E4,\u00E2,\u00E0,\u00E6,\u00E3,\u00E5,\u0101",
+ /* morekeys_a */ "\u00E1,\u00E4,\u00E2,\u00E0,\u00E6,\u00E3,\u00E5,\u0101",
// U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
// U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
@@ -2678,13 +2661,13 @@ public final class KeyboardTextsTable {
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
- /* more_keys_for_o */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
+ /* morekeys_o */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00FA,\u00FC,\u00FB,\u00F9,\u016B",
+ /* morekeys_u */ "\u00FA,\u00FC,\u00FB,\u00F9,\u016B",
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS
// U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX
@@ -2692,7 +2675,7 @@ public final class KeyboardTextsTable {
// U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
// U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
- /* more_keys_for_e */ "\u00E9,\u00EB,\u00EA,\u00E8,\u0119,\u0117,\u0113",
+ /* morekeys_e */ "\u00E9,\u00EB,\u00EA,\u00E8,\u0119,\u0117,\u0113",
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
@@ -2700,17 +2683,17 @@ public final class KeyboardTextsTable {
// U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
// U+0133: "ij" LATIN SMALL LIGATURE IJ
- /* more_keys_for_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B,\u0133",
- /* more_keys_for_c */ null,
+ /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B,\u0133",
+ /* morekeys_c */ null,
/* double_quotes */ "!text/double_9qm_rqm",
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
// U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
- /* more_keys_for_n */ "\u00F1,\u0144",
+ /* morekeys_n */ "\u00F1,\u0144",
/* single_quotes */ "!text/single_9qm_rqm",
- /* label_to_alpha_key */ null,
- /* more_keys_for_s */ null,
+ /* keylabel_to_alpha */ null,
+ /* morekeys_s */ null,
// U+0133: "ij" LATIN SMALL LIGATURE IJ
- /* more_keys_for_y */ "\u0133",
+ /* morekeys_y */ "\u0133",
};
/* Language pl: Polish */
@@ -2724,7 +2707,7 @@ public final class KeyboardTextsTable {
// U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE
// U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
// U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
- /* more_keys_for_a */ "\u0105,\u00E1,\u00E0,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
+ /* morekeys_a */ "\u0105,\u00E1,\u00E0,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
// U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
// U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
@@ -2733,8 +2716,8 @@ public final class KeyboardTextsTable {
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
- /* more_keys_for_o */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
- /* more_keys_for_u */ null,
+ /* morekeys_o */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
+ /* morekeys_u */ null,
// U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
@@ -2742,31 +2725,31 @@ public final class KeyboardTextsTable {
// U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS
// U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
- /* more_keys_for_e */ "\u0119,\u00E8,\u00E9,\u00EA,\u00EB,\u0117,\u0113",
- /* more_keys_for_i */ null,
+ /* morekeys_e */ "\u0119,\u00E8,\u00E9,\u00EA,\u00EB,\u0117,\u0113",
+ /* morekeys_i */ null,
// U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
// U+010D: "č" LATIN SMALL LETTER C WITH CARON
- /* more_keys_for_c */ "\u0107,\u00E7,\u010D",
+ /* morekeys_c */ "\u0107,\u00E7,\u010D",
/* double_quotes */ "!text/double_9qm_rqm",
// U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
- /* more_keys_for_n */ "\u0144,\u00F1",
+ /* morekeys_n */ "\u0144,\u00F1",
/* single_quotes */ "!text/single_9qm_rqm",
- /* label_to_alpha_key */ null,
+ /* keylabel_to_alpha */ null,
// U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
// U+00DF: "ß" LATIN SMALL LETTER SHARP S
// U+0161: "š" LATIN SMALL LETTER S WITH CARON
- /* more_keys_for_s */ "\u015B,\u00DF,\u0161",
- /* more_keys_for_y */ null,
- /* more_keys_for_d */ null,
+ /* morekeys_s */ "\u015B,\u00DF,\u0161",
+ /* morekeys_y */ null,
+ /* morekeys_d */ null,
// U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
// U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
// U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
- /* more_keys_for_z */ "\u017C,\u017A,\u017E",
- /* more_keys_for_t */ null,
+ /* morekeys_z */ "\u017C,\u017A,\u017E",
+ /* morekeys_t */ null,
// U+0142: "ł" LATIN SMALL LETTER L WITH STROKE
- /* more_keys_for_l */ "\u0142",
+ /* morekeys_l */ "\u0142",
};
/* Language pt: Portuguese */
@@ -2779,7 +2762,7 @@ public final class KeyboardTextsTable {
// U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
// U+00E6: "æ" LATIN SMALL LETTER AE
// U+00AA: "ª" FEMININE ORDINAL INDICATOR
- /* more_keys_for_a */ "\u00E1,\u00E3,\u00E0,\u00E2,\u00E4,\u00E5,\u00E6,\u00AA",
+ /* morekeys_a */ "\u00E1,\u00E3,\u00E0,\u00E2,\u00E4,\u00E5,\u00E6,\u00AA",
// U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
// U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE
// U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
@@ -2789,13 +2772,13 @@ public final class KeyboardTextsTable {
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
// U+00BA: "º" MASCULINE ORDINAL INDICATOR
- /* more_keys_for_o */ "\u00F3,\u00F5,\u00F4,\u00F2,\u00F6,\u0153,\u00F8,\u014D,\u00BA",
+ /* morekeys_o */ "\u00F3,\u00F5,\u00F4,\u00F2,\u00F6,\u0153,\u00F8,\u014D,\u00BA",
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
+ /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
@@ -2803,23 +2786,23 @@ public final class KeyboardTextsTable {
// U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
// U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS
- /* more_keys_for_e */ "\u00E9,\u00EA,\u00E8,\u0119,\u0117,\u0113,\u00EB",
+ /* morekeys_e */ "\u00E9,\u00EA,\u00E8,\u0119,\u0117,\u0113,\u00EB",
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
// U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
- /* more_keys_for_i */ "\u00ED,\u00EE,\u00EC,\u00EF,\u012F,\u012B",
+ /* morekeys_i */ "\u00ED,\u00EE,\u00EC,\u00EF,\u012F,\u012B",
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
// U+010D: "č" LATIN SMALL LETTER C WITH CARON
// U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
- /* more_keys_for_c */ "\u00E7,\u010D,\u0107",
+ /* morekeys_c */ "\u00E7,\u010D,\u0107",
};
/* Language rm: Raeto-Romance */
private static final String[] LANGUAGE_rm = {
- /* more_keys_for_a */ null,
+ /* morekeys_a */ null,
// U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE
// U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
@@ -2827,7 +2810,7 @@ public final class KeyboardTextsTable {
// U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
- /* more_keys_for_o */ "\u00F2,\u00F3,\u00F6,\u00F4,\u00F5,\u0153,\u00F8",
+ /* morekeys_o */ "\u00F2,\u00F3,\u00F6,\u00F4,\u00F5,\u0153,\u00F8",
};
/* Language ro: Romanian */
@@ -2841,65 +2824,65 @@ public final class KeyboardTextsTable {
// U+00E6: "æ" LATIN SMALL LETTER AE
// U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
// U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
- /* more_keys_for_a */ "\u00E2,\u00E3,\u0103,\u00E0,\u00E1,\u00E4,\u00E6,\u00E5,\u0101",
- /* more_keys_for_o ~ */
+ /* morekeys_a */ "\u00E2,\u00E3,\u0103,\u00E0,\u00E1,\u00E4,\u00E6,\u00E5,\u0101",
+ /* morekeys_o ~ */
null, null, null,
- /* ~ more_keys_for_e */
+ /* ~ morekeys_e */
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
- /* more_keys_for_i */ "\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B",
- /* more_keys_for_c */ null,
+ /* morekeys_i */ "\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B",
+ /* morekeys_c */ null,
/* double_quotes */ "!text/double_9qm_rqm",
- /* more_keys_for_n */ null,
+ /* morekeys_n */ null,
/* single_quotes */ "!text/single_9qm_rqm",
- /* label_to_alpha_key */ null,
+ /* keylabel_to_alpha */ null,
// U+0219: "ș" LATIN SMALL LETTER S WITH COMMA BELOW
// U+00DF: "ß" LATIN SMALL LETTER SHARP S
// U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
// U+0161: "š" LATIN SMALL LETTER S WITH CARON
- /* more_keys_for_s */ "\u0219,\u00DF,\u015B,\u0161",
- /* more_keys_for_y ~ */
+ /* morekeys_s */ "\u0219,\u00DF,\u015B,\u0161",
+ /* morekeys_y ~ */
null, null, null,
- /* ~ more_keys_for_z */
+ /* ~ morekeys_z */
// U+021B: "ț" LATIN SMALL LETTER T WITH COMMA BELOW
- /* more_keys_for_t */ "\u021B",
+ /* morekeys_t */ "\u021B",
};
/* Language ru: Russian */
private static final String[] LANGUAGE_ru = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null, null,
- /* ~ more_keys_for_c */
+ /* ~ morekeys_c */
/* double_quotes */ "!text/double_9qm_lqm",
- /* more_keys_for_n */ null,
+ /* morekeys_n */ null,
/* single_quotes */ "!text/single_9qm_lqm",
// Label for "switch to alphabetic" key.
// U+0410: "А" CYRILLIC CAPITAL LETTER A
// U+0411: "Б" CYRILLIC CAPITAL LETTER BE
// U+0412: "В" CYRILLIC CAPITAL LETTER VE
- /* label_to_alpha_key */ "\u0410\u0411\u0412",
- /* more_keys_for_s ~ */
+ /* keylabel_to_alpha */ "\u0410\u0411\u0412",
+ /* morekeys_s ~ */
null, null, null, null, null, null, null, null, null, null, null, null,
- /* ~ more_keys_for_k */
+ /* ~ morekeys_k */
// U+0451: "ё" CYRILLIC SMALL LETTER IO
- /* more_keys_for_cyrillic_ie */ "\u0451",
- /* keylabel_for_nordic_row1_11 ~ */
+ /* morekeys_cyrillic_ie */ "\u0451",
+ /* keyspec_nordic_row1_11 ~ */
null, null, null, null,
- /* ~ more_keys_for_nordic_row2_10 */
+ /* ~ morekeys_nordic_row2_10 */
// U+0449: "щ" CYRILLIC SMALL LETTER SHCHA
- /* keylabel_for_east_slavic_row1_9 */ "\u0449",
+ /* keyspec_east_slavic_row1_9 */ "\u0449",
// U+044B: "ы" CYRILLIC SMALL LETTER YERU
- /* keylabel_for_east_slavic_row2_2 */ "\u044B",
+ /* keyspec_east_slavic_row2_2 */ "\u044B",
// U+044D: "э" CYRILLIC SMALL LETTER E
- /* keylabel_for_east_slavic_row2_11 */ "\u044D",
+ /* keyspec_east_slavic_row2_11 */ "\u044D",
// U+0438: "и" CYRILLIC SMALL LETTER I
- /* keylabel_for_east_slavic_row3_5 */ "\u0438",
+ /* keyspec_east_slavic_row3_5 */ "\u0438",
// U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN
- /* more_keys_for_cyrillic_soft_sign */ "\u044A",
+ /* morekeys_cyrillic_soft_sign */ "\u044A",
};
/* Language sk: Slovak */
@@ -2913,7 +2896,7 @@ public final class KeyboardTextsTable {
// U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
// U+00E6: "æ" LATIN SMALL LETTER AE
// U+0105: "ą" LATIN SMALL LETTER A WITH OGONEK
- /* more_keys_for_a */ "\u00E1,\u00E4,\u0101,\u00E0,\u00E2,\u00E3,\u00E5,\u00E6,\u0105",
+ /* morekeys_a */ "\u00E1,\u00E4,\u0101,\u00E0,\u00E2,\u00E3,\u00E5,\u00E6,\u0105",
// U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
// U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
@@ -2922,7 +2905,7 @@ public final class KeyboardTextsTable {
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+0151: "ő" LATIN SMALL LETTER O WITH DOUBLE ACUTE
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
- /* more_keys_for_o */ "\u00F4,\u00F3,\u00F6,\u00F2,\u00F5,\u0153,\u0151,\u00F8",
+ /* morekeys_o */ "\u00F4,\u00F3,\u00F6,\u00F2,\u00F5,\u0153,\u0151,\u00F8",
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+016F: "ů" LATIN SMALL LETTER U WITH RING ABOVE
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
@@ -2931,7 +2914,7 @@ public final class KeyboardTextsTable {
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+0171: "ű" LATIN SMALL LETTER U WITH DOUBLE ACUTE
- /* more_keys_for_u */ "\u00FA,\u016F,\u00FC,\u016B,\u0173,\u00F9,\u00FB,\u0171",
+ /* morekeys_u */ "\u00FA,\u016F,\u00FC,\u016B,\u0173,\u00F9,\u00FB,\u0171",
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+011B: "ě" LATIN SMALL LETTER E WITH CARON
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
@@ -2940,7 +2923,7 @@ public final class KeyboardTextsTable {
// U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX
// U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS
// U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
- /* more_keys_for_e */ "\u00E9,\u011B,\u0113,\u0117,\u00E8,\u00EA,\u00EB,\u0119",
+ /* morekeys_e */ "\u00E9,\u011B,\u0113,\u0117,\u00E8,\u00EA,\u00EB,\u0119",
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
// U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
@@ -2948,139 +2931,139 @@ public final class KeyboardTextsTable {
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
// U+0131: "ı" LATIN SMALL LETTER DOTLESS I
- /* more_keys_for_i */ "\u00ED,\u012B,\u012F,\u00EC,\u00EE,\u00EF,\u0131",
+ /* morekeys_i */ "\u00ED,\u012B,\u012F,\u00EC,\u00EE,\u00EF,\u0131",
// U+010D: "č" LATIN SMALL LETTER C WITH CARON
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
// U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
- /* more_keys_for_c */ "\u010D,\u00E7,\u0107",
+ /* morekeys_c */ "\u010D,\u00E7,\u0107",
/* double_quotes */ "!text/double_9qm_lqm",
// 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
- /* more_keys_for_n */ "\u0148,\u0146,\u00F1,\u0144",
+ /* morekeys_n */ "\u0148,\u0146,\u00F1,\u0144",
/* single_quotes */ "!text/single_9qm_lqm",
- /* label_to_alpha_key */ null,
+ /* keylabel_to_alpha */ null,
// U+0161: "š" LATIN SMALL LETTER S WITH CARON
// U+00DF: "ß" LATIN SMALL LETTER SHARP S
// U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
// U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA
- /* more_keys_for_s */ "\u0161,\u00DF,\u015B,\u015F",
+ /* morekeys_s */ "\u0161,\u00DF,\u015B,\u015F",
// U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
// U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
- /* more_keys_for_y */ "\u00FD,\u00FF",
+ /* morekeys_y */ "\u00FD,\u00FF",
// U+010F: "ď" LATIN SMALL LETTER D WITH CARON
- /* more_keys_for_d */ "\u010F",
+ /* morekeys_d */ "\u010F",
// U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
// U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
// U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
- /* more_keys_for_z */ "\u017E,\u017C,\u017A",
+ /* morekeys_z */ "\u017E,\u017C,\u017A",
// U+0165: "ť" LATIN SMALL LETTER T WITH CARON
// U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA
- /* more_keys_for_t */ "\u0165,\u0163",
+ /* morekeys_t */ "\u0165,\u0163",
// U+013E: "ľ" LATIN SMALL LETTER L WITH CARON
// U+013A: "ĺ" LATIN SMALL LETTER L WITH ACUTE
// U+013C: "ļ" LATIN SMALL LETTER L WITH CEDILLA
// U+0142: "ł" LATIN SMALL LETTER L WITH STROKE
- /* more_keys_for_l */ "\u013E,\u013A,\u013C,\u0142",
+ /* morekeys_l */ "\u013E,\u013A,\u013C,\u0142",
// U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA
// U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
- /* more_keys_for_g */ "\u0123,\u011F",
+ /* morekeys_g */ "\u0123,\u011F",
/* single_angle_quotes */ "!text/single_raqm_laqm",
/* double_angle_quotes */ "!text/double_raqm_laqm",
- /* keylabel_for_currency */ null,
+ /* keyspec_currency */ null,
// U+0155: "ŕ" LATIN SMALL LETTER R WITH ACUTE
// U+0159: "ř" LATIN SMALL LETTER R WITH CARON
// U+0157: "ŗ" LATIN SMALL LETTER R WITH CEDILLA
- /* more_keys_for_r */ "\u0155,\u0159,\u0157",
+ /* morekeys_r */ "\u0155,\u0159,\u0157",
// U+0137: "ķ" LATIN SMALL LETTER K WITH CEDILLA
- /* more_keys_for_k */ "\u0137",
+ /* morekeys_k */ "\u0137",
};
/* Language sl: Slovenian */
private static final String[] LANGUAGE_sl = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null,
- /* ~ more_keys_for_i */
+ /* ~ morekeys_i */
// U+010D: "č" LATIN SMALL LETTER C WITH CARON
// U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
- /* more_keys_for_c */ "\u010D,\u0107",
+ /* morekeys_c */ "\u010D,\u0107",
/* double_quotes */ "!text/double_9qm_lqm",
- /* more_keys_for_n */ null,
+ /* morekeys_n */ null,
/* single_quotes */ "!text/single_9qm_lqm",
- /* label_to_alpha_key */ null,
+ /* keylabel_to_alpha */ null,
// U+0161: "š" LATIN SMALL LETTER S WITH CARON
- /* more_keys_for_s */ "\u0161",
- /* more_keys_for_y */ null,
+ /* morekeys_s */ "\u0161",
+ /* morekeys_y */ null,
// U+0111: "đ" LATIN SMALL LETTER D WITH STROKE
- /* more_keys_for_d */ "\u0111",
+ /* morekeys_d */ "\u0111",
// U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
- /* more_keys_for_z */ "\u017E",
- /* more_keys_for_t ~ */
+ /* morekeys_z */ "\u017E",
+ /* morekeys_t ~ */
null, null, null,
- /* ~ more_keys_for_g */
+ /* ~ morekeys_g */
/* single_angle_quotes */ "!text/single_raqm_laqm",
/* double_angle_quotes */ "!text/double_raqm_laqm",
};
/* Language sr: Serbian */
private static final String[] LANGUAGE_sr = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null, null,
- /* ~ more_keys_for_c */
+ /* ~ morekeys_c */
/* double_quotes */ "!text/double_9qm_lqm",
- /* more_keys_for_n */ null,
+ /* morekeys_n */ null,
/* single_quotes */ "!text/single_9qm_lqm",
// END: More keys definitions for Serbian (Cyrillic)
// Label for "switch to alphabetic" key.
// U+0410: "А" CYRILLIC CAPITAL LETTER A
// U+0411: "Б" CYRILLIC CAPITAL LETTER BE
// U+0412: "В" CYRILLIC CAPITAL LETTER VE
- /* label_to_alpha_key */ "\u0410\u0411\u0412",
- /* more_keys_for_s ~ */
+ /* keylabel_to_alpha */ "\u0410\u0411\u0412",
+ /* morekeys_s ~ */
null, null, null, null, null, null, null,
- /* ~ more_keys_for_g */
+ /* ~ morekeys_g */
/* single_angle_quotes */ "!text/single_raqm_laqm",
/* double_angle_quotes */ "!text/double_raqm_laqm",
- /* keylabel_for_currency ~ */
+ /* keyspec_currency ~ */
null, null, null,
- /* ~ more_keys_for_k */
+ /* ~ morekeys_k */
// U+0450: "ѐ" CYRILLIC SMALL LETTER IE WITH GRAVE
- /* more_keys_for_cyrillic_ie */ "\u0450",
- /* keylabel_for_nordic_row1_11 ~ */
+ /* morekeys_cyrillic_ie */ "\u0450",
+ /* keyspec_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,
- /* ~ more_keys_for_cyrillic_o */
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ /* ~ morekeys_cyrillic_o */
+ // U+045D: "ѝ" CYRILLIC SMALL LETTER I WITH GRAVE
+ /* morekeys_cyrillic_i */ "\u045D",
// TODO: Move these to sr-Latn once we can handle IETF language tag with script name specified.
// BEGIN: More keys definitions for Serbian (Latin)
// U+0161: "š" LATIN SMALL LETTER S WITH CARON
// U+00DF: "ß" LATIN SMALL LETTER SHARP S
// U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
- // <string name="more_keys_for_s">&#x0161;,&#x00DF;,&#x015B;</string>
+ // <string name="morekeys_s">&#x0161;,&#x00DF;,&#x015B;</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
- // <string name="more_keys_for_c">&#x010D;,&#x00E7;,&#x0107;</string>
+ // <string name="morekeys_c">&#x010D;,&#x00E7;,&#x0107;</string>
// U+010F: "ď" LATIN SMALL LETTER D WITH CARON
- // <string name="more_keys_for_d">&#x010F;</string>
+ // <string name="morekeys_d">&#x010F;</string>
// U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
// U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
// U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
- // <string name="more_keys_for_z">&#x017E;,&#x017A;,&#x017C;</string>
+ // <string name="morekeys_z">&#x017E;,&#x017A;,&#x017C;</string>
// END: More keys definitions for Serbian (Latin)
// BEGIN: More keys definitions for Serbian (Cyrillic)
// U+0437: "з" CYRILLIC SMALL LETTER ZE
- /* keylabel_for_south_slavic_row1_6 */ "\u0437",
+ /* keyspec_south_slavic_row1_6 */ "\u0437",
// U+045B: "ћ" CYRILLIC SMALL LETTER TSHE
- /* keylabel_for_south_slavic_row2_11 */ "\u045B",
+ /* keyspec_south_slavic_row2_11 */ "\u045B",
// U+0455: "ѕ" CYRILLIC SMALL LETTER DZE
- /* keylabel_for_south_slavic_row3_1 */ "\u0455",
+ /* keyspec_south_slavic_row3_1 */ "\u0455",
// U+0452: "ђ" CYRILLIC SMALL LETTER DJE
- /* keylabel_for_south_slavic_row3_8 */ "\u0452",
- // U+045D: "ѝ" CYRILLIC SMALL LETTER I WITH GRAVE
- /* more_keys_for_cyrillic_i */ "\u045D",
+ /* keyspec_south_slavic_row3_8 */ "\u0452",
};
/* Language sv: Swedish */
@@ -3090,88 +3073,88 @@ public final class KeyboardTextsTable {
// U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX
// U+0105: "ą" LATIN SMALL LETTER A WITH OGONEK
// U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE
- /* more_keys_for_a */ "\u00E1,\u00E0,\u00E2,\u0105,\u00E3",
+ /* morekeys_a */ "\u00E1,\u00E0,\u00E2,\u0105,\u00E3",
// U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
// U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE
// U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
// U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
- /* more_keys_for_o */ "\u00F3,\u00F2,\u00F4,\u00F5,\u014D",
+ /* morekeys_o */ "\u00F3,\u00F2,\u00F4,\u00F5,\u014D",
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00FC,\u00FA,\u00F9,\u00FB,\u016B",
+ /* morekeys_u */ "\u00FC,\u00FA,\u00F9,\u00FB,\u016B",
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
// U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX
// U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS
// U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
- /* more_keys_for_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0119",
+ /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0119",
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
- /* more_keys_for_i */ "\u00ED,\u00EC,\u00EE,\u00EF",
+ /* morekeys_i */ "\u00ED,\u00EC,\u00EE,\u00EF",
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
// U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
// U+010D: "č" LATIN SMALL LETTER C WITH CARON
- /* more_keys_for_c */ "\u00E7,\u0107,\u010D",
+ /* morekeys_c */ "\u00E7,\u0107,\u010D",
/* double_quotes */ null,
// U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
// U+0148: "ň" LATIN SMALL LETTER N WITH CARON
- /* more_keys_for_n */ "\u0144,\u00F1,\u0148",
+ /* morekeys_n */ "\u0144,\u00F1,\u0148",
/* single_quotes */ null,
- /* label_to_alpha_key */ null,
+ /* keylabel_to_alpha */ null,
// U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
// U+0161: "š" LATIN SMALL LETTER S WITH CARON
// U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA
// U+00DF: "ß" LATIN SMALL LETTER SHARP S
- /* more_keys_for_s */ "\u015B,\u0161,\u015F,\u00DF",
+ /* morekeys_s */ "\u015B,\u0161,\u015F,\u00DF",
// U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
// U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
- /* more_keys_for_y */ "\u00FD,\u00FF",
+ /* morekeys_y */ "\u00FD,\u00FF",
// U+00F0: "ð" LATIN SMALL LETTER ETH
// U+010F: "ď" LATIN SMALL LETTER D WITH CARON
- /* more_keys_for_d */ "\u00F0,\u010F",
+ /* morekeys_d */ "\u00F0,\u010F",
// 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
- /* more_keys_for_z */ "\u017A,\u017E,\u017C",
+ /* morekeys_z */ "\u017A,\u017E,\u017C",
// U+0165: "ť" LATIN SMALL LETTER T WITH CARON
// U+00FE: "þ" LATIN SMALL LETTER THORN
- /* more_keys_for_t */ "\u0165,\u00FE",
+ /* morekeys_t */ "\u0165,\u00FE",
// U+0142: "ł" LATIN SMALL LETTER L WITH STROKE
- /* more_keys_for_l */ "\u0142",
- /* more_keys_for_g */ null,
+ /* morekeys_l */ "\u0142",
+ /* morekeys_g */ null,
/* single_angle_quotes */ "!text/single_raqm_laqm",
/* double_angle_quotes */ "!text/double_raqm_laqm",
- /* keylabel_for_currency */ null,
+ /* keyspec_currency */ null,
// U+0159: "ř" LATIN SMALL LETTER R WITH CARON
- /* more_keys_for_r */ "\u0159",
- /* more_keys_for_k */ null,
- /* more_keys_for_cyrillic_ie */ null,
+ /* morekeys_r */ "\u0159",
+ /* morekeys_k */ null,
+ /* morekeys_cyrillic_ie */ null,
// U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
- /* keylabel_for_nordic_row1_11 */ "\u00E5",
+ /* keyspec_nordic_row1_11 */ "\u00E5",
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
- /* keylabel_for_nordic_row2_10 */ "\u00F6",
+ /* keyspec_nordic_row2_10 */ "\u00F6",
// U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS
- /* keylabel_for_nordic_row2_11 */ "\u00E4",
+ /* keyspec_nordic_row2_11 */ "\u00E4",
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
// U+0153: "œ" LATIN SMALL LIGATURE OE
- /* more_keys_for_nordic_row2_10 */ "\u00F8,\u0153",
- /* keylabel_for_east_slavic_row1_9 ~ */
+ /* morekeys_nordic_row2_10 */ "\u00F8,\u0153",
+ /* keyspec_east_slavic_row1_9 ~ */
null, null, null, null, null,
- /* ~ more_keys_for_cyrillic_soft_sign */
+ /* ~ morekeys_cyrillic_soft_sign */
// U+00E6: "æ" LATIN SMALL LETTER AE
- /* more_keys_for_nordic_row2_11 */ "\u00E6",
+ /* morekeys_nordic_row2_11 */ "\u00E6",
};
/* Language sw: Swahili */
private static final String[] LANGUAGE_sw = {
- // This is the same as English except more_keys_for_g.
+ // This is the same as English except morekeys_g.
// U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE
// U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE
// U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX
@@ -3180,7 +3163,7 @@ public final class KeyboardTextsTable {
// U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE
// U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
// U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
- /* more_keys_for_a */ "\u00E0,\u00E1,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
+ /* morekeys_a */ "\u00E0,\u00E1,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
// U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
// U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE
@@ -3189,55 +3172,55 @@ public final class KeyboardTextsTable {
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
// U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE
- /* more_keys_for_o */ "\u00F4,\u00F6,\u00F2,\u00F3,\u0153,\u00F8,\u014D,\u00F5",
+ /* morekeys_o */ "\u00F4,\u00F6,\u00F2,\u00F3,\u0153,\u00F8,\u014D,\u00F5",
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00FB,\u00FC,\u00F9,\u00FA,\u016B",
+ /* morekeys_u */ "\u00FB,\u00FC,\u00F9,\u00FA,\u016B",
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX
// U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
- /* more_keys_for_e */ "\u00E8,\u00E9,\u00EA,\u00EB,\u0113",
+ /* morekeys_e */ "\u00E8,\u00E9,\u00EA,\u00EB,\u0113",
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
- /* more_keys_for_i */ "\u00EE,\u00EF,\u00ED,\u012B,\u00EC",
+ /* morekeys_i */ "\u00EE,\u00EF,\u00ED,\u012B,\u00EC",
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
- /* more_keys_for_c */ "\u00E7",
+ /* morekeys_c */ "\u00E7",
/* double_quotes */ null,
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
- /* more_keys_for_n */ "\u00F1",
+ /* morekeys_n */ "\u00F1",
/* single_quotes */ null,
- /* label_to_alpha_key */ null,
+ /* keylabel_to_alpha */ null,
// U+00DF: "ß" LATIN SMALL LETTER SHARP S
- /* more_keys_for_s */ "\u00DF",
- /* more_keys_for_y ~ */
+ /* morekeys_s */ "\u00DF",
+ /* morekeys_y ~ */
null, null, null, null, null,
- /* ~ more_keys_for_l */
- /* more_keys_for_g */ "g\'",
+ /* ~ morekeys_l */
+ /* morekeys_g */ "g\'",
};
/* Language th: Thai */
private static final String[] LANGUAGE_th = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null, null, null, null, null,
/* ~ single_quotes */
// Label for "switch to alphabetic" key.
// U+0E01: "ก" THAI CHARACTER KO KAI
// U+0E02: "ข" THAI CHARACTER KHO KHAI
// U+0E04: "ค" THAI CHARACTER KHO KHWAI
- /* label_to_alpha_key */ "\u0E01\u0E02\u0E04",
- /* more_keys_for_s ~ */
+ /* keylabel_to_alpha */ "\u0E01\u0E02\u0E04",
+ /* morekeys_s ~ */
null, null, null, null, null, null, null, null, null,
/* ~ double_angle_quotes */
// U+0E3F: "฿" THAI CURRENCY SYMBOL BAHT
- /* keylabel_for_currency */ "\u0E3F",
+ /* keyspec_currency */ "\u0E3F",
};
/* Language tl: Tagalog */
@@ -3252,7 +3235,7 @@ public final class KeyboardTextsTable {
// U+00E6: "æ" LATIN SMALL LETTER AE
// U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
// U+00AA: "ª" FEMININE ORDINAL INDICATOR
- /* more_keys_for_a */ "\u00E1,\u00E0,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA",
+ /* morekeys_a */ "\u00E1,\u00E0,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA",
// U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
// U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
@@ -3262,13 +3245,13 @@ public final class KeyboardTextsTable {
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
// U+00BA: "º" MASCULINE ORDINAL INDICATOR
- /* more_keys_for_o */ "\u00F3,\u00F2,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA",
+ /* morekeys_o */ "\u00F3,\u00F2,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA",
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
+ /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
// U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS
@@ -3276,28 +3259,28 @@ public final class KeyboardTextsTable {
// U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
// U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
- /* more_keys_for_e */ "\u00E9,\u00E8,\u00EB,\u00EA,\u0119,\u0117,\u0113",
+ /* morekeys_e */ "\u00E9,\u00E8,\u00EB,\u00EA,\u0119,\u0117,\u0113",
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
- /* more_keys_for_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
+ /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
// U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
// U+010D: "č" LATIN SMALL LETTER C WITH CARON
- /* more_keys_for_c */ "\u00E7,\u0107,\u010D",
+ /* morekeys_c */ "\u00E7,\u0107,\u010D",
/* double_quotes */ null,
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
// U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
- /* more_keys_for_n */ "\u00F1,\u0144",
+ /* morekeys_n */ "\u00F1,\u0144",
};
/* Language tr: Turkish */
private static final String[] LANGUAGE_tr = {
// U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX
- /* more_keys_for_a */ "\u00E2",
+ /* morekeys_a */ "\u00E2",
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
// U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
// U+0153: "œ" LATIN SMALL LIGATURE OE
@@ -3306,14 +3289,14 @@ public final class KeyboardTextsTable {
// U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
- /* more_keys_for_o */ "\u00F6,\u00F4,\u0153,\u00F2,\u00F3,\u00F5,\u00F8,\u014D",
+ /* morekeys_o */ "\u00F6,\u00F4,\u0153,\u00F2,\u00F3,\u00F5,\u00F8,\u014D",
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B",
- /* more_keys_for_e */ null,
+ /* morekeys_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B",
+ /* morekeys_e */ null,
// U+0131: "ı" LATIN SMALL LETTER DOTLESS I
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
@@ -3321,67 +3304,68 @@ public final class KeyboardTextsTable {
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
- /* more_keys_for_i */ "\u0131,\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B",
+ /* morekeys_i */ "\u0131,\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B",
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
// U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
// U+010D: "č" LATIN SMALL LETTER C WITH CARON
- /* more_keys_for_c */ "\u00E7,\u0107,\u010D",
+ /* morekeys_c */ "\u00E7,\u0107,\u010D",
/* double_quotes ~ */
null, null, null, null,
- /* ~ label_to_alpha_key */
+ /* ~ keylabel_to_alpha */
// U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA
// U+00DF: "ß" LATIN SMALL LETTER SHARP S
// U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
// U+0161: "š" LATIN SMALL LETTER S WITH CARON
- /* more_keys_for_s */ "\u015F,\u00DF,\u015B,\u0161",
- /* more_keys_for_y ~ */
+ /* morekeys_s */ "\u015F,\u00DF,\u015B,\u0161",
+ /* morekeys_y ~ */
null, null, null, null, null,
- /* ~ more_keys_for_l */
+ /* ~ morekeys_l */
// U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
- /* more_keys_for_g */ "\u011F",
+ /* morekeys_g */ "\u011F",
};
/* Language uk: Ukrainian */
private static final String[] LANGUAGE_uk = {
- /* more_keys_for_a ~ */
+ /* morekeys_a ~ */
null, null, null, null, null, null,
- /* ~ more_keys_for_c */
+ /* ~ morekeys_c */
/* double_quotes */ "!text/double_9qm_lqm",
- /* more_keys_for_n */ null,
+ /* morekeys_n */ null,
/* single_quotes */ "!text/single_9qm_lqm",
// Label for "switch to alphabetic" key.
// U+0410: "А" CYRILLIC CAPITAL LETTER A
// U+0411: "Б" CYRILLIC CAPITAL LETTER BE
// U+0412: "В" CYRILLIC CAPITAL LETTER VE
- /* label_to_alpha_key */ "\u0410\u0411\u0412",
- /* more_keys_for_s ~ */
+ /* keylabel_to_alpha */ "\u0410\u0411\u0412",
+ /* morekeys_s ~ */
null, null, null, null, null, null, null, null, null,
/* ~ double_angle_quotes */
// U+20B4: "₴" HRYVNIA SIGN
- /* keylabel_for_currency */ "\u20B4",
- /* more_keys_for_r ~ */
+ /* keyspec_currency */ "\u20B4",
+ /* morekeys_r ~ */
null, null, null, null, null, null, null,
- /* ~ more_keys_for_nordic_row2_10 */
+ /* ~ morekeys_nordic_row2_10 */
// U+0449: "щ" CYRILLIC SMALL LETTER SHCHA
- /* keylabel_for_east_slavic_row1_9 */ "\u0449",
+ /* keyspec_east_slavic_row1_9 */ "\u0449",
// U+0456: "і" CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
- /* keylabel_for_east_slavic_row2_2 */ "\u0456",
+ /* keyspec_east_slavic_row2_2 */ "\u0456",
// U+0454: "є" CYRILLIC SMALL LETTER UKRAINIAN IE
- /* keylabel_for_east_slavic_row2_11 */ "\u0454",
+ /* keyspec_east_slavic_row2_11 */ "\u0454",
// U+0438: "и" CYRILLIC SMALL LETTER I
- /* keylabel_for_east_slavic_row3_5 */ "\u0438",
+ /* keyspec_east_slavic_row3_5 */ "\u0438",
// U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN
- /* more_keys_for_cyrillic_soft_sign */ "\u044A",
- /* more_keys_for_nordic_row2_11 ~ */
- null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+ /* morekeys_cyrillic_soft_sign */ "\u044A",
+ /* morekeys_nordic_row2_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,
- /* ~ more_keys_for_cyrillic_en */
- // U+0491: "ґ" CYRILLIC SMALL LETTER GHE WITH UPTURN
- /* more_keys_for_cyrillic_ghe */ "\u0491",
+ null, null, null, null, null, null, null, null, null, null, null, null, null,
+ /* ~ morekeys_w */
// U+0457: "ї" CYRILLIC SMALL LETTER YI
- /* more_keys_for_east_slavic_row2_2 */ "\u0457",
+ /* morekeys_east_slavic_row2_2 */ "\u0457",
+ /* morekeys_cyrillic_u */ null,
+ /* morekeys_cyrillic_en */ null,
+ // U+0491: "ґ" CYRILLIC SMALL LETTER GHE WITH UPTURN
+ /* morekeys_cyrillic_ghe */ "\u0491",
};
/* Language vi: Vietnamese */
@@ -3403,7 +3387,7 @@ public final class KeyboardTextsTable {
// U+1EA9: "ẩ" LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
// U+1EAB: "ẫ" LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
// U+1EAD: "ậ" LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
- /* more_keys_for_a */ "\u00E0,\u00E1,\u1EA3,\u00E3,\u1EA1,\u0103,\u1EB1,\u1EAF,\u1EB3,\u1EB5,\u1EB7,\u00E2,\u1EA7,\u1EA5,\u1EA9,\u1EAB,\u1EAD",
+ /* morekeys_a */ "\u00E0,\u00E1,\u1EA3,\u00E3,\u1EA1,\u0103,\u1EB1,\u1EAF,\u1EB3,\u1EB5,\u1EB7,\u00E2,\u1EA7,\u1EA5,\u1EA9,\u1EAB,\u1EAD",
// U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE
// U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
// U+1ECF: "ỏ" LATIN SMALL LETTER O WITH HOOK ABOVE
@@ -3421,7 +3405,7 @@ public final class KeyboardTextsTable {
// U+1EDF: "ở" LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
// U+1EE1: "ỡ" LATIN SMALL LETTER O WITH HORN AND TILDE
// U+1EE3: "ợ" LATIN SMALL LETTER O WITH HORN AND DOT BELOW
- /* more_keys_for_o */ "\u00F2,\u00F3,\u1ECF,\u00F5,\u1ECD,\u00F4,\u1ED3,\u1ED1,\u1ED5,\u1ED7,\u1ED9,\u01A1,\u1EDD,\u1EDB,\u1EDF,\u1EE1,\u1EE3",
+ /* morekeys_o */ "\u00F2,\u00F3,\u1ECF,\u00F5,\u1ECD,\u00F4,\u1ED3,\u1ED1,\u1ED5,\u1ED7,\u1ED9,\u01A1,\u1EDD,\u1EDB,\u1EDF,\u1EE1,\u1EE3",
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+1EE7: "ủ" LATIN SMALL LETTER U WITH HOOK ABOVE
@@ -3433,7 +3417,7 @@ public final class KeyboardTextsTable {
// U+1EED: "ử" LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
// U+1EEF: "ữ" LATIN SMALL LETTER U WITH HORN AND TILDE
// U+1EF1: "ự" LATIN SMALL LETTER U WITH HORN AND DOT BELOW
- /* more_keys_for_u */ "\u00F9,\u00FA,\u1EE7,\u0169,\u1EE5,\u01B0,\u1EEB,\u1EE9,\u1EED,\u1EEF,\u1EF1",
+ /* morekeys_u */ "\u00F9,\u00FA,\u1EE7,\u0169,\u1EE5,\u01B0,\u1EEB,\u1EE9,\u1EED,\u1EEF,\u1EF1",
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+1EBB: "ẻ" LATIN SMALL LETTER E WITH HOOK ABOVE
@@ -3445,29 +3429,29 @@ public final class KeyboardTextsTable {
// U+1EC3: "ể" LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
// U+1EC5: "ễ" LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
// U+1EC7: "ệ" LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
- /* more_keys_for_e */ "\u00E8,\u00E9,\u1EBB,\u1EBD,\u1EB9,\u00EA,\u1EC1,\u1EBF,\u1EC3,\u1EC5,\u1EC7",
+ /* morekeys_e */ "\u00E8,\u00E9,\u1EBB,\u1EBD,\u1EB9,\u00EA,\u1EC1,\u1EBF,\u1EC3,\u1EC5,\u1EC7",
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+1EC9: "ỉ" LATIN SMALL LETTER I WITH HOOK ABOVE
// U+0129: "ĩ" LATIN SMALL LETTER I WITH TILDE
// U+1ECB: "ị" LATIN SMALL LETTER I WITH DOT BELOW
- /* more_keys_for_i */ "\u00EC,\u00ED,\u1EC9,\u0129,\u1ECB",
- /* more_keys_for_c ~ */
+ /* morekeys_i */ "\u00EC,\u00ED,\u1EC9,\u0129,\u1ECB",
+ /* morekeys_c ~ */
null, null, null, null, null, null,
- /* ~ more_keys_for_s */
+ /* ~ morekeys_s */
// U+1EF3: "ỳ" LATIN SMALL LETTER Y WITH GRAVE
// U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
// U+1EF7: "ỷ" LATIN SMALL LETTER Y WITH HOOK ABOVE
// U+1EF9: "ỹ" LATIN SMALL LETTER Y WITH TILDE
// U+1EF5: "ỵ" LATIN SMALL LETTER Y WITH DOT BELOW
- /* more_keys_for_y */ "\u1EF3,\u00FD,\u1EF7,\u1EF9,\u1EF5",
+ /* morekeys_y */ "\u1EF3,\u00FD,\u1EF7,\u1EF9,\u1EF5",
// U+0111: "đ" LATIN SMALL LETTER D WITH STROKE
- /* more_keys_for_d */ "\u0111",
- /* more_keys_for_z ~ */
+ /* morekeys_d */ "\u0111",
+ /* morekeys_z ~ */
null, null, null, null, null, null,
/* ~ double_angle_quotes */
// U+20AB: "₫" DONG SIGN
- /* keylabel_for_currency */ "\u20AB",
+ /* keyspec_currency */ "\u20AB",
};
/* Language zu: Zulu */
@@ -3481,7 +3465,7 @@ public final class KeyboardTextsTable {
// U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE
// U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
// U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
- /* more_keys_for_a */ "\u00E0,\u00E1,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
+ /* morekeys_a */ "\u00E0,\u00E1,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
// U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
// U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE
@@ -3490,34 +3474,34 @@ public final class KeyboardTextsTable {
// U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
// U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
// U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE
- /* more_keys_for_o */ "\u00F4,\u00F6,\u00F2,\u00F3,\u0153,\u00F8,\u014D,\u00F5",
+ /* morekeys_o */ "\u00F4,\u00F6,\u00F2,\u00F3,\u0153,\u00F8,\u014D,\u00F5",
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
// U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
- /* more_keys_for_u */ "\u00FB,\u00FC,\u00F9,\u00FA,\u016B",
+ /* morekeys_u */ "\u00FB,\u00FC,\u00F9,\u00FA,\u016B",
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX
// U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS
// U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
- /* more_keys_for_e */ "\u00E8,\u00E9,\u00EA,\u00EB,\u0113",
+ /* morekeys_e */ "\u00E8,\u00E9,\u00EA,\u00EB,\u0113",
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
// U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
- /* more_keys_for_i */ "\u00EE,\u00EF,\u00ED,\u012B,\u00EC",
+ /* morekeys_i */ "\u00EE,\u00EF,\u00ED,\u012B,\u00EC",
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
- /* more_keys_for_c */ "\u00E7",
+ /* morekeys_c */ "\u00E7",
/* double_quotes */ null,
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
- /* more_keys_for_n */ "\u00F1",
+ /* morekeys_n */ "\u00F1",
/* single_quotes */ null,
- /* label_to_alpha_key */ null,
+ /* keylabel_to_alpha */ null,
// U+00DF: "ß" LATIN SMALL LETTER SHARP S
- /* more_keys_for_s */ "\u00DF",
+ /* morekeys_s */ "\u00DF",
};
/* Language zz: Alphabet */
@@ -3533,7 +3517,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,\u0101,\u0103,\u0105,\u00AA",
+ /* morekeys_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
@@ -3545,7 +3529,7 @@ public final class KeyboardTextsTable {
// U+0151: "ő" LATIN SMALL LETTER O WITH DOUBLE ACUTE
// U+0153: "œ" LATIN SMALL LIGATURE OE
// U+00BA: "º" MASCULINE ORDINAL INDICATOR
- /* more_keys_for_o */ "\u00F2,\u00F3,\u00F4,\u00F5,\u00F6,\u00F8,\u014D,\u014F,\u0151,\u0153,\u00BA",
+ /* morekeys_o */ "\u00F2,\u00F3,\u00F4,\u00F5,\u00F6,\u00F8,\u014D,\u014F,\u0151,\u0153,\u00BA",
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
// U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
@@ -3556,7 +3540,7 @@ public final class KeyboardTextsTable {
// U+016F: "ů" LATIN SMALL LETTER U WITH RING ABOVE
// U+0171: "ű" LATIN SMALL LETTER U WITH DOUBLE ACUTE
// U+0173: "ų" LATIN SMALL LETTER U WITH OGONEK
- /* more_keys_for_u */ "\u00F9,\u00FA,\u00FB,\u00FC,\u0169,\u016B,\u016D,\u016F,\u0171,\u0173",
+ /* morekeys_u */ "\u00F9,\u00FA,\u00FB,\u00FC,\u0169,\u016B,\u016D,\u016F,\u0171,\u0173",
// U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
// U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
// U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX
@@ -3566,7 +3550,7 @@ public final class KeyboardTextsTable {
// U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
// U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
// U+011B: "ě" LATIN SMALL LETTER E WITH CARON
- /* more_keys_for_e */ "\u00E8,\u00E9,\u00EA,\u00EB,\u0113,\u0115,\u0117,\u0119,\u011B",
+ /* morekeys_e */ "\u00E8,\u00E9,\u00EA,\u00EB,\u0113,\u0115,\u0117,\u0119,\u011B",
// U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
// U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
// U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
@@ -3577,13 +3561,13 @@ public final class KeyboardTextsTable {
// U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
// U+0131: "ı" LATIN SMALL LETTER DOTLESS I
// U+0133: "ij" LATIN SMALL LIGATURE IJ
- /* more_keys_for_i */ "\u00EC,\u00ED,\u00EE,\u00EF,\u0129,\u012B,\u012D,\u012F,\u0131,\u0133",
+ /* morekeys_i */ "\u00EC,\u00ED,\u00EE,\u00EF,\u0129,\u012B,\u012D,\u012F,\u0131,\u0133",
// U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
// U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
// U+0109: "ĉ" LATIN SMALL LETTER C WITH CIRCUMFLEX
// U+010B: "ċ" LATIN SMALL LETTER C WITH DOT ABOVE
// U+010D: "č" LATIN SMALL LETTER C WITH CARON
- /* more_keys_for_c */ "\u00E7,\u0107,\u0109,\u010B,\u010D",
+ /* morekeys_c */ "\u00E7,\u0107,\u0109,\u010B,\u010D",
/* double_quotes */ null,
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
// U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
@@ -3591,117 +3575,117 @@ public final class KeyboardTextsTable {
// U+0148: "ň" LATIN SMALL LETTER N WITH CARON
// U+0149: "ʼn" LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
// U+014B: "ŋ" LATIN SMALL LETTER ENG
- /* more_keys_for_n */ "\u00F1,\u0144,\u0146,\u0148,\u0149,\u014B",
+ /* morekeys_n */ "\u00F1,\u0144,\u0146,\u0148,\u0149,\u014B",
/* single_quotes */ null,
- /* label_to_alpha_key */ null,
+ /* keylabel_to_alpha */ null,
// U+00DF: "ß" LATIN SMALL LETTER SHARP S
// U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
// U+015D: "ŝ" LATIN SMALL LETTER S WITH CIRCUMFLEX
// U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA
// U+0161: "š" LATIN SMALL LETTER S WITH CARON
// U+017F: "ſ" LATIN SMALL LETTER LONG S
- /* more_keys_for_s */ "\u00DF,\u015B,\u015D,\u015F,\u0161,\u017F",
+ /* morekeys_s */ "\u00DF,\u015B,\u015D,\u015F,\u0161,\u017F",
// U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
// U+0177: "ŷ" LATIN SMALL LETTER Y WITH CIRCUMFLEX
// U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
// U+0133: "ij" LATIN SMALL LIGATURE IJ
- /* more_keys_for_y */ "\u00FD,\u0177,\u00FF,\u0133",
+ /* morekeys_y */ "\u00FD,\u0177,\u00FF,\u0133",
// U+010F: "ď" LATIN SMALL LETTER D WITH CARON
// U+0111: "đ" LATIN SMALL LETTER D WITH STROKE
// U+00F0: "ð" LATIN SMALL LETTER ETH
- /* more_keys_for_d */ "\u010F,\u0111,\u00F0",
+ /* morekeys_d */ "\u010F,\u0111,\u00F0",
// U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
// U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
// U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
- /* more_keys_for_z */ "\u017A,\u017C,\u017E",
+ /* morekeys_z */ "\u017A,\u017C,\u017E",
// U+00FE: "þ" LATIN SMALL LETTER THORN
// U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA
// U+0165: "ť" LATIN SMALL LETTER T WITH CARON
// U+0167: "ŧ" LATIN SMALL LETTER T WITH STROKE
- /* more_keys_for_t */ "\u00FE,\u0163,\u0165,\u0167",
+ /* morekeys_t */ "\u00FE,\u0163,\u0165,\u0167",
// U+013A: "ĺ" LATIN SMALL LETTER L WITH ACUTE
// U+013C: "ļ" LATIN SMALL LETTER L WITH CEDILLA
// U+013E: "ľ" LATIN SMALL LETTER L WITH CARON
// U+0140: "ŀ" LATIN SMALL LETTER L WITH MIDDLE DOT
// U+0142: "ł" LATIN SMALL LETTER L WITH STROKE
- /* more_keys_for_l */ "\u013A,\u013C,\u013E,\u0140,\u0142",
+ /* morekeys_l */ "\u013A,\u013C,\u013E,\u0140,\u0142",
// U+011D: "ĝ" LATIN SMALL LETTER G WITH CIRCUMFLEX
// U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
// U+0121: "ġ" LATIN SMALL LETTER G WITH DOT ABOVE
// U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA
- /* more_keys_for_g */ "\u011D,\u011F,\u0121,\u0123",
+ /* morekeys_g */ "\u011D,\u011F,\u0121,\u0123",
/* single_angle_quotes ~ */
null, null, null,
- /* ~ keylabel_for_currency */
+ /* ~ keyspec_currency */
// U+0155: "ŕ" LATIN SMALL LETTER R WITH ACUTE
// U+0157: "ŗ" LATIN SMALL LETTER R WITH CEDILLA
// U+0159: "ř" LATIN SMALL LETTER R WITH CARON
- /* more_keys_for_r */ "\u0155,\u0157,\u0159",
+ /* morekeys_r */ "\u0155,\u0157,\u0159",
// U+0137: "ķ" LATIN SMALL LETTER K WITH CEDILLA
// U+0138: "ĸ" LATIN SMALL LETTER KRA
- /* more_keys_for_k */ "\u0137,\u0138",
- /* more_keys_for_cyrillic_ie ~ */
+ /* morekeys_k */ "\u0137,\u0138",
+ /* morekeys_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,
- null, null, null, null, null, null, null,
- /* ~ more_keys_for_question */
+ null, null, null, null, null, null,
+ /* ~ morekeys_question */
// U+0125: "ĥ" LATIN SMALL LETTER H WITH CIRCUMFLEX
- /* more_keys_for_h */ "\u0125",
+ /* morekeys_h */ "\u0125",
// U+0175: "ŵ" LATIN SMALL LETTER W WITH CIRCUMFLEX
- /* more_keys_for_w */ "\u0175",
- /* more_keys_for_cyrillic_u ~ */
+ /* morekeys_w */ "\u0175",
+ /* morekeys_east_slavic_row2_2 ~ */
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_v */
+ /* ~ morekeys_v */
// U+0135: "ĵ" LATIN SMALL LETTER J WITH CIRCUMFLEX
- /* more_keys_for_j */ "\u0135",
+ /* morekeys_j */ "\u0135",
};
// 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 */
- "DEFAULT", LANGUAGE_DEFAULT, /* 169/169 default */
+ "DEFAULT", LANGUAGE_DEFAULT, /* 168/168 default */
"af", LANGUAGE_af, /* 7/ 12 Afrikaans */
- "ar", LANGUAGE_ar, /* 56/108 Arabic */
+ "ar", LANGUAGE_ar, /* 55/107 Arabic */
"az", LANGUAGE_az_AZ, /* 8/ 17 Azerbaijani (Azerbaijan) */
"be", LANGUAGE_be_BY, /* 9/ 32 Belarusian (Belarus) */
"bg", LANGUAGE_bg, /* 2/ 10 Bulgarian */
- "ca", LANGUAGE_ca, /* 11/115 Catalan */
+ "ca", LANGUAGE_ca, /* 11/114 Catalan */
"cs", LANGUAGE_cs, /* 17/ 21 Czech */
"da", LANGUAGE_da, /* 19/ 33 Danish */
- "de", LANGUAGE_de, /* 16/ 92 German */
+ "de", LANGUAGE_de, /* 16/ 91 German */
"el", LANGUAGE_el, /* 1/ 10 Greek */
"en", LANGUAGE_en, /* 8/ 11 English */
- "eo", LANGUAGE_eo, /* 26/127 Esperanto */
- "es", LANGUAGE_es, /* 8/ 56 Spanish */
+ "eo", LANGUAGE_eo, /* 26/126 Esperanto */
+ "es", LANGUAGE_es, /* 8/ 55 Spanish */
"et", LANGUAGE_et_EE, /* 22/ 27 Estonian (Estonia) */
"eu", LANGUAGE_eu_ES, /* 7/ 8 Basque (Spain) */
- "fa", LANGUAGE_fa, /* 59/118 Persian */
+ "fa", LANGUAGE_fa, /* 58/117 Persian */
"fi", LANGUAGE_fi, /* 10/ 33 Finnish */
- "fr", LANGUAGE_fr, /* 13/ 92 French */
+ "fr", LANGUAGE_fr, /* 13/ 91 French */
"gl", LANGUAGE_gl_ES, /* 7/ 8 Gallegan (Spain) */
- "hi", LANGUAGE_hi, /* 24/ 55 Hindi */
+ "hi", LANGUAGE_hi, /* 23/ 54 Hindi */
"hr", LANGUAGE_hr, /* 9/ 19 Croatian */
"hu", LANGUAGE_hu, /* 9/ 19 Hungarian */
- "hy", LANGUAGE_hy_AM, /* 8/121 Armenian (Armenia) */
+ "hy", LANGUAGE_hy_AM, /* 8/120 Armenian (Armenia) */
"is", LANGUAGE_is, /* 10/ 15 Icelandic */
"it", LANGUAGE_it, /* 5/ 5 Italian */
- "iw", LANGUAGE_iw, /* 20/116 Hebrew */
+ "iw", LANGUAGE_iw, /* 20/115 Hebrew */
"ka", LANGUAGE_ka_GE, /* 3/ 10 Georgian (Georgia) */
- "kk", LANGUAGE_kk, /* 15/113 Kazakh */
- "km", LANGUAGE_km_KH, /* 2/114 Khmer (Cambodia) */
- "ky", LANGUAGE_ky, /* 10/ 81 Kirghiz */
+ "kk", LANGUAGE_kk, /* 15/112 Kazakh */
+ "km", LANGUAGE_km_KH, /* 2/113 Khmer (Cambodia) */
+ "ky", LANGUAGE_ky, /* 10/ 80 Kirghiz */
"lo", LANGUAGE_lo_LA, /* 2/ 20 Lao (Laos) */
"lt", LANGUAGE_lt, /* 18/ 22 Lithuanian */
"lv", LANGUAGE_lv, /* 18/ 22 Latvian */
- "mk", LANGUAGE_mk, /* 9/ 86 Macedonian */
+ "mk", LANGUAGE_mk, /* 9/ 85 Macedonian */
"mn", LANGUAGE_mn_MN, /* 2/ 20 Mongolian (Mongolia) */
"my", LANGUAGE_my_MM, /* 1/ 10 Burmese (Myanmar) */
"nb", LANGUAGE_nb, /* 11/ 33 Norwegian Bokmål */
- "ne", LANGUAGE_ne_NP, /* 24/ 55 Nepali (Nepal) */
+ "ne", LANGUAGE_ne_NP, /* 23/ 54 Nepali (Nepal) */
"nl", LANGUAGE_nl, /* 9/ 12 Dutch */
"pl", LANGUAGE_pl, /* 10/ 16 Polish */
"pt", LANGUAGE_pt, /* 6/ 6 Portuguese */
@@ -3710,16 +3694,16 @@ public final class KeyboardTextsTable {
"ru", LANGUAGE_ru, /* 9/ 32 Russian */
"sk", LANGUAGE_sk, /* 20/ 22 Slovak */
"sl", LANGUAGE_sl, /* 8/ 19 Slovenian */
- "sr", LANGUAGE_sr, /* 11/ 86 Serbian */
+ "sr", LANGUAGE_sr, /* 11/ 85 Serbian */
"sv", LANGUAGE_sv, /* 21/ 33 Swedish */
"sw", LANGUAGE_sw, /* 9/ 17 Swahili */
"th", LANGUAGE_th, /* 2/ 20 Thai */
"tl", LANGUAGE_tl, /* 7/ 8 Tagalog */
"tr", LANGUAGE_tr, /* 7/ 17 Turkish */
- "uk", LANGUAGE_uk, /* 11/ 80 Ukrainian */
+ "uk", LANGUAGE_uk, /* 11/ 79 Ukrainian */
"vi", LANGUAGE_vi, /* 8/ 20 Vietnamese */
"zu", LANGUAGE_zu, /* 8/ 11 Zulu */
- "zz", LANGUAGE_zz, /* 19/110 Alphabet */
+ "zz", LANGUAGE_zz, /* 19/109 Alphabet */
};
static {
diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
index 8b8d5776e..ae2d7c9c6 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
@@ -480,6 +480,9 @@ public class DictionaryFacilitatorForSuggest {
return false;
}
final Dictionaries dictionaries = mDictionaries;
+ if (dictionaries.mLocale == null) {
+ return false;
+ }
final String lowerCasedWord = word.toLowerCase(dictionaries.mLocale);
final Map<String, Dictionary> dictMap = dictionaries.mDictMap;
for (final Dictionary dictionary : dictMap.values()) {
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 9877dc853..6985d9a84 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -18,6 +18,7 @@ package com.android.inputmethod.latin;
import android.text.TextUtils;
+import com.android.inputmethod.event.Event;
import com.android.inputmethod.keyboard.ProximityInfo;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.define.ProductionFlag;
@@ -104,7 +105,11 @@ public final class Suggest {
if (trailingSingleQuotesCount > 0) {
wordComposerForLookup = new WordComposer(wordComposer);
for (int i = trailingSingleQuotesCount - 1; i >= 0; --i) {
- wordComposerForLookup.deleteLast();
+ // TODO: do not create a fake event for this. Ideally the word composer should know
+ // how to give out the word without trailing quotes and we can remove this entirely
+ wordComposerForLookup.deleteLast(Event.createSoftwareKeypressEvent(
+ Event.NOT_A_CODE_POINT, Constants.CODE_DELETE,
+ Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE));
}
} else {
wordComposerForLookup = wordComposer;
diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index a60ca3d41..a955f375b 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -314,29 +314,14 @@ public final class WordComposer {
}
/**
- * Delete the last keystroke as a result of hitting backspace.
+ * Delete the last composing unit as a result of hitting backspace.
*/
- public void deleteLast() {
- final int size = size();
- if (size > 0) {
- // Note: mTypedWord.length() and mCodes.length differ when there are surrogate pairs
- final int stringBuilderLength = mTypedWord.length();
- if (stringBuilderLength < size) {
- throw new RuntimeException(
- "In WordComposer: mCodes and mTypedWords have non-matching lengths");
- }
- final int lastChar = mTypedWord.codePointBefore(stringBuilderLength);
- // TODO: with events and composition, this is absolutely not necessarily true.
- mEvents.remove(mEvents.size() - 1);
- if (Character.isSupplementaryCodePoint(lastChar)) {
- mTypedWord.delete(stringBuilderLength - 2, stringBuilderLength);
- } else {
- mTypedWord.deleteCharAt(stringBuilderLength - 1);
- }
- if (Character.isUpperCase(lastChar)) mCapsCount--;
- if (Character.isDigit(lastChar)) mDigitsCount--;
- refreshSize();
- }
+ public void deleteLast(final Event event) {
+ mCombinerChain.processEvent(mEvents, event);
+ mTypedWord.replace(0, mTypedWord.length(),
+ mCombinerChain.getComposingWordWithCombiningFeedback().toString());
+ mEvents.add(event);
+ refreshSize();
// We may have deleted the last one.
if (0 == size()) {
mIsFirstCharCapitalized = false;
diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
index ffa5e8e89..3a59be198 100644
--- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
+++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
@@ -908,7 +908,7 @@ public final class InputLogic {
mWordComposer.reset();
mWordComposer.setRejectedBatchModeSuggestion(rejectedSuggestion);
} else {
- mWordComposer.deleteLast();
+ mWordComposer.deleteLast(inputTransaction.mEvent);
}
mConnection.setComposingText(getTextWithUnderline(mWordComposer.getTypedWord()), 1);
handler.postUpdateSuggestionStrip();
diff --git a/java/src/com/android/inputmethod/latin/makedict/AbstractDictDecoder.java b/java/src/com/android/inputmethod/latin/makedict/AbstractDictDecoder.java
deleted file mode 100644
index bc856f113..000000000
--- a/java/src/com/android/inputmethod/latin/makedict/AbstractDictDecoder.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.makedict;
-
-import com.android.inputmethod.annotations.UsedForTesting;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.TreeMap;
-
-/**
- * A base class of the binary dictionary decoder.
- */
-public abstract class AbstractDictDecoder implements DictDecoder {
- private static final int SUCCESS = 0;
- private static final int ERROR_CANNOT_READ = 1;
- private static final int ERROR_WRONG_FORMAT = 2;
-
- @Override @UsedForTesting
- public int getTerminalPosition(final String word)
- throws IOException, UnsupportedFormatException {
- if (!isDictBufferOpen()) {
- openDictBuffer();
- }
- return BinaryDictIOUtils.getTerminalPosition(this, word);
- }
-
- @Override @UsedForTesting
- public void readUnigramsAndBigramsBinary(final TreeMap<Integer, String> words,
- final TreeMap<Integer, Integer> frequencies,
- final TreeMap<Integer, ArrayList<PendingAttribute>> bigrams)
- throws IOException, UnsupportedFormatException {
- if (!isDictBufferOpen()) {
- openDictBuffer();
- }
- BinaryDictIOUtils.readUnigramsAndBigramsBinary(this, words, frequencies, bigrams);
- }
-
- /**
- * Check whether the header contains the expected information. This is a no-error method,
- * that will return an error code and never throw a checked exception.
- * @return an error code, either ERROR_* or SUCCESS.
- */
- private int checkHeader() {
- try {
- readHeader();
- } catch (IOException e) {
- return ERROR_CANNOT_READ;
- } catch (UnsupportedFormatException e) {
- return ERROR_WRONG_FORMAT;
- }
- return SUCCESS;
- }
-
- @Override
- public boolean hasValidRawBinaryDictionary() {
- return checkHeader() == SUCCESS;
- }
-
- // Placeholder implementations below. These are actually unused.
- @Override
- public void openDictBuffer() throws FileNotFoundException, IOException,
- UnsupportedFormatException {
- }
-
- @Override
- public boolean isDictBufferOpen() {
- return false;
- }
-
- @Override
- public PtNodeInfo readPtNode(final int ptNodePos) {
- return null;
- }
-
- @Override
- public void setPosition(int newPos) {
- }
-
- @Override
- public int getPosition() {
- return 0;
- }
-
- @Override
- public int readPtNodeCount() {
- return 0;
- }
-}
diff --git a/java/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderUtils.java b/java/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderUtils.java
deleted file mode 100644
index b534bcb09..000000000
--- a/java/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderUtils.java
+++ /dev/null
@@ -1,365 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.makedict;
-
-import com.android.inputmethod.annotations.UsedForTesting;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.nio.ByteBuffer;
-
-/**
- * Decodes binary files for a FusionDictionary.
- *
- * All the methods in this class are static.
- *
- * TODO: Remove calls from classes except Ver3DictDecoder
- * TODO: Move this file to makedict/internal.
- * TODO: Rename this class to DictDecoderUtils.
- */
-public final class BinaryDictDecoderUtils {
-
- private static final boolean DBG = MakedictLog.DBG;
-
- private BinaryDictDecoderUtils() {
- // This utility class is not publicly instantiable.
- }
-
- @UsedForTesting
- public interface DictBuffer {
- public int readUnsignedByte();
- public int readUnsignedShort();
- public int readUnsignedInt24();
- public int readInt();
- public int position();
- public void position(int newPosition);
- @UsedForTesting
- public void put(final byte b);
- public int limit();
- @UsedForTesting
- public int capacity();
- }
-
- public static final class ByteBufferDictBuffer implements DictBuffer {
- private ByteBuffer mBuffer;
-
- public ByteBufferDictBuffer(final ByteBuffer buffer) {
- mBuffer = buffer;
- }
-
- @Override
- public int readUnsignedByte() {
- return mBuffer.get() & 0xFF;
- }
-
- @Override
- public int readUnsignedShort() {
- return mBuffer.getShort() & 0xFFFF;
- }
-
- @Override
- public int readUnsignedInt24() {
- final int retval = readUnsignedByte();
- return (retval << 16) + readUnsignedShort();
- }
-
- @Override
- public int readInt() {
- return mBuffer.getInt();
- }
-
- @Override
- public int position() {
- return mBuffer.position();
- }
-
- @Override
- public void position(int newPos) {
- mBuffer.position(newPos);
- }
-
- @Override
- public void put(final byte b) {
- mBuffer.put(b);
- }
-
- @Override
- public int limit() {
- return mBuffer.limit();
- }
-
- @Override
- public int capacity() {
- return mBuffer.capacity();
- }
- }
-
- /**
- * A class grouping utility function for our specific character encoding.
- */
- static final class CharEncoding {
- private static final int MINIMAL_ONE_BYTE_CHARACTER_VALUE = 0x20;
- private static final int MAXIMAL_ONE_BYTE_CHARACTER_VALUE = 0xFF;
-
- /**
- * Helper method to find out whether this code fits on one byte
- */
- private static boolean fitsOnOneByte(final int character) {
- return character >= MINIMAL_ONE_BYTE_CHARACTER_VALUE
- && character <= MAXIMAL_ONE_BYTE_CHARACTER_VALUE;
- }
-
- /**
- * Compute the size of a character given its character code.
- *
- * Char format is:
- * 1 byte = bbbbbbbb match
- * case 000xxxxx: xxxxx << 16 + next byte << 8 + next byte
- * else: if 00011111 (= 0x1F) : this is the terminator. This is a relevant choice because
- * unicode code points range from 0 to 0x10FFFF, so any 3-byte value starting with
- * 00011111 would be outside unicode.
- * else: iso-latin-1 code
- * This allows for the whole unicode range to be encoded, including chars outside of
- * the BMP. Also everything in the iso-latin-1 charset is only 1 byte, except control
- * characters which should never happen anyway (and still work, but take 3 bytes).
- *
- * @param character the character code.
- * @return the size in binary encoded-form, either 1 or 3 bytes.
- */
- static int getCharSize(final int character) {
- // See char encoding in FusionDictionary.java
- if (fitsOnOneByte(character)) return 1;
- if (FormatSpec.INVALID_CHARACTER == character) return 1;
- return 3;
- }
-
- /**
- * Compute the byte size of a character array.
- */
- static int getCharArraySize(final int[] chars) {
- int size = 0;
- for (int character : chars) size += getCharSize(character);
- return size;
- }
-
- /**
- * Writes a char array to a byte buffer.
- *
- * @param codePoints the code point array to write.
- * @param buffer the byte buffer to write to.
- * @param index the index in buffer to write the character array to.
- * @return the index after the last character.
- */
- static int writeCharArray(final int[] codePoints, final byte[] buffer, int index) {
- for (int codePoint : codePoints) {
- if (1 == getCharSize(codePoint)) {
- buffer[index++] = (byte)codePoint;
- } else {
- buffer[index++] = (byte)(0xFF & (codePoint >> 16));
- buffer[index++] = (byte)(0xFF & (codePoint >> 8));
- buffer[index++] = (byte)(0xFF & codePoint);
- }
- }
- return index;
- }
-
- /**
- * Writes a string with our character format to a byte buffer.
- *
- * This will also write the terminator byte.
- *
- * @param buffer the byte buffer to write to.
- * @param origin the offset to write from.
- * @param word the string to write.
- * @return the size written, in bytes.
- */
- static int writeString(final byte[] buffer, final int origin, final String word) {
- final int length = word.length();
- int index = origin;
- for (int i = 0; i < length; i = word.offsetByCodePoints(i, 1)) {
- final int codePoint = word.codePointAt(i);
- if (1 == getCharSize(codePoint)) {
- buffer[index++] = (byte)codePoint;
- } else {
- buffer[index++] = (byte)(0xFF & (codePoint >> 16));
- buffer[index++] = (byte)(0xFF & (codePoint >> 8));
- buffer[index++] = (byte)(0xFF & codePoint);
- }
- }
- buffer[index++] = FormatSpec.PTNODE_CHARACTERS_TERMINATOR;
- return index - origin;
- }
-
- /**
- * Writes a string with our character format to an OutputStream.
- *
- * This will also write the terminator byte.
- *
- * @param stream the OutputStream to write to.
- * @param word the string to write.
- * @return the size written, in bytes.
- */
- static int writeString(final OutputStream stream, final String word) throws IOException {
- final int length = word.length();
- int written = 0;
- for (int i = 0; i < length; i = word.offsetByCodePoints(i, 1)) {
- final int codePoint = word.codePointAt(i);
- final int charSize = getCharSize(codePoint);
- if (1 == charSize) {
- stream.write((byte) codePoint);
- } else {
- stream.write((byte) (0xFF & (codePoint >> 16)));
- stream.write((byte) (0xFF & (codePoint >> 8)));
- stream.write((byte) (0xFF & codePoint));
- }
- written += charSize;
- }
- stream.write(FormatSpec.PTNODE_CHARACTERS_TERMINATOR);
- written += FormatSpec.PTNODE_TERMINATOR_SIZE;
- return written;
- }
-
- /**
- * Reads a string from a DictBuffer. This is the converse of the above method.
- */
- static String readString(final DictBuffer dictBuffer) {
- final StringBuilder s = new StringBuilder();
- int character = readChar(dictBuffer);
- while (character != FormatSpec.INVALID_CHARACTER) {
- s.appendCodePoint(character);
- character = readChar(dictBuffer);
- }
- return s.toString();
- }
-
- /**
- * Reads a character from the buffer.
- *
- * This follows the character format documented earlier in this source file.
- *
- * @param dictBuffer the buffer, positioned over an encoded character.
- * @return the character code.
- */
- static int readChar(final DictBuffer dictBuffer) {
- int character = dictBuffer.readUnsignedByte();
- if (!fitsOnOneByte(character)) {
- if (FormatSpec.PTNODE_CHARACTERS_TERMINATOR == character) {
- return FormatSpec.INVALID_CHARACTER;
- }
- character <<= 16;
- character += dictBuffer.readUnsignedShort();
- }
- return character;
- }
- }
-
- /**
- * Reads and returns the PtNode count out of a buffer and forwards the pointer.
- */
- /* package */ static int readPtNodeCount(final DictBuffer dictBuffer) {
- final int msb = dictBuffer.readUnsignedByte();
- if (FormatSpec.MAX_PTNODES_FOR_ONE_BYTE_PTNODE_COUNT >= msb) {
- return msb;
- } else {
- return ((FormatSpec.MAX_PTNODES_FOR_ONE_BYTE_PTNODE_COUNT & msb) << 8)
- + dictBuffer.readUnsignedByte();
- }
- }
-
- /**
- * Finds, as a string, the word at the position passed as an argument.
- *
- * @param dictDecoder the dict decoder.
- * @param headerSize the size of the header.
- * @param pos the position to seek.
- * @return the word with its frequency, as a weighted string.
- */
- @UsedForTesting
- /* package for tests */ static WeightedString getWordAtPosition(final DictDecoder dictDecoder,
- final int headerSize, final int pos) {
- final WeightedString result;
- final int originalPos = dictDecoder.getPosition();
- dictDecoder.setPosition(pos);
- result = getWordAtPositionWithoutParentAddress(dictDecoder, headerSize, pos);
- dictDecoder.setPosition(originalPos);
- return result;
- }
-
- private static WeightedString getWordAtPositionWithoutParentAddress(
- final DictDecoder dictDecoder, final int headerSize, final int pos) {
- dictDecoder.setPosition(headerSize);
- final int count = dictDecoder.readPtNodeCount();
- int groupPos = dictDecoder.getPosition();
- final StringBuilder builder = new StringBuilder();
- WeightedString result = null;
-
- PtNodeInfo last = null;
- for (int i = count - 1; i >= 0; --i) {
- PtNodeInfo info = dictDecoder.readPtNode(groupPos);
- groupPos = info.mEndAddress;
- if (info.mOriginalAddress == pos) {
- builder.append(new String(info.mCharacters, 0, info.mCharacters.length));
- result = new WeightedString(builder.toString(), info.mProbabilityInfo);
- break; // and return
- }
- if (BinaryDictIOUtils.hasChildrenAddress(info.mChildrenAddress)) {
- if (info.mChildrenAddress > pos) {
- if (null == last) continue;
- builder.append(new String(last.mCharacters, 0, last.mCharacters.length));
- dictDecoder.setPosition(last.mChildrenAddress);
- i = dictDecoder.readPtNodeCount();
- groupPos = last.mChildrenAddress + BinaryDictIOUtils.getPtNodeCountSize(i);
- last = null;
- continue;
- }
- last = info;
- }
- if (0 == i && BinaryDictIOUtils.hasChildrenAddress(last.mChildrenAddress)) {
- builder.append(new String(last.mCharacters, 0, last.mCharacters.length));
- dictDecoder.setPosition(last.mChildrenAddress);
- i = dictDecoder.readPtNodeCount();
- groupPos = last.mChildrenAddress + BinaryDictIOUtils.getPtNodeCountSize(i);
- last = null;
- continue;
- }
- }
- return result;
- }
-
- /**
- * Helper method to pass a file name instead of a File object to isBinaryDictionary.
- */
- public static boolean isBinaryDictionary(final String filename) {
- final File file = new File(filename);
- return isBinaryDictionary(file);
- }
-
- /**
- * Basic test to find out whether the file is a binary dictionary or not.
- *
- * @param file The file to test.
- * @return true if it's a binary dictionary, false otherwise
- */
- public static boolean isBinaryDictionary(final File file) {
- final DictDecoder dictDecoder = FormatSpec.getDictDecoder(file, 0, file.length());
- if (dictDecoder == null) {
- return false;
- }
- return dictDecoder.hasValidRawBinaryDictionary();
- }
-}
diff --git a/java/src/com/android/inputmethod/latin/makedict/BinaryDictEncoderUtils.java b/java/src/com/android/inputmethod/latin/makedict/BinaryDictEncoderUtils.java
deleted file mode 100644
index 39bd98bad..000000000
--- a/java/src/com/android/inputmethod/latin/makedict/BinaryDictEncoderUtils.java
+++ /dev/null
@@ -1,881 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.makedict;
-
-import com.android.inputmethod.annotations.UsedForTesting;
-import com.android.inputmethod.latin.makedict.BinaryDictDecoderUtils.CharEncoding;
-import com.android.inputmethod.latin.makedict.BinaryDictDecoderUtils.DictBuffer;
-import com.android.inputmethod.latin.makedict.FormatSpec.FormatOptions;
-import com.android.inputmethod.latin.makedict.FusionDictionary.PtNode;
-import com.android.inputmethod.latin.makedict.FusionDictionary.PtNodeArray;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-
-/**
- * Encodes binary files for a FusionDictionary.
- *
- * All the methods in this class are static.
- *
- * TODO: Rename this class to DictEncoderUtils.
- */
-public class BinaryDictEncoderUtils {
-
- private static final boolean DBG = MakedictLog.DBG;
-
- private BinaryDictEncoderUtils() {
- // This utility class is not publicly instantiable.
- }
-
- // Arbitrary limit to how much passes we consider address size compression should
- // terminate in. At the time of this writing, our largest dictionary completes
- // compression in five passes.
- // If the number of passes exceeds this number, makedict bails with an exception on
- // suspicion that a bug might be causing an infinite loop.
- private static final int MAX_PASSES = 24;
-
- /**
- * Compute the binary size of the character array.
- *
- * If only one character, this is the size of this character. If many, it's the sum of their
- * sizes + 1 byte for the terminator.
- *
- * @param characters the character array
- * @return the size of the char array, including the terminator if any
- */
- static int getPtNodeCharactersSize(final int[] characters) {
- int size = CharEncoding.getCharArraySize(characters);
- if (characters.length > 1) size += FormatSpec.PTNODE_TERMINATOR_SIZE;
- return size;
- }
-
- /**
- * Compute the binary size of the character array in a PtNode
- *
- * If only one character, this is the size of this character. If many, it's the sum of their
- * sizes + 1 byte for the terminator.
- *
- * @param ptNode the PtNode
- * @return the size of the char array, including the terminator if any
- */
- private static int getPtNodeCharactersSize(final PtNode ptNode) {
- return getPtNodeCharactersSize(ptNode.mChars);
- }
-
- /**
- * Compute the binary size of the PtNode count for a node array.
- * @param nodeArray the nodeArray
- * @return the size of the PtNode count, either 1 or 2 bytes.
- */
- private static int getPtNodeCountSize(final PtNodeArray nodeArray) {
- return BinaryDictIOUtils.getPtNodeCountSize(nodeArray.mData.size());
- }
-
- /**
- * Compute the size of a shortcut in bytes.
- */
- private static int getShortcutSize(final WeightedString shortcut) {
- int size = FormatSpec.PTNODE_ATTRIBUTE_FLAGS_SIZE;
- final String word = shortcut.mWord;
- final int length = word.length();
- for (int i = 0; i < length; i = word.offsetByCodePoints(i, 1)) {
- final int codePoint = word.codePointAt(i);
- size += CharEncoding.getCharSize(codePoint);
- }
- size += FormatSpec.PTNODE_TERMINATOR_SIZE;
- return size;
- }
-
- /**
- * Compute the size of a shortcut list in bytes.
- *
- * This is known in advance and does not change according to position in the file
- * like address lists do.
- */
- static int getShortcutListSize(final ArrayList<WeightedString> shortcutList) {
- if (null == shortcutList || shortcutList.isEmpty()) return 0;
- int size = FormatSpec.PTNODE_SHORTCUT_LIST_SIZE_SIZE;
- for (final WeightedString shortcut : shortcutList) {
- size += getShortcutSize(shortcut);
- }
- return size;
- }
-
- /**
- * Compute the maximum size of a PtNode, assuming 3-byte addresses for everything.
- *
- * @param ptNode the PtNode to compute the size of.
- * @return the maximum size of the PtNode.
- */
- private static int getPtNodeMaximumSize(final PtNode ptNode) {
- int size = getNodeHeaderSize(ptNode);
- if (ptNode.isTerminal()) {
- // If terminal, one byte for the frequency.
- size += FormatSpec.PTNODE_FREQUENCY_SIZE;
- }
- size += FormatSpec.PTNODE_MAX_ADDRESS_SIZE; // For children address
- size += getShortcutListSize(ptNode.mShortcutTargets);
- if (null != ptNode.mBigrams) {
- size += (FormatSpec.PTNODE_ATTRIBUTE_FLAGS_SIZE
- + FormatSpec.PTNODE_ATTRIBUTE_MAX_ADDRESS_SIZE)
- * ptNode.mBigrams.size();
- }
- return size;
- }
-
- /**
- * Compute the maximum size of each PtNode of a PtNode array, assuming 3-byte addresses for
- * everything, and caches it in the `mCachedSize' member of the nodes; deduce the size of
- * the containing node array, and cache it it its 'mCachedSize' member.
- *
- * @param ptNodeArray the node array to compute the maximum size of.
- */
- private static void calculatePtNodeArrayMaximumSize(final PtNodeArray ptNodeArray) {
- int size = getPtNodeCountSize(ptNodeArray);
- for (PtNode node : ptNodeArray.mData) {
- final int nodeSize = getPtNodeMaximumSize(node);
- node.mCachedSize = nodeSize;
- size += nodeSize;
- }
- ptNodeArray.mCachedSize = size;
- }
-
- /**
- * Compute the size of the header (flag + [parent address] + characters size) of a PtNode.
- *
- * @param ptNode the PtNode of which to compute the size of the header
- */
- private static int getNodeHeaderSize(final PtNode ptNode) {
- return FormatSpec.PTNODE_FLAGS_SIZE + getPtNodeCharactersSize(ptNode);
- }
-
- /**
- * Compute the size, in bytes, that an address will occupy.
- *
- * This can be used either for children addresses (which are always positive) or for
- * attribute, which may be positive or negative but
- * store their sign bit separately.
- *
- * @param address the address
- * @return the byte size.
- */
- static int getByteSize(final int address) {
- assert(address <= FormatSpec.UINT24_MAX);
- if (!BinaryDictIOUtils.hasChildrenAddress(address)) {
- return 0;
- } else if (Math.abs(address) <= FormatSpec.UINT8_MAX) {
- return 1;
- } else if (Math.abs(address) <= FormatSpec.UINT16_MAX) {
- return 2;
- } else {
- return 3;
- }
- }
-
- static int writeUIntToBuffer(final byte[] buffer, int position, final int value,
- final int size) {
- switch(size) {
- case 4:
- buffer[position++] = (byte) ((value >> 24) & 0xFF);
- /* fall through */
- case 3:
- buffer[position++] = (byte) ((value >> 16) & 0xFF);
- /* fall through */
- case 2:
- buffer[position++] = (byte) ((value >> 8) & 0xFF);
- /* fall through */
- case 1:
- buffer[position++] = (byte) (value & 0xFF);
- break;
- default:
- /* nop */
- }
- return position;
- }
-
- static void writeUIntToStream(final OutputStream stream, final int value, final int size)
- throws IOException {
- switch(size) {
- case 4:
- stream.write((value >> 24) & 0xFF);
- /* fall through */
- case 3:
- stream.write((value >> 16) & 0xFF);
- /* fall through */
- case 2:
- stream.write((value >> 8) & 0xFF);
- /* fall through */
- case 1:
- stream.write(value & 0xFF);
- break;
- default:
- /* nop */
- }
- }
-
- @UsedForTesting
- static void writeUIntToDictBuffer(final DictBuffer dictBuffer, final int value,
- final int size) {
- switch(size) {
- case 4:
- dictBuffer.put((byte) ((value >> 24) & 0xFF));
- /* fall through */
- case 3:
- dictBuffer.put((byte) ((value >> 16) & 0xFF));
- /* fall through */
- case 2:
- dictBuffer.put((byte) ((value >> 8) & 0xFF));
- /* fall through */
- case 1:
- dictBuffer.put((byte) (value & 0xFF));
- break;
- default:
- /* nop */
- }
- }
-
- // End utility methods
-
- // This method is responsible for finding a nice ordering of the nodes that favors run-time
- // cache performance and dictionary size.
- /* package for tests */ static ArrayList<PtNodeArray> flattenTree(
- final PtNodeArray rootNodeArray) {
- final int treeSize = FusionDictionary.countPtNodes(rootNodeArray);
- MakedictLog.i("Counted nodes : " + treeSize);
- final ArrayList<PtNodeArray> flatTree = new ArrayList<PtNodeArray>(treeSize);
- return flattenTreeInner(flatTree, rootNodeArray);
- }
-
- private static ArrayList<PtNodeArray> flattenTreeInner(final ArrayList<PtNodeArray> list,
- final PtNodeArray ptNodeArray) {
- // Removing the node is necessary if the tails are merged, because we would then
- // add the same node several times when we only want it once. A number of places in
- // the code also depends on any node being only once in the list.
- // Merging tails can only be done if there are no attributes. Searching for attributes
- // in LatinIME code depends on a total breadth-first ordering, which merging tails
- // breaks. If there are no attributes, it should be fine (and reduce the file size)
- // to merge tails, and removing the node from the list would be necessary. However,
- // we don't merge tails because breaking the breadth-first ordering would result in
- // extreme overhead at bigram lookup time (it would make the search function O(n) instead
- // of the current O(log(n)), where n=number of nodes in the dictionary which is pretty
- // high).
- // If no nodes are ever merged, we can't have the same node twice in the list, hence
- // searching for duplicates in unnecessary. It is also very performance consuming,
- // since `list' is an ArrayList so it's an O(n) operation that runs on all nodes, making
- // this simple list.remove operation O(n*n) overall. On Android this overhead is very
- // high.
- // For future reference, the code to remove duplicate is a simple : list.remove(node);
- list.add(ptNodeArray);
- final ArrayList<PtNode> branches = ptNodeArray.mData;
- for (PtNode ptNode : branches) {
- if (null != ptNode.mChildren) flattenTreeInner(list, ptNode.mChildren);
- }
- return list;
- }
-
- /**
- * Get the offset from a position inside a current node array to a target node array, during
- * update.
- *
- * If the current node array is before the target node array, the target node array has not
- * been updated yet, so we should return the offset from the old position of the current node
- * array to the old position of the target node array. If on the other hand the target is
- * before the current node array, it already has been updated, so we should return the offset
- * from the new position in the current node array to the new position in the target node
- * array.
- *
- * @param currentNodeArray node array containing the PtNode where the offset will be written
- * @param offsetFromStartOfCurrentNodeArray offset, in bytes, from the start of currentNodeArray
- * @param targetNodeArray the target node array to get the offset to
- * @return the offset to the target node array
- */
- private static int getOffsetToTargetNodeArrayDuringUpdate(final PtNodeArray currentNodeArray,
- final int offsetFromStartOfCurrentNodeArray, final PtNodeArray targetNodeArray) {
- final boolean isTargetBeforeCurrent = (targetNodeArray.mCachedAddressBeforeUpdate
- < currentNodeArray.mCachedAddressBeforeUpdate);
- if (isTargetBeforeCurrent) {
- return targetNodeArray.mCachedAddressAfterUpdate
- - (currentNodeArray.mCachedAddressAfterUpdate
- + offsetFromStartOfCurrentNodeArray);
- } else {
- return targetNodeArray.mCachedAddressBeforeUpdate
- - (currentNodeArray.mCachedAddressBeforeUpdate
- + offsetFromStartOfCurrentNodeArray);
- }
- }
-
- /**
- * Get the offset from a position inside a current node array to a target PtNode, during
- * update.
- *
- * @param currentNodeArray node array containing the PtNode where the offset will be written
- * @param offsetFromStartOfCurrentNodeArray offset, in bytes, from the start of currentNodeArray
- * @param targetPtNode the target PtNode to get the offset to
- * @return the offset to the target PtNode
- */
- // TODO: is there any way to factorize this method with the one above?
- private static int getOffsetToTargetPtNodeDuringUpdate(final PtNodeArray currentNodeArray,
- final int offsetFromStartOfCurrentNodeArray, final PtNode targetPtNode) {
- final int oldOffsetBasePoint = currentNodeArray.mCachedAddressBeforeUpdate
- + offsetFromStartOfCurrentNodeArray;
- final boolean isTargetBeforeCurrent = (targetPtNode.mCachedAddressBeforeUpdate
- < oldOffsetBasePoint);
- // If the target is before the current node array, then its address has already been
- // updated. We can use the AfterUpdate member, and compare it to our own member after
- // update. Otherwise, the AfterUpdate member is not updated yet, so we need to use the
- // BeforeUpdate member, and of course we have to compare this to our own address before
- // update.
- if (isTargetBeforeCurrent) {
- final int newOffsetBasePoint = currentNodeArray.mCachedAddressAfterUpdate
- + offsetFromStartOfCurrentNodeArray;
- return targetPtNode.mCachedAddressAfterUpdate - newOffsetBasePoint;
- } else {
- return targetPtNode.mCachedAddressBeforeUpdate - oldOffsetBasePoint;
- }
- }
-
- /**
- * Computes the actual node array size, based on the cached addresses of the children nodes.
- *
- * Each node array stores its tentative address. During dictionary address computing, these
- * are not final, but they can be used to compute the node array size (the node array size
- * depends on the address of the children because the number of bytes necessary to store an
- * address depends on its numeric value. The return value indicates whether the node array
- * contents (as in, any of the addresses stored in the cache fields) have changed with
- * respect to their previous value.
- *
- * @param ptNodeArray the node array to compute the size of.
- * @param dict the dictionary in which the word/attributes are to be found.
- * @return false if none of the cached addresses inside the node array changed, true otherwise.
- */
- private static boolean computeActualPtNodeArraySize(final PtNodeArray ptNodeArray,
- final FusionDictionary dict) {
- boolean changed = false;
- int size = getPtNodeCountSize(ptNodeArray);
- for (PtNode ptNode : ptNodeArray.mData) {
- ptNode.mCachedAddressAfterUpdate = ptNodeArray.mCachedAddressAfterUpdate + size;
- if (ptNode.mCachedAddressAfterUpdate != ptNode.mCachedAddressBeforeUpdate) {
- changed = true;
- }
- int nodeSize = getNodeHeaderSize(ptNode);
- if (ptNode.isTerminal()) {
- nodeSize += FormatSpec.PTNODE_FREQUENCY_SIZE;
- }
- if (null != ptNode.mChildren) {
- nodeSize += getByteSize(getOffsetToTargetNodeArrayDuringUpdate(ptNodeArray,
- nodeSize + size, ptNode.mChildren));
- }
- nodeSize += getShortcutListSize(ptNode.mShortcutTargets);
- if (null != ptNode.mBigrams) {
- for (WeightedString bigram : ptNode.mBigrams) {
- final int offset = getOffsetToTargetPtNodeDuringUpdate(ptNodeArray,
- nodeSize + size + FormatSpec.PTNODE_ATTRIBUTE_FLAGS_SIZE,
- FusionDictionary.findWordInTree(dict.mRootNodeArray, bigram.mWord));
- nodeSize += getByteSize(offset) + FormatSpec.PTNODE_ATTRIBUTE_FLAGS_SIZE;
- }
- }
- ptNode.mCachedSize = nodeSize;
- size += nodeSize;
- }
- if (ptNodeArray.mCachedSize != size) {
- ptNodeArray.mCachedSize = size;
- changed = true;
- }
- return changed;
- }
-
- /**
- * Initializes the cached addresses of node arrays and their containing nodes from their size.
- *
- * @param flatNodes the list of node arrays.
- * @return the byte size of the entire stack.
- */
- private static int initializePtNodeArraysCachedAddresses(
- final ArrayList<PtNodeArray> flatNodes) {
- int nodeArrayOffset = 0;
- for (final PtNodeArray nodeArray : flatNodes) {
- nodeArray.mCachedAddressBeforeUpdate = nodeArrayOffset;
- int nodeCountSize = getPtNodeCountSize(nodeArray);
- int nodeffset = 0;
- for (final PtNode ptNode : nodeArray.mData) {
- ptNode.mCachedAddressBeforeUpdate = ptNode.mCachedAddressAfterUpdate =
- nodeCountSize + nodeArrayOffset + nodeffset;
- nodeffset += ptNode.mCachedSize;
- }
- nodeArrayOffset += nodeArray.mCachedSize;
- }
- return nodeArrayOffset;
- }
-
- /**
- * Updates the cached addresses of node arrays after recomputing their new positions.
- *
- * @param flatNodes the list of node arrays.
- */
- private static void updatePtNodeArraysCachedAddresses(final ArrayList<PtNodeArray> flatNodes) {
- for (final PtNodeArray nodeArray : flatNodes) {
- nodeArray.mCachedAddressBeforeUpdate = nodeArray.mCachedAddressAfterUpdate;
- for (final PtNode ptNode : nodeArray.mData) {
- ptNode.mCachedAddressBeforeUpdate = ptNode.mCachedAddressAfterUpdate;
- }
- }
- }
-
- /**
- * Compute the addresses and sizes of an ordered list of PtNode arrays.
- *
- * This method takes a list of PtNode arrays and will update their cached address and size
- * values so that they can be written into a file. It determines the smallest size each of the
- * PtNode arrays can be given the addresses of its children and attributes, and store that into
- * each PtNode.
- * The order of the PtNode is given by the order of the array. This method makes no effort
- * to find a good order; it only mechanically computes the size this order results in.
- *
- * @param dict the dictionary
- * @param flatNodes the ordered list of PtNode arrays
- * @return the same array it was passed. The nodes have been updated for address and size.
- */
- /* package */ static ArrayList<PtNodeArray> computeAddresses(final FusionDictionary dict,
- final ArrayList<PtNodeArray> flatNodes) {
- // First get the worst possible sizes and offsets
- for (final PtNodeArray n : flatNodes) {
- calculatePtNodeArrayMaximumSize(n);
- }
- final int offset = initializePtNodeArraysCachedAddresses(flatNodes);
-
- MakedictLog.i("Compressing the array addresses. Original size : " + offset);
- MakedictLog.i("(Recursively seen size : " + offset + ")");
-
- int passes = 0;
- boolean changesDone = false;
- do {
- changesDone = false;
- int ptNodeArrayStartOffset = 0;
- for (final PtNodeArray ptNodeArray : flatNodes) {
- ptNodeArray.mCachedAddressAfterUpdate = ptNodeArrayStartOffset;
- final int oldNodeArraySize = ptNodeArray.mCachedSize;
- final boolean changed = computeActualPtNodeArraySize(ptNodeArray, dict);
- final int newNodeArraySize = ptNodeArray.mCachedSize;
- if (oldNodeArraySize < newNodeArraySize) {
- throw new RuntimeException("Increased size ?!");
- }
- ptNodeArrayStartOffset += newNodeArraySize;
- changesDone |= changed;
- }
- updatePtNodeArraysCachedAddresses(flatNodes);
- ++passes;
- if (passes > MAX_PASSES) throw new RuntimeException("Too many passes - probably a bug");
- } while (changesDone);
-
- final PtNodeArray lastPtNodeArray = flatNodes.get(flatNodes.size() - 1);
- MakedictLog.i("Compression complete in " + passes + " passes.");
- MakedictLog.i("After address compression : "
- + (lastPtNodeArray.mCachedAddressAfterUpdate + lastPtNodeArray.mCachedSize));
-
- return flatNodes;
- }
-
- /**
- * Sanity-checking method.
- *
- * This method checks a list of PtNode arrays for juxtaposition, that is, it will do
- * nothing if each node array's cached address is actually the previous node array's address
- * plus the previous node's size.
- * If this is not the case, it will throw an exception.
- *
- * @param arrays the list of node arrays to check
- */
- /* package */ static void checkFlatPtNodeArrayList(final ArrayList<PtNodeArray> arrays) {
- int offset = 0;
- int index = 0;
- for (final PtNodeArray ptNodeArray : arrays) {
- // BeforeUpdate and AfterUpdate addresses are the same here, so it does not matter
- // which we use.
- if (ptNodeArray.mCachedAddressAfterUpdate != offset) {
- throw new RuntimeException("Wrong address for node " + index
- + " : expected " + offset + ", got " +
- ptNodeArray.mCachedAddressAfterUpdate);
- }
- ++index;
- offset += ptNodeArray.mCachedSize;
- }
- }
-
- /**
- * Helper method to write a children position to a file.
- *
- * @param buffer the buffer to write to.
- * @param index the index in the buffer to write the address to.
- * @param position the position to write.
- * @return the size in bytes the address actually took.
- */
- /* package */ static int writeChildrenPosition(final byte[] buffer, int index,
- final int position) {
- switch (getByteSize(position)) {
- case 1:
- buffer[index++] = (byte)position;
- return 1;
- case 2:
- buffer[index++] = (byte)(0xFF & (position >> 8));
- buffer[index++] = (byte)(0xFF & position);
- return 2;
- case 3:
- buffer[index++] = (byte)(0xFF & (position >> 16));
- buffer[index++] = (byte)(0xFF & (position >> 8));
- buffer[index++] = (byte)(0xFF & position);
- return 3;
- case 0:
- return 0;
- default:
- throw new RuntimeException("Position " + position + " has a strange size");
- }
- }
-
- /**
- * Helper method to write a signed children position to a file.
- *
- * @param buffer the buffer to write to.
- * @param index the index in the buffer to write the address to.
- * @param position the position to write.
- * @return the size in bytes the address actually took.
- */
- /* package */ static int writeSignedChildrenPosition(final byte[] buffer, int index,
- final int position) {
- if (!BinaryDictIOUtils.hasChildrenAddress(position)) {
- buffer[index] = buffer[index + 1] = buffer[index + 2] = 0;
- } else {
- final int absPosition = Math.abs(position);
- buffer[index++] =
- (byte)((position < 0 ? FormatSpec.MSB8 : 0) | (0xFF & (absPosition >> 16)));
- buffer[index++] = (byte)(0xFF & (absPosition >> 8));
- buffer[index++] = (byte)(0xFF & absPosition);
- }
- return 3;
- }
-
- /**
- * Makes the flag value for a PtNode.
- *
- * @param hasMultipleChars whether the PtNode has multiple chars.
- * @param isTerminal whether the PtNode is terminal.
- * @param childrenAddressSize the size of a children address.
- * @param hasShortcuts whether the PtNode has shortcuts.
- * @param hasBigrams whether the PtNode has bigrams.
- * @param isNotAWord whether the PtNode is not a word.
- * @param isBlackListEntry whether the PtNode is a blacklist entry.
- * @return the flags
- */
- static int makePtNodeFlags(final boolean hasMultipleChars, final boolean isTerminal,
- final int childrenAddressSize, final boolean hasShortcuts, final boolean hasBigrams,
- final boolean isNotAWord, final boolean isBlackListEntry) {
- byte flags = 0;
- if (hasMultipleChars) flags |= FormatSpec.FLAG_HAS_MULTIPLE_CHARS;
- if (isTerminal) flags |= FormatSpec.FLAG_IS_TERMINAL;
- switch (childrenAddressSize) {
- case 1:
- flags |= FormatSpec.FLAG_CHILDREN_ADDRESS_TYPE_ONEBYTE;
- break;
- case 2:
- flags |= FormatSpec.FLAG_CHILDREN_ADDRESS_TYPE_TWOBYTES;
- break;
- case 3:
- flags |= FormatSpec.FLAG_CHILDREN_ADDRESS_TYPE_THREEBYTES;
- break;
- case 0:
- flags |= FormatSpec.FLAG_CHILDREN_ADDRESS_TYPE_NOADDRESS;
- break;
- default:
- throw new RuntimeException("Node with a strange address");
- }
- if (hasShortcuts) flags |= FormatSpec.FLAG_HAS_SHORTCUT_TARGETS;
- if (hasBigrams) flags |= FormatSpec.FLAG_HAS_BIGRAMS;
- if (isNotAWord) flags |= FormatSpec.FLAG_IS_NOT_A_WORD;
- if (isBlackListEntry) flags |= FormatSpec.FLAG_IS_BLACKLISTED;
- return flags;
- }
-
- /* package */ static byte makePtNodeFlags(final PtNode node, final int childrenOffset) {
- return (byte) makePtNodeFlags(node.mChars.length > 1, node.isTerminal(),
- getByteSize(childrenOffset),
- node.mShortcutTargets != null && !node.mShortcutTargets.isEmpty(),
- node.mBigrams != null && !node.mBigrams.isEmpty(),
- node.mIsNotAWord, node.mIsBlacklistEntry);
- }
-
- /**
- * Makes the flag value for a bigram.
- *
- * @param more whether there are more bigrams after this one.
- * @param offset the offset of the bigram.
- * @param bigramFrequency the frequency of the bigram, 0..255.
- * @param unigramFrequency the unigram frequency of the same word, 0..255.
- * @param word the second bigram, for debugging purposes
- * @return the flags
- */
- /* package */ static final int makeBigramFlags(final boolean more, final int offset,
- int bigramFrequency, final int unigramFrequency, final String word) {
- int bigramFlags = (more ? FormatSpec.FLAG_BIGRAM_SHORTCUT_ATTR_HAS_NEXT : 0)
- + (offset < 0 ? FormatSpec.FLAG_BIGRAM_ATTR_OFFSET_NEGATIVE : 0);
- switch (getByteSize(offset)) {
- case 1:
- bigramFlags |= FormatSpec.FLAG_BIGRAM_ATTR_ADDRESS_TYPE_ONEBYTE;
- break;
- case 2:
- bigramFlags |= FormatSpec.FLAG_BIGRAM_ATTR_ADDRESS_TYPE_TWOBYTES;
- break;
- case 3:
- bigramFlags |= FormatSpec.FLAG_BIGRAM_ATTR_ADDRESS_TYPE_THREEBYTES;
- break;
- default:
- throw new RuntimeException("Strange offset size");
- }
- if (unigramFrequency > bigramFrequency) {
- MakedictLog.e("Unigram freq is superior to bigram freq for \"" + word
- + "\". Bigram freq is " + bigramFrequency + ", unigram freq for "
- + word + " is " + unigramFrequency);
- bigramFrequency = unigramFrequency;
- }
- bigramFlags += getBigramFrequencyDiff(unigramFrequency, bigramFrequency)
- & FormatSpec.FLAG_BIGRAM_SHORTCUT_ATTR_FREQUENCY;
- return bigramFlags;
- }
-
- public static int getBigramFrequencyDiff(final int unigramFrequency,
- final int bigramFrequency) {
- // We compute the difference between 255 (which means probability = 1) and the
- // unigram score. We split this into a number of discrete steps.
- // Now, the steps are numbered 0~15; 0 represents an increase of 1 step while 15
- // represents an increase of 16 steps: a value of 15 will be interpreted as the median
- // value of the 16th step. In all justice, if the bigram frequency is low enough to be
- // rounded below the first step (which means it is less than half a step higher than the
- // unigram frequency) then the unigram frequency itself is the best approximation of the
- // bigram freq that we could possibly supply, hence we should *not* include this bigram
- // in the file at all.
- // until this is done, we'll write 0 and slightly overestimate this case.
- // In other words, 0 means "between 0.5 step and 1.5 step", 1 means "between 1.5 step
- // and 2.5 steps", and 15 means "between 15.5 steps and 16.5 steps". So we want to
- // divide our range [unigramFreq..MAX_TERMINAL_FREQUENCY] in 16.5 steps to get the
- // step size. Then we compute the start of the first step (the one where value 0 starts)
- // by adding half-a-step to the unigramFrequency. From there, we compute the integer
- // number of steps to the bigramFrequency. One last thing: we want our steps to include
- // their lower bound and exclude their higher bound so we need to have the first step
- // start at exactly 1 unit higher than floor(unigramFreq + half a step).
- // Note : to reconstruct the score, the dictionary reader will need to divide
- // MAX_TERMINAL_FREQUENCY - unigramFreq by 16.5 likewise to get the value of the step,
- // and add (discretizedFrequency + 0.5 + 0.5) times this value to get the best
- // approximation. (0.5 to get the first step start, and 0.5 to get the middle of the
- // step pointed by the discretized frequency.
- final float stepSize =
- (FormatSpec.MAX_TERMINAL_FREQUENCY - unigramFrequency)
- / (1.5f + FormatSpec.MAX_BIGRAM_FREQUENCY);
- final float firstStepStart = 1 + unigramFrequency + (stepSize / 2.0f);
- final int discretizedFrequency = (int)((bigramFrequency - firstStepStart) / stepSize);
- // If the bigram freq is less than half-a-step higher than the unigram freq, we get -1
- // here. The best approximation would be the unigram freq itself, so we should not
- // include this bigram in the dictionary. For now, register as 0, and live with the
- // small over-estimation that we get in this case. TODO: actually remove this bigram
- // if discretizedFrequency < 0.
- return discretizedFrequency > 0 ? discretizedFrequency : 0;
- }
-
- /**
- * Makes the flag value for a shortcut.
- *
- * @param more whether there are more attributes after this one.
- * @param frequency the frequency of the attribute, 0..15
- * @return the flags
- */
- static final int makeShortcutFlags(final boolean more, final int frequency) {
- return (more ? FormatSpec.FLAG_BIGRAM_SHORTCUT_ATTR_HAS_NEXT : 0)
- + (frequency & FormatSpec.FLAG_BIGRAM_SHORTCUT_ATTR_FREQUENCY);
- }
-
- /* package */ static final int getChildrenPosition(final PtNode ptNode) {
- int positionOfChildrenPosField = ptNode.mCachedAddressAfterUpdate
- + getNodeHeaderSize(ptNode);
- if (ptNode.isTerminal()) {
- // A terminal node has the frequency.
- // If positionOfChildrenPosField is incorrect, we may crash when jumping to the children
- // position.
- positionOfChildrenPosField += FormatSpec.PTNODE_FREQUENCY_SIZE;
- }
- return null == ptNode.mChildren ? FormatSpec.NO_CHILDREN_ADDRESS
- : ptNode.mChildren.mCachedAddressAfterUpdate - positionOfChildrenPosField;
- }
-
- /**
- * Write a PtNodeArray. The PtNodeArray is expected to have its final position cached.
- *
- * @param dict the dictionary the node array is a part of (for relative offsets).
- * @param dictEncoder the dictionary encoder.
- * @param ptNodeArray the node array to write.
- */
- @SuppressWarnings("unused")
- /* package */ static void writePlacedPtNodeArray(final FusionDictionary dict,
- final DictEncoder dictEncoder, final PtNodeArray ptNodeArray) {
- // TODO: Make the code in common with BinaryDictIOUtils#writePtNode
- dictEncoder.setPosition(ptNodeArray.mCachedAddressAfterUpdate);
-
- final int ptNodeCount = ptNodeArray.mData.size();
- dictEncoder.writePtNodeCount(ptNodeCount);
- final int parentPosition =
- (ptNodeArray.mCachedParentAddress == FormatSpec.NO_PARENT_ADDRESS)
- ? FormatSpec.NO_PARENT_ADDRESS
- : ptNodeArray.mCachedParentAddress + ptNodeArray.mCachedAddressAfterUpdate;
- for (int i = 0; i < ptNodeCount; ++i) {
- final PtNode ptNode = ptNodeArray.mData.get(i);
- if (dictEncoder.getPosition() != ptNode.mCachedAddressAfterUpdate) {
- throw new RuntimeException("Bug: write index is not the same as the cached address "
- + "of the node : " + dictEncoder.getPosition() + " <> "
- + ptNode.mCachedAddressAfterUpdate);
- }
- // Sanity checks.
- if (DBG && ptNode.getProbability() > FormatSpec.MAX_TERMINAL_FREQUENCY) {
- throw new RuntimeException("A node has a frequency > "
- + FormatSpec.MAX_TERMINAL_FREQUENCY
- + " : " + ptNode.mProbabilityInfo.toString());
- }
- dictEncoder.writePtNode(ptNode, dict);
- }
- if (dictEncoder.getPosition() != ptNodeArray.mCachedAddressAfterUpdate
- + ptNodeArray.mCachedSize) {
- throw new RuntimeException("Not the same size : written "
- + (dictEncoder.getPosition() - ptNodeArray.mCachedAddressAfterUpdate)
- + " bytes from a node that should have " + ptNodeArray.mCachedSize + " bytes");
- }
- }
-
- /**
- * Dumps a collection of useful statistics about a list of PtNode arrays.
- *
- * This prints purely informative stuff, like the total estimated file size, the
- * number of PtNode arrays, of PtNodes, the repartition of each address size, etc
- *
- * @param ptNodeArrays the list of PtNode arrays.
- */
- /* package */ static void showStatistics(ArrayList<PtNodeArray> ptNodeArrays) {
- int firstTerminalAddress = Integer.MAX_VALUE;
- int lastTerminalAddress = Integer.MIN_VALUE;
- int size = 0;
- int ptNodes = 0;
- int maxNodes = 0;
- int maxRuns = 0;
- for (final PtNodeArray ptNodeArray : ptNodeArrays) {
- if (maxNodes < ptNodeArray.mData.size()) maxNodes = ptNodeArray.mData.size();
- for (final PtNode ptNode : ptNodeArray.mData) {
- ++ptNodes;
- if (ptNode.mChars.length > maxRuns) maxRuns = ptNode.mChars.length;
- if (ptNode.isTerminal()) {
- if (ptNodeArray.mCachedAddressAfterUpdate < firstTerminalAddress)
- firstTerminalAddress = ptNodeArray.mCachedAddressAfterUpdate;
- if (ptNodeArray.mCachedAddressAfterUpdate > lastTerminalAddress)
- lastTerminalAddress = ptNodeArray.mCachedAddressAfterUpdate;
- }
- }
- if (ptNodeArray.mCachedAddressAfterUpdate + ptNodeArray.mCachedSize > size) {
- size = ptNodeArray.mCachedAddressAfterUpdate + ptNodeArray.mCachedSize;
- }
- }
- final int[] ptNodeCounts = new int[maxNodes + 1];
- final int[] runCounts = new int[maxRuns + 1];
- for (final PtNodeArray ptNodeArray : ptNodeArrays) {
- ++ptNodeCounts[ptNodeArray.mData.size()];
- for (final PtNode ptNode : ptNodeArray.mData) {
- ++runCounts[ptNode.mChars.length];
- }
- }
-
- MakedictLog.i("Statistics:\n"
- + " total file size " + size + "\n"
- + " " + ptNodeArrays.size() + " node arrays\n"
- + " " + ptNodes + " PtNodes (" + ((float)ptNodes / ptNodeArrays.size())
- + " PtNodes per node)\n"
- + " first terminal at " + firstTerminalAddress + "\n"
- + " last terminal at " + lastTerminalAddress + "\n"
- + " PtNode stats : max = " + maxNodes);
- for (int i = 0; i < ptNodeCounts.length; ++i) {
- MakedictLog.i(" " + i + " : " + ptNodeCounts[i]);
- }
- MakedictLog.i(" Character run stats : max = " + maxRuns);
- for (int i = 0; i < runCounts.length; ++i) {
- MakedictLog.i(" " + i + " : " + runCounts[i]);
- }
- }
-
- /**
- * Writes a file header to an output stream.
- *
- * @param destination the stream to write the file header to.
- * @param dict the dictionary to write.
- * @param formatOptions file format options.
- * @return the size of the header.
- */
- /* package */ static int writeDictionaryHeader(final OutputStream destination,
- final FusionDictionary dict, final FormatOptions formatOptions)
- throws IOException, UnsupportedFormatException {
- final int version = formatOptions.mVersion;
- if (version < FormatSpec.MINIMUM_SUPPORTED_VERSION
- || version > FormatSpec.MAXIMUM_SUPPORTED_VERSION) {
- throw new UnsupportedFormatException("Requested file format version " + version
- + ", but this implementation only supports versions "
- + FormatSpec.MINIMUM_SUPPORTED_VERSION + " through "
- + FormatSpec.MAXIMUM_SUPPORTED_VERSION);
- }
-
- ByteArrayOutputStream headerBuffer = new ByteArrayOutputStream(256);
-
- // The magic number in big-endian order.
- // Magic number for all versions.
- headerBuffer.write((byte) (0xFF & (FormatSpec.MAGIC_NUMBER >> 24)));
- headerBuffer.write((byte) (0xFF & (FormatSpec.MAGIC_NUMBER >> 16)));
- headerBuffer.write((byte) (0xFF & (FormatSpec.MAGIC_NUMBER >> 8)));
- headerBuffer.write((byte) (0xFF & FormatSpec.MAGIC_NUMBER));
- // Dictionary version.
- headerBuffer.write((byte) (0xFF & (version >> 8)));
- headerBuffer.write((byte) (0xFF & version));
-
- // Options flags
- // TODO: Remove this field.
- final int options = 0;
- headerBuffer.write((byte) (0xFF & (options >> 8)));
- headerBuffer.write((byte) (0xFF & options));
- final int headerSizeOffset = headerBuffer.size();
- // Placeholder to be written later with header size.
- for (int i = 0; i < 4; ++i) {
- headerBuffer.write(0);
- }
- // Write out the options.
- for (final String key : dict.mOptions.mAttributes.keySet()) {
- final String value = dict.mOptions.mAttributes.get(key);
- CharEncoding.writeString(headerBuffer, key);
- CharEncoding.writeString(headerBuffer, value);
- }
- final int size = headerBuffer.size();
- final byte[] bytes = headerBuffer.toByteArray();
- // Write out the header size.
- bytes[headerSizeOffset] = (byte) (0xFF & (size >> 24));
- bytes[headerSizeOffset + 1] = (byte) (0xFF & (size >> 16));
- bytes[headerSizeOffset + 2] = (byte) (0xFF & (size >> 8));
- bytes[headerSizeOffset + 3] = (byte) (0xFF & (size >> 0));
- destination.write(bytes);
-
- headerBuffer.close();
- return size;
- }
-}
diff --git a/java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java b/java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java
deleted file mode 100644
index a180f1c29..000000000
--- a/java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.makedict;
-
-import com.android.inputmethod.annotations.UsedForTesting;
-import com.android.inputmethod.latin.Constants;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.Stack;
-
-public final class BinaryDictIOUtils {
- private static final boolean DBG = false;
-
- private BinaryDictIOUtils() {
- // This utility class is not publicly instantiable.
- }
-
- private static final class Position {
- public static final int NOT_READ_PTNODE_COUNT = -1;
-
- public int mAddress;
- public int mNumOfPtNode;
- public int mPosition;
- public int mLength;
-
- public Position(int address, int length) {
- mAddress = address;
- mLength = length;
- mNumOfPtNode = NOT_READ_PTNODE_COUNT;
- }
- }
-
- /**
- * Retrieves all node arrays without recursive call.
- */
- private static void readUnigramsAndBigramsBinaryInner(final DictDecoder dictDecoder,
- final int bodyOffset, final Map<Integer, String> words,
- final Map<Integer, Integer> frequencies,
- final Map<Integer, ArrayList<PendingAttribute>> bigrams) {
- int[] pushedChars = new int[FormatSpec.MAX_WORD_LENGTH + 1];
-
- Stack<Position> stack = new Stack<Position>();
- int index = 0;
-
- Position initPos = new Position(bodyOffset, 0);
- stack.push(initPos);
-
- while (!stack.empty()) {
- Position p = stack.peek();
-
- if (DBG) {
- MakedictLog.d("read: address=" + p.mAddress + ", numOfPtNode=" +
- p.mNumOfPtNode + ", position=" + p.mPosition + ", length=" + p.mLength);
- }
-
- if (dictDecoder.getPosition() != p.mAddress) dictDecoder.setPosition(p.mAddress);
- if (index != p.mLength) index = p.mLength;
-
- if (p.mNumOfPtNode == Position.NOT_READ_PTNODE_COUNT) {
- p.mNumOfPtNode = dictDecoder.readPtNodeCount();
- p.mAddress = dictDecoder.getPosition();
- p.mPosition = 0;
- }
- if (p.mNumOfPtNode == 0) {
- stack.pop();
- continue;
- }
- final PtNodeInfo ptNodeInfo = dictDecoder.readPtNode(p.mAddress);
- for (int i = 0; i < ptNodeInfo.mCharacters.length; ++i) {
- pushedChars[index++] = ptNodeInfo.mCharacters[i];
- }
- p.mPosition++;
- if (ptNodeInfo.isTerminal()) {// found word
- words.put(ptNodeInfo.mOriginalAddress, new String(pushedChars, 0, index));
- frequencies.put(
- ptNodeInfo.mOriginalAddress, ptNodeInfo.mProbabilityInfo.mProbability);
- if (ptNodeInfo.mBigrams != null) {
- bigrams.put(ptNodeInfo.mOriginalAddress, ptNodeInfo.mBigrams);
- }
- }
-
- if (p.mPosition == p.mNumOfPtNode) {
- stack.pop();
- } else {
- // The PtNode array has more PtNodes.
- p.mAddress = dictDecoder.getPosition();
- }
-
- if (hasChildrenAddress(ptNodeInfo.mChildrenAddress)) {
- final Position childrenPos = new Position(ptNodeInfo.mChildrenAddress, index);
- stack.push(childrenPos);
- }
- }
- }
-
- /**
- * Reads unigrams and bigrams from the binary file.
- * Doesn't store a full memory representation of the dictionary.
- *
- * @param dictDecoder the dict decoder.
- * @param words the map to store the address as a key and the word as a value.
- * @param frequencies the map to store the address as a key and the frequency as a value.
- * @param bigrams the map to store the address as a key and the list of address as a value.
- * @throws IOException if the file can't be read.
- * @throws UnsupportedFormatException if the format of the file is not recognized.
- */
- /* package */ static void readUnigramsAndBigramsBinary(final DictDecoder dictDecoder,
- final Map<Integer, String> words, final Map<Integer, Integer> frequencies,
- final Map<Integer, ArrayList<PendingAttribute>> bigrams) throws IOException,
- UnsupportedFormatException {
- // Read header
- final DictionaryHeader header = dictDecoder.readHeader();
- readUnigramsAndBigramsBinaryInner(dictDecoder, header.mBodyOffset, words,
- frequencies, bigrams);
- }
-
- /**
- * Gets the address of the last PtNode of the exact matching word in the dictionary.
- * If no match is found, returns NOT_VALID_WORD.
- *
- * @param dictDecoder the dict decoder.
- * @param word the word we search for.
- * @return the address of the terminal node.
- * @throws IOException if the file can't be read.
- * @throws UnsupportedFormatException if the format of the file is not recognized.
- */
- @UsedForTesting
- /* package */ static int getTerminalPosition(final DictDecoder dictDecoder,
- final String word) throws IOException, UnsupportedFormatException {
- if (word == null) return FormatSpec.NOT_VALID_WORD;
- dictDecoder.setPosition(0);
- dictDecoder.readHeader();
- int wordPos = 0;
- final int wordLen = word.codePointCount(0, word.length());
- for (int depth = 0; depth < Constants.DICTIONARY_MAX_WORD_LENGTH; ++depth) {
- if (wordPos >= wordLen) return FormatSpec.NOT_VALID_WORD;
-
- do {
- final int ptNodeCount = dictDecoder.readPtNodeCount();
- boolean foundNextPtNode = false;
- for (int i = 0; i < ptNodeCount; ++i) {
- final int ptNodePos = dictDecoder.getPosition();
- final PtNodeInfo currentInfo = dictDecoder.readPtNode(ptNodePos);
- boolean same = true;
- for (int p = 0, j = word.offsetByCodePoints(0, wordPos);
- p < currentInfo.mCharacters.length;
- ++p, j = word.offsetByCodePoints(j, 1)) {
- if (wordPos + p >= wordLen
- || word.codePointAt(j) != currentInfo.mCharacters[p]) {
- same = false;
- break;
- }
- }
-
- if (same) {
- // found the PtNode matches the word.
- if (wordPos + currentInfo.mCharacters.length == wordLen) {
- if (!currentInfo.isTerminal()) {
- return FormatSpec.NOT_VALID_WORD;
- } else {
- return ptNodePos;
- }
- }
- wordPos += currentInfo.mCharacters.length;
- if (currentInfo.mChildrenAddress == FormatSpec.NO_CHILDREN_ADDRESS) {
- return FormatSpec.NOT_VALID_WORD;
- }
- foundNextPtNode = true;
- dictDecoder.setPosition(currentInfo.mChildrenAddress);
- break;
- }
- }
- if (foundNextPtNode) break;
- return FormatSpec.NOT_VALID_WORD;
- } while(true);
- }
- return FormatSpec.NOT_VALID_WORD;
- }
-
- /**
- * Writes a PtNodeCount to the stream.
- *
- * @param destination the stream to write.
- * @param ptNodeCount the count.
- * @return the size written in bytes.
- */
- @UsedForTesting
- static int writePtNodeCount(final OutputStream destination, final int ptNodeCount)
- throws IOException {
- final int countSize = BinaryDictIOUtils.getPtNodeCountSize(ptNodeCount);
- // the count must fit on one byte or two bytes.
- // Please see comments in FormatSpec.
- if (countSize != 1 && countSize != 2) {
- throw new RuntimeException("Strange size from getPtNodeCountSize : " + countSize);
- }
- final int encodedPtNodeCount = (countSize == 2) ?
- (ptNodeCount | FormatSpec.LARGE_PTNODE_ARRAY_SIZE_FIELD_SIZE_FLAG) : ptNodeCount;
- BinaryDictEncoderUtils.writeUIntToStream(destination, encodedPtNodeCount, countSize);
- return countSize;
- }
-
- /**
- * Helper method to hide the actual value of the no children address.
- */
- public static boolean hasChildrenAddress(final int address) {
- return FormatSpec.NO_CHILDREN_ADDRESS != address;
- }
-
- /**
- * Compute the binary size of the node count
- * @param count the node count
- * @return the size of the node count, either 1 or 2 bytes.
- */
- public static int getPtNodeCountSize(final int count) {
- if (FormatSpec.MAX_PTNODES_FOR_ONE_BYTE_PTNODE_COUNT >= count) {
- return 1;
- } else if (FormatSpec.MAX_PTNODES_IN_A_PT_NODE_ARRAY >= count) {
- return 2;
- } else {
- throw new RuntimeException("Can't have more than "
- + FormatSpec.MAX_PTNODES_IN_A_PT_NODE_ARRAY + " PtNode in a PtNodeArray (found "
- + count + ")");
- }
- }
-
- static int getChildrenAddressSize(final int optionFlags) {
- switch (optionFlags & FormatSpec.MASK_CHILDREN_ADDRESS_TYPE) {
- case FormatSpec.FLAG_CHILDREN_ADDRESS_TYPE_ONEBYTE:
- return 1;
- case FormatSpec.FLAG_CHILDREN_ADDRESS_TYPE_TWOBYTES:
- return 2;
- case FormatSpec.FLAG_CHILDREN_ADDRESS_TYPE_THREEBYTES:
- return 3;
- case FormatSpec.FLAG_CHILDREN_ADDRESS_TYPE_NOADDRESS:
- default:
- return 0;
- }
- }
-
- /**
- * Calculate bigram frequency from compressed value
- *
- * @param unigramFrequency
- * @param bigramFrequency compressed frequency
- * @return approximate bigram frequency
- */
- @UsedForTesting
- public static int reconstructBigramFrequency(final int unigramFrequency,
- final int bigramFrequency) {
- final float stepSize = (FormatSpec.MAX_TERMINAL_FREQUENCY - unigramFrequency)
- / (1.5f + FormatSpec.MAX_BIGRAM_FREQUENCY);
- final float resultFreqFloat = unigramFrequency + stepSize * (bigramFrequency + 1.0f);
- return (int)resultFreqFloat;
- }
-}
diff --git a/java/src/com/android/inputmethod/latin/makedict/DictDecoder.java b/java/src/com/android/inputmethod/latin/makedict/DictDecoder.java
deleted file mode 100644
index a3b28a702..000000000
--- a/java/src/com/android/inputmethod/latin/makedict/DictDecoder.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.makedict;
-
-import com.android.inputmethod.annotations.UsedForTesting;
-import com.android.inputmethod.latin.makedict.BinaryDictDecoderUtils.DictBuffer;
-import com.android.inputmethod.latin.utils.ByteArrayDictBuffer;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.nio.ByteBuffer;
-import java.nio.channels.FileChannel;
-import java.util.ArrayList;
-import java.util.TreeMap;
-
-/**
- * An interface of binary dictionary decoders.
- */
-// TODO: Straighten out responsibility for the buffer's file pointer.
-public interface DictDecoder {
-
- /**
- * Reads and returns the file header.
- */
- public DictionaryHeader readHeader() throws IOException, UnsupportedFormatException;
-
- /**
- * Reads PtNode from ptNodePos.
- * @param ptNodePos the position of PtNode.
- * @return PtNodeInfo.
- */
- public PtNodeInfo readPtNode(final int ptNodePos);
-
- /**
- * Reads a buffer and returns the memory representation of the dictionary.
- *
- * This high-level method takes a buffer and reads its contents, populating a
- * FusionDictionary structure.
- *
- * @param deleteDictIfBroken a flag indicating whether this method should remove the broken
- * dictionary or not.
- * @return the created dictionary.
- */
- @UsedForTesting
- public FusionDictionary readDictionaryBinary(final boolean deleteDictIfBroken)
- throws FileNotFoundException, IOException, UnsupportedFormatException;
-
- /**
- * Gets the address of the last PtNode of the exact matching word in the dictionary.
- * If no match is found, returns NOT_VALID_WORD.
- *
- * @param word the word we search for.
- * @return the address of the terminal node.
- * @throws IOException if the file can't be read.
- * @throws UnsupportedFormatException if the format of the file is not recognized.
- */
- @UsedForTesting
- public int getTerminalPosition(final String word)
- throws IOException, UnsupportedFormatException;
-
- /**
- * Reads unigrams and bigrams from the binary file.
- * Doesn't store a full memory representation of the dictionary.
- *
- * @param words the map to store the address as a key and the word as a value.
- * @param frequencies the map to store the address as a key and the frequency as a value.
- * @param bigrams the map to store the address as a key and the list of address as a value.
- * @throws IOException if the file can't be read.
- * @throws UnsupportedFormatException if the format of the file is not recognized.
- */
- @UsedForTesting
- public void readUnigramsAndBigramsBinary(final TreeMap<Integer, String> words,
- final TreeMap<Integer, Integer> frequencies,
- final TreeMap<Integer, ArrayList<PendingAttribute>> bigrams)
- throws IOException, UnsupportedFormatException;
-
- /**
- * Sets the position of the buffer to the given value.
- *
- * @param newPos the new position
- */
- public void setPosition(final int newPos);
-
- /**
- * Gets the position of the buffer.
- *
- * @return the position
- */
- public int getPosition();
-
- /**
- * Reads and returns the PtNode count out of a buffer and forwards the pointer.
- */
- public int readPtNodeCount();
-
- /**
- * Opens the dictionary file and makes DictBuffer.
- */
- @UsedForTesting
- public void openDictBuffer() throws FileNotFoundException, IOException,
- UnsupportedFormatException;
- @UsedForTesting
- public boolean isDictBufferOpen();
-
- // Constants for DictionaryBufferFactory.
- public static final int USE_READONLY_BYTEBUFFER = 0x01000000;
- public static final int USE_BYTEARRAY = 0x02000000;
- public static final int USE_WRITABLE_BYTEBUFFER = 0x03000000;
- public static final int MASK_DICTBUFFER = 0x0F000000;
-
- public interface DictionaryBufferFactory {
- public DictBuffer getDictionaryBuffer(final File file)
- throws FileNotFoundException, IOException;
- }
-
- /**
- * Creates DictionaryBuffer using a ByteBuffer
- *
- * This class uses less memory than DictionaryBufferFromByteArrayFactory,
- * but doesn't perform as fast.
- * When operating on a big dictionary, this class is preferred.
- */
- public static final class DictionaryBufferFromReadOnlyByteBufferFactory
- implements DictionaryBufferFactory {
- @Override
- public DictBuffer getDictionaryBuffer(final File file)
- throws FileNotFoundException, IOException {
- FileInputStream inStream = null;
- ByteBuffer buffer = null;
- try {
- inStream = new FileInputStream(file);
- buffer = inStream.getChannel().map(FileChannel.MapMode.READ_ONLY,
- 0, file.length());
- } finally {
- if (inStream != null) {
- inStream.close();
- }
- }
- if (buffer != null) {
- return new BinaryDictDecoderUtils.ByteBufferDictBuffer(buffer);
- }
- return null;
- }
- }
-
- /**
- * Creates DictionaryBuffer using a byte array
- *
- * This class performs faster than other classes, but consumes more memory.
- * When operating on a small dictionary, this class is preferred.
- */
- public static final class DictionaryBufferFromByteArrayFactory
- implements DictionaryBufferFactory {
- @Override
- public DictBuffer getDictionaryBuffer(final File file)
- throws FileNotFoundException, IOException {
- FileInputStream inStream = null;
- try {
- inStream = new FileInputStream(file);
- final byte[] array = new byte[(int) file.length()];
- inStream.read(array);
- return new ByteArrayDictBuffer(array);
- } finally {
- if (inStream != null) {
- inStream.close();
- }
- }
- }
- }
-
- /**
- * Creates DictionaryBuffer using a writable ByteBuffer and a RandomAccessFile.
- *
- * This class doesn't perform as fast as other classes,
- * but this class is the only option available for destructive operations (insert or delete)
- * on a dictionary.
- */
- @UsedForTesting
- public static final class DictionaryBufferFromWritableByteBufferFactory
- implements DictionaryBufferFactory {
- @Override
- public DictBuffer getDictionaryBuffer(final File file)
- throws FileNotFoundException, IOException {
- RandomAccessFile raFile = null;
- ByteBuffer buffer = null;
- try {
- raFile = new RandomAccessFile(file, "rw");
- buffer = raFile.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, file.length());
- } finally {
- if (raFile != null) {
- raFile.close();
- }
- }
- if (buffer != null) {
- return new BinaryDictDecoderUtils.ByteBufferDictBuffer(buffer);
- }
- return null;
- }
- }
-
- /**
- * @return whether this decoder has a valid binary dictionary that it can decode.
- */
- public boolean hasValidRawBinaryDictionary();
-}
diff --git a/java/src/com/android/inputmethod/latin/makedict/DictEncoder.java b/java/src/com/android/inputmethod/latin/makedict/DictEncoder.java
deleted file mode 100644
index 678c5ca6b..000000000
--- a/java/src/com/android/inputmethod/latin/makedict/DictEncoder.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.makedict;
-
-import com.android.inputmethod.annotations.UsedForTesting;
-import com.android.inputmethod.latin.makedict.FormatSpec.FormatOptions;
-import com.android.inputmethod.latin.makedict.FusionDictionary.PtNode;
-
-import java.io.IOException;
-
-/**
- * An interface of binary dictionary encoder.
- */
-public interface DictEncoder {
- @UsedForTesting
- public void writeDictionary(final FusionDictionary dict, final FormatOptions formatOptions)
- throws IOException, UnsupportedFormatException;
-
- public void setPosition(final int position);
- public int getPosition();
- public void writePtNodeCount(final int ptNodeCount);
- public void writeForwardLinkAddress(final int forwardLinkAddress);
- public void writePtNode(final PtNode ptNode, final FusionDictionary dict);
-}
diff --git a/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java b/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java
index 07217e48e..f25503488 100644
--- a/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java
+++ b/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java
@@ -18,9 +18,7 @@ package com.android.inputmethod.latin.makedict;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.makedict.DictDecoder.DictionaryBufferFactory;
-import java.io.File;
import java.util.Date;
import java.util.HashMap;
@@ -363,42 +361,6 @@ public final class FormatSpec {
}
}
- /**
- * Returns new dictionary decoder.
- *
- * @param dictFile the dictionary file.
- * @param offset the offset in the file.
- * @param length the length of the file, in bytes.
- * @param bufferType The type of buffer, as one of USE_* in DictDecoder.
- * @return new dictionary decoder if the dictionary file exists, otherwise null.
- */
- public static DictDecoder getDictDecoder(final File dictFile, final long offset,
- final long length, final int bufferType) {
- if (dictFile.isDirectory()) {
- return new Ver4DictDecoder(dictFile, bufferType);
- } else if (dictFile.isFile()) {
- return new Ver2DictDecoder(dictFile, offset, length, bufferType);
- }
- return null;
- }
-
- @UsedForTesting
- public static DictDecoder getDictDecoder(final File dictFile, final long offset,
- final long length, final DictionaryBufferFactory factory) {
- if (dictFile.isDirectory()) {
- return new Ver4DictDecoder(dictFile, factory);
- } else if (dictFile.isFile()) {
- return new Ver2DictDecoder(dictFile, offset, length, factory);
- }
- return null;
- }
-
- @UsedForTesting
- public static DictDecoder getDictDecoder(final File dictFile, final long offset,
- final long length) {
- return getDictDecoder(dictFile, offset, length, DictDecoder.USE_READONLY_BYTEBUFFER);
- }
-
private FormatSpec() {
// This utility class is not publicly instantiable.
}
diff --git a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java
deleted file mode 100644
index f60b3af4f..000000000
--- a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java
+++ /dev/null
@@ -1,717 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.makedict;
-
-import com.android.inputmethod.annotations.UsedForTesting;
-import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.makedict.FormatSpec.DictionaryOptions;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedList;
-
-/**
- * A dictionary that can fusion heads and tails of words for more compression.
- */
-@UsedForTesting
-public final class FusionDictionary implements Iterable<WordProperty> {
- private static final boolean DBG = MakedictLog.DBG;
-
- private static int CHARACTER_NOT_FOUND_INDEX = -1;
-
- /**
- * A node array of the dictionary, containing several PtNodes.
- *
- * A PtNodeArray is but an ordered array of PtNodes, which essentially contain all the
- * real information.
- * This class also contains fields to cache size and address, to help with binary
- * generation.
- */
- public static final class PtNodeArray {
- ArrayList<PtNode> mData;
- // To help with binary generation
- int mCachedSize = Integer.MIN_VALUE;
- // mCachedAddressBefore/AfterUpdate are helpers for binary dictionary generation. They
- // always hold the same value except between dictionary address compression, during which
- // the update process needs to know about both values at the same time. Updating will
- // update the AfterUpdate value, and the code will move them to BeforeUpdate before
- // the next update pass.
- int mCachedAddressBeforeUpdate = Integer.MIN_VALUE;
- int mCachedAddressAfterUpdate = Integer.MIN_VALUE;
- int mCachedParentAddress = 0;
-
- public PtNodeArray() {
- mData = new ArrayList<PtNode>();
- }
- public PtNodeArray(ArrayList<PtNode> data) {
- Collections.sort(data, PTNODE_COMPARATOR);
- mData = data;
- }
- }
-
- /**
- * PtNode is a group of characters, with probability information, shortcut targets, bigrams,
- * and children (Pt means Patricia Trie).
- *
- * This is the central class of the in-memory representation. A PtNode is what can
- * be seen as a traditional "trie node", except it can hold several characters at the
- * same time. A PtNode essentially represents one or several characters in the middle
- * of the trie tree; as such, it can be a terminal, and it can have children.
- * In this in-memory representation, whether the PtNode is a terminal or not is represented
- * by mProbabilityInfo. The PtNode is a terminal when the mProbabilityInfo is not null and the
- * PtNode is not a terminal when the mProbabilityInfo is null. A terminal may have non-null
- * shortcuts and/or bigrams, but a non-terminal may not. Moreover, children, if present,
- * are non-null.
- */
- public static final class PtNode {
- private static final int NOT_A_TERMINAL = -1;
- final int mChars[];
- ArrayList<WeightedString> mShortcutTargets;
- ArrayList<WeightedString> mBigrams;
- // null == mProbabilityInfo indicates this is not a terminal.
- ProbabilityInfo mProbabilityInfo;
- int mTerminalId; // NOT_A_TERMINAL == mTerminalId indicates this is not a terminal.
- PtNodeArray mChildren;
- boolean mIsNotAWord; // Only a shortcut
- boolean mIsBlacklistEntry;
- // mCachedSize and mCachedAddressBefore/AfterUpdate are helpers for binary dictionary
- // generation. Before and After always hold the same value except during dictionary
- // address compression, where the update process needs to know about both values at the
- // same time. Updating will update the AfterUpdate value, and the code will move them
- // to BeforeUpdate before the next update pass.
- // The update process does not need two versions of mCachedSize.
- int mCachedSize; // The size, in bytes, of this PtNode.
- int mCachedAddressBeforeUpdate; // The address of this PtNode (before update)
- int mCachedAddressAfterUpdate; // The address of this PtNode (after update)
-
- public PtNode(final int[] chars, final ArrayList<WeightedString> shortcutTargets,
- final ArrayList<WeightedString> bigrams, final ProbabilityInfo probabilityInfo,
- final boolean isNotAWord, final boolean isBlacklistEntry) {
- mChars = chars;
- mProbabilityInfo = probabilityInfo;
- mTerminalId = probabilityInfo == null ? NOT_A_TERMINAL : probabilityInfo.mProbability;
- mShortcutTargets = shortcutTargets;
- mBigrams = bigrams;
- mChildren = null;
- mIsNotAWord = isNotAWord;
- mIsBlacklistEntry = isBlacklistEntry;
- }
-
- public PtNode(final int[] chars, final ArrayList<WeightedString> shortcutTargets,
- final ArrayList<WeightedString> bigrams, final ProbabilityInfo probabilityInfo,
- final boolean isNotAWord, final boolean isBlacklistEntry,
- final PtNodeArray children) {
- mChars = chars;
- mProbabilityInfo = probabilityInfo;
- mShortcutTargets = shortcutTargets;
- mBigrams = bigrams;
- mChildren = children;
- mIsNotAWord = isNotAWord;
- mIsBlacklistEntry = isBlacklistEntry;
- }
-
- public void addChild(PtNode n) {
- if (null == mChildren) {
- mChildren = new PtNodeArray();
- }
- mChildren.mData.add(n);
- }
-
- public int getTerminalId() {
- return mTerminalId;
- }
-
- public boolean isTerminal() {
- return mProbabilityInfo != null;
- }
-
- public int getProbability() {
- if (isTerminal()) {
- return mProbabilityInfo.mProbability;
- } else {
- return NOT_A_TERMINAL;
- }
- }
-
- public boolean getIsNotAWord() {
- return mIsNotAWord;
- }
-
- public boolean getIsBlacklistEntry() {
- return mIsBlacklistEntry;
- }
-
- public ArrayList<WeightedString> getShortcutTargets() {
- // We don't want write permission to escape outside the package, so we return a copy
- if (null == mShortcutTargets) return null;
- final ArrayList<WeightedString> copyOfShortcutTargets =
- new ArrayList<WeightedString>(mShortcutTargets);
- return copyOfShortcutTargets;
- }
-
- public ArrayList<WeightedString> getBigrams() {
- // We don't want write permission to escape outside the package, so we return a copy
- if (null == mBigrams) return null;
- final ArrayList<WeightedString> copyOfBigrams = new ArrayList<WeightedString>(mBigrams);
- return copyOfBigrams;
- }
-
- public boolean hasSeveralChars() {
- assert(mChars.length > 0);
- return 1 < mChars.length;
- }
-
- /**
- * Adds a word to the bigram list. Updates the probability information if the word already
- * exists.
- */
- public void addBigram(final String word, final ProbabilityInfo probabilityInfo) {
- if (mBigrams == null) {
- mBigrams = new ArrayList<WeightedString>();
- }
- WeightedString bigram = getBigram(word);
- if (bigram != null) {
- bigram.mProbabilityInfo = probabilityInfo;
- } else {
- bigram = new WeightedString(word, probabilityInfo);
- mBigrams.add(bigram);
- }
- }
-
- /**
- * Gets the shortcut target for the given word. Returns null if the word is not in the
- * shortcut list.
- */
- public WeightedString getShortcut(final String word) {
- // TODO: Don't do a linear search
- if (mShortcutTargets != null) {
- final int size = mShortcutTargets.size();
- for (int i = 0; i < size; ++i) {
- WeightedString shortcut = mShortcutTargets.get(i);
- if (shortcut.mWord.equals(word)) {
- return shortcut;
- }
- }
- }
- return null;
- }
-
- /**
- * Gets the bigram for the given word.
- * Returns null if the word is not in the bigrams list.
- */
- public WeightedString getBigram(final String word) {
- // TODO: Don't do a linear search
- if (mBigrams != null) {
- final int size = mBigrams.size();
- for (int i = 0; i < size; ++i) {
- WeightedString bigram = mBigrams.get(i);
- if (bigram.mWord.equals(word)) {
- return bigram;
- }
- }
- }
- return null;
- }
-
- /**
- * Updates the PtNode with the given properties. Adds the shortcut and bigram lists to
- * the existing ones if any. Note: unigram, bigram, and shortcut frequencies are only
- * updated if they are higher than the existing ones.
- */
- private void update(final ProbabilityInfo probabilityInfo,
- final ArrayList<WeightedString> shortcutTargets,
- final ArrayList<WeightedString> bigrams,
- final boolean isNotAWord, final boolean isBlacklistEntry) {
- mProbabilityInfo = ProbabilityInfo.max(mProbabilityInfo, probabilityInfo);
- if (shortcutTargets != null) {
- if (mShortcutTargets == null) {
- mShortcutTargets = shortcutTargets;
- } else {
- final int size = shortcutTargets.size();
- for (int i = 0; i < size; ++i) {
- final WeightedString shortcut = shortcutTargets.get(i);
- final WeightedString existingShortcut = getShortcut(shortcut.mWord);
- if (existingShortcut == null) {
- mShortcutTargets.add(shortcut);
- } else {
- existingShortcut.mProbabilityInfo = ProbabilityInfo.max(
- existingShortcut.mProbabilityInfo, shortcut.mProbabilityInfo);
- }
- }
- }
- }
- if (bigrams != null) {
- if (mBigrams == null) {
- mBigrams = bigrams;
- } else {
- final int size = bigrams.size();
- for (int i = 0; i < size; ++i) {
- final WeightedString bigram = bigrams.get(i);
- final WeightedString existingBigram = getBigram(bigram.mWord);
- if (existingBigram == null) {
- mBigrams.add(bigram);
- } else {
- existingBigram.mProbabilityInfo = ProbabilityInfo.max(
- existingBigram.mProbabilityInfo, bigram.mProbabilityInfo);
- }
- }
- }
- }
- mIsNotAWord = isNotAWord;
- mIsBlacklistEntry = isBlacklistEntry;
- }
- }
-
- public final DictionaryOptions mOptions;
- public final PtNodeArray mRootNodeArray;
-
- public FusionDictionary(final PtNodeArray rootNodeArray, final DictionaryOptions options) {
- mRootNodeArray = rootNodeArray;
- mOptions = options;
- }
-
- public void addOptionAttribute(final String key, final String value) {
- mOptions.mAttributes.put(key, value);
- }
-
- /**
- * Helper method to convert a String to an int array.
- */
- static int[] getCodePoints(final String word) {
- // TODO: this is a copy-paste of the old contents of StringUtils.toCodePointArray,
- // which is not visible from the makedict package. Factor this code.
- final int length = word.length();
- if (length <= 0) return new int[] {};
- final char[] characters = word.toCharArray();
- final int[] codePoints = new int[Character.codePointCount(characters, 0, length)];
- int codePoint = Character.codePointAt(characters, 0);
- int dsti = 0;
- for (int srci = Character.charCount(codePoint);
- srci < length; srci += Character.charCount(codePoint), ++dsti) {
- codePoints[dsti] = codePoint;
- codePoint = Character.codePointAt(characters, srci);
- }
- codePoints[dsti] = codePoint;
- return codePoints;
- }
-
- /**
- * Helper method to add a word as a string.
- *
- * This method adds a word to the dictionary with the given frequency. Optional
- * lists of bigrams and shortcuts can be passed here. For each word inside,
- * they will be added to the dictionary as necessary.
- *
- * @param word the word to add.
- * @param probabilityInfo probability information of the word.
- * @param shortcutTargets a list of shortcut targets for this word, or null.
- * @param isNotAWord true if this should not be considered a word (e.g. shortcut only)
- */
- public void add(final String word, final ProbabilityInfo probabilityInfo,
- final ArrayList<WeightedString> shortcutTargets, final boolean isNotAWord) {
- add(getCodePoints(word), probabilityInfo, shortcutTargets, isNotAWord,
- false /* isBlacklistEntry */);
- }
-
- /**
- * Helper method to add a blacklist entry as a string.
- *
- * @param word the word to add as a blacklist entry.
- * @param shortcutTargets a list of shortcut targets for this word, or null.
- * @param isNotAWord true if this is not a word for spellcheking purposes (shortcut only or so)
- */
- public void addBlacklistEntry(final String word,
- final ArrayList<WeightedString> shortcutTargets, final boolean isNotAWord) {
- add(getCodePoints(word), new ProbabilityInfo(0), shortcutTargets, isNotAWord,
- true /* isBlacklistEntry */);
- }
-
- /**
- * Sanity check for a PtNode array.
- *
- * This method checks that all PtNodes in a node array are ordered as expected.
- * If they are, nothing happens. If they aren't, an exception is thrown.
- */
- private void checkStack(PtNodeArray ptNodeArray) {
- ArrayList<PtNode> stack = ptNodeArray.mData;
- int lastValue = -1;
- for (int i = 0; i < stack.size(); ++i) {
- int currentValue = stack.get(i).mChars[0];
- if (currentValue <= lastValue)
- throw new RuntimeException("Invalid stack");
- else
- lastValue = currentValue;
- }
- }
-
- /**
- * Helper method to add a new bigram to the dictionary.
- *
- * @param word0 the previous word of the context
- * @param word1 the next word of the context
- * @param probabilityInfo the bigram probability info
- */
- public void setBigram(final String word0, final String word1,
- final ProbabilityInfo probabilityInfo) {
- PtNode ptNode0 = findWordInTree(mRootNodeArray, word0);
- if (ptNode0 != null) {
- final PtNode ptNode1 = findWordInTree(mRootNodeArray, word1);
- if (ptNode1 == null) {
- add(getCodePoints(word1), new ProbabilityInfo(0), null, false /* isNotAWord */,
- false /* isBlacklistEntry */);
- // The PtNode for the first word may have moved by the above insertion,
- // if word1 and word2 share a common stem that happens not to have been
- // a cutting point until now. In this case, we need to refresh ptNode.
- ptNode0 = findWordInTree(mRootNodeArray, word0);
- }
- ptNode0.addBigram(word1, probabilityInfo);
- } else {
- throw new RuntimeException("First word of bigram not found " + word0);
- }
- }
-
- /**
- * Add a word to this dictionary.
- *
- * The shortcuts, if any, have to be in the dictionary already. If they aren't,
- * an exception is thrown.
- *
- * @param word the word, as an int array.
- * @param probabilityInfo the probability information of the word.
- * @param shortcutTargets an optional list of shortcut targets for this word (null if none).
- * @param isNotAWord true if this is not a word for spellcheking purposes (shortcut only or so)
- * @param isBlacklistEntry true if this is a blacklisted word, false otherwise
- */
- private void add(final int[] word, final ProbabilityInfo probabilityInfo,
- final ArrayList<WeightedString> shortcutTargets,
- final boolean isNotAWord, final boolean isBlacklistEntry) {
- assert(probabilityInfo.mProbability <= FormatSpec.MAX_TERMINAL_FREQUENCY);
- if (word.length >= Constants.DICTIONARY_MAX_WORD_LENGTH) {
- MakedictLog.w("Ignoring a word that is too long: word.length = " + word.length);
- return;
- }
-
- PtNodeArray currentNodeArray = mRootNodeArray;
- int charIndex = 0;
-
- PtNode currentPtNode = null;
- int differentCharIndex = 0; // Set by the loop to the index of the char that differs
- int nodeIndex = findIndexOfChar(mRootNodeArray, word[charIndex]);
- while (CHARACTER_NOT_FOUND_INDEX != nodeIndex) {
- currentPtNode = currentNodeArray.mData.get(nodeIndex);
- differentCharIndex = compareCharArrays(currentPtNode.mChars, word, charIndex);
- if (ARRAYS_ARE_EQUAL != differentCharIndex
- && differentCharIndex < currentPtNode.mChars.length) break;
- if (null == currentPtNode.mChildren) break;
- charIndex += currentPtNode.mChars.length;
- if (charIndex >= word.length) break;
- currentNodeArray = currentPtNode.mChildren;
- nodeIndex = findIndexOfChar(currentNodeArray, word[charIndex]);
- }
-
- if (CHARACTER_NOT_FOUND_INDEX == nodeIndex) {
- // No node at this point to accept the word. Create one.
- final int insertionIndex = findInsertionIndex(currentNodeArray, word[charIndex]);
- final PtNode newPtNode = new PtNode(Arrays.copyOfRange(word, charIndex, word.length),
- shortcutTargets, null /* bigrams */, probabilityInfo, isNotAWord,
- isBlacklistEntry);
- currentNodeArray.mData.add(insertionIndex, newPtNode);
- if (DBG) checkStack(currentNodeArray);
- } else {
- // There is a word with a common prefix.
- if (differentCharIndex == currentPtNode.mChars.length) {
- if (charIndex + differentCharIndex >= word.length) {
- // The new word is a prefix of an existing word, but the node on which it
- // should end already exists as is. Since the old PtNode was not a terminal,
- // make it one by filling in its frequency and other attributes
- currentPtNode.update(probabilityInfo, shortcutTargets, null, isNotAWord,
- isBlacklistEntry);
- } else {
- // The new word matches the full old word and extends past it.
- // We only have to create a new node and add it to the end of this.
- final PtNode newNode = new PtNode(
- Arrays.copyOfRange(word, charIndex + differentCharIndex, word.length),
- shortcutTargets, null /* bigrams */, probabilityInfo,
- isNotAWord, isBlacklistEntry);
- currentPtNode.mChildren = new PtNodeArray();
- currentPtNode.mChildren.mData.add(newNode);
- }
- } else {
- if (0 == differentCharIndex) {
- // Exact same word. Update the frequency if higher. This will also add the
- // new shortcuts to the existing shortcut list if it already exists.
- currentPtNode.update(probabilityInfo, shortcutTargets, null,
- currentPtNode.mIsNotAWord && isNotAWord,
- currentPtNode.mIsBlacklistEntry || isBlacklistEntry);
- } else {
- // Partial prefix match only. We have to replace the current node with a node
- // containing the current prefix and create two new ones for the tails.
- PtNodeArray newChildren = new PtNodeArray();
- final PtNode newOldWord = new PtNode(
- Arrays.copyOfRange(currentPtNode.mChars, differentCharIndex,
- currentPtNode.mChars.length), currentPtNode.mShortcutTargets,
- currentPtNode.mBigrams, currentPtNode.mProbabilityInfo,
- currentPtNode.mIsNotAWord, currentPtNode.mIsBlacklistEntry,
- currentPtNode.mChildren);
- newChildren.mData.add(newOldWord);
-
- final PtNode newParent;
- if (charIndex + differentCharIndex >= word.length) {
- newParent = new PtNode(
- Arrays.copyOfRange(currentPtNode.mChars, 0, differentCharIndex),
- shortcutTargets, null /* bigrams */, probabilityInfo,
- isNotAWord, isBlacklistEntry, newChildren);
- } else {
- newParent = new PtNode(
- Arrays.copyOfRange(currentPtNode.mChars, 0, differentCharIndex),
- null /* shortcutTargets */, null /* bigrams */,
- null /* probabilityInfo */, false /* isNotAWord */,
- false /* isBlacklistEntry */, newChildren);
- final PtNode newWord = new PtNode(Arrays.copyOfRange(word,
- charIndex + differentCharIndex, word.length),
- shortcutTargets, null /* bigrams */, probabilityInfo,
- isNotAWord, isBlacklistEntry);
- final int addIndex = word[charIndex + differentCharIndex]
- > currentPtNode.mChars[differentCharIndex] ? 1 : 0;
- newChildren.mData.add(addIndex, newWord);
- }
- currentNodeArray.mData.set(nodeIndex, newParent);
- }
- if (DBG) checkStack(currentNodeArray);
- }
- }
- }
-
- private static int ARRAYS_ARE_EQUAL = 0;
-
- /**
- * Custom comparison of two int arrays taken to contain character codes.
- *
- * This method compares the two arrays passed as an argument in a lexicographic way,
- * with an offset in the dst string.
- * This method does NOT test for the first character. It is taken to be equal.
- * I repeat: this method starts the comparison at 1 <> dstOffset + 1.
- * The index where the strings differ is returned. ARRAYS_ARE_EQUAL = 0 is returned if the
- * strings are equal. This works BECAUSE we don't look at the first character.
- *
- * @param src the left-hand side string of the comparison.
- * @param dst the right-hand side string of the comparison.
- * @param dstOffset the offset in the right-hand side string.
- * @return the index at which the strings differ, or ARRAYS_ARE_EQUAL = 0 if they don't.
- */
- private static int compareCharArrays(final int[] src, final int[] dst, int dstOffset) {
- // We do NOT test the first char, because we come from a method that already
- // tested it.
- for (int i = 1; i < src.length; ++i) {
- if (dstOffset + i >= dst.length) return i;
- if (src[i] != dst[dstOffset + i]) return i;
- }
- if (dst.length > src.length) return src.length;
- return ARRAYS_ARE_EQUAL;
- }
-
- /**
- * Helper class that compares and sorts two PtNodes according to their
- * first element only. I repeat: ONLY the first element is considered, the rest
- * is ignored.
- * This comparator imposes orderings that are inconsistent with equals.
- */
- static private final class PtNodeComparator implements java.util.Comparator<PtNode> {
- @Override
- public int compare(PtNode p1, PtNode p2) {
- if (p1.mChars[0] == p2.mChars[0]) return 0;
- return p1.mChars[0] < p2.mChars[0] ? -1 : 1;
- }
- }
- final static private PtNodeComparator PTNODE_COMPARATOR = new PtNodeComparator();
-
- /**
- * Finds the insertion index of a character within a node array.
- */
- private static int findInsertionIndex(final PtNodeArray nodeArray, int character) {
- final ArrayList<PtNode> data = nodeArray.mData;
- final PtNode reference = new PtNode(new int[] { character },
- null /* shortcutTargets */, null /* bigrams */, null /* probabilityInfo */,
- false /* isNotAWord */, false /* isBlacklistEntry */);
- int result = Collections.binarySearch(data, reference, PTNODE_COMPARATOR);
- return result >= 0 ? result : -result - 1;
- }
-
- /**
- * Find the index of a char in a node array, if it exists.
- *
- * @param nodeArray the node array to search in.
- * @param character the character to search for.
- * @return the position of the character if it's there, or CHARACTER_NOT_FOUND_INDEX = -1 else.
- */
- private static int findIndexOfChar(final PtNodeArray nodeArray, int character) {
- final int insertionIndex = findInsertionIndex(nodeArray, character);
- if (nodeArray.mData.size() <= insertionIndex) return CHARACTER_NOT_FOUND_INDEX;
- return character == nodeArray.mData.get(insertionIndex).mChars[0] ? insertionIndex
- : CHARACTER_NOT_FOUND_INDEX;
- }
-
- /**
- * Helper method to find a word in a given branch.
- */
- @SuppressWarnings("unused")
- public static PtNode findWordInTree(PtNodeArray nodeArray, final String string) {
- int index = 0;
- final StringBuilder checker = DBG ? new StringBuilder() : null;
- final int[] codePoints = getCodePoints(string);
-
- PtNode currentPtNode;
- do {
- int indexOfGroup = findIndexOfChar(nodeArray, codePoints[index]);
- if (CHARACTER_NOT_FOUND_INDEX == indexOfGroup) return null;
- currentPtNode = nodeArray.mData.get(indexOfGroup);
-
- if (codePoints.length - index < currentPtNode.mChars.length) return null;
- int newIndex = index;
- while (newIndex < codePoints.length && newIndex - index < currentPtNode.mChars.length) {
- if (currentPtNode.mChars[newIndex - index] != codePoints[newIndex]) return null;
- newIndex++;
- }
- index = newIndex;
-
- if (DBG) {
- checker.append(new String(currentPtNode.mChars, 0, currentPtNode.mChars.length));
- }
- if (index < codePoints.length) {
- nodeArray = currentPtNode.mChildren;
- }
- } while (null != nodeArray && index < codePoints.length);
-
- if (index < codePoints.length) return null;
- if (!currentPtNode.isTerminal()) return null;
- if (DBG && !string.equals(checker.toString())) return null;
- return currentPtNode;
- }
-
- /**
- * Helper method to find out whether a word is in the dict or not.
- */
- public boolean hasWord(final String s) {
- if (null == s || "".equals(s)) {
- throw new RuntimeException("Can't search for a null or empty string");
- }
- return null != findWordInTree(mRootNodeArray, s);
- }
-
- /**
- * Recursively count the number of PtNodes in a given branch of the trie.
- *
- * @param nodeArray the parent node.
- * @return the number of PtNodes in all the branch under this node.
- */
- public static int countPtNodes(final PtNodeArray nodeArray) {
- final int nodeSize = nodeArray.mData.size();
- int size = nodeSize;
- for (int i = nodeSize - 1; i >= 0; --i) {
- PtNode ptNode = nodeArray.mData.get(i);
- if (null != ptNode.mChildren)
- size += countPtNodes(ptNode.mChildren);
- }
- return size;
- }
-
- /**
- * Iterator to walk through a dictionary.
- *
- * This is purely for convenience.
- */
- public static final class DictionaryIterator implements Iterator<WordProperty> {
- private static final class Position {
- public Iterator<PtNode> pos;
- public int length;
- public Position(ArrayList<PtNode> ptNodes) {
- pos = ptNodes.iterator();
- length = 0;
- }
- }
- final StringBuilder mCurrentString;
- final LinkedList<Position> mPositions;
-
- public DictionaryIterator(ArrayList<PtNode> ptRoot) {
- mCurrentString = new StringBuilder();
- mPositions = new LinkedList<Position>();
- final Position rootPos = new Position(ptRoot);
- mPositions.add(rootPos);
- }
-
- @Override
- public boolean hasNext() {
- for (Position p : mPositions) {
- if (p.pos.hasNext()) {
- return true;
- }
- }
- return false;
- }
-
- @Override
- public WordProperty next() {
- Position currentPos = mPositions.getLast();
- mCurrentString.setLength(currentPos.length);
-
- do {
- if (currentPos.pos.hasNext()) {
- final PtNode currentPtNode = currentPos.pos.next();
- currentPos.length = mCurrentString.length();
- for (int i : currentPtNode.mChars) {
- mCurrentString.append(Character.toChars(i));
- }
- if (null != currentPtNode.mChildren) {
- currentPos = new Position(currentPtNode.mChildren.mData);
- currentPos.length = mCurrentString.length();
- mPositions.addLast(currentPos);
- }
- if (currentPtNode.isTerminal()) {
- return new WordProperty(mCurrentString.toString(),
- currentPtNode.mProbabilityInfo,
- currentPtNode.mShortcutTargets, currentPtNode.mBigrams,
- currentPtNode.mIsNotAWord, currentPtNode.mIsBlacklistEntry);
- }
- } else {
- mPositions.removeLast();
- currentPos = mPositions.getLast();
- mCurrentString.setLength(mPositions.getLast().length);
- }
- } while (true);
- }
-
- @Override
- public void remove() {
- throw new UnsupportedOperationException("Unsupported yet");
- }
-
- }
-
- /**
- * Method to return an iterator.
- *
- * This method enables Java's enhanced for loop. With this you can have a FusionDictionary x
- * and say : for (Word w : x) {}
- */
- @Override
- public Iterator<WordProperty> iterator() {
- return new DictionaryIterator(mRootNodeArray.mData);
- }
-}
diff --git a/java/src/com/android/inputmethod/latin/makedict/MakedictLog.java b/java/src/com/android/inputmethod/latin/makedict/MakedictLog.java
deleted file mode 100644
index cf07209d9..000000000
--- a/java/src/com/android/inputmethod/latin/makedict/MakedictLog.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.makedict;
-
-import android.util.Log;
-
-/**
- * Wrapper to redirect log events to the right output medium.
- */
-public final class MakedictLog {
- public static final boolean DBG = false;
- private static final String TAG = MakedictLog.class.getSimpleName();
-
- public static void d(String message) {
- if (DBG) {
- Log.d(TAG, message);
- }
- }
-
- public static void i(String message) {
- if (DBG) {
- Log.i(TAG, message);
- }
- }
-
- public static void w(String message) {
- Log.w(TAG, message);
- }
-
- public static void e(String message) {
- Log.e(TAG, message);
- }
-}
diff --git a/java/src/com/android/inputmethod/latin/makedict/PendingAttribute.java b/java/src/com/android/inputmethod/latin/makedict/PendingAttribute.java
deleted file mode 100644
index 70e24cc98..000000000
--- a/java/src/com/android/inputmethod/latin/makedict/PendingAttribute.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.makedict;
-
-/**
- * A not-yet-resolved attribute.
- *
- * An attribute is either a bigram or a shortcut.
- * All instances of this class are always immutable.
- */
-public final class PendingAttribute {
- public final int mFrequency;
- public final int mAddress;
- public PendingAttribute(final int frequency, final int address) {
- mFrequency = frequency;
- mAddress = address;
- }
-}
diff --git a/java/src/com/android/inputmethod/latin/makedict/PtNodeInfo.java b/java/src/com/android/inputmethod/latin/makedict/PtNodeInfo.java
deleted file mode 100644
index 862e8c101..000000000
--- a/java/src/com/android/inputmethod/latin/makedict/PtNodeInfo.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.makedict;
-
-import java.util.ArrayList;
-
-/**
- * Raw PtNode info straight out of a file. This will contain numbers for addresses.
- */
-public final class PtNodeInfo {
- public final int mOriginalAddress;
- public final int mEndAddress;
- public final int mFlags;
- public final int[] mCharacters;
- public final ProbabilityInfo mProbabilityInfo;
- public final int mChildrenAddress;
- public final ArrayList<WeightedString> mShortcutTargets;
- public final ArrayList<PendingAttribute> mBigrams;
-
- public PtNodeInfo(final int originalAddress, final int endAddress, final int flags,
- final int[] characters, final ProbabilityInfo probabilityInfo,
- final int childrenAddress, final ArrayList<WeightedString> shortcutTargets,
- final ArrayList<PendingAttribute> bigrams) {
- mOriginalAddress = originalAddress;
- mEndAddress = endAddress;
- mFlags = flags;
- mCharacters = characters;
- mProbabilityInfo = probabilityInfo;
- mChildrenAddress = childrenAddress;
- mShortcutTargets = shortcutTargets;
- mBigrams = bigrams;
- }
-
- public boolean isTerminal() {
- return mProbabilityInfo != null;
- }
-}
diff --git a/java/src/com/android/inputmethod/latin/makedict/Ver2DictDecoder.java b/java/src/com/android/inputmethod/latin/makedict/Ver2DictDecoder.java
deleted file mode 100644
index 7091c119e..000000000
--- a/java/src/com/android/inputmethod/latin/makedict/Ver2DictDecoder.java
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.makedict;
-
-import com.android.inputmethod.annotations.UsedForTesting;
-import com.android.inputmethod.latin.BinaryDictionary;
-import com.android.inputmethod.latin.makedict.BinaryDictDecoderUtils.CharEncoding;
-import com.android.inputmethod.latin.makedict.BinaryDictDecoderUtils.DictBuffer;
-import com.android.inputmethod.latin.utils.CollectionUtils;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-/**
- * An implementation of DictDecoder for version 2 binary dictionary.
- */
-// TODO: Separate logics that are used only for testing.
-@UsedForTesting
-public class Ver2DictDecoder extends AbstractDictDecoder {
- private static final String TAG = Ver2DictDecoder.class.getSimpleName();
-
- /**
- * A utility class for reading a PtNode.
- */
- protected static class PtNodeReader {
- private static ProbabilityInfo readProbabilityInfo(final DictBuffer dictBuffer) {
- // Ver2 dicts don't contain historical information.
- return new ProbabilityInfo(dictBuffer.readUnsignedByte());
- }
-
- protected static int readPtNodeOptionFlags(final DictBuffer dictBuffer) {
- return dictBuffer.readUnsignedByte();
- }
-
- protected static int readChildrenAddress(final DictBuffer dictBuffer,
- final int ptNodeFlags) {
- switch (ptNodeFlags & FormatSpec.MASK_CHILDREN_ADDRESS_TYPE) {
- case FormatSpec.FLAG_CHILDREN_ADDRESS_TYPE_ONEBYTE:
- return dictBuffer.readUnsignedByte();
- case FormatSpec.FLAG_CHILDREN_ADDRESS_TYPE_TWOBYTES:
- return dictBuffer.readUnsignedShort();
- case FormatSpec.FLAG_CHILDREN_ADDRESS_TYPE_THREEBYTES:
- return dictBuffer.readUnsignedInt24();
- case FormatSpec.FLAG_CHILDREN_ADDRESS_TYPE_NOADDRESS:
- default:
- return FormatSpec.NO_CHILDREN_ADDRESS;
- }
- }
-
- // Reads shortcuts and returns the read length.
- protected static int readShortcut(final DictBuffer dictBuffer,
- final ArrayList<WeightedString> shortcutTargets) {
- final int pointerBefore = dictBuffer.position();
- dictBuffer.readUnsignedShort(); // skip the size
- while (true) {
- final int targetFlags = dictBuffer.readUnsignedByte();
- final String word = CharEncoding.readString(dictBuffer);
- shortcutTargets.add(new WeightedString(word,
- targetFlags & FormatSpec.FLAG_BIGRAM_SHORTCUT_ATTR_FREQUENCY));
- if (0 == (targetFlags & FormatSpec.FLAG_BIGRAM_SHORTCUT_ATTR_HAS_NEXT)) break;
- }
- return dictBuffer.position() - pointerBefore;
- }
-
- protected static int readBigramAddresses(final DictBuffer dictBuffer,
- final ArrayList<PendingAttribute> bigrams, final int baseAddress) {
- int readLength = 0;
- int bigramCount = 0;
- while (bigramCount++ < FormatSpec.MAX_BIGRAMS_IN_A_PTNODE) {
- final int bigramFlags = dictBuffer.readUnsignedByte();
- ++readLength;
- final int sign = 0 == (bigramFlags & FormatSpec.FLAG_BIGRAM_ATTR_OFFSET_NEGATIVE)
- ? 1 : -1;
- int bigramAddress = baseAddress + readLength;
- switch (bigramFlags & FormatSpec.MASK_BIGRAM_ATTR_ADDRESS_TYPE) {
- case FormatSpec.FLAG_BIGRAM_ATTR_ADDRESS_TYPE_ONEBYTE:
- bigramAddress += sign * dictBuffer.readUnsignedByte();
- readLength += 1;
- break;
- case FormatSpec.FLAG_BIGRAM_ATTR_ADDRESS_TYPE_TWOBYTES:
- bigramAddress += sign * dictBuffer.readUnsignedShort();
- readLength += 2;
- break;
- case FormatSpec.FLAG_BIGRAM_ATTR_ADDRESS_TYPE_THREEBYTES:
- bigramAddress += sign * dictBuffer.readUnsignedInt24();
- readLength += 3;
- break;
- default:
- throw new RuntimeException("Has bigrams with no address");
- }
- bigrams.add(new PendingAttribute(
- bigramFlags & FormatSpec.FLAG_BIGRAM_SHORTCUT_ATTR_FREQUENCY,
- bigramAddress));
- if (0 == (bigramFlags & FormatSpec.FLAG_BIGRAM_SHORTCUT_ATTR_HAS_NEXT)) break;
- }
- return readLength;
- }
- }
-
- protected final File mDictionaryBinaryFile;
- protected final long mOffset;
- protected final long mLength;
- // TODO: Remove mBufferFactory and mDictBuffer from this class members because they are now
- // used only for testing.
- private final DictionaryBufferFactory mBufferFactory;
- protected DictBuffer mDictBuffer;
-
- @UsedForTesting
- /* package */ Ver2DictDecoder(final File file, final long offset, final long length,
- final int factoryFlag) {
- mDictionaryBinaryFile = file;
- mOffset = offset;
- mLength = length;
- mDictBuffer = null;
- if ((factoryFlag & MASK_DICTBUFFER) == USE_READONLY_BYTEBUFFER) {
- mBufferFactory = new DictionaryBufferFromReadOnlyByteBufferFactory();
- } else if ((factoryFlag & MASK_DICTBUFFER) == USE_BYTEARRAY) {
- mBufferFactory = new DictionaryBufferFromByteArrayFactory();
- } else if ((factoryFlag & MASK_DICTBUFFER) == USE_WRITABLE_BYTEBUFFER) {
- mBufferFactory = new DictionaryBufferFromWritableByteBufferFactory();
- } else {
- mBufferFactory = new DictionaryBufferFromReadOnlyByteBufferFactory();
- }
- }
-
- /* package */ Ver2DictDecoder(final File file, final long offset, final long length,
- final DictionaryBufferFactory factory) {
- mDictionaryBinaryFile = file;
- mOffset = offset;
- mLength = length;
- mBufferFactory = factory;
- }
-
- @Override
- public void openDictBuffer() throws FileNotFoundException, IOException {
- mDictBuffer = mBufferFactory.getDictionaryBuffer(mDictionaryBinaryFile);
- }
-
- @Override
- public boolean isDictBufferOpen() {
- return mDictBuffer != null;
- }
-
- /* package */ DictBuffer getDictBuffer() {
- return mDictBuffer;
- }
-
- @UsedForTesting
- /* package */ DictBuffer openAndGetDictBuffer() throws FileNotFoundException, IOException {
- openDictBuffer();
- return getDictBuffer();
- }
-
- @Override
- public DictionaryHeader readHeader() throws IOException, UnsupportedFormatException {
- // dictType is not being used in dicttool. Passing an empty string.
- final BinaryDictionary binaryDictionary = new BinaryDictionary(
- mDictionaryBinaryFile.getAbsolutePath(), mOffset, mLength,
- true /* useFullEditDistance */, null /* locale */, "" /* dictType */,
- false /* isUpdatable */);
- final DictionaryHeader header = binaryDictionary.getHeader();
- binaryDictionary.close();
- if (header == null) {
- throw new IOException("Cannot read the dictionary header.");
- }
- if (header.mFormatOptions.mVersion != FormatSpec.VERSION2) {
- throw new UnsupportedFormatException("File header has a wrong version : "
- + header.mFormatOptions.mVersion);
- }
- if (!isDictBufferOpen()) {
- openDictBuffer();
- }
- // Advance buffer reading position to the head of dictionary body.
- setPosition(header.mBodyOffset);
- return header;
- }
-
- // TODO: Make this buffer multi thread safe.
- private final int[] mCharacterBuffer = new int[FormatSpec.MAX_WORD_LENGTH];
- @Override
- public PtNodeInfo readPtNode(final int ptNodePos) {
- int addressPointer = ptNodePos;
- final int flags = PtNodeReader.readPtNodeOptionFlags(mDictBuffer);
- addressPointer += FormatSpec.PTNODE_FLAGS_SIZE;
- final int characters[];
- if (0 != (flags & FormatSpec.FLAG_HAS_MULTIPLE_CHARS)) {
- int index = 0;
- int character = CharEncoding.readChar(mDictBuffer);
- addressPointer += CharEncoding.getCharSize(character);
- while (FormatSpec.INVALID_CHARACTER != character) {
- // FusionDictionary is making sure that the length of the word is smaller than
- // MAX_WORD_LENGTH.
- // So we'll never write past the end of mCharacterBuffer.
- mCharacterBuffer[index++] = character;
- character = CharEncoding.readChar(mDictBuffer);
- addressPointer += CharEncoding.getCharSize(character);
- }
- characters = Arrays.copyOfRange(mCharacterBuffer, 0, index);
- } else {
- final int character = CharEncoding.readChar(mDictBuffer);
- addressPointer += CharEncoding.getCharSize(character);
- characters = new int[] { character };
- }
- final ProbabilityInfo probabilityInfo;
- if (0 != (FormatSpec.FLAG_IS_TERMINAL & flags)) {
- probabilityInfo = PtNodeReader.readProbabilityInfo(mDictBuffer);
- addressPointer += FormatSpec.PTNODE_FREQUENCY_SIZE;
- } else {
- probabilityInfo = null;
- }
- int childrenAddress = PtNodeReader.readChildrenAddress(mDictBuffer, flags);
- if (childrenAddress != FormatSpec.NO_CHILDREN_ADDRESS) {
- childrenAddress += addressPointer;
- }
- addressPointer += BinaryDictIOUtils.getChildrenAddressSize(flags);
- final ArrayList<WeightedString> shortcutTargets;
- if (0 != (flags & FormatSpec.FLAG_HAS_SHORTCUT_TARGETS)) {
- // readShortcut will add shortcuts to shortcutTargets.
- shortcutTargets = new ArrayList<WeightedString>();
- addressPointer += PtNodeReader.readShortcut(mDictBuffer, shortcutTargets);
- } else {
- shortcutTargets = null;
- }
-
- final ArrayList<PendingAttribute> bigrams;
- if (0 != (flags & FormatSpec.FLAG_HAS_BIGRAMS)) {
- bigrams = new ArrayList<PendingAttribute>();
- addressPointer += PtNodeReader.readBigramAddresses(mDictBuffer, bigrams,
- addressPointer);
- if (bigrams.size() >= FormatSpec.MAX_BIGRAMS_IN_A_PTNODE) {
- throw new RuntimeException("Too many bigrams in a PtNode (" + bigrams.size()
- + " but max is " + FormatSpec.MAX_BIGRAMS_IN_A_PTNODE + ")");
- }
- } else {
- bigrams = null;
- }
- return new PtNodeInfo(ptNodePos, addressPointer, flags, characters, probabilityInfo,
- childrenAddress, shortcutTargets, bigrams);
- }
-
- @Override
- public FusionDictionary readDictionaryBinary(final boolean deleteDictIfBroken)
- throws FileNotFoundException, IOException, UnsupportedFormatException {
- // dictType is not being used in dicttool. Passing an empty string.
- final BinaryDictionary binaryDictionary = new BinaryDictionary(
- mDictionaryBinaryFile.getAbsolutePath(), 0 /* offset */,
- mDictionaryBinaryFile.length() /* length */, true /* useFullEditDistance */,
- null /* locale */, "" /* dictType */, false /* isUpdatable */);
- final DictionaryHeader header = readHeader();
- final FusionDictionary fusionDict =
- new FusionDictionary(new FusionDictionary.PtNodeArray(), header.mDictionaryOptions);
- int token = 0;
- final ArrayList<WordProperty> wordProperties = CollectionUtils.newArrayList();
- do {
- final BinaryDictionary.GetNextWordPropertyResult result =
- binaryDictionary.getNextWordProperty(token);
- final WordProperty wordProperty = result.mWordProperty;
- if (wordProperty == null) {
- binaryDictionary.close();
- if (deleteDictIfBroken) {
- mDictionaryBinaryFile.delete();
- }
- return null;
- }
- wordProperties.add(wordProperty);
- token = result.mNextToken;
- } while (token != 0);
-
- // Insert unigrams into the fusion dictionary.
- for (final WordProperty wordProperty : wordProperties) {
- if (wordProperty.mIsBlacklistEntry) {
- fusionDict.addBlacklistEntry(wordProperty.mWord, wordProperty.mShortcutTargets,
- wordProperty.mIsNotAWord);
- } else {
- fusionDict.add(wordProperty.mWord, wordProperty.mProbabilityInfo,
- wordProperty.mShortcutTargets, wordProperty.mIsNotAWord);
- }
- }
- // Insert bigrams into the fusion dictionary.
- for (final WordProperty wordProperty : wordProperties) {
- if (wordProperty.mBigrams == null) {
- continue;
- }
- final String word0 = wordProperty.mWord;
- for (final WeightedString bigram : wordProperty.mBigrams) {
- fusionDict.setBigram(word0, bigram.mWord, bigram.mProbabilityInfo);
- }
- }
- binaryDictionary.close();
- return fusionDict;
- }
-
- @Override
- public void setPosition(int newPos) {
- mDictBuffer.position(newPos);
- }
-
- @Override
- public int getPosition() {
- return mDictBuffer.position();
- }
-
- @Override
- public int readPtNodeCount() {
- return BinaryDictDecoderUtils.readPtNodeCount(mDictBuffer);
- }
-}
diff --git a/java/src/com/android/inputmethod/latin/makedict/Ver2DictEncoder.java b/java/src/com/android/inputmethod/latin/makedict/Ver2DictEncoder.java
deleted file mode 100644
index a286190cb..000000000
--- a/java/src/com/android/inputmethod/latin/makedict/Ver2DictEncoder.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.makedict;
-
-import com.android.inputmethod.annotations.UsedForTesting;
-import com.android.inputmethod.latin.makedict.BinaryDictDecoderUtils.CharEncoding;
-import com.android.inputmethod.latin.makedict.FormatSpec.FormatOptions;
-import com.android.inputmethod.latin.makedict.FusionDictionary.PtNode;
-import com.android.inputmethod.latin.makedict.FusionDictionary.PtNodeArray;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-/**
- * An implementation of DictEncoder for version 2 binary dictionary.
- */
-@UsedForTesting
-public class Ver2DictEncoder implements DictEncoder {
-
- private final File mDictFile;
- private OutputStream mOutStream;
- private byte[] mBuffer;
- private int mPosition;
-
- @UsedForTesting
- public Ver2DictEncoder(final File dictFile) {
- mDictFile = dictFile;
- mOutStream = null;
- mBuffer = null;
- }
-
- // This constructor is used only by BinaryDictOffdeviceUtilsTests.
- // If you want to use this in the production code, you should consider keeping consistency of
- // the interface of Ver3DictDecoder by using factory.
- @UsedForTesting
- public Ver2DictEncoder(final OutputStream outStream) {
- mDictFile = null;
- mOutStream = outStream;
- }
-
- private void openStream() throws FileNotFoundException {
- mOutStream = new FileOutputStream(mDictFile);
- }
-
- private void close() throws IOException {
- if (mOutStream != null) {
- mOutStream.close();
- mOutStream = null;
- }
- }
-
- @Override
- public void writeDictionary(final FusionDictionary dict, final FormatOptions formatOptions)
- throws IOException, UnsupportedFormatException {
- if (formatOptions.mVersion > FormatSpec.VERSION2) {
- throw new UnsupportedFormatException(
- "The given format options has wrong version number : "
- + formatOptions.mVersion);
- }
-
- if (mOutStream == null) {
- openStream();
- }
- BinaryDictEncoderUtils.writeDictionaryHeader(mOutStream, dict, formatOptions);
-
- // Addresses are limited to 3 bytes, but since addresses can be relative to each node
- // array, the structure itself is not limited to 16MB. However, if it is over 16MB deciding
- // the order of the PtNode arrays becomes a quite complicated problem, because though the
- // dictionary itself does not have a size limit, each node array must still be within 16MB
- // of all its children and parents. As long as this is ensured, the dictionary file may
- // grow to any size.
-
- // Leave the choice of the optimal node order to the flattenTree function.
- MakedictLog.i("Flattening the tree...");
- ArrayList<PtNodeArray> flatNodes = BinaryDictEncoderUtils.flattenTree(dict.mRootNodeArray);
-
- MakedictLog.i("Computing addresses...");
- BinaryDictEncoderUtils.computeAddresses(dict, flatNodes);
- MakedictLog.i("Checking PtNode array...");
- if (MakedictLog.DBG) BinaryDictEncoderUtils.checkFlatPtNodeArrayList(flatNodes);
-
- // Create a buffer that matches the final dictionary size.
- final PtNodeArray lastNodeArray = flatNodes.get(flatNodes.size() - 1);
- final int bufferSize = lastNodeArray.mCachedAddressAfterUpdate + lastNodeArray.mCachedSize;
- mBuffer = new byte[bufferSize];
-
- MakedictLog.i("Writing file...");
-
- for (PtNodeArray nodeArray : flatNodes) {
- BinaryDictEncoderUtils.writePlacedPtNodeArray(dict, this, nodeArray);
- }
- if (MakedictLog.DBG) BinaryDictEncoderUtils.showStatistics(flatNodes);
- mOutStream.write(mBuffer, 0, mPosition);
-
- MakedictLog.i("Done");
- close();
- }
-
- @Override
- public void setPosition(final int position) {
- if (mBuffer == null || position < 0 || position >= mBuffer.length) return;
- mPosition = position;
- }
-
- @Override
- public int getPosition() {
- return mPosition;
- }
-
- @Override
- public void writePtNodeCount(final int ptNodeCount) {
- final int countSize = BinaryDictIOUtils.getPtNodeCountSize(ptNodeCount);
- if (countSize != 1 && countSize != 2) {
- throw new RuntimeException("Strange size from getGroupCountSize : " + countSize);
- }
- final int encodedPtNodeCount = (countSize == 2) ?
- (ptNodeCount | FormatSpec.LARGE_PTNODE_ARRAY_SIZE_FIELD_SIZE_FLAG) : ptNodeCount;
- mPosition = BinaryDictEncoderUtils.writeUIntToBuffer(mBuffer, mPosition, encodedPtNodeCount,
- countSize);
- }
-
- private void writePtNodeFlags(final PtNode ptNode) {
- final int childrenPos = BinaryDictEncoderUtils.getChildrenPosition(ptNode);
- mPosition = BinaryDictEncoderUtils.writeUIntToBuffer(mBuffer, mPosition,
- BinaryDictEncoderUtils.makePtNodeFlags(ptNode, childrenPos),
- FormatSpec.PTNODE_FLAGS_SIZE);
- }
-
- private void writeCharacters(final int[] codePoints, final boolean hasSeveralChars) {
- mPosition = CharEncoding.writeCharArray(codePoints, mBuffer, mPosition);
- if (hasSeveralChars) {
- mBuffer[mPosition++] = FormatSpec.PTNODE_CHARACTERS_TERMINATOR;
- }
- }
-
- private void writeFrequency(final int frequency) {
- if (frequency >= 0) {
- mPosition = BinaryDictEncoderUtils.writeUIntToBuffer(mBuffer, mPosition, frequency,
- FormatSpec.PTNODE_FREQUENCY_SIZE);
- }
- }
-
- private void writeChildrenPosition(final PtNode ptNode) {
- final int childrenPos = BinaryDictEncoderUtils.getChildrenPosition(ptNode);
- mPosition += BinaryDictEncoderUtils.writeChildrenPosition(mBuffer, mPosition,
- childrenPos);
- }
-
- /**
- * Write a shortcut attributes list to mBuffer.
- *
- * @param shortcuts the shortcut attributes list.
- */
- private void writeShortcuts(final ArrayList<WeightedString> shortcuts) {
- if (null == shortcuts || shortcuts.isEmpty()) return;
-
- final int indexOfShortcutByteSize = mPosition;
- mPosition += FormatSpec.PTNODE_SHORTCUT_LIST_SIZE_SIZE;
- final Iterator<WeightedString> shortcutIterator = shortcuts.iterator();
- while (shortcutIterator.hasNext()) {
- final WeightedString target = shortcutIterator.next();
- final int shortcutFlags = BinaryDictEncoderUtils.makeShortcutFlags(
- shortcutIterator.hasNext(),
- target.getProbability());
- mPosition = BinaryDictEncoderUtils.writeUIntToBuffer(mBuffer, mPosition, shortcutFlags,
- FormatSpec.PTNODE_ATTRIBUTE_FLAGS_SIZE);
- final int shortcutShift = CharEncoding.writeString(mBuffer, mPosition, target.mWord);
- mPosition += shortcutShift;
- }
- final int shortcutByteSize = mPosition - indexOfShortcutByteSize;
- if (shortcutByteSize > FormatSpec.MAX_SHORTCUT_LIST_SIZE_IN_A_PTNODE) {
- throw new RuntimeException("Shortcut list too large");
- }
- BinaryDictEncoderUtils.writeUIntToBuffer(mBuffer, indexOfShortcutByteSize, shortcutByteSize,
- FormatSpec.PTNODE_SHORTCUT_LIST_SIZE_SIZE);
- }
-
- /**
- * Write a bigram attributes list to mBuffer.
- *
- * @param bigrams the bigram attributes list.
- * @param dict the dictionary the node array is a part of (for relative offsets).
- */
- private void writeBigrams(final ArrayList<WeightedString> bigrams,
- final FusionDictionary dict) {
- if (bigrams == null) return;
-
- final Iterator<WeightedString> bigramIterator = bigrams.iterator();
- while (bigramIterator.hasNext()) {
- final WeightedString bigram = bigramIterator.next();
- final PtNode target =
- FusionDictionary.findWordInTree(dict.mRootNodeArray, bigram.mWord);
- final int addressOfBigram = target.mCachedAddressAfterUpdate;
- final int unigramFrequencyForThisWord = target.getProbability();
- final int offset = addressOfBigram
- - (mPosition + FormatSpec.PTNODE_ATTRIBUTE_FLAGS_SIZE);
- final int bigramFlags = BinaryDictEncoderUtils.makeBigramFlags(bigramIterator.hasNext(),
- offset, bigram.getProbability(), unigramFrequencyForThisWord, bigram.mWord);
- mPosition = BinaryDictEncoderUtils.writeUIntToBuffer(mBuffer, mPosition, bigramFlags,
- FormatSpec.PTNODE_ATTRIBUTE_FLAGS_SIZE);
- mPosition += BinaryDictEncoderUtils.writeChildrenPosition(mBuffer, mPosition,
- Math.abs(offset));
- }
- }
-
- @Override
- public void writeForwardLinkAddress(final int forwardLinkAddress) {
- mPosition = BinaryDictEncoderUtils.writeUIntToBuffer(mBuffer, mPosition, forwardLinkAddress,
- FormatSpec.FORWARD_LINK_ADDRESS_SIZE);
- }
-
- @Override
- public void writePtNode(final PtNode ptNode, final FusionDictionary dict) {
- writePtNodeFlags(ptNode);
- writeCharacters(ptNode.mChars, ptNode.hasSeveralChars());
- writeFrequency(ptNode.getProbability());
- writeChildrenPosition(ptNode);
- writeShortcuts(ptNode.mShortcutTargets);
- writeBigrams(ptNode.mBigrams, dict);
- }
-}
diff --git a/java/src/com/android/inputmethod/latin/makedict/Ver4DictDecoder.java b/java/src/com/android/inputmethod/latin/makedict/Ver4DictDecoder.java
deleted file mode 100644
index f3fad7e99..000000000
--- a/java/src/com/android/inputmethod/latin/makedict/Ver4DictDecoder.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.makedict;
-
-import com.android.inputmethod.annotations.UsedForTesting;
-import com.android.inputmethod.latin.BinaryDictionary;
-import com.android.inputmethod.latin.utils.CollectionUtils;
-import com.android.inputmethod.latin.utils.FileUtils;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-
-/**
- * An implementation of binary dictionary decoder for version 4 binary dictionary.
- */
-@UsedForTesting
-public class Ver4DictDecoder extends AbstractDictDecoder {
- private static final String TAG = Ver4DictDecoder.class.getSimpleName();
-
- final File mDictDirectory;
-
- @UsedForTesting
- /* package */ Ver4DictDecoder(final File dictDirectory, final int factoryFlag) {
- this(dictDirectory, null /* factory */);
- }
-
- @UsedForTesting
- /* package */ Ver4DictDecoder(final File dictDirectory, final DictionaryBufferFactory factory) {
- mDictDirectory = dictDirectory;
-
- }
-
- @Override
- public DictionaryHeader readHeader() throws IOException, UnsupportedFormatException {
- // dictType is not being used in dicttool. Passing an empty string.
- final BinaryDictionary binaryDictionary= new BinaryDictionary(
- mDictDirectory.getAbsolutePath(), 0 /* offset */, 0 /* length */,
- true /* useFullEditDistance */, null /* locale */,
- "" /* dictType */, true /* isUpdatable */);
- final DictionaryHeader header = binaryDictionary.getHeader();
- binaryDictionary.close();
- if (header == null) {
- throw new IOException("Cannot read the dictionary header.");
- }
- return header;
- }
-
- @Override
- public FusionDictionary readDictionaryBinary(final boolean deleteDictIfBroken)
- throws FileNotFoundException, IOException, UnsupportedFormatException {
- // dictType is not being used in dicttool. Passing an empty string.
- final BinaryDictionary binaryDictionary = new BinaryDictionary(
- mDictDirectory.getAbsolutePath(), 0 /* offset */, 0 /* length */,
- true /* useFullEditDistance */, null /* locale */,
- "" /* dictType */, true /* isUpdatable */);
- final DictionaryHeader header = readHeader();
- final FusionDictionary fusionDict =
- new FusionDictionary(new FusionDictionary.PtNodeArray(), header.mDictionaryOptions);
- int token = 0;
- final ArrayList<WordProperty> wordProperties = CollectionUtils.newArrayList();
- do {
- final BinaryDictionary.GetNextWordPropertyResult result =
- binaryDictionary.getNextWordProperty(token);
- final WordProperty wordProperty = result.mWordProperty;
- if (wordProperty == null) {
- binaryDictionary.close();
- if (deleteDictIfBroken) {
- FileUtils.deleteRecursively(mDictDirectory);
- }
- return null;
- }
- wordProperties.add(wordProperty);
- token = result.mNextToken;
- } while (token != 0);
-
- // Insert unigrams into the fusion dictionary.
- for (final WordProperty wordProperty : wordProperties) {
- if (wordProperty.mIsBlacklistEntry) {
- fusionDict.addBlacklistEntry(wordProperty.mWord, wordProperty.mShortcutTargets,
- wordProperty.mIsNotAWord);
- } else {
- fusionDict.add(wordProperty.mWord, wordProperty.mProbabilityInfo,
- wordProperty.mShortcutTargets, wordProperty.mIsNotAWord);
- }
- }
- // Insert bigrams into the fusion dictionary.
- for (final WordProperty wordProperty : wordProperties) {
- if (wordProperty.mBigrams == null) {
- continue;
- }
- final String word0 = wordProperty.mWord;
- for (final WeightedString bigram : wordProperty.mBigrams) {
- fusionDict.setBigram(word0, bigram.mWord, bigram.mProbabilityInfo);
- }
- }
- binaryDictionary.close();
- return fusionDict;
- }
-}
diff --git a/java/src/com/android/inputmethod/latin/makedict/Ver4DictEncoder.java b/java/src/com/android/inputmethod/latin/makedict/Ver4DictEncoder.java
deleted file mode 100644
index dab9a4315..000000000
--- a/java/src/com/android/inputmethod/latin/makedict/Ver4DictEncoder.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.makedict;
-
-import com.android.inputmethod.annotations.UsedForTesting;
-import com.android.inputmethod.latin.BinaryDictionary;
-import com.android.inputmethod.latin.Dictionary;
-import com.android.inputmethod.latin.makedict.FormatSpec.FormatOptions;
-import com.android.inputmethod.latin.makedict.FusionDictionary.PtNode;
-import com.android.inputmethod.latin.utils.BinaryDictionaryUtils;
-import com.android.inputmethod.latin.utils.LocaleUtils;
-
-import java.io.File;
-import java.io.IOException;
-
-/**
- * An implementation of DictEncoder for version 4 binary dictionary.
- */
-@UsedForTesting
-public class Ver4DictEncoder implements DictEncoder {
- private final File mDictPlacedDir;
-
- @UsedForTesting
- public Ver4DictEncoder(final File dictPlacedDir) {
- mDictPlacedDir = dictPlacedDir;
- }
-
- // TODO: This builds a FusionDictionary first and iterates it to add words to the binary
- // dictionary. However, it is possible to just add words directly to the binary dictionary
- // instead.
- // In the long run, when we stop supporting version 2, FusionDictionary will become deprecated
- // and we can remove it. Then we'll be able to just call BinaryDictionary directly.
- @Override
- public void writeDictionary(FusionDictionary dict, FormatOptions formatOptions)
- throws IOException, UnsupportedFormatException {
- if (formatOptions.mVersion != FormatSpec.VERSION4) {
- throw new UnsupportedFormatException("File header has a wrong version number : "
- + formatOptions.mVersion);
- }
- if (!mDictPlacedDir.isDirectory()) {
- throw new UnsupportedFormatException("Given path is not a directory.");
- }
- if (!BinaryDictionaryUtils.createEmptyDictFile(mDictPlacedDir.getAbsolutePath(),
- FormatSpec.VERSION4, LocaleUtils.constructLocaleFromString(
- dict.mOptions.mAttributes.get(DictionaryHeader.DICTIONARY_LOCALE_KEY)),
- dict.mOptions.mAttributes)) {
- throw new IOException("Cannot create dictionary file : "
- + mDictPlacedDir.getAbsolutePath());
- }
- final BinaryDictionary binaryDict = new BinaryDictionary(mDictPlacedDir.getAbsolutePath(),
- 0l, mDictPlacedDir.length(), true /* useFullEditDistance */,
- LocaleUtils.constructLocaleFromString(dict.mOptions.mAttributes.get(
- DictionaryHeader.DICTIONARY_LOCALE_KEY)),
- Dictionary.TYPE_USER /* Dictionary type. Does not matter for us */,
- true /* isUpdatable */);
- if (!binaryDict.isValidDictionary()) {
- // Somehow createEmptyDictFile returned true, but the file was not created correctly
- throw new IOException("Cannot create dictionary file");
- }
- for (final WordProperty wordProperty : dict) {
- // TODO: switch to addMultipleDictionaryEntries when they support shortcuts
- if (null == wordProperty.mShortcutTargets || wordProperty.mShortcutTargets.isEmpty()) {
- binaryDict.addUnigramWord(wordProperty.mWord, wordProperty.getProbability(),
- null /* shortcutTarget */, 0 /* shortcutProbability */,
- wordProperty.mIsNotAWord, wordProperty.mIsBlacklistEntry,
- 0 /* timestamp */);
- } else {
- for (final WeightedString shortcutTarget : wordProperty.mShortcutTargets) {
- binaryDict.addUnigramWord(wordProperty.mWord, wordProperty.getProbability(),
- shortcutTarget.mWord, shortcutTarget.getProbability(),
- wordProperty.mIsNotAWord, wordProperty.mIsBlacklistEntry,
- 0 /* timestamp */);
- }
- }
- if (binaryDict.needsToRunGC(true /* mindsBlockByGC */)) {
- binaryDict.flushWithGC();
- }
- }
- for (final WordProperty word0Property : dict) {
- if (null == word0Property.mBigrams) continue;
- for (final WeightedString word1 : word0Property.mBigrams) {
- binaryDict.addBigramWords(word0Property.mWord, word1.mWord, word1.getProbability(),
- 0 /* timestamp */);
- if (binaryDict.needsToRunGC(true /* mindsBlockByGC */)) {
- binaryDict.flushWithGC();
- }
- }
- }
- binaryDict.flushWithGC();
- binaryDict.close();
- }
-
- @Override
- public void setPosition(int position) {
- }
-
- @Override
- public int getPosition() {
- return 0;
- }
-
- @Override
- public void writePtNodeCount(int ptNodeCount) {
- }
-
- @Override
- public void writeForwardLinkAddress(int forwardLinkAddress) {
- }
-
- @Override
- public void writePtNode(PtNode ptNode, FusionDictionary dict) {
- }
-}
diff --git a/java/src/com/android/inputmethod/latin/utils/ByteArrayDictBuffer.java b/java/src/com/android/inputmethod/latin/utils/ByteArrayDictBuffer.java
deleted file mode 100644
index 2028298f2..000000000
--- a/java/src/com/android/inputmethod/latin/utils/ByteArrayDictBuffer.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.utils;
-
-import com.android.inputmethod.latin.makedict.BinaryDictDecoderUtils.DictBuffer;
-
-/**
- * This class provides an implementation for the FusionDictionary buffer interface that is backed
- * by a simpled byte array. It allows to create a binary dictionary in memory.
- */
-public final class ByteArrayDictBuffer implements DictBuffer {
- private byte[] mBuffer;
- private int mPosition;
-
- public ByteArrayDictBuffer(final byte[] buffer) {
- mBuffer = buffer;
- mPosition = 0;
- }
-
- @Override
- public int readUnsignedByte() {
- return mBuffer[mPosition++] & 0xFF;
- }
-
- @Override
- public int readUnsignedShort() {
- final int retval = readUnsignedByte();
- return (retval << 8) + readUnsignedByte();
- }
-
- @Override
- public int readUnsignedInt24() {
- final int retval = readUnsignedShort();
- return (retval << 8) + readUnsignedByte();
- }
-
- @Override
- public int readInt() {
- final int retval = readUnsignedShort();
- return (retval << 16) + readUnsignedShort();
- }
-
- @Override
- public int position() {
- return mPosition;
- }
-
- @Override
- public void position(int position) {
- mPosition = position;
- }
-
- @Override
- public void put(final byte b) {
- mBuffer[mPosition++] = b;
- }
-
- @Override
- public int limit() {
- return mBuffer.length - 1;
- }
-
- @Override
- public int capacity() {
- return mBuffer.length;
- }
-}
diff --git a/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java b/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java
index e531d4b09..315913e2f 100644
--- a/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java
@@ -23,12 +23,10 @@ import android.content.res.Resources;
import android.text.TextUtils;
import android.util.Log;
-import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.AssetFileAddress;
import com.android.inputmethod.latin.BinaryDictionaryGetter;
import com.android.inputmethod.latin.Constants;
import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.makedict.BinaryDictIOUtils;
import com.android.inputmethod.latin.makedict.DictionaryHeader;
import com.android.inputmethod.latin.makedict.UnsupportedFormatException;
import com.android.inputmethod.latin.settings.SpacingAndPunctuations;