Always consider a new line the start of a sentence
Bug: 7282523 Change-Id: I10a73e99efdfe6acb9a16819694b98c6714fd451main
parent
01d9b1f17a
commit
2699b45dbc
|
@ -250,15 +250,19 @@ public final class StringUtils {
|
||||||
|
|
||||||
// Step 3 : Search for the start of a paragraph. From the starting point computed in step 2,
|
// Step 3 : Search for the start of a paragraph. From the starting point computed in step 2,
|
||||||
// we go back over any space or tab char sitting there. We find the start of a paragraph
|
// we go back over any space or tab char sitting there. We find the start of a paragraph
|
||||||
// if the first char that's not a space or tab is a start of line (as in, either \n or
|
// if the first char that's not a space or tab is a start of line (as in \n, start of text,
|
||||||
// start of text).
|
// or some other similar characters).
|
||||||
int j = i;
|
int j = i;
|
||||||
|
char prevChar = Keyboard.CODE_SPACE;
|
||||||
if (hasSpaceBefore) --j;
|
if (hasSpaceBefore) --j;
|
||||||
while (j > 0 && Character.isWhitespace(cs.charAt(j - 1))) {
|
while (j > 0) {
|
||||||
|
prevChar = cs.charAt(j - 1);
|
||||||
|
if (!Character.isSpaceChar(prevChar) && prevChar != Keyboard.CODE_TAB) break;
|
||||||
j--;
|
j--;
|
||||||
}
|
}
|
||||||
if (j == 0) {
|
if (j <= 0 || Character.isWhitespace(prevChar)) {
|
||||||
// There is only whitespace between the start of the text and the cursor. Both
|
// There are only spacing chars between the start of the paragraph and the cursor,
|
||||||
|
// defined as a isWhitespace() char that is neither a isSpaceChar() nor a tab. Both
|
||||||
// MODE_WORDS and MODE_SENTENCES should be active.
|
// MODE_WORDS and MODE_SENTENCES should be active.
|
||||||
return (TextUtils.CAP_MODE_CHARACTERS | TextUtils.CAP_MODE_WORDS
|
return (TextUtils.CAP_MODE_CHARACTERS | TextUtils.CAP_MODE_WORDS
|
||||||
| TextUtils.CAP_MODE_SENTENCES) & reqModes;
|
| TextUtils.CAP_MODE_SENTENCES) & reqModes;
|
||||||
|
|
|
@ -140,6 +140,14 @@ public class StringUtilsTests extends AndroidTestCase {
|
||||||
allPathsForCaps("Word", c | w, l, true);
|
allPathsForCaps("Word", c | w, l, true);
|
||||||
allPathsForCaps("Word.", c | w | s, l, true);
|
allPathsForCaps("Word.", c | w | s, l, true);
|
||||||
|
|
||||||
|
// Tests after some whitespace
|
||||||
|
allPathsForCaps("Word\n", c | w | s, l, false);
|
||||||
|
allPathsForCaps("Word\n", c | w | s, l, true);
|
||||||
|
allPathsForCaps("Word\n ", c | w | s, l, true);
|
||||||
|
allPathsForCaps("Word.\n", c | w | s, l, false);
|
||||||
|
allPathsForCaps("Word.\n", c | w | s, l, true);
|
||||||
|
allPathsForCaps("Word.\n ", c | w | s, l, true);
|
||||||
|
|
||||||
l = Locale.FRENCH;
|
l = Locale.FRENCH;
|
||||||
allPathsForCaps("\"Word.\" ", c | w, l, false);
|
allPathsForCaps("\"Word.\" ", c | w, l, false);
|
||||||
allPathsForCaps("\"Word\". ", c | w | s, l, false);
|
allPathsForCaps("\"Word\". ", c | w | s, l, false);
|
||||||
|
|
Loading…
Reference in New Issue