Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| Java™ Platform Standard Ed. 6
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## java.awt.font
Class NumericShaper

    java.lang.Object
      java.awt.font.NumericShaper

All Implemented Interfaces:
  Serializable

    public final class NumericShaper

extends Object
implements Serializable

The `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);

It is also possible to perform numeric shaping explicitly using instances of `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);

Since:
  1.4
See Also:
  Serialized Form

Field Summary
`static int` | `ALL_RANGES` Identifies all ranges, for full contextual shaping.
`static int` | `ARABIC` Identifies the ARABIC range and decimal base.
`static int` | `BENGALI` Identifies the BENGALI range and decimal base.
`static int` | `DEVANAGARI` Identifies the DEVANAGARI range and decimal base.
`static int` | `EASTERN_ARABIC` Identifies the ARABIC range and ARABIC_EXTENDED decimal base.
`static int` | `ETHIOPIC` Identifies the ETHIOPIC range and decimal base.
`static int` | `EUROPEAN` Identifies the Latin-1 (European) and extended range, and Latin-1 (European) decimal base.
`static int` | `GUJARATI` Identifies the GUJARATI range and decimal base.
`static int` | `GURMUKHI` Identifies the GURMUKHI range and decimal base.
`static int` | `KANNADA` Identifies the KANNADA range and decimal base.
`static int` | `KHMER` Identifies the KHMER range and decimal base.
`static int` | `LAO` Identifies the LAO range and decimal base.
`static int` | `MALAYALAM` Identifies the MALAYALAM range and decimal base.
`static int` | `MONGOLIAN` Identifies the MONGOLIAN range and decimal base.
`static int` | `MYANMAR` Identifies the MYANMAR range and decimal base.
`static int` | `ORIYA` Identifies the ORIYA range and decimal base.
`static int` | `TAMIL` Identifies the TAMIL range and decimal base.
`static int` | `TELUGU` Identifies the TELUGU range and decimal base.
`static int` | `THAI` Identifies the THAI range and decimal base.
`static int` | `TIBETAN` Identifies the TIBETAN range and decimal base.

Method Summary
`boolean` | `equals(Object o)` Returns true if the specified object is an instance of `NumericShaper` and shapes identically to this one.
`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).
`int` | `getRanges()` Returns an `int` that ORs together the values for all the ranges that will be shaped.
`static NumericShaper` | `getShaper(int singleRange)` Returns a shaper for the provided unicode range.
`int` | `hashCode()` Returns a hash code for this shaper.
`boolean` | `isContextual()` Returns a `boolean` indicating 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.
`String` | `toString()` Returns a `String` that describes this shaper.

Methods inherited from class java.lang.Object
`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

Field Detail

### EUROPEAN

    public static final int EUROPEAN

  Identifies the Latin-1 (European) and extended range, and Latin-1 (European) decimal base.

  See Also:
    Constant Field Values

### ARABIC

    public static final int ARABIC

  Identifies the ARABIC range and decimal base.

  See Also:
    Constant Field Values

### EASTERN_ARABIC

    public static final int EASTERN_ARABIC

  Identifies the ARABIC range and ARABIC_EXTENDED decimal base.

  See Also:
    Constant Field Values

### DEVANAGARI

    public static final int DEVANAGARI

  Identifies the DEVANAGARI range and decimal base.

  See Also:
    Constant Field Values

### BENGALI

    public static final int BENGALI

  Identifies the BENGALI range and decimal base.

  See Also:
    Constant Field Values

### GURMUKHI

    public static final int GURMUKHI

  Identifies the GURMUKHI range and decimal base.

  See Also:
    Constant Field Values

### GUJARATI

    public static final int GUJARATI

  Identifies the GUJARATI range and decimal base.

  See Also:
    Constant Field Values

### ORIYA

    public static final int ORIYA

  Identifies the ORIYA range and decimal base.

  See Also:
    Constant Field Values

### TAMIL

    public static final int TAMIL

  Identifies the TAMIL range and decimal base. Tamil does not have a decimal digit 0 so Latin-1 (European) 0 is used.

  See Also:
    Constant Field Values

### TELUGU

    public static final int TELUGU

  Identifies the TELUGU range and decimal base.

  See Also:
    Constant Field Values

### KANNADA

    public static final int KANNADA

  Identifies the KANNADA range and decimal base.

  See Also:
    Constant Field Values

### MALAYALAM

    public static final int MALAYALAM

  Identifies the MALAYALAM range and decimal base.

  See Also:
    Constant Field Values

### THAI

    public static final int THAI

  Identifies the THAI range and decimal base.

  See Also:
    Constant Field Values

### LAO

    public static final int LAO

  Identifies the LAO range and decimal base.

  See Also:
    Constant Field Values

### TIBETAN

    public static final int TIBETAN

  Identifies the TIBETAN range and decimal base.

  See Also:
    Constant Field Values

### MYANMAR

    public static final int MYANMAR

  Identifies the MYANMAR range and decimal base.

  See Also:
    Constant Field Values

### ETHIOPIC

    public static final int ETHIOPIC

  Identifies the ETHIOPIC range and decimal base.

  See Also:
    Constant Field Values

### KHMER

    public static final int KHMER

  Identifies the KHMER range and decimal base.

  See Also:
    Constant Field Values

### MONGOLIAN

    public static final int MONGOLIAN

  Identifies the MONGOLIAN range and decimal base.

  See Also:
    Constant Field Values

### ALL_RANGES

    public static final int ALL_RANGES

  Identifies all ranges, for full contextual shaping.

  See Also:
    Constant Field Values

Method Detail

### getShaper

    public static NumericShaper getShaper(int singleRange)

  Returns a shaper for the provided unicode range. All Latin-1 (EUROPEAN) digits are converted to the corresponding decimal unicode digits.

  Parameters:
    `singleRange` - the specified Unicode range
  Returns:
    a non-contextual numeric shaper
  Throws:
    `IllegalArgumentException` - if the range is not a single range

### getContextualShaper

    public static NumericShaper getContextualShaper(int ranges)

  Returns a contextual shaper for the provided unicode range(s). Latin-1 (EUROPEAN) digits are converted to the decimal digits corresponding to the range of the preceding text, if the range is one of the provided ranges. Multiple ranges are represented by or-ing the values together, such as, `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.

  Parameters:
    `ranges` - the specified Unicode ranges
  Returns:
    a shaper for the specified ranges

### getContextualShaper

    public static NumericShaper getContextualShaper(int ranges,
                                                    int defaultContext)

  Returns a contextual shaper for the provided unicode range(s). Latin-1 (EUROPEAN) digits will be converted to the decimal digits corresponding to the range of the preceding text, if the range is one of the provided ranges. Multiple ranges are represented by or-ing the values together, for example, `NumericShaper.ARABIC | NumericShaper.THAI`. The shaper uses defaultContext as the starting context.

  Parameters:
    `ranges` - the specified Unicode ranges
    `defaultContext` - the starting context, such as `NumericShaper.EUROPEAN`
  Returns:
    a shaper for the specified Unicode ranges.
  Throws:
    `IllegalArgumentException` - if the specified `defaultContext` is not a single valid range.

### shape

    public void shape(char[] text,
                      int start,
                      int count)

  Converts the digits in the text that occur between start and start + count.

  Parameters:
    `text` - an array of characters to convert
    `start` - the index into `text` to start converting
    `count` - the number of characters in `text` to convert
  Throws:
    `IndexOutOfBoundsException` - if start or start + count is out of bounds
    `NullPointerException` - if text is null

### shape

    public 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. Context is ignored if the shaper is not a contextual shaper.

  Parameters:
    `text` - an array of characters
    `start` - the index into `text` to start converting
    `count` - the number of characters in `text` to convert
    `context` - the context to which to convert the characters, such as `NumericShaper.EUROPEAN`
  Throws:
    `IndexOutOfBoundsException` - if start or start + count is out of bounds
    `NullPointerException` - if text is null
    `IllegalArgumentException` - if this is a contextual shaper and the specified `context` is not a single valid range.

### isContextual

    public boolean isContextual()

  Returns a `boolean` indicating whether or not this shaper shapes contextually.

  Returns:
    `true` if this shaper is contextual; `false` otherwise.

### getRanges

    public int getRanges()

  Returns an `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) { ...`

  Returns:
    the values for all the ranges to be shaped.

### hashCode

    public int hashCode()

  Returns a hash code for this shaper.

  Overrides:
    `hashCode` in class `Object`
  Returns:
    this shaper's hash code.
  See Also:
    `Object.hashCode()`

### equals

    public boolean equals(Object o)

  Returns true if the specified object is an instance of `NumericShaper` and shapes identically to this one.

  Overrides:
    `equals` in class `Object`
  Parameters:
    `o` - the specified object to compare to this `NumericShaper`
  Returns:
    `true` if `o` is an instance of `NumericShaper` and shapes in the same way; `false` otherwise.
  See Also:
    `Object.equals(java.lang.Object)`

### toString

    public String toString()

  Returns a `String` that describes this shaper. This method is used for debugging purposes only.

  Overrides:
    `toString` in class `Object`
  Returns:
    a `String` describing this shaper.

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| Java™ Platform Standard Ed. 6
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Submit a bug or feature
For further API reference and developer documentation, see Java SE Developer Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.

Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.