- すべての実装されたインタフェース:
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
を作成します。
enumベースの範囲は、ビット・マスクベースの範囲のスーパー・セットです。EnumSet.of(NumericShaper.Range.ARABIC, NumericShaper.Range.TAMIL)
2つのインタフェースが混在する場合(直列化も含む)、マッピングが可能であれば、Unicode範囲の値は互いに対応する値にマップされます。たとえば、NumericShaper.Range.ARABIC
とNumericShaper.ARABIC
がマップされます。 NumericShaper.Range.BALINESE
などのマップできない範囲値が指定された場合、そのような範囲は無視されます。
10進数の優先順位
1つのUnicode範囲に10進数のセットが複数含まれることがあります。 同じUnicode範囲に10進数のセットが複数指定されている場合は、次のようにセットの1つが優先されます。
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 final int
すべての範囲を識別します。完全なコンテキスト依存の形状決定に使用します。static final int
ARABICの範囲と10進数を識別します。static final int
BENGALIの範囲と10進数を識別します。static final int
DEVANAGARIの範囲と10進数を識別します。static final int
ARABICの範囲とARABIC_EXTENDEDの10進数を識別します。static final int
ETHIOPICの範囲と10進数を識別します。static final int
Latin-1 (ヨーロッパ言語)と拡張範囲、およびLatin-1 (ヨーロッパ言語)の10進数を識別します。static final int
GUJARATIの範囲と10進数を識別します。static final int
GURMUKHIの範囲と10進数を識別します。static final int
KANNADAの範囲と10進数を識別します。static final int
KHMERの範囲と10進数を識別します。static final int
LAOの範囲と10進数を識別します。static final int
MALAYALAMの範囲と10進数を識別します。static final int
MONGOLIANの範囲と10進数を識別します。static final int
MYANMARの範囲と10進数を識別します。static final int
ORIYAの範囲と10進数を識別します。static final int
TAMILの範囲と10進数を識別します。static final int
TELUGUの範囲と10進数を識別します。static final int
THAIの範囲と10進数を識別します。static final int
TIBETANの範囲と10進数を識別します。 -
メソッドのサマリー
修飾子と型メソッド説明boolean
指定されたオブジェクトが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
形状決定を行うすべての範囲に対する値の論理和を求めるint
を返します。形状決定を行うこのNumericShaper
のすべてのUnicode範囲を表すSet
を返します。static NumericShaper
getShaper
(int singleRange) 指定されたUnicodeの範囲に対する形状決定要因を返します。static NumericShaper
getShaper
(NumericShaper.Range singleRange) 指定されたUnicodeの範囲に対する形状決定要因を返します。int
hashCode()
この形状決定要因のハッシュ・コードを返します。boolean
この形状決定要因がコンテキスト依存かどうかを示す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
を使用して、start
とstart + count
の間に現れるテキストの数字を変換します。toString()
この形状決定要因を記述するString
を返します。
-
フィールド詳細
-
EUROPEAN
public static final int EUROPEANLatin-1 (ヨーロッパ言語)と拡張範囲、およびLatin-1 (ヨーロッパ言語)の10進数を識別します。- 関連項目:
-
ARABIC
public static final int ARABICARABICの範囲と10進数を識別します。- 関連項目:
-
EASTERN_ARABIC
public static final int EASTERN_ARABICARABICの範囲とARABIC_EXTENDEDの10進数を識別します。- 関連項目:
-
DEVANAGARI
public static final int DEVANAGARIDEVANAGARIの範囲と10進数を識別します。- 関連項目:
-
BENGALI
public static final int BENGALIBENGALIの範囲と10進数を識別します。- 関連項目:
-
GURMUKHI
public static final int GURMUKHIGURMUKHIの範囲と10進数を識別します。- 関連項目:
-
GUJARATI
public static final int GUJARATIGUJARATIの範囲と10進数を識別します。- 関連項目:
-
ORIYA
public static final int ORIYAORIYAの範囲と10進数を識別します。- 関連項目:
-
TAMIL
public static final int TAMILTAMILの範囲と10進数を識別します。- 関連項目:
-
TELUGU
public static final int TELUGUTELUGUの範囲と10進数を識別します。- 関連項目:
-
KANNADA
public static final int KANNADAKANNADAの範囲と10進数を識別します。- 関連項目:
-
MALAYALAM
public static final int MALAYALAMMALAYALAMの範囲と10進数を識別します。- 関連項目:
-
THAI
public static final int THAITHAIの範囲と10進数を識別します。- 関連項目:
-
LAO
public static final int LAOLAOの範囲と10進数を識別します。- 関連項目:
-
TIBETAN
public static final int TIBETANTIBETANの範囲と10進数を識別します。- 関連項目:
-
MYANMAR
public static final int MYANMARMYANMARの範囲と10進数を識別します。- 関連項目:
-
ETHIOPIC
public static final int ETHIOPICETHIOPICの範囲と10進数を識別します。- 関連項目:
-
KHMER
public static final int KHMERKHMERの範囲と10進数を識別します。- 関連項目:
-
MONGOLIAN
public static final int MONGOLIANMONGOLIANの範囲と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
-singleRange
がnull
である場合- 導入されたバージョン:
- 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
-ranges
がnull
である場合。- 導入されたバージョン:
- 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
またはdefaultContext
がnull
の場合- 導入されたバージョン:
- 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
を使用して、start
とstart + 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) { ...
このメソッドはビット・マスクベースの範囲だけをサポートしています。 enumベースの範囲の場合は
getRangeSet()
を呼び出してください。- 戻り値:
- 形状決定を行うすべての範囲に対する値。
-
getRangeSet
public Set<NumericShaper.Range> getRangeSet()形状決定を行うこのNumericShaper
のすべてのUnicode範囲を表すSet
を返します。- 戻り値:
- 形状決定を行うすべてのUnicode範囲。
- 導入されたバージョン:
- 1.7
-
hashCode
public int 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));
-
toString
public String toString()この形状決定要因を記述するString
を返します。 このメソッドはデバッグの場合にだけ使用します。
-