diff options
author | 2013-04-17 19:41:08 -0700 | |
---|---|---|
committer | 2013-04-17 19:41:08 -0700 | |
commit | 27dede24a63631cc0d2af7cf11b93f17096dcea8 (patch) | |
tree | 68ad9bad2eead5c351caa065a263bebeadd06b51 /java/src | |
parent | 3be1c7485bce37706b12a058e1cc2fc474eff089 (diff) | |
parent | 2e4352c53b48366c40d43b32e8acdc28acac2e6f (diff) | |
download | latinime-27dede24a63631cc0d2af7cf11b93f17096dcea8.tar.gz latinime-27dede24a63631cc0d2af7cf11b93f17096dcea8.tar.xz latinime-27dede24a63631cc0d2af7cf11b93f17096dcea8.zip |
am 2e4352c5: am b5d5190d: Merge "Add some utility functions."
* commit '2e4352c53b48366c40d43b32e8acdc28acac2e6f':
Add some utility functions.
Diffstat (limited to 'java/src')
-rw-r--r-- | java/src/com/android/inputmethod/latin/StringUtils.java | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/java/src/com/android/inputmethod/latin/StringUtils.java b/java/src/com/android/inputmethod/latin/StringUtils.java index 11ef60dc9..3ca209d34 100644 --- a/java/src/com/android/inputmethod/latin/StringUtils.java +++ b/java/src/com/android/inputmethod/latin/StringUtils.java @@ -222,4 +222,75 @@ public final class StringUtils { if (1 == capsCount) return CAPITALIZE_FIRST; return (letterCount == capsCount ? CAPITALIZE_ALL : CAPITALIZE_NONE); } + + public static boolean isIdenticalAfterUpcase(final String text) { + final int len = text.length(); + for (int i = 0; i < len; i = text.offsetByCodePoints(i, 1)) { + final int codePoint = text.codePointAt(i); + if (Character.isLetter(codePoint) && !Character.isUpperCase(codePoint)) { + return false; + } + } + return true; + } + + public static boolean isIdenticalAfterDowncase(final String text) { + final int len = text.length(); + for (int i = 0; i < len; i = text.offsetByCodePoints(i, 1)) { + final int codePoint = text.codePointAt(i); + if (Character.isLetter(codePoint) && !Character.isLowerCase(codePoint)) { + return false; + } + } + return true; + } + + public static boolean isIdenticalAfterCapitalizeEachWord(final String text, + final String separators) { + boolean needCapsNext = true; + final int len = text.length(); + for (int i = 0; i < len; i = text.offsetByCodePoints(i, 1)) { + final int codePoint = text.codePointAt(i); + if (Character.isLetter(codePoint)) { + if ((needCapsNext && !Character.isUpperCase(codePoint)) + || (!needCapsNext && !Character.isLowerCase(codePoint))) { + return false; + } + } + // We need a capital letter next if this is a separator. + needCapsNext = (-1 != separators.indexOf(codePoint)); + } + return true; + } + + // TODO: like capitalizeFirst*, this does not work perfectly for Dutch because of the IJ digraph + // which should be capitalized together in *some* cases. + public static String capitalizeEachWord(final String text, final String separators, + final Locale locale) { + final StringBuilder builder = new StringBuilder(); + boolean needCapsNext = true; + final int len = text.length(); + for (int i = 0; i < len; i = text.offsetByCodePoints(i, 1)) { + final String nextChar = text.substring(i, text.offsetByCodePoints(i, 1)); + if (needCapsNext) { + builder.append(nextChar.toUpperCase(locale)); + } else { + builder.append(nextChar.toLowerCase(locale)); + } + // We need a capital letter next if this is a separator. + needCapsNext = (-1 != separators.indexOf(nextChar.codePointAt(0))); + } + return builder.toString(); + } + + public static boolean containsAny(final String string, final String separators) { + final int len = separators.length(); + for (int i = 0; i < len; i = separators.offsetByCodePoints(i, 1)) { + final int separator = separators.codePointAt(i); + if (-1 != string.indexOf(separator)) { + return true; + } + } + return false; + } } |