モジュール java.desktop
パッケージ 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を返します。
    • フィールドの詳細

      • 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進数を識別します。
        関連項目:
        定数フィールド値
      • 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