public final class NumericShaper extends Object implements Serializable
NumericShaper class is used to convert Latin-1 (European)
 digits to other Unicode decimal digits.  Users of this class will
 primarily be people who wish to present data using
 national digit shapes, but find it more convenient to represent the
 data internally using Latin-1 (European) digits.  This does not
 interpret the deprecated numeric shape selector character (U+206E).
 
 Instances of NumericShaper are typically applied
 as attributes to text with the
 NUMERIC_SHAPING attribute
 of the TextAttribute class.
 For example, this code snippet causes a TextLayout to
 shape European digits to Arabic in an Arabic context:
 
 Map map = new HashMap();
 map.put(TextAttribute.NUMERIC_SHAPING,
     NumericShaper.getContextualShaper(NumericShaper.ARABIC));
 FontRenderContext frc = ...;
 TextLayout layout = new TextLayout(text, map, frc);
 layout.draw(g2d, x, y);
 NumericShaper, as this code snippet demonstrates:
 char[] text = ...;
 // shape all EUROPEAN digits (except zero) to ARABIC digits
 NumericShaper shaper = NumericShaper.getShaper(NumericShaper.ARABIC);
 shaper.shape(text, start, count);
 // shape European digits to ARABIC digits if preceding text is Arabic, or
 // shape European digits to TAMIL digits if preceding text is Tamil, or
 // leave European digits alone if there is no preceding text, or
 // preceding text is neither Arabic nor Tamil
 NumericShaper shaper =
     NumericShaper.getContextualShaper(NumericShaper.ARABIC |
                                         NumericShaper.TAMIL,
                                       NumericShaper.EUROPEAN);
 shaper.shape(text, start, count);
 Bit mask- and enum-based Unicode ranges
This class supports two different programming interfaces to
 represent Unicode ranges for script-specific digits: bit
 mask-based ones, such as NumericShaper.ARABIC, and
 enum-based ones, such as NumericShaper.Range.ARABIC.
 Multiple ranges can be specified by ORing bit mask-based constants,
 such as:
 
or creating aNumericShaper.ARABIC | NumericShaper.TAMIL
Set with the NumericShaper.Range
 constants, such as:
 The enum-based ranges are a super set of the bit mask-based ones.EnumSet.of(NumericShaper.Scirpt.ARABIC, NumericShaper.Range.TAMIL)
If the two interfaces are mixed (including serialization),
 Unicode range values are mapped to their counterparts where such
 mapping is possible, such as NumericShaper.Range.ARABIC
 from/to NumericShaper.ARABIC.  If any unmappable range
 values are specified, such as NumericShaper.Range.BALINESE,
 those ranges are ignored.
 
Decimal Digits Precedence
A Unicode range may have more than one set of decimal digits. If multiple decimal digits sets are specified for the same Unicode range, one of the sets will take precedence as follows.
| Unicode Range | NumericShaperConstants | Precedence | 
|---|---|---|
| Arabic | NumericShaper.ARABICNumericShaper.EASTERN_ARABIC | NumericShaper.EASTERN_ARABIC | 
| NumericShaper.Range.ARABICNumericShaper.Range.EASTERN_ARABIC | NumericShaper.Range.EASTERN_ARABIC | |
| Tai Tham | NumericShaper.Range.TAI_THAM_HORANumericShaper.Range.TAI_THAM_THAM | NumericShaper.Range.TAI_THAM_THAM | 
| Modifier and Type | Class and Description | 
|---|---|
| static class  | NumericShaper.RangeA  NumericShaper.Rangerepresents a Unicode range of a
 script having its own decimal digits. | 
| Modifier and Type | Field and Description | 
|---|---|
| static int | ALL_RANGESIdentifies all ranges, for full contextual shaping. | 
| static int | ARABICIdentifies the ARABIC range and decimal base. | 
| static int | BENGALIIdentifies the BENGALI range and decimal base. | 
| static int | DEVANAGARIIdentifies the DEVANAGARI range and decimal base. | 
| static int | EASTERN_ARABICIdentifies the ARABIC range and ARABIC_EXTENDED decimal base. | 
| static int | ETHIOPICIdentifies the ETHIOPIC range and decimal base. | 
| static int | EUROPEANIdentifies the Latin-1 (European) and extended range, and
  Latin-1 (European) decimal base. | 
| static int | GUJARATIIdentifies the GUJARATI range and decimal base. | 
| static int | GURMUKHIIdentifies the GURMUKHI range and decimal base. | 
| static int | KANNADAIdentifies the KANNADA range and decimal base. | 
| static int | KHMERIdentifies the KHMER range and decimal base. | 
| static int | LAOIdentifies the LAO range and decimal base. | 
| static int | MALAYALAMIdentifies the MALAYALAM range and decimal base. | 
| static int | MONGOLIANIdentifies the MONGOLIAN range and decimal base. | 
| static int | MYANMARIdentifies the MYANMAR range and decimal base. | 
| static int | ORIYAIdentifies the ORIYA range and decimal base. | 
| static int | TAMILIdentifies the TAMIL range and decimal base. | 
| static int | TELUGUIdentifies the TELUGU range and decimal base. | 
| static int | THAIIdentifies the THAI range and decimal base. | 
| static int | TIBETANIdentifies the TIBETAN range and decimal base. | 
| Modifier and Type | Method and Description | 
|---|---|
| boolean | equals(Object o)Returns  trueif the specified object is an instance ofNumericShaperand shapes identically to this one,
 regardless of the range representations, the bit mask or the
 enum. | 
| static NumericShaper | getContextualShaper(int ranges)Returns a contextual shaper for the provided unicode range(s). | 
| static NumericShaper | getContextualShaper(int ranges,
                   int defaultContext)Returns a contextual shaper for the provided unicode range(s). | 
| static NumericShaper | getContextualShaper(Set<NumericShaper.Range> ranges)Returns a contextual shaper for the provided Unicode
 range(s). | 
| static NumericShaper | getContextualShaper(Set<NumericShaper.Range> ranges,
                   NumericShaper.Range defaultContext)Returns a contextual shaper for the provided Unicode range(s). | 
| int | getRanges()Returns an  intthat ORs together the values for
 all the ranges that will be shaped. | 
| Set<NumericShaper.Range> | getRangeSet()Returns a  Setrepresenting all the Unicode ranges in
 thisNumericShaperthat will be shaped. | 
| static NumericShaper | getShaper(int singleRange)Returns a shaper for the provided unicode range. | 
| static NumericShaper | getShaper(NumericShaper.Range singleRange)Returns a shaper for the provided Unicode
 range. | 
| int | hashCode()Returns a hash code for this shaper. | 
| boolean | isContextual()Returns a  booleanindicating whether or not
 this shaper shapes contextually. | 
| void | shape(char[] text,
     int start,
     int count)Converts the digits in the text that occur between start and
 start + count. | 
| void | shape(char[] text,
     int start,
     int count,
     int context)Converts the digits in the text that occur between start and
 start + count, using the provided context. | 
| void | shape(char[] text,
     int start,
     int count,
     NumericShaper.Range context)Converts the digits in the text that occur between  startandstart + count, using the providedcontext. | 
| String | toString()Returns a  Stringthat describes this shaper. | 
public static final int EUROPEAN
public static final int ARABIC
public static final int EASTERN_ARABIC
public static final int DEVANAGARI
public static final int BENGALI
public static final int GURMUKHI
public static final int GUJARATI
public static final int ORIYA
public static final int TAMIL
public static final int TELUGU
public static final int KANNADA
public static final int MALAYALAM
public static final int THAI
public static final int LAO
public static final int TIBETAN
public static final int MYANMAR
public static final int ETHIOPIC
public static final int KHMER
public static final int MONGOLIAN
public static final int ALL_RANGES
This constant specifies all of the bit mask-based
 ranges. Use EmunSet.allOf(NumericShaper.Range.class) to
 specify all of the enum-based ranges.
public static NumericShaper getShaper(int singleRange)
singleRange - the specified Unicode rangeIllegalArgumentException - if the range is not a single rangepublic static NumericShaper getShaper(NumericShaper.Range singleRange)
singleRange - the Unicode range given by a NumericShaper.Range constant.NumericShaper.NullPointerException - if singleRange is nullpublic static NumericShaper getContextualShaper(int ranges)
NumericShaper.ARABIC | NumericShaper.THAI.  The
 shaper assumes EUROPEAN as the starting context, that is, if
 EUROPEAN digits are encountered before any strong directional
 text in the string, the context is presumed to be EUROPEAN, and
 so the digits will not shape.ranges - the specified Unicode rangespublic static NumericShaper getContextualShaper(Set<NumericShaper.Range> ranges)
The shaper assumes EUROPEAN as the starting context, that is, if EUROPEAN digits are encountered before any strong directional text in the string, the context is presumed to be EUROPEAN, and so the digits will not shape.
ranges - the specified Unicode rangesNullPointerException - if ranges is null.public static NumericShaper getContextualShaper(int ranges, int defaultContext)
NumericShaper.ARABIC | NumericShaper.THAI.  The
 shaper uses defaultContext as the starting context.ranges - the specified Unicode rangesdefaultContext - the starting context, such as
 NumericShaper.EUROPEANIllegalArgumentException - if the specified
 defaultContext is not a single valid range.public static NumericShaper getContextualShaper(Set<NumericShaper.Range> ranges, NumericShaper.Range defaultContext)
defaultContext as the starting context.ranges - the specified Unicode rangesdefaultContext - the starting context, such as
                       NumericShaper.Range.EUROPEANNullPointerException - if ranges or defaultContext is nullpublic void shape(char[] text,
                  int start,
                  int count)
text - an array of characters to convertstart - the index into text to start
        convertingcount - the number of characters in text
        to convertIndexOutOfBoundsException - if start or start + count is
        out of boundsNullPointerException - if text is nullpublic void shape(char[] text,
                  int start,
                  int count,
                  int context)
text - an array of charactersstart - the index into text to start
        convertingcount - the number of characters in text
        to convertcontext - the context to which to convert the
        characters, such as NumericShaper.EUROPEANIndexOutOfBoundsException - if start or start + count is
        out of boundsNullPointerException - if text is nullIllegalArgumentException - if this is a contextual shaper
 and the specified context is not a single valid
 range.public void shape(char[] text,
                  int start,
                  int count,
                  NumericShaper.Range context)
start and start + count, using the provided context. Context is ignored if the shaper is not a
 contextual shaper.text - a char arraystart - the index into text to start convertingcount - the number of chars in text
              to convertcontext - the context to which to convert the characters,
                such as NumericShaper.Range.EUROPEANIndexOutOfBoundsException - if start or start + count is out of boundsNullPointerException - if text or context is nullpublic boolean isContextual()
boolean indicating whether or not
 this shaper shapes contextually.true if this shaper is contextual;
         false otherwise.public int getRanges()
int that ORs together the values for
 all the ranges that will be shaped.
 For example, to check if a shaper shapes to Arabic, you would use the following:
   if ((shaper.getRanges() & shaper.ARABIC) != 0) { ... 
 
 Note that this method supports only the bit mask-based
 ranges. Call getRangeSet() for the enum-based ranges.
public Set<NumericShaper.Range> getRangeSet()
Set representing all the Unicode ranges in
 this NumericShaper that will be shaped.public int hashCode()
hashCode in class ObjectObject.hashCode()public boolean equals(Object o)
true if the specified object is an instance of
 NumericShaper and shapes identically to this one,
 regardless of the range representations, the bit mask or the
 enum. For example, the following code produces "true".
 NumericShaper ns1 = NumericShaper.getShaper(NumericShaper.ARABIC); NumericShaper ns2 = NumericShaper.getShaper(NumericShaper.Range.ARABIC); System.out.println(ns1.equals(ns2));
equals in class Objecto - the specified object to compare to this
          NumericShapertrue if o is an instance
         of NumericShaper and shapes in the same way;
         false otherwise.Object.equals(java.lang.Object) Submit a bug or feature 
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
 Copyright © 1993, 2017, Oracle and/or its affiliates.  All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.