NumericShaper 클래스
NumericShaper 클래스
NumericShaper 클래스는 Latin-1(유럽) 숫자를 다른 유니코드 십진 숫자로 변환하는 데 사용해요. 주 사용자는 데이터를 내부적으로는 Latin-1(유럽) 숫자로 표현하지만, 표시할 때는 국가별 숫자 모양을 쓰고 싶은 사람들이에요. 이 클래스는 폐기된 숫자 모양 선택 문자(U+206E)를 해석하지 않아요.
본문
NumericShaper 인스턴스는 보통 TextAttribute 클래스의 NUMERIC_SHAPING 속성으로 텍스트에 적용돼요. 예를 들어 다음 코드는 아랍어 문맥에서 유럽 숫자를 아랍어 숫자로 변형하게 해요.
public final class NumericShaper
extends Object
implements Serializable
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 = ...;
// 모든 EUROPEAN 숫자(0 제외)를 ARABIC 숫자로 변형
NumericShaper shaper = NumericShaper.getShaper(NumericShaper.ARABIC);
shaper.shape(text, start, count);
// 앞 텍스트가 아랍어면 EUROPEAN 숫자를 ARABIC으로,
// 앞 텍스트가 타밀어면 TAMIL 숫자로,
// 앞 텍스트가 없거나 아랍어·타밀어도 아니면 그대로 둠
NumericShaper shaper = NumericShaper.getContextualShaper(NumericShaper.ARABIC | NumericShaper.TAMIL, NumericShaper.EUROPEAN);
shaper.shape(text, start, count);
비트 마스크·enum 기반 유니코드 범위
이 클래스는 스크립트별 숫자의 유니코드 범위를 나타내는 두 가지 프로그래밍 인터페이스를 지원해요. NumericShaper.ARABIC 같은 비트 마스크 기반 상수와 NumericShaper.Range.ARABIC 같은 enum 기반 상수가 있어요. 여러 범위는 비트 마스크 상수를 OR(NumericShaper.ARABIC | NumericShaper.TAMIL)하거나 EnumSet.of(NumericShaper.Range.ARABIC, NumericShaper.Range.TAMIL)처럼 Set으로 만들 수 있어요.
enum 기반 범위는 비트 마스크 기반 범위의 상위 집합이에요. 두 인터페이스를 섞으면(직렬화 포함) 매핑 가능한 유니코드 범위 값은 대응되는 값으로 매핑돼요. 매핑할 수 없는 범위(예: NumericShaper.Range.BALINESE)가 지정되면 그 범위는 무시돼요.
십진 숫자 우선순위
한 유니코드 범위에 여러 십진 숫자 집합이 있을 수 있어요. 같은 범위에 여러 숫자 집합이 지정되면 한 집합이 우선해요. 예를 들어 아랍어의 경우 EASTERN_ARABIC이 ARABIC보다 우선하고, 타이탐(Tai Tham)의 경우 TAI_THAM_THAM이 TAI_THAM_HORA보다 우선해요.
팩토리 메서드
getShaper(int ranges)— 지정한 범위로 숫자를 변형하는 shaper를 만들어요.getContextualShaper(int ranges)— 주변 문맥에 따라 변형할 범위를 선택하는 shaper를 만들어요.getContextualShaper(int ranges, int defaultContext)— 주변 문맥에 따라 변형을 결정하되 기본 문맥을 지정해요.shape(char[], int start, int count)— 지정한 문자 배열을 변형해요.shape(char[], int start, int count, int context)— 문맥을 지정해 배열을 변형해요.