Skip to content

Commit 2f5f97a

Browse files
committed
Improve Character emulation
1 parent 15609b6 commit 2f5f97a

File tree

7 files changed

+390
-209
lines changed

7 files changed

+390
-209
lines changed

user/super/com/google/gwt/emul/java/lang/CaseMapper.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,23 @@ public static char charToLowerCase(char c) {
2323
}
2424

2525
public static char charToUpperCase(char c) {
26-
return String.valueOf(c).toUpperCase().charAt(0);
26+
String upper = String.valueOf(c).toUpperCase();
27+
return hasExtraCodePoints(upper) ? c : upper.charAt(0);
28+
}
29+
30+
public static int intToLowerCase(int codePoint) {
31+
return String.NativeString.fromCodePoint(codePoint).toLowerCase().codePointAt(0);
32+
}
33+
34+
public static int intToUpperCase(int codePoint) {
35+
String upper = String.NativeString.fromCodePoint(codePoint).toUpperCase();
36+
return hasExtraCodePoints(upper) ? codePoint : upper.codePointAt(0);
37+
}
38+
39+
// If String.toUpperCase produces more than 1 codepoint, Character.toUpperCase should
40+
// act either as identity or title-case conversion (not supported in GWT).
41+
private static boolean hasExtraCodePoints(String str) {
42+
return str.asNativeString().codePointAt(1) > 0;
2743
}
2844

2945
private CaseMapper() {}

0 commit comments

Comments
 (0)