mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-26 12:23:59 +08:00
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. From-SVN: r103413
This commit is contained in:
parent
7d04db3f0f
commit
daa6fb4110
@ -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.
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user