Commit daa6fb41 by Roman Kennke Committed by Tom Tromey

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
parent 7d04db3f
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.
......
/* 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.
......@@ -1411,6 +1411,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
* 9 bits are the offset into the attribute tables. Note that the top 9
......@@ -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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment