モジュール java.desktop
パッケージ java.awt.font

クラスNumericShaper

java.lang.Object
java.awt.font.NumericShaper
すべての実装されたインタフェース:
Serializable

public final class NumericShaper
extends Object
implements Serializable
NumericShaperクラスは、Latin-1 (ヨーロッパ言語)の数字をほかのUnicode 10進数に変換するために使用します。 このクラスは主に、データの提示に各国の数字の形状を使いながら内部的にはLatin-1 (ヨーロッパ言語)の数字を使ったほうが便利な場合に使用します。 非推奨の数字形状セレクタ文字(U+206E)は解釈しません。

NumericShaperのインスタンスは通常、TextAttributeクラスのNUMERIC_SHAPING属性を持つテキストの属性として適用されます。 たとえば次のコード部分では、アラビア語のコンテキスト内ではTextLayoutのヨーロッパ言語の数字をアラビア語の数字に変換します。

 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のインスタンスを使用して数字の形状決定を明示的に行うこともできます。
 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);
 

ビット・マスクベースおよびenumベースのUnicode範囲

このクラスは、スクリプト固有の数字のUnicode範囲を表すために異なる2つのプログラミング・インタフェースをサポートしています。つまり、NumericShaper.ARABICのようなビット・マスクベースのものと、NumericShaper.Range.ARABICのようなenumベースのものです。 複数の範囲を指定するには、次のようにビット・マスクベースの定数の論理和を使用します。

 NumericShaper.ARABIC | NumericShaper.TAMIL
 
あるいは、次のようにNumericShaper.Range定数を使用してSetを作成します。
 EnumSet.of(NumericShaper.Range.ARABIC, NumericShaper.Range.TAMIL)
 
enumベースの範囲は、ビット・マスクベースの範囲のスーパー・セットです。

2つのインタフェースが混在する場合(直列化も含む)、マッピングが可能であれば、Unicode範囲の値は互いに対応する値にマップされます。たとえば、NumericShaper.Range.ARABICNumericShaper.ARABICがマップされます。 NumericShaper.Range.BALINESEなどのマップできない範囲値が指定された場合、そのような範囲は無視されます。

10進数の優先順位

1つのUnicode範囲に10進数のセットが複数含まれることがあります。 同じUnicode範囲に10進数のセットが複数指定されている場合は、次のようにセットの1つが優先されます。

NumericShaper定数の優先順位
Unicode範囲 NumericShaper定数 優先順位
アラビア語 NumericShaper.ARABIC
NumericShaper.EASTERN_ARABIC
NumericShaper.EASTERN_ARABIC
NumericShaper.Range.ARABIC
NumericShaper.Range.EASTERN_ARABIC
NumericShaper.Range.EASTERN_ARABIC
タイ・タム NumericShaper.Range.TAI_THAM_HORA
NumericShaper.Range.TAI_THAM_THAM
NumericShaper.Range.TAI_THAM_THAM

導入されたバージョン:
1.4
関連項目:
直列化された形式
  • ネストされたクラスのサマリー

    ネストされたクラス
    修飾子と型 クラス 説明
    static class  NumericShaper.Range
    NumericShaper.Rangeは固有の10進数を持つスクリプトのUnicode範囲を表します。
  • フィールドのサマリー

    フィールド
    修飾子と型 フィールド 説明
    static int ALL_RANGES
    すべての範囲を識別します。完全なコンテキスト依存の形状決定に使用します。
    static int ARABIC
    ARABICの範囲と10進数を識別します。
    static int BENGALI
    BENGALIの範囲と10進数を識別します。
    static int DEVANAGARI
    DEVANAGARIの範囲と10進数を識別します。
    static int EASTERN_ARABIC
    ARABICの範囲とARABIC_EXTENDEDの10進数を識別します。
    static int ETHIOPIC
    ETHIOPICの範囲と10進数を識別します。
    static int EUROPEAN
    Latin-1 (ヨーロッパ言語)と拡張範囲、およびLatin-1 (ヨーロッパ言語)の10進数を識別します。
    static int GUJARATI
    GUJARATIの範囲と10進数を識別します。
    static int GURMUKHI
    GURMUKHIの範囲と10進数を識別します。
    static int KANNADA
    KANNADAの範囲と10進数を識別します。
    static int KHMER
    KHMERの範囲と10進数を識別します。
    static int LAO
    LAOの範囲と10進数を識別します。
    static int MALAYALAM
    MALAYALAMの範囲と10進数を識別します。
    static int MONGOLIAN
    MONGOLIANの範囲と10進数を識別します。
    static int MYANMAR
    MYANMARの範囲と10進数を識別します。
    static int ORIYA
    ORIYAの範囲と10進数を識別します。
    static int TAMIL
    TAMILの範囲と10進数を識別します。
    static int TELUGU
    TELUGUの範囲と10進数を識別します。
    static int THAI
    THAIの範囲と10進数を識別します。
    static int TIBETAN
    TIBETANの範囲と10進数を識別します。
  • メソッドのサマリー

    修飾子と型 メソッド 説明
    boolean equals​(Object o)
    指定されたオブジェクトがNumericShaperのインスタンスで、範囲表現、ビット・マスク、または列挙と関係なく、これと同じ方法で形状決定を行う場合はtrueを返します。
    static NumericShaper getContextualShaper​(int ranges)
    指定されたUnicodeの1つまたは複数の範囲に対する、コンテキスト依存の形状決定要因を返します。
    static NumericShaper getContextualShaper​(int ranges, int defaultContext)
    指定されたUnicodeの1つまたは複数の範囲に対する、コンテキスト依存の形状決定要因を返します。
    static NumericShaper getContextualShaper​(Set<NumericShaper.Range> ranges)
    指定されたUnicodeの1つまたは複数の範囲に対する、コンテキスト依存の形状決定要因を返します。
    static NumericShaper getContextualShaper​(Set<NumericShaper.Range> ranges, NumericShaper.Range defaultContext)
    指定されたUnicodeの1つまたは複数の範囲に対する、コンテキスト依存の形状決定要因を返します。
    int getRanges()
    形状決定を行うすべての範囲に対する値の論理和を求めるintを返します。
    Set<NumericShaper.Range> getRangeSet()
    形状決定を行うこのNumericShaperのすべてのUnicode範囲を表すSetを返します。
    static NumericShaper getShaper​(int singleRange)
    指定されたUnicodeの範囲に対する形状決定要因を返します。
    static NumericShaper getShaper​(NumericShaper.Range singleRange)
    指定されたUnicodeの範囲に対する形状決定要因を返します。
    int hashCode()
    この形状決定要因のハッシュ・コードを返します。
    boolean isContextual()
    この形状決定要因がコンテキスト依存かどうかを示すbooleanを返します。
    void shape​(char[] text, int start, int count)
    startとstart+countの間に出現する、テキスト内の数字を変換します。
    void shape​(char[] text, int start, int count, int context)
    指定されたコンテキストを使用して、startとstart+countの間に出現するテキスト内の数字を変換します。
    void shape​(char[] text, int start, int count, NumericShaper.Range context)
    提供された contextを使用して、 startstart + countの間に現れるテキストの数字を変換します。
    String toString()
    この形状決定要因を記述するStringを返します。

    クラス java.lang.Objectで宣言されたメソッド

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • フィールド詳細

    • EUROPEAN

      public static final int EUROPEAN
      Latin-1 (ヨーロッパ言語)と拡張範囲、およびLatin-1 (ヨーロッパ言語)の10進数を識別します。
      関連項目:
      定数フィールド値
    • ARABIC

      public static final int ARABIC
      ARABICの範囲と10進数を識別します。
      関連項目:
      定数フィールド値
    • EASTERN_ARABIC

      public static final int EASTERN_ARABIC
      ARABICの範囲とARABIC_EXTENDEDの10進数を識別します。
      関連項目:
      定数フィールド値
    • DEVANAGARI

      public static final int DEVANAGARI
      DEVANAGARIの範囲と10進数を識別します。
      関連項目:
      定数フィールド値
    • BENGALI

      public static final int BENGALI
      BENGALIの範囲と10進数を識別します。
      関連項目:
      定数フィールド値
    • GURMUKHI

      public static final int GURMUKHI
      GURMUKHIの範囲と10進数を識別します。
      関連項目:
      定数フィールド値
    • GUJARATI

      public static final int GUJARATI
      GUJARATIの範囲と10進数を識別します。
      関連項目:
      定数フィールド値
    • ORIYA

      public static final int ORIYA
      ORIYAの範囲と10進数を識別します。
      関連項目:
      定数フィールド値
    • TAMIL

      public static final int TAMIL
      TAMILの範囲と10進数を識別します。
      関連項目:
      定数フィールド値
    • TELUGU

      public static final int TELUGU
      TELUGUの範囲と10進数を識別します。
      関連項目:
      定数フィールド値
    • KANNADA

      public static final int KANNADA
      KANNADAの範囲と10進数を識別します。
      関連項目:
      定数フィールド値
    • MALAYALAM

      public static final int MALAYALAM
      MALAYALAMの範囲と10進数を識別します。
      関連項目:
      定数フィールド値
    • THAI

      public static final int THAI
      THAIの範囲と10進数を識別します。
      関連項目:
      定数フィールド値
    • LAO

      public static final int LAO
      LAOの範囲と10進数を識別します。
      関連項目:
      定数フィールド値
    • TIBETAN

      public static final int TIBETAN
      TIBETANの範囲と10進数を識別します。
      関連項目:
      定数フィールド値
    • MYANMAR

      public static final int MYANMAR
      MYANMARの範囲と10進数を識別します。
      関連項目:
      定数フィールド値
    • ETHIOPIC

      public static final int ETHIOPIC
      ETHIOPICの範囲と10進数を識別します。
      関連項目:
      定数フィールド値
    • KHMER

      public static final int KHMER
      KHMERの範囲と10進数を識別します。
      関連項目:
      定数フィールド値
    • MONGOLIAN

      public static final int MONGOLIAN
      MONGOLIANの範囲と10進数を識別します。
      関連項目:
      定数フィールド値
    • ALL_RANGES

      public static final int ALL_RANGES
      すべての範囲を識別します。完全なコンテキスト依存の形状決定に使用します。

      この定数は、ビット・マスクベースのすべての範囲を指定します。 enumベースのすべての範囲を指定するには、EnumSet.allOf(NumericShaper.Range.class)を使用します。

      関連項目:
      定数フィールド値
  • メソッドの詳細

    • getShaper

      public static NumericShaper getShaper​(int singleRange)
      指定されたUnicodeの範囲に対する形状決定要因を返します。 Latin-1 (EUROPEAN)の数字はすべて、対応するUnicodeの10進数に変換されます。
      パラメータ:
      singleRange - 指定されたUnicodeの範囲
      戻り値:
      コンテキスト依存でない数字の形状決定要因
      例外:
      IllegalArgumentException - 範囲が1つでない場合
    • getShaper

      public static NumericShaper getShaper​(NumericShaper.Range singleRange)
      指定されたUnicodeの範囲に対する形状決定要因を返します。 Latin-1 (EUROPEAN)の数字はすべて、指定されたUnicode範囲の、対応する10進数に変換されます。
      パラメータ:
      singleRange - NumericShaper.Range定数で指定されたUnicode範囲。
      戻り値:
      コンテキスト依存でないNumericShaper
      例外:
      NullPointerException - singleRangenullである場合
      導入されたバージョン:
      1.7
    • getContextualShaper

      public static NumericShaper getContextualShaper​(int ranges)
      指定されたUnicodeの1つまたは複数の範囲に対する、コンテキスト依存の形状決定要因を返します。 範囲が指定された範囲の1つであれば、Latin-1 (EUROPEAN)の数字は前にあるテキストの範囲に対応する10進数に変換されます。 複数の範囲は、NumericShaper.ARABIC|NumericShaper.THAIのように、値の論理和によって表されます。 形状決定要因は、EUROPEANを開始コンテキストとして想定します。つまり、文字列内で方向性の強いテキストの前にEUROPEANの数字が検出された場合、コンテキストはEUROPEANであると見なされ、数字は形状決定されません。
      パラメータ:
      ranges - 指定されたUnicodeの範囲
      戻り値:
      指定された範囲に対する形状決定要因
    • getContextualShaper

      public static NumericShaper getContextualShaper​(Set<NumericShaper.Range> ranges)
      指定されたUnicodeの1つまたは複数の範囲に対する、コンテキスト依存の形状決定要因を返します。 範囲が指定された範囲の1つであれば、Latin-1 (EUROPEAN)の数字は前にあるテキストの範囲に対応する10進数に変換されます。

      形状決定要因は、EUROPEANを開始コンテキストとして想定します。つまり、文字列内で方向性の強いテキストの前にEUROPEANの数字が検出された場合、コンテキストはEUROPEANであると見なされ、数字は形状決定されません。

      パラメータ:
      ranges - 指定されたUnicodeの範囲
      戻り値:
      指定された範囲に対するコンテキスト依存の形状決定要因
      例外:
      NullPointerException - rangesnullである場合。
      導入されたバージョン:
      1.7
    • getContextualShaper

      public static NumericShaper getContextualShaper​(int ranges, int defaultContext)
      指定されたUnicodeの1つまたは複数の範囲に対する、コンテキスト依存の形状決定要因を返します。 範囲が指定された範囲の1つであれば、Latin-1 (EUROPEAN)の数字は前にあるテキストの範囲に対応する10進数に変換されます。 複数の範囲は、NumericShaper.ARABIC|NumericShaper.THAIのように、値の論理和によって表されます。 形状決定要因は、defaultContextを開始コンテキストとして使います。
      パラメータ:
      ranges - 指定されたUnicodeの範囲
      defaultContext - 次のような開始コンテキスト: NumericShaper.EUROPEAN
      戻り値:
      指定されたUnicodeの範囲に対する形状決定要因。
      例外:
      IllegalArgumentException - 指定されたdefaultContextが単一の有効な範囲でない場合。
    • getContextualShaper

      public static NumericShaper getContextualShaper​(Set<NumericShaper.Range> ranges, NumericShaper.Range defaultContext)
      指定されたUnicodeの1つまたは複数の範囲に対する、コンテキスト依存の形状決定要因を返します。 範囲が指定された範囲の1つであれば、Latin-1 (EUROPEAN)の数字は前にあるテキストの範囲に対応する10進数に変換されます。 形状決定要因は、 defaultContextを開始コンテキストとして使います。
      パラメータ:
      ranges - 指定されたUnicodeの範囲
      defaultContext - 次のような開始コンテキスト: NumericShaper.Range.EUROPEAN
      戻り値:
      指定されたUnicode範囲に対するコンテキスト依存の形状決定要因。
      例外:
      NullPointerException - rangesまたはdefaultContextnullの場合
      導入されたバージョン:
      1.7
    • shape

      public void shape​(char[] text, int start, int count)
      startとstart+countの間に出現する、テキスト内の数字を変換します。
      パラメータ:
      text - 変換する文字の配列
      start - 変換を開始するtext内のインデックス
      count - text内の変換する文字数
      例外:
      IndexOutOfBoundsException - startまたはstart+countが範囲外の場合
      NullPointerException - textがnullの場合
    • shape

      public void shape​(char[] text, int start, int count, int context)
      指定されたコンテキストを使用して、startとstart+countの間に出現するテキスト内の数字を変換します。 形状決定要因がコンテキスト依存でない場合、コンテキストは無視されます。
      パラメータ:
      text - 文字の配列
      start - 変換を開始するtext内のインデックス
      count - text内の変換する文字数
      context - 次のような文字の変換先のコンテキスト: NumericShaper.EUROPEAN
      例外:
      IndexOutOfBoundsException - startまたはstart+countが範囲外の場合
      NullPointerException - textがnullの場合
      IllegalArgumentException - これがコンテキスト依存の形状決定要因であり、指定されたcontextが単一の有効な範囲でない場合。
    • shape

      public void shape​(char[] text, int start, int count, NumericShaper.Range context)
      提供された contextを使用して、 startstart + countの間に現れるテキストの数字を変換します。 形状決定要因がコンテキスト依存でない場合、Contextは無視されます。
      パラメータ:
      text - char配列
      start - 変換を開始するtext内のインデックス
      count - text内の変換するcharの数
      context - 次のような文字の変換先のコンテキスト: NumericShaper.Range.EUROPEAN
      例外:
      IndexOutOfBoundsException - startまたはstart+countが範囲外にある場合
      NullPointerException - textまたはcontextがnullの場合
      導入されたバージョン:
      1.7
    • isContextual

      public boolean isContextual()
      この形状決定要因がコンテキスト依存かどうかを示すbooleanを返します。
      戻り値:
      この形状決定要因がコンテキスト依存の場合はtrue、そうでない場合はfalse
    • getRanges

      public int getRanges()
      形状決定を行うすべての範囲に対する値の論理和を求めるintを返します。

      たとえば、アラビア語への形状決定が行われるかどうかを調べるには、次のようにします。

      if ((shaper.getRanges() & shaper.ARABIC) != 0) &#123; ...

      このメソッドはビット・マスクベースの範囲だけをサポートしています。 enumベースの範囲の場合はgetRangeSet()を呼び出してください。

      戻り値:
      形状決定を行うすべての範囲に対する値。
    • getRangeSet

      public Set<NumericShaper.Range> getRangeSet()
      形状決定を行うこのNumericShaperのすべてのUnicode範囲を表すSetを返します。
      戻り値:
      形状決定を行うすべてのUnicode範囲。
      導入されたバージョン:
      1.7
    • hashCode

      public int hashCode()
      この形状決定要因のハッシュ・コードを返します。
      オーバーライド:
      hashCode 、クラス:  Object
      戻り値:
      この形状決定要因のハッシュ・コード。
      関連項目:
      Object.hashCode()
    • equals

      public boolean equals​(Object o)
      指定されたオブジェクトがNumericShaperのインスタンスで、範囲表現、ビット・マスク、または列挙と関係なく、これと同じ方法で形状決定を行う場合はtrueを返します。 たとえば、次のコードでは"true"が生成されます。
       NumericShaper ns1 = NumericShaper.getShaper(NumericShaper.ARABIC);
       NumericShaper ns2 = NumericShaper.getShaper(NumericShaper.Range.ARABIC);
       System.out.println(ns1.equals(ns2));
       
      オーバーライド:
      equals 、クラス:  Object
      パラメータ:
      o - 次と比較する、指定されたオブジェクト: NumericShaper
      戻り値:
      oNumericShaperのインスタンスであり、同じ方法で形状決定を行う場合はtrue、そうでない場合はfalse
      関連項目:
      Object.equals(java.lang.Object)
    • toString

      public String toString()
      この形状決定要因を記述するStringを返します。 このメソッドはデバッグの場合にだけ使用します。
      オーバーライド:
      toString 、クラス:  Object
      戻り値:
      この形状決定要因を記述するString