1.1 --- a/emul/src/main/java/java/lang/Character.java Sun Sep 30 18:40:47 2012 -0700
1.2 +++ b/emul/src/main/java/java/lang/Character.java Sun Dec 16 18:49:35 2012 +0100
1.3 @@ -25,6 +25,8 @@
1.4
1.5 package java.lang;
1.6
1.7 +import org.apidesign.bck2brwsr.core.JavaScriptBody;
1.8 +
1.9 /**
1.10 * The {@code Character} class wraps a value of the primitive
1.11 * type {@code char} in an object. An object of type
1.12 @@ -1525,7 +1527,7 @@
1.13 * @see Character#getType(char)
1.14 */
1.15 public static boolean isLowerCase(char ch) {
1.16 - throw new UnsupportedOperationException();
1.17 + return ch == toLowerCase(ch);
1.18 }
1.19
1.20 /**
1.21 @@ -1560,7 +1562,7 @@
1.22 * @since 1.0
1.23 */
1.24 public static boolean isUpperCase(char ch) {
1.25 - throw new UnsupportedOperationException();
1.26 + return ch == toUpperCase(ch);
1.27 }
1.28
1.29 /**
1.30 @@ -1676,7 +1678,7 @@
1.31 * @see Character#getType(char)
1.32 */
1.33 public static boolean isDigit(char ch) {
1.34 - return isDigit((int)ch);
1.35 + return String.valueOf(ch).matches("\\d");
1.36 }
1.37
1.38 /**
1.39 @@ -1710,8 +1712,11 @@
1.40 * @since 1.5
1.41 */
1.42 public static boolean isDigit(int codePoint) {
1.43 - return getType(codePoint) == Character.DECIMAL_DIGIT_NUMBER;
1.44 + return fromCodeChars(codePoint).matches("\\d");
1.45 }
1.46 +
1.47 + @JavaScriptBody(args = "c", body = "return String.fromCharCode(c);")
1.48 + private native static String fromCodeChars(int codePoint);
1.49
1.50 /**
1.51 * Determines if a character is defined in Unicode.
1.52 @@ -1802,7 +1807,7 @@
1.53 * @see Character#isUpperCase(char)
1.54 */
1.55 public static boolean isLetter(char ch) {
1.56 - return isLetter((int)ch);
1.57 + return String.valueOf(ch).matches("\\w") && !isDigit(ch);
1.58 }
1.59
1.60 /**
1.61 @@ -1835,12 +1840,7 @@
1.62 * @since 1.5
1.63 */
1.64 public static boolean isLetter(int codePoint) {
1.65 - return ((((1 << Character.UPPERCASE_LETTER) |
1.66 - (1 << Character.LOWERCASE_LETTER) |
1.67 - (1 << Character.TITLECASE_LETTER) |
1.68 - (1 << Character.MODIFIER_LETTER) |
1.69 - (1 << Character.OTHER_LETTER)) >> getType(codePoint)) & 1)
1.70 - != 0;
1.71 + return fromCodeChars(codePoint).matches("\\w") && !isDigit(codePoint);
1.72 }
1.73
1.74 /**
1.75 @@ -1868,7 +1868,7 @@
1.76 * @since 1.0.2
1.77 */
1.78 public static boolean isLetterOrDigit(char ch) {
1.79 - return isLetterOrDigit((int)ch);
1.80 + return String.valueOf(ch).matches("\\w");
1.81 }
1.82
1.83 /**
1.84 @@ -1889,13 +1889,7 @@
1.85 * @since 1.5
1.86 */
1.87 public static boolean isLetterOrDigit(int codePoint) {
1.88 - return ((((1 << Character.UPPERCASE_LETTER) |
1.89 - (1 << Character.LOWERCASE_LETTER) |
1.90 - (1 << Character.TITLECASE_LETTER) |
1.91 - (1 << Character.MODIFIER_LETTER) |
1.92 - (1 << Character.OTHER_LETTER) |
1.93 - (1 << Character.DECIMAL_DIGIT_NUMBER)) >> getType(codePoint)) & 1)
1.94 - != 0;
1.95 + return fromCodeChars(codePoint).matches("\\w");
1.96 }
1.97
1.98 static int getType(int x) {
1.99 @@ -1930,7 +1924,7 @@
1.100 * @see String#toLowerCase()
1.101 */
1.102 public static char toLowerCase(char ch) {
1.103 - throw new UnsupportedOperationException();
1.104 + return String.valueOf(ch).toLowerCase().charAt(0);
1.105 }
1.106
1.107 /**
1.108 @@ -1961,7 +1955,7 @@
1.109 * @see String#toUpperCase()
1.110 */
1.111 public static char toUpperCase(char ch) {
1.112 - throw new UnsupportedOperationException();
1.113 + return String.valueOf(ch).toUpperCase().charAt(0);
1.114 }
1.115
1.116 /**