aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin/utils/CapsModeUtils.java
diff options
context:
space:
mode:
authorJean Chalard <jchalard@google.com>2014-09-05 16:49:32 +0900
committerJean Chalard <jchalard@google.com>2014-09-08 15:33:51 +0900
commitb526a894db0f475596abbed56c4b311b5e4904dc (patch)
tree233ddc5005efa83ec0ac907e1747189bcfe5b270 /java/src/com/android/inputmethod/latin/utils/CapsModeUtils.java
parent3f779718cc4793e30f2765d532e1d384577b405e (diff)
downloadlatinime-b526a894db0f475596abbed56c4b311b5e4904dc.tar.gz
latinime-b526a894db0f475596abbed56c4b311b5e4904dc.tar.xz
latinime-b526a894db0f475596abbed56c4b311b5e4904dc.zip
Fix a bug with the Greek question mark.
Bug: 17398284 Change-Id: If49593e2c959935a183a4cd9d988407cc1160599
Diffstat (limited to 'java/src/com/android/inputmethod/latin/utils/CapsModeUtils.java')
-rw-r--r--java/src/com/android/inputmethod/latin/utils/CapsModeUtils.java17
1 files changed, 13 insertions, 4 deletions
diff --git a/java/src/com/android/inputmethod/latin/utils/CapsModeUtils.java b/java/src/com/android/inputmethod/latin/utils/CapsModeUtils.java
index 92bd02c54..02f1c5f00 100644
--- a/java/src/com/android/inputmethod/latin/utils/CapsModeUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/CapsModeUtils.java
@@ -213,13 +213,22 @@ public final class CapsModeUtils {
char c = cs.charAt(--j);
// We found the next interesting chunk of text ; next we need to determine if it's the
- // end of a sentence. If we have a question mark or an exclamation mark, it's the end of
- // a sentence. If it's neither, the only remaining case is the period so we get the opposite
- // case out of the way.
- if (c == Constants.CODE_QUESTION_MARK || c == Constants.CODE_EXCLAMATION_MARK) {
+ // end of a sentence. If we have a sentence terminator (typically a question mark or an
+ // exclamation mark), then it's the end of a sentence; however, we treat the abbreviation
+ // marker specially because usually is the same char as the sentence separator (the
+ // period in most languages) and in this case we need to apply a heuristic to determine
+ // in which of these senses it's used.
+ if (spacingAndPunctuations.isSentenceTerminator(c)
+ && !spacingAndPunctuations.isAbbreviationMarker(c)) {
return (TextUtils.CAP_MODE_CHARACTERS | TextUtils.CAP_MODE_WORDS
| TextUtils.CAP_MODE_SENTENCES) & reqModes;
}
+ // If we reach here, we know we have whitespace before the cursor and before that there
+ // is something that either does not terminate the sentence, or a symbol preceded by the
+ // start of the text, or it's the sentence separator AND it happens to be the same code
+ // point as the abbreviation marker.
+ // If it's a symbol or something that does not terminate the sentence, then we need to
+ // return caps for MODE_CHARACTERS and MODE_WORDS, but not for MODE_SENTENCES.
if (!spacingAndPunctuations.isSentenceSeparator(c) || j <= 0) {
return (TextUtils.CAP_MODE_CHARACTERS | TextUtils.CAP_MODE_WORDS) & reqModes;
}