summaryrefslogtreecommitdiffstats
path: root/luni/src/main
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2014-04-04 16:14:21 -0700
committerElliott Hughes <enh@google.com>2014-04-04 16:14:21 -0700
commita2f8e8a253a93c8df8b0e6f458f4c573d48b9ed9 (patch)
tree1fc4950acb9bd939e4f81cd2cb0c1aed5524218d /luni/src/main
parentdf945d726e02034dafdcf7469f71865b86dc3e9d (diff)
downloadlibcore-a2f8e8a253a93c8df8b0e6f458f4c573d48b9ed9.zip
libcore-a2f8e8a253a93c8df8b0e6f458f4c573d48b9ed9.tar.gz
libcore-a2f8e8a253a93c8df8b0e6f458f4c573d48b9ed9.tar.bz2
Fix Greek uppercasing.
This matches Chrome's behavior. Bug: 13246961 Change-Id: I1954da3116a1759cb650bffed558dced5770e3ec
Diffstat (limited to 'luni/src/main')
-rw-r--r--luni/src/main/java/java/lang/CaseMapper.java11
1 files changed, 11 insertions, 0 deletions
diff --git a/luni/src/main/java/java/lang/CaseMapper.java b/luni/src/main/java/java/lang/CaseMapper.java
index 5ec41f5..4e411d1 100644
--- a/luni/src/main/java/java/lang/CaseMapper.java
+++ b/luni/src/main/java/java/lang/CaseMapper.java
@@ -18,6 +18,7 @@ package java.lang;
import java.util.Locale;
import libcore.icu.ICU;
+import libcore.icu.Transliterator;
/**
* Performs case operations as described by http://unicode.org/reports/tr21/tr21-5.html.
@@ -45,6 +46,7 @@ class CaseMapper {
*/
public static String toLowerCase(Locale locale, String s, char[] value, int offset, int count) {
// Punt hard cases to ICU4C.
+ // Note that Greek isn't a particularly hard case for toLowerCase, only toUpperCase.
String languageCode = locale.getLanguage();
if (languageCode.equals("tr") || languageCode.equals("az") || languageCode.equals("lt")) {
return ICU.toLowerCase(s, locale.toString());
@@ -139,11 +141,20 @@ class CaseMapper {
return index;
}
+ private static final ThreadLocal<Transliterator> EL_UPPER = new ThreadLocal<Transliterator>() {
+ @Override protected Transliterator initialValue() {
+ return new Transliterator("el-Upper");
+ }
+ };
+
public static String toUpperCase(Locale locale, String s, char[] value, int offset, int count) {
String languageCode = locale.getLanguage();
if (languageCode.equals("tr") || languageCode.equals("az") || languageCode.equals("lt")) {
return ICU.toUpperCase(s, locale.toString());
}
+ if (languageCode.equals("el")) {
+ return EL_UPPER.get().transliterate(s);
+ }
char[] output = null;
int i = 0;