]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
2005-08-23 Roman Kennke <roman@kennke.org>
authorRoman Kennke <roman@kennke.org>
Tue, 23 Aug 2005 22:19:17 +0000 (22:19 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Tue, 23 Aug 2005 22:19:17 +0000 (22:19 +0000)
* java/lang/Character.java
(toChars(int)): New JDK1.5 method.
(toChars(int, char[], int)): New JDK1.5 method.
(charCount): New JDK1.5 method.
(isSupplementaryCodePoint): New JDK1.5 method.
(isValidCodePoint): New JDK1.5 method.

From-SVN: r103413

libjava/ChangeLog
libjava/java/lang/Character.java

index aab20ae92bd8486d22966d2772710450ecaa59db..ac42734710e1646528eff0744a9d48607b2fa7e2 100644 (file)
@@ -1,3 +1,12 @@
+2005-08-23  Roman Kennke  <roman@kennke.org>
+
+       * java/lang/Character.java
+       (toChars(int)): New JDK1.5 method.
+       (toChars(int, char[], int)): New JDK1.5 method.
+       (charCount): New JDK1.5 method.
+       (isSupplementaryCodePoint): New JDK1.5 method.
+       (isValidCodePoint): New JDK1.5 method.
+
 2005-08-23  Tom Tromey  <tromey@redhat.com>
 
        * aclocal.m4, Makefile.in: Rebuilt.
index 760621572e6654bf9ef98d6db5408859abf75b85..aa29e0bd523dbdd210c492eba1c9ebcf82114d55 100644 (file)
@@ -1,5 +1,5 @@
 /* java.lang.Character -- Wrapper class for char, and Unicode subsets
-   Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2001, 2002, 2005 Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -1410,6 +1410,57 @@ public final class Character implements Serializable, Comparable
    */
   private static final int MIRROR_MASK = 0x40;
 
+  /**
+   * Min value for supplementary code point.
+   *
+   * @since 1.5
+   */
+  public static final int MIN_SUPPLEMENTARY_CODE_POINT = 0x10000;
+
+  /**
+   * Min value for code point.
+   *
+   * @since 1.5
+   */
+  public static final int MIN_CODE_POINT = 0; 
+  /**
+   * Max value for code point.
+   *
+   * @since 1.5
+   */
+  public static final int MAX_CODE_POINT = 0x010ffff;
+
+
+  /**
+   * Minimum high surrrogate code in UTF-16 encoding.
+   *
+   * @since 1.5
+   */
+  public static final char MIN_HIGH_SURROGATE = '\ud800';
+
+  /**
+   * Maximum high surrrogate code in UTF-16 encoding.
+   *
+   * @since 1.5
+   */
+  public static final char MAX_HIGH_SURROGATE = '\udbff';
+  /**
+   * Minimum low surrrogate code in UTF-16 encoding.
+   *
+   * @since 1.5
+   */
+  public static final char MIN_LOW_SURROGATE = '\udc00';
+
+  /**
+   * Maximum low surrrogate code in UTF-16 encoding.
+   *
+   * @since 1.5
+   */
+  public static final char MAX_LOW_SURROGATE = '\udfff';
+
   /**
    * Grabs an attribute offset from the Unicode attribute database. The lower
    * 5 bits are the character type, the next 2 bits are flags, and the top
@@ -2160,4 +2211,118 @@ public final class Character implements Serializable, Comparable
   {
     return compareTo((Character) o);
   }
+
+  /**
+   * Converts a unicode code point to a UTF-16 representation of that
+   * code point.
+   * 
+   * @param codePoint the unicode code point
+   *
+   * @return the UTF-16 representation of that code point
+   *
+   * @throws IllegalArgumentException if the code point is not a valid
+   *         unicode code point
+   *
+   * @since 1.5
+   */
+  public static char[] toChars(int codePoint)
+  {
+    char[] result = new char[charCount(codePoint)];
+    int ignore = toChars(codePoint, result, 0);
+    return result;
+  }
+
+  /**
+   * Converts a unicode code point to its UTF-16 representation.
+   *
+   * @param codePoint the unicode code point
+   * @param dst the target char array
+   * @param dstIndex the start index for the target
+   *
+   * @return number of characters written to <code>dst</code>
+   *
+   * @throws IllegalArgumentException if <code>codePoint</code> is not a
+   *         valid unicode code point
+   * @throws NullPointerException if <code>dst</code> is <code>null</code>
+   * @throws IndexOutOfBoundsException if <code>dstIndex</code> is not valid
+   *         in <code>dst</code> or if the UTF-16 representation does not
+   *         fit into <code>dst</code>
+   *
+   * @since 1.5
+   */
+  public static int toChars(int codePoint, char[] dst, int dstIndex)
+  {
+    if (!isValidCodePoint(codePoint))
+      {
+        throw new IllegalArgumentException("not a valid code point: "
+                                           + codePoint);
+      }
+
+    int result;
+    if (isSupplementaryCodePoint(codePoint))
+      {
+        // Write second char first to cause IndexOutOfBoundsException
+        // immediately.
+        dst[dstIndex + 1] = (char) ((codePoint & 0x3ff)
+                                    + (int) MIN_LOW_SURROGATE );
+        dst[dstIndex] = (char) ((codePoint >> 10) + (int) MIN_HIGH_SURROGATE);
+        result = 2;
+    }
+    else
+      {
+        dst[dstIndex] = (char) codePoint;
+        result = 1; 
+      }
+    return result;
+  }
+
+  /**
+   * Return number of 16-bit characters required to represent the given
+   * code point.
+   *
+   * @param codePoint a uncode code point
+   *
+   * @return 2 if codePoint >= 0x10000, 1 otherwise.
+   *
+   * @since 1.5
+   */
+  public static int charCount(int codePoint)
+  {
+    return 
+      (codePoint >= MIN_SUPPLEMENTARY_CODE_POINT) 
+      ? 2 
+      : 1;
+  }
+
+  /**
+   * Determines whether the specified code point is
+   * in the range 0x10000 .. 0x10FFFF, i.e. the character is within the Unicode
+   * supplementary character range.
+   *
+   * @param codePoint a Unicode code point
+   *
+   * @return <code>true</code> if code point is in supplementary range
+   *
+   * @since 1.5
+   */
+  public static boolean isSupplementaryCodePoint(int codePoint)
+  {
+    return codePoint >= MIN_SUPPLEMENTARY_CODE_POINT
+      && codePoint <= MAX_CODE_POINT;
+  }
+
+  /**
+   * Determines whether the specified code point is
+   * in the range 0x0000 .. 0x10FFFF, i.e. it is a valid Unicode code point.
+   *
+   * @param codePoint a Unicode code point
+   *
+   * @return <code>true</code> if code point is valid
+   *
+   * @since 1.5
+   */
+  public static boolean isValidCodePoint(int codePoint)
+  {
+    return codePoint >= MIN_CODE_POINT && codePoint <= MAX_CODE_POINT;
+  }
 } // class Character