emul/src/main/java/java/lang/Character.java
branchemul
changeset 553 388e48c0a37a
parent 85 9f3c454e74d4
     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	Wed Jan 23 20:16:48 2013 +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      /**