aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--java/res/values-fr/donottranslate.xml6
-rw-r--r--java/res/values/donottranslate.xml2
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java4
-rw-r--r--java/src/com/android/inputmethod/latin/SettingsValues.java9
-rw-r--r--native/src/defines.h9
-rw-r--r--tests/src/com/android/inputmethod/latin/InputLogicTests.java4
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">"&#x0009;&#x0020;\'\n-/_"</string>
+ <string name="weak_space_stripping_symbols">"&#x0009;&#x0020;\'\n-/_"</string>
<!-- Symbols that should promote magic spaces into real space -->
- <string name="magic_space_promoting_symbols">;:!?([*&amp;@{&lt;&gt;+=|</string>
+ <string name="phantom_space_promoting_symbols">;:!?([*&amp;@{&lt;&gt;+=|</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">"&#x0009;&#x0020;\n/_\'-"</string>
<!-- Symbols that should convert weak spaces into real space -->
- <string name="weak_space_promoting_symbols">([*&amp;@{&lt;&gt;+=|</string>
+ <string name="phantom_space_promoting_symbols">([*&amp;@{&lt;&gt;+=|</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,