- すべての実装されたインタフェース:
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 intARABICの範囲と10進数を識別します。static final intBENGALIの範囲と10進数を識別します。static final intDEVANAGARIの範囲と10進数を識別します。static final intARABICの範囲とARABIC_EXTENDEDの10進数を識別します。static final intETHIOPICの範囲と10進数を識別します。static final intLatin-1 (ヨーロッパ言語)と拡張範囲、およびLatin-1 (ヨーロッパ言語)の10進数を識別します。static final intGUJARATIの範囲と10進数を識別します。static final intGURMUKHIの範囲と10進数を識別します。static final intKANNADAの範囲と10進数を識別します。static final intKHMERの範囲と10進数を識別します。static final intLAOの範囲と10進数を識別します。static final intMALAYALAMの範囲と10進数を識別します。static final intMONGOLIANの範囲と10進数を識別します。static final intMYANMARの範囲と10進数を識別します。static final intORIYAの範囲と10進数を識別します。static final intTAMILの範囲と10進数を識別します。static final intTELUGUの範囲と10進数を識別します。static final intTHAIの範囲と10進数を識別します。static final intTIBETANの範囲と10進数を識別します。 -
メソッドのサマリー
修飾子と型メソッド説明boolean指定されたオブジェクトがNumericShaperのインスタンスで、範囲表現、ビット・マスク、または列挙と関係なく、これと同じ方法で形状決定を行う場合はtrueを返します。static NumericShapergetContextualShaper(int ranges) 指定されたUnicodeの1つまたは複数の範囲に対する、コンテキスト依存の形状決定要因を返します。static NumericShapergetContextualShaper(int ranges, int defaultContext) 指定されたUnicodeの1つまたは複数の範囲に対する、コンテキスト依存の形状決定要因を返します。static NumericShapergetContextualShaper(Set<NumericShaper.Range> ranges) 指定されたUnicodeの1つまたは複数の範囲に対する、コンテキスト依存の形状決定要因を返します。static NumericShapergetContextualShaper(Set<NumericShaper.Range> ranges, NumericShaper.Range defaultContext) 指定されたUnicodeの1つまたは複数の範囲に対する、コンテキスト依存の形状決定要因を返します。int形状決定を行うすべての範囲に対する値の論理和を求めるintを返します。形状決定を行うこのNumericShaperのすべてのUnicode範囲を表すSetを返します。static NumericShapergetShaper(int singleRange) 指定されたUnicodeの範囲に対する形状決定要因を返します。static NumericShapergetShaper(NumericShaper.Range singleRange) 指定されたUnicodeの範囲に対する形状決定要因を返します。inthashCode()この形状決定要因のハッシュ・コードを返します。booleanこの形状決定要因がコンテキスト依存かどうかを示すbooleanを返します。voidshape(char[] text, int start, int count) startとstart+countの間に出現する、テキスト内の数字を変換します。voidshape(char[] text, int start, int count, int context) 指定されたコンテキストを使用して、startとstart+countの間に出現するテキスト内の数字を変換します。voidshape(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の範囲- 戻り値:
- コンテキスト依存でない数字の形状決定要因
- throws:
IllegalArgumentException- 範囲が1つでない場合
-
getShaper
public static NumericShaper getShaper(NumericShaper.Range singleRange) 指定されたUnicodeの範囲に対する形状決定要因を返します。 Latin-1 (EUROPEAN)の数字はすべて、指定されたUnicode範囲の、対応する10進数に変換されます。- パラメータ:
singleRange-NumericShaper.Range定数で指定されたUnicode範囲。- 戻り値:
- コンテキスト依存でない
NumericShaper。 - throws:
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の範囲- 戻り値:
- 指定された範囲に対するコンテキスト依存の形状決定要因
- throws:
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の範囲に対する形状決定要因。
- throws:
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範囲に対するコンテキスト依存の形状決定要因。
- throws:
NullPointerException-rangesまたはdefaultContextがnullの場合- 導入されたバージョン:
- 1.7
-
shape
public void shape(char[] text, int start, int count) startとstart+countの間に出現する、テキスト内の数字を変換します。- パラメータ:
text- 変換する文字の配列start- 変換を開始するtext内のインデックスcount-text内の変換する文字数- throws:
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のような文字の変換先のコンテキスト- throws:
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のような文字の変換先のコンテキスト- throws:
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を返します。 このメソッドはデバッグの場合にだけ使用します。
-