Loading java/src/com/android/inputmethod/keyboard/ProximityInfo.java +15 −17 Original line number Original line Diff line number Diff line Loading @@ -26,7 +26,7 @@ import com.android.inputmethod.latin.JniUtils; import java.util.Arrays; import java.util.Arrays; public final class ProximityInfo { public class ProximityInfo { private static final String TAG = ProximityInfo.class.getSimpleName(); private static final String TAG = ProximityInfo.class.getSimpleName(); private static final boolean DEBUG = false; private static final boolean DEBUG = false; Loading Loading @@ -79,22 +79,20 @@ public final class ProximityInfo { mNativeProximityInfo = createNativeProximityInfo(touchPositionCorrection); mNativeProximityInfo = createNativeProximityInfo(touchPositionCorrection); } } private static ProximityInfo createDummyProximityInfo() { /** return new ProximityInfo("", 1, 1, 1, 1, 1, 1, EMPTY_KEY_ARRAY, null); * Constructor for subclasses such as } * {@link com.android.inputmethod.latin.spellcheck.SpellCheckerProximityInfo}. */ public static ProximityInfo createSpellCheckerProximityInfo(final int[] proximityCharsArray, protected ProximityInfo(final int[] proximityCharsArray, final int gridWidth, final int rowSize, final int gridWidth, final int gridHeight) { final int gridHeight) { final ProximityInfo spellCheckerProximityInfo = createDummyProximityInfo(); this("", 1, 1, 1, 1, 1, 1, EMPTY_KEY_ARRAY, null); spellCheckerProximityInfo.mNativeProximityInfo = mNativeProximityInfo = setProximityInfoNative("" /* locale */, spellCheckerProximityInfo.setProximityInfoNative("" /* locale */, gridWidth /* displayWidth */, gridHeight /* displayHeight */, gridWidth /* displayWidth */, gridHeight /* displayHeight */, gridWidth, gridHeight, 1 /* mostCommonKeyWidth */, proximityCharsArray, gridWidth, gridHeight, 1 /* mostCommonKeyWidth */, proximityCharsArray, 0 /* keyCount */, null /*keyXCoordinates */, null /* keyYCoordinates */, 0 /* keyCount */, null /*keyXCoordinates */, null /* keyYCoordinates */, null /* keyWidths */, null /* keyHeights */, null /* keyCharCodes */, null /* keyWidths */, null /* keyHeights */, null /* keyCharCodes */, null /* sweetSpotCenterXs */, null /* sweetSpotCenterYs */, null /* sweetSpotCenterXs */, null /* sweetSpotCenterYs */, null /* sweetSpotRadii */); null /* sweetSpotRadii */); return spellCheckerProximityInfo; } } private long mNativeProximityInfo; private long mNativeProximityInfo; Loading java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java +1 −5 Original line number Original line Diff line number Diff line Loading @@ -403,11 +403,7 @@ public final class AndroidSpellCheckerService extends SpellCheckerService public DictAndProximity createDictAndProximity(final Locale locale) { public DictAndProximity createDictAndProximity(final Locale locale) { final int script = getScriptFromLocale(locale); final int script = getScriptFromLocale(locale); final ProximityInfo proximityInfo = ProximityInfo.createSpellCheckerProximityInfo( final ProximityInfo proximityInfo = new SpellCheckerProximityInfo(script); SpellCheckerProximityInfo.getProximityForScript(script), SpellCheckerProximityInfo.ROW_SIZE, SpellCheckerProximityInfo.PROXIMITY_GRID_WIDTH, SpellCheckerProximityInfo.PROXIMITY_GRID_HEIGHT); final DictionaryCollection dictionaryCollection = final DictionaryCollection dictionaryCollection = DictionaryFactory.createMainDictionaryFromManager(this, locale, DictionaryFactory.createMainDictionaryFromManager(this, locale, true /* useFullEditDistance */); true /* useFullEditDistance */); Loading java/src/com/android/inputmethod/latin/spellcheck/SpellCheckerProximityInfo.java +43 −34 Original line number Original line Diff line number Diff line Loading @@ -16,38 +16,41 @@ package com.android.inputmethod.latin.spellcheck; package com.android.inputmethod.latin.spellcheck; import com.android.inputmethod.annotations.UsedForTesting; import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.latin.CollectionUtils; import com.android.inputmethod.latin.CollectionUtils; import com.android.inputmethod.latin.Constants; import com.android.inputmethod.latin.Constants; import java.util.TreeMap; import java.util.TreeMap; public final class SpellCheckerProximityInfo { public final class SpellCheckerProximityInfo extends ProximityInfo { @UsedForTesting public SpellCheckerProximityInfo(final int script) { final public static int NUL = Constants.NOT_A_CODE; super(getProximityForScript(script), PROXIMITY_GRID_WIDTH, PROXIMITY_GRID_HEIGHT); } private static final int NUL = Constants.NOT_A_CODE; // This must be the same as MAX_PROXIMITY_CHARS_SIZE else it will not work inside // This must be the same as MAX_PROXIMITY_CHARS_SIZE else it will not work inside // native code - this value is passed at creation of the binary object and reused // native code - this value is passed at creation of the binary object and reused // as the size of the passed array afterwards so they can't be different. // as the size of the passed array afterwards so they can't be different. final public static int ROW_SIZE = ProximityInfo.MAX_PROXIMITY_CHARS_SIZE; private static final int ROW_SIZE = ProximityInfo.MAX_PROXIMITY_CHARS_SIZE; // The number of keys in a row of the grid used by the spell checker. // The number of keys in a row of the grid used by the spell checker. final public static int PROXIMITY_GRID_WIDTH = 11; private static final int PROXIMITY_GRID_WIDTH = 11; // The number of rows in the grid used by the spell checker. // The number of rows in the grid used by the spell checker. final public static int PROXIMITY_GRID_HEIGHT = 3; private static final int PROXIMITY_GRID_HEIGHT = 3; final private static int NOT_AN_INDEX = -1; private static final int NOT_AN_INDEX = -1; final public static int NOT_A_COORDINATE_PAIR = -1; public static final int NOT_A_COORDINATE_PAIR = -1; // Helper methods // Helper methods final protected static void buildProximityIndices(final int[] proximity, static void buildProximityIndices(final int[] proximity, final TreeMap<Integer, Integer> indices) { final TreeMap<Integer, Integer> indices) { for (int i = 0; i < proximity.length; i += ROW_SIZE) { for (int i = 0; i < proximity.length; i += ROW_SIZE) { if (NUL != proximity[i]) indices.put(proximity[i], i / ROW_SIZE); if (NUL != proximity[i]) indices.put(proximity[i], i / ROW_SIZE); } } } } final protected static int computeIndex(final int characterCode, static int computeIndex(final int characterCode, final TreeMap<Integer, Integer> indices) { final TreeMap<Integer, Integer> indices) { final Integer result = indices.get(characterCode); final Integer result = indices.get(characterCode); if (null == result) return NOT_AN_INDEX; if (null == result) return NOT_AN_INDEX; Loading @@ -61,7 +64,7 @@ public final class SpellCheckerProximityInfo { // character. // character. // Since we need to build such an array, we want to be able to search in our big proximity // Since we need to build such an array, we want to be able to search in our big proximity // data quickly by character, and a map is probably the best way to do this. // data quickly by character, and a map is probably the best way to do this. final private static TreeMap<Integer, Integer> INDICES = CollectionUtils.newTreeMap(); private static final TreeMap<Integer, Integer> INDICES = CollectionUtils.newTreeMap(); // The proximity here is the union of // The proximity here is the union of // - the proximity for a QWERTY keyboard. // - the proximity for a QWERTY keyboard. Loading @@ -79,7 +82,7 @@ public final class SpellCheckerProximityInfo { a s d f g h j k l a s d f g h j k l z x c v b n m z x c v b n m */ */ final static int[] PROXIMITY = { static final int[] PROXIMITY = { // Proximity for row 1. This must have exactly ROW_SIZE entries for each letter, // Proximity for row 1. This must have exactly ROW_SIZE entries for each letter, // and exactly PROXIMITY_GRID_WIDTH letters for a row. Pad with NUL's. // and exactly PROXIMITY_GRID_WIDTH letters for a row. Pad with NUL's. // The number of rows must be exactly PROXIMITY_GRID_HEIGHT. // The number of rows must be exactly PROXIMITY_GRID_HEIGHT. Loading Loading @@ -121,16 +124,18 @@ public final class SpellCheckerProximityInfo { NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, }; }; static { static { buildProximityIndices(PROXIMITY, INDICES); buildProximityIndices(PROXIMITY, INDICES); } } static int getIndexOf(int characterCode) { static int getIndexOf(int characterCode) { return computeIndex(characterCode, INDICES); return computeIndex(characterCode, INDICES); } } } } private static final class Cyrillic { private static final class Cyrillic { final private static TreeMap<Integer, Integer> INDICES = CollectionUtils.newTreeMap(); private static final TreeMap<Integer, Integer> INDICES = CollectionUtils.newTreeMap(); // TODO: The following table is solely based on the keyboard layout. Consult with Russian // TODO: The following table is solely based on the keyboard layout. Consult with Russian // speakers on commonly misspelled words/letters. // speakers on commonly misspelled words/letters. /* /* Loading Loading @@ -207,7 +212,7 @@ public final class SpellCheckerProximityInfo { private static final int CY_SOFT_SIGN = '\u044C'; // ь private static final int CY_SOFT_SIGN = '\u044C'; // ь private static final int CY_BE = '\u0431'; // б private static final int CY_BE = '\u0431'; // б private static final int CY_YU = '\u044E'; // ю private static final int CY_YU = '\u044E'; // ю final static int[] PROXIMITY = { static final int[] PROXIMITY = { // Proximity for row 1. This must have exactly ROW_SIZE entries for each letter, // Proximity for row 1. This must have exactly ROW_SIZE entries for each letter, // and exactly PROXIMITY_GRID_WIDTH letters for a row. Pad with NUL's. // and exactly PROXIMITY_GRID_WIDTH letters for a row. Pad with NUL's. // The number of rows must be exactly PROXIMITY_GRID_HEIGHT. // The number of rows must be exactly PROXIMITY_GRID_HEIGHT. Loading Loading @@ -280,16 +285,18 @@ public final class SpellCheckerProximityInfo { NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, }; }; static { static { buildProximityIndices(PROXIMITY, INDICES); buildProximityIndices(PROXIMITY, INDICES); } } static int getIndexOf(int characterCode) { static int getIndexOf(int characterCode) { return computeIndex(characterCode, INDICES); return computeIndex(characterCode, INDICES); } } } } private static final class Greek { private static final class Greek { final private static TreeMap<Integer, Integer> INDICES = CollectionUtils.newTreeMap(); private static final TreeMap<Integer, Integer> INDICES = CollectionUtils.newTreeMap(); // TODO: The following table is solely based on the keyboard layout. Consult with Greek // TODO: The following table is solely based on the keyboard layout. Consult with Greek // speakers on commonly misspelled words/letters. // speakers on commonly misspelled words/letters. /* /* Loading Loading @@ -354,7 +361,7 @@ public final class SpellCheckerProximityInfo { private static final int GR_BETA = '\u03B2'; // β private static final int GR_BETA = '\u03B2'; // β private static final int GR_NU = '\u03BD'; // ν private static final int GR_NU = '\u03BD'; // ν private static final int GR_MU = '\u03BC'; // μ private static final int GR_MU = '\u03BC'; // μ final static int[] PROXIMITY = { static final int[] PROXIMITY = { // Proximity for row 1. This must have exactly ROW_SIZE entries for each letter, // Proximity for row 1. This must have exactly ROW_SIZE entries for each letter, // and exactly PROXIMITY_GRID_WIDTH letters for a row. Pad with NUL's. // and exactly PROXIMITY_GRID_WIDTH letters for a row. Pad with NUL's. // The number of rows must be exactly PROXIMITY_GRID_HEIGHT. // The number of rows must be exactly PROXIMITY_GRID_HEIGHT. Loading Loading @@ -419,15 +426,17 @@ public final class SpellCheckerProximityInfo { NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, }; }; static { static { buildProximityIndices(PROXIMITY, INDICES); buildProximityIndices(PROXIMITY, INDICES); } } static int getIndexOf(int characterCode) { static int getIndexOf(int characterCode) { return computeIndex(characterCode, INDICES); return computeIndex(characterCode, INDICES); } } } } public static int[] getProximityForScript(final int script) { private static int[] getProximityForScript(final int script) { switch (script) { switch (script) { case AndroidSpellCheckerService.SCRIPT_LATIN: case AndroidSpellCheckerService.SCRIPT_LATIN: return Latin.PROXIMITY; return Latin.PROXIMITY; Loading Loading
java/src/com/android/inputmethod/keyboard/ProximityInfo.java +15 −17 Original line number Original line Diff line number Diff line Loading @@ -26,7 +26,7 @@ import com.android.inputmethod.latin.JniUtils; import java.util.Arrays; import java.util.Arrays; public final class ProximityInfo { public class ProximityInfo { private static final String TAG = ProximityInfo.class.getSimpleName(); private static final String TAG = ProximityInfo.class.getSimpleName(); private static final boolean DEBUG = false; private static final boolean DEBUG = false; Loading Loading @@ -79,22 +79,20 @@ public final class ProximityInfo { mNativeProximityInfo = createNativeProximityInfo(touchPositionCorrection); mNativeProximityInfo = createNativeProximityInfo(touchPositionCorrection); } } private static ProximityInfo createDummyProximityInfo() { /** return new ProximityInfo("", 1, 1, 1, 1, 1, 1, EMPTY_KEY_ARRAY, null); * Constructor for subclasses such as } * {@link com.android.inputmethod.latin.spellcheck.SpellCheckerProximityInfo}. */ public static ProximityInfo createSpellCheckerProximityInfo(final int[] proximityCharsArray, protected ProximityInfo(final int[] proximityCharsArray, final int gridWidth, final int rowSize, final int gridWidth, final int gridHeight) { final int gridHeight) { final ProximityInfo spellCheckerProximityInfo = createDummyProximityInfo(); this("", 1, 1, 1, 1, 1, 1, EMPTY_KEY_ARRAY, null); spellCheckerProximityInfo.mNativeProximityInfo = mNativeProximityInfo = setProximityInfoNative("" /* locale */, spellCheckerProximityInfo.setProximityInfoNative("" /* locale */, gridWidth /* displayWidth */, gridHeight /* displayHeight */, gridWidth /* displayWidth */, gridHeight /* displayHeight */, gridWidth, gridHeight, 1 /* mostCommonKeyWidth */, proximityCharsArray, gridWidth, gridHeight, 1 /* mostCommonKeyWidth */, proximityCharsArray, 0 /* keyCount */, null /*keyXCoordinates */, null /* keyYCoordinates */, 0 /* keyCount */, null /*keyXCoordinates */, null /* keyYCoordinates */, null /* keyWidths */, null /* keyHeights */, null /* keyCharCodes */, null /* keyWidths */, null /* keyHeights */, null /* keyCharCodes */, null /* sweetSpotCenterXs */, null /* sweetSpotCenterYs */, null /* sweetSpotCenterXs */, null /* sweetSpotCenterYs */, null /* sweetSpotRadii */); null /* sweetSpotRadii */); return spellCheckerProximityInfo; } } private long mNativeProximityInfo; private long mNativeProximityInfo; Loading
java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java +1 −5 Original line number Original line Diff line number Diff line Loading @@ -403,11 +403,7 @@ public final class AndroidSpellCheckerService extends SpellCheckerService public DictAndProximity createDictAndProximity(final Locale locale) { public DictAndProximity createDictAndProximity(final Locale locale) { final int script = getScriptFromLocale(locale); final int script = getScriptFromLocale(locale); final ProximityInfo proximityInfo = ProximityInfo.createSpellCheckerProximityInfo( final ProximityInfo proximityInfo = new SpellCheckerProximityInfo(script); SpellCheckerProximityInfo.getProximityForScript(script), SpellCheckerProximityInfo.ROW_SIZE, SpellCheckerProximityInfo.PROXIMITY_GRID_WIDTH, SpellCheckerProximityInfo.PROXIMITY_GRID_HEIGHT); final DictionaryCollection dictionaryCollection = final DictionaryCollection dictionaryCollection = DictionaryFactory.createMainDictionaryFromManager(this, locale, DictionaryFactory.createMainDictionaryFromManager(this, locale, true /* useFullEditDistance */); true /* useFullEditDistance */); Loading
java/src/com/android/inputmethod/latin/spellcheck/SpellCheckerProximityInfo.java +43 −34 Original line number Original line Diff line number Diff line Loading @@ -16,38 +16,41 @@ package com.android.inputmethod.latin.spellcheck; package com.android.inputmethod.latin.spellcheck; import com.android.inputmethod.annotations.UsedForTesting; import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.latin.CollectionUtils; import com.android.inputmethod.latin.CollectionUtils; import com.android.inputmethod.latin.Constants; import com.android.inputmethod.latin.Constants; import java.util.TreeMap; import java.util.TreeMap; public final class SpellCheckerProximityInfo { public final class SpellCheckerProximityInfo extends ProximityInfo { @UsedForTesting public SpellCheckerProximityInfo(final int script) { final public static int NUL = Constants.NOT_A_CODE; super(getProximityForScript(script), PROXIMITY_GRID_WIDTH, PROXIMITY_GRID_HEIGHT); } private static final int NUL = Constants.NOT_A_CODE; // This must be the same as MAX_PROXIMITY_CHARS_SIZE else it will not work inside // This must be the same as MAX_PROXIMITY_CHARS_SIZE else it will not work inside // native code - this value is passed at creation of the binary object and reused // native code - this value is passed at creation of the binary object and reused // as the size of the passed array afterwards so they can't be different. // as the size of the passed array afterwards so they can't be different. final public static int ROW_SIZE = ProximityInfo.MAX_PROXIMITY_CHARS_SIZE; private static final int ROW_SIZE = ProximityInfo.MAX_PROXIMITY_CHARS_SIZE; // The number of keys in a row of the grid used by the spell checker. // The number of keys in a row of the grid used by the spell checker. final public static int PROXIMITY_GRID_WIDTH = 11; private static final int PROXIMITY_GRID_WIDTH = 11; // The number of rows in the grid used by the spell checker. // The number of rows in the grid used by the spell checker. final public static int PROXIMITY_GRID_HEIGHT = 3; private static final int PROXIMITY_GRID_HEIGHT = 3; final private static int NOT_AN_INDEX = -1; private static final int NOT_AN_INDEX = -1; final public static int NOT_A_COORDINATE_PAIR = -1; public static final int NOT_A_COORDINATE_PAIR = -1; // Helper methods // Helper methods final protected static void buildProximityIndices(final int[] proximity, static void buildProximityIndices(final int[] proximity, final TreeMap<Integer, Integer> indices) { final TreeMap<Integer, Integer> indices) { for (int i = 0; i < proximity.length; i += ROW_SIZE) { for (int i = 0; i < proximity.length; i += ROW_SIZE) { if (NUL != proximity[i]) indices.put(proximity[i], i / ROW_SIZE); if (NUL != proximity[i]) indices.put(proximity[i], i / ROW_SIZE); } } } } final protected static int computeIndex(final int characterCode, static int computeIndex(final int characterCode, final TreeMap<Integer, Integer> indices) { final TreeMap<Integer, Integer> indices) { final Integer result = indices.get(characterCode); final Integer result = indices.get(characterCode); if (null == result) return NOT_AN_INDEX; if (null == result) return NOT_AN_INDEX; Loading @@ -61,7 +64,7 @@ public final class SpellCheckerProximityInfo { // character. // character. // Since we need to build such an array, we want to be able to search in our big proximity // Since we need to build such an array, we want to be able to search in our big proximity // data quickly by character, and a map is probably the best way to do this. // data quickly by character, and a map is probably the best way to do this. final private static TreeMap<Integer, Integer> INDICES = CollectionUtils.newTreeMap(); private static final TreeMap<Integer, Integer> INDICES = CollectionUtils.newTreeMap(); // The proximity here is the union of // The proximity here is the union of // - the proximity for a QWERTY keyboard. // - the proximity for a QWERTY keyboard. Loading @@ -79,7 +82,7 @@ public final class SpellCheckerProximityInfo { a s d f g h j k l a s d f g h j k l z x c v b n m z x c v b n m */ */ final static int[] PROXIMITY = { static final int[] PROXIMITY = { // Proximity for row 1. This must have exactly ROW_SIZE entries for each letter, // Proximity for row 1. This must have exactly ROW_SIZE entries for each letter, // and exactly PROXIMITY_GRID_WIDTH letters for a row. Pad with NUL's. // and exactly PROXIMITY_GRID_WIDTH letters for a row. Pad with NUL's. // The number of rows must be exactly PROXIMITY_GRID_HEIGHT. // The number of rows must be exactly PROXIMITY_GRID_HEIGHT. Loading Loading @@ -121,16 +124,18 @@ public final class SpellCheckerProximityInfo { NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, }; }; static { static { buildProximityIndices(PROXIMITY, INDICES); buildProximityIndices(PROXIMITY, INDICES); } } static int getIndexOf(int characterCode) { static int getIndexOf(int characterCode) { return computeIndex(characterCode, INDICES); return computeIndex(characterCode, INDICES); } } } } private static final class Cyrillic { private static final class Cyrillic { final private static TreeMap<Integer, Integer> INDICES = CollectionUtils.newTreeMap(); private static final TreeMap<Integer, Integer> INDICES = CollectionUtils.newTreeMap(); // TODO: The following table is solely based on the keyboard layout. Consult with Russian // TODO: The following table is solely based on the keyboard layout. Consult with Russian // speakers on commonly misspelled words/letters. // speakers on commonly misspelled words/letters. /* /* Loading Loading @@ -207,7 +212,7 @@ public final class SpellCheckerProximityInfo { private static final int CY_SOFT_SIGN = '\u044C'; // ь private static final int CY_SOFT_SIGN = '\u044C'; // ь private static final int CY_BE = '\u0431'; // б private static final int CY_BE = '\u0431'; // б private static final int CY_YU = '\u044E'; // ю private static final int CY_YU = '\u044E'; // ю final static int[] PROXIMITY = { static final int[] PROXIMITY = { // Proximity for row 1. This must have exactly ROW_SIZE entries for each letter, // Proximity for row 1. This must have exactly ROW_SIZE entries for each letter, // and exactly PROXIMITY_GRID_WIDTH letters for a row. Pad with NUL's. // and exactly PROXIMITY_GRID_WIDTH letters for a row. Pad with NUL's. // The number of rows must be exactly PROXIMITY_GRID_HEIGHT. // The number of rows must be exactly PROXIMITY_GRID_HEIGHT. Loading Loading @@ -280,16 +285,18 @@ public final class SpellCheckerProximityInfo { NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, }; }; static { static { buildProximityIndices(PROXIMITY, INDICES); buildProximityIndices(PROXIMITY, INDICES); } } static int getIndexOf(int characterCode) { static int getIndexOf(int characterCode) { return computeIndex(characterCode, INDICES); return computeIndex(characterCode, INDICES); } } } } private static final class Greek { private static final class Greek { final private static TreeMap<Integer, Integer> INDICES = CollectionUtils.newTreeMap(); private static final TreeMap<Integer, Integer> INDICES = CollectionUtils.newTreeMap(); // TODO: The following table is solely based on the keyboard layout. Consult with Greek // TODO: The following table is solely based on the keyboard layout. Consult with Greek // speakers on commonly misspelled words/letters. // speakers on commonly misspelled words/letters. /* /* Loading Loading @@ -354,7 +361,7 @@ public final class SpellCheckerProximityInfo { private static final int GR_BETA = '\u03B2'; // β private static final int GR_BETA = '\u03B2'; // β private static final int GR_NU = '\u03BD'; // ν private static final int GR_NU = '\u03BD'; // ν private static final int GR_MU = '\u03BC'; // μ private static final int GR_MU = '\u03BC'; // μ final static int[] PROXIMITY = { static final int[] PROXIMITY = { // Proximity for row 1. This must have exactly ROW_SIZE entries for each letter, // Proximity for row 1. This must have exactly ROW_SIZE entries for each letter, // and exactly PROXIMITY_GRID_WIDTH letters for a row. Pad with NUL's. // and exactly PROXIMITY_GRID_WIDTH letters for a row. Pad with NUL's. // The number of rows must be exactly PROXIMITY_GRID_HEIGHT. // The number of rows must be exactly PROXIMITY_GRID_HEIGHT. Loading Loading @@ -419,15 +426,17 @@ public final class SpellCheckerProximityInfo { NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, NUL, }; }; static { static { buildProximityIndices(PROXIMITY, INDICES); buildProximityIndices(PROXIMITY, INDICES); } } static int getIndexOf(int characterCode) { static int getIndexOf(int characterCode) { return computeIndex(characterCode, INDICES); return computeIndex(characterCode, INDICES); } } } } public static int[] getProximityForScript(final int script) { private static int[] getProximityForScript(final int script) { switch (script) { switch (script) { case AndroidSpellCheckerService.SCRIPT_LATIN: case AndroidSpellCheckerService.SCRIPT_LATIN: return Latin.PROXIMITY; return Latin.PROXIMITY; Loading