am bf6c8bd8: am 3f7fe829: Merge "Always consider a new line the start of a sentence" into jb-mr1-dev

* commit 'bf6c8bd84c273ad04371d0fa8a1a0aac0da91798':
  Always consider a new line the start of a sentence
main
Jean Chalard 2012-10-04 05:59:04 -07:00 committed by Android Git Automerger
commit d173ed18e4
2 changed files with 17 additions and 5 deletions

View File

@ -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;

View File

@ -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);