diff options
-rw-r--r-- | java/res/values-fr/donottranslate.xml | 6 | ||||
-rw-r--r-- | java/res/values/donottranslate.xml | 2 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/latin/LatinIME.java | 4 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/latin/SettingsValues.java | 9 | ||||
-rw-r--r-- | native/src/defines.h | 9 | ||||
-rw-r--r-- | tests/src/com/android/inputmethod/latin/InputLogicTests.java | 4 |
6 files changed, 24 insertions, 10 deletions
diff --git a/java/res/values-fr/donottranslate.xml b/java/res/values-fr/donottranslate.xml index 28140ab6a..8cf2516a6 100644 --- a/java/res/values-fr/donottranslate.xml +++ b/java/res/values-fr/donottranslate.xml @@ -19,11 +19,11 @@ --> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <!-- Symbols that should be swapped with a magic space --> - <string name="magic_space_swapping_symbols">.,\")]}</string> + <string name="weak_space_swapping_symbols">.,\")]}</string> <!-- Symbols that should strip a magic space --> - <string name="magic_space_stripping_symbols">"	 \'\n-/_"</string> + <string name="weak_space_stripping_symbols">"	 \'\n-/_"</string> <!-- Symbols that should promote magic spaces into real space --> - <string name="magic_space_promoting_symbols">;:!?([*&@{<>+=|</string> + <string name="phantom_space_promoting_symbols">;:!?([*&@{<>+=|</string> <!-- Symbols that do NOT separate words --> <string name="symbols_excluded_from_word_separators">\'</string> </resources> diff --git a/java/res/values/donottranslate.xml b/java/res/values/donottranslate.xml index d6a15deb0..74c68464c 100644 --- a/java/res/values/donottranslate.xml +++ b/java/res/values/donottranslate.xml @@ -25,7 +25,7 @@ <!-- Symbols that should strip a weak space --> <string name="weak_space_stripping_symbols">"	 \n/_\'-"</string> <!-- Symbols that should convert weak spaces into real space --> - <string name="weak_space_promoting_symbols">([*&@{<>+=|</string> + <string name="phantom_space_promoting_symbols">([*&@{<>+=|</string> <!-- Symbols that do NOT separate words --> <string name="symbols_excluded_from_word_separators">\'-</string> <!-- Word separator list is the union of all symbols except those that are not separators: diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 044f05014..2bcd947f1 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -1612,6 +1612,10 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar final boolean swapWeakSpace = maybeStripSpaceWhileInBatchEdit(ic, primaryCode, spaceState, KeyboardActionListener.SUGGESTION_STRIP_COORDINATE == x); + if (SPACE_STATE_PHANTOM == spaceState && + mSettingsValues.isPhantomSpacePromotingSymbol(primaryCode)) { + sendKeyCodePoint(Keyboard.CODE_SPACE); + } sendKeyCodePoint(primaryCode); if (Keyboard.CODE_SPACE == primaryCode) { diff --git a/java/src/com/android/inputmethod/latin/SettingsValues.java b/java/src/com/android/inputmethod/latin/SettingsValues.java index d123b608f..6d65a74c8 100644 --- a/java/src/com/android/inputmethod/latin/SettingsValues.java +++ b/java/src/com/android/inputmethod/latin/SettingsValues.java @@ -37,6 +37,7 @@ public class SettingsValues { public final int mDelayUpdateOldSuggestions; public final String mWeakSpaceStrippers; public final String mWeakSpaceSwappers; + private final String mPhantomSpacePromotingSymbols; private final String mSuggestPuncs; public final SuggestedWords mSuggestPuncList; public final SuggestedWords mSuggestPuncOutputTextList; @@ -91,6 +92,7 @@ public class SettingsValues { mDelayUpdateOldSuggestions = res.getInteger(R.integer.config_delay_update_old_suggestions); mWeakSpaceStrippers = res.getString(R.string.weak_space_stripping_symbols); mWeakSpaceSwappers = res.getString(R.string.weak_space_swapping_symbols); + mPhantomSpacePromotingSymbols = res.getString(R.string.phantom_space_promoting_symbols); if (LatinImeLogger.sDBG) { final int length = mWeakSpaceStrippers.length(); for (int i = 0; i < length; i = mWeakSpaceStrippers.offsetByCodePoints(i, 1)) { @@ -192,7 +194,7 @@ public class SettingsValues { final String weakSpaceSwappers, final String symbolsExcludedFromWordSeparators, final Resources res) { String wordSeparators = weakSpaceStrippers + weakSpaceSwappers - + res.getString(R.string.weak_space_promoting_symbols); + + res.getString(R.string.phantom_space_promoting_symbols); for (int i = symbolsExcludedFromWordSeparators.length() - 1; i >= 0; --i) { wordSeparators = wordSeparators.replace( symbolsExcludedFromWordSeparators.substring(i, i + 1), ""); @@ -225,6 +227,11 @@ public class SettingsValues { return mWeakSpaceSwappers.contains(String.valueOf((char)code)); } + public boolean isPhantomSpacePromotingSymbol(int code) { + // TODO: this does not work if the code does not fit in a char + return mPhantomSpacePromotingSymbols.contains(String.valueOf((char)code)); + } + private static boolean isAutoCorrectEnabled(final Resources resources, final String currentAutoCorrectionSetting) { final String autoCorrectionOff = resources.getString( diff --git a/native/src/defines.h b/native/src/defines.h index ffadb11c5..f402efa8d 100644 --- a/native/src/defines.h +++ b/native/src/defines.h @@ -25,9 +25,9 @@ #define DUMP_WORD(word, length) do { dumpWord(word, length); } while(0) -static char charBuf[50]; +static inline void dumpWord(const unsigned short* word, const int length) { + static char charBuf[50]; -static void dumpWord(const unsigned short* word, const int length) { for (int i = 0; i < length; ++i) { charBuf[i] = word[i]; } @@ -43,7 +43,6 @@ static void dumpWord(const unsigned short* word, const int length) { #ifdef FLAG_DO_PROFILE // Profiler -#include <cutils/log.h> #include <time.h> #define PROF_BUF_SIZE 100 @@ -62,7 +61,7 @@ static unsigned int profile_counter[PROF_BUF_SIZE]; AKLOGI("%s : clock is %f", __FUNCTION__, (clock() - profile_old[prof_buf_id])) #define PROF_OUTALL do { AKLOGI("--- %s ---", __FUNCTION__); prof_out(); } while(0) -static void prof_reset(void) { +static inline void prof_reset(void) { for (int i = 0; i < PROF_BUF_SIZE; ++i) { profile_buf[i] = 0; profile_old[i] = 0; @@ -70,7 +69,7 @@ static void prof_reset(void) { } } -static void prof_out(void) { +static inline void prof_out(void) { if (profile_counter[PROF_BUF_SIZE - 1] != 1) { AKLOGI("Error: You must call PROF_OPEN before PROF_CLOSE."); } diff --git a/tests/src/com/android/inputmethod/latin/InputLogicTests.java b/tests/src/com/android/inputmethod/latin/InputLogicTests.java index 1ea70a98f..e3911f22f 100644 --- a/tests/src/com/android/inputmethod/latin/InputLogicTests.java +++ b/tests/src/com/android/inputmethod/latin/InputLogicTests.java @@ -365,6 +365,10 @@ public class InputLogicTests extends ServiceTestCase<LatinIME> { final String PUNCTUATION_FROM_STRIP = "!"; final String EXPECTED_RESULT = "this!! "; type(WORD_TO_TYPE); + sleep(DELAY_TO_WAIT_FOR_UNDERLINE); + runMessages(); + assertTrue("type word then type space should display punctuation strip", + mLatinIME.isShowingPunctuationList()); mLatinIME.pickSuggestionManually(0, PUNCTUATION_FROM_STRIP); mLatinIME.pickSuggestionManually(0, PUNCTUATION_FROM_STRIP); assertEquals("type word then type space then punctuation from strip twice", EXPECTED_RESULT, |