Module  java.desktop
软件包  java.awt.font

Class NumericShaper

  • All Implemented Interfaces:
    Serializable


    public final class NumericShaper
    extends Object
    implements Serializable
    NumericShaper类用于将Latin-1(欧洲)数字转换为其他Unicode十进制数字。 这个类的用户主要是希望使用国家数字形状呈现数据的人,但是使用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);
     

    基于位掩码和基于枚举的Unicode范围

    该类支持两种不同的编程接口来表示特定于脚本的数字的Unicode范围:基于位掩码的数据,例如NumericShaper.ARABIC和基于枚举的数据,例如NumericShaper.Range.ARABIC 可以通过ORing位掩码的常量来指定多个范围,例如:

     NumericShaper.ARABIC | NumericShaper.TAMIL
     
    或创建SetNumericShaper.Range常量,如:
     EnumSet.of(NumericShaper.Range.ARABIC, NumericShaper.Range.TAMIL)
     
    基于枚举的范围是基于位掩码的超级集。

    如果两个接口混合(包括序列化),则Unicode范围值映射到可以进行映射的对应方,如NumericShaper.Range.ARABIC从/到NumericShaper.ARABIC 如果指定了任何不可映射的范围值,例如NumericShaper.Range.BALINESE ,那么这些范围将被忽略。

    十进制数优先

    Unicode范围可能有多个十进制数字。 如果为同一个Unicode范围指定了多个十进制数字集,则其中一个集合的优先级如下。

    NumericShaper constants precedence Unicode Range NumericShaper Constants Precedence Arabic NumericShaper.ARABIC
    NumericShaper.EASTERN_ARABIC NumericShaper.EASTERN_ARABIC NumericShaper.Range.ARABIC
    NumericShaper.Range.EASTERN_ARABIC NumericShaper.Range.EASTERN_ARABIC Tai Tham NumericShaper.Range.TAI_THAM_HORA
    NumericShaper.Range.TAI_THAM_THAM NumericShaper.Range.TAI_THAM_THAM
    从以下版本开始:
    1.4
    另请参见:
    Serialized Form
    • Nested Class Summary

      Nested Classes  
      Modifier and Type Class 描述
      static class  NumericShaper.Range
      A NumericShaper.Range表示具有其自己的十进制数字的脚本的Unicode范围。
    • Field Summary

      Fields  
      Modifier and Type Field 描述
      static int ALL_RANGES
      识别所有范围,用于完整的上下文整形。
      static int ARABIC
      标识ARABIC范围和十进制基数。
      static int BENGALI
      标识BENGALI范围和十进制基数。
      static int DEVANAGARI
      标识DEVANAGARI范围和十进制基数。
      static int EASTERN_ARABIC
      标识ARABIC范围和ARABIC_EXTENDED十进制基数。
      static int ETHIOPIC
      标识ETHIOPIC范围和十进制基数。
      static int EUROPEAN
      确定拉丁语1(欧洲)和扩展范围以及拉丁语1(欧洲)十进制基数。
      static int GUJARATI
      标识GUJARATI范围和十进制基数。
      static int GURMUKHI
      标识GURMUKHI范围和十进制基数。
      static int KANNADA
      标识KANNADA范围和十进制基数。
      static int KHMER
      标识KHMER范围和十进制基数。
      static int LAO
      标识LAO范围和十进制基数。
      static int MALAYALAM
      标识MALAYALAM范围和十进制基数。
      static int MONGOLIAN
      标识MONGOLIAN范围和十进制基数。
      static int MYANMAR
      标识MYANMAR范围和十进制基数。
      static int ORIYA
      标识ORIYA范围和十进制基数。
      static int TAMIL
      标识TAMIL范围和十进制基数。
      static int TELUGU
      标识TELUGU范围和十进制基数。
      static int THAI
      标识THAI范围和十进制基数。
      static int TIBETAN
      标识TIBETAN范围和十进制基数。
    • 字段详细信息

      • EUROPEAN

        public static final int EUROPEAN
        确定拉丁语1(欧洲)和扩展范围以及拉丁语1(欧洲)十进制基数。
        另请参见:
        Constant Field Values
      • ARABIC

        public static final int ARABIC
        标识ARABIC范围和十进制基数。
        另请参见:
        Constant Field Values
      • EASTERN_ARABIC

        public static final int EASTERN_ARABIC
        标识ARABIC范围和ARABIC_EXTENDED十进制基数。
        另请参见:
        Constant Field Values
      • DEVANAGARI

        public static final int DEVANAGARI
        标识DEVANAGARI范围和十进制基数。
        另请参见:
        Constant Field Values
      • BENGALI

        public static final int BENGALI
        标识BENGALI范围和十进制基数。
        另请参见:
        Constant Field Values
      • GURMUKHI

        public static final int GURMUKHI
        标识GURMUKHI范围和十进制基数。
        另请参见:
        Constant Field Values
      • GUJARATI

        public static final int GUJARATI
        标识GUJARATI范围和十进制基数。
        另请参见:
        Constant Field Values
      • ORIYA

        public static final int ORIYA
        标识ORIYA范围和十进制基数。
        另请参见:
        Constant Field Values
      • TAMIL

        public static final int TAMIL
        标识TAMIL范围和十进制基数。
        另请参见:
        Constant Field Values
      • TELUGU

        public static final int TELUGU
        标识TELUGU范围和十进制基数。
        另请参见:
        Constant Field Values
      • KANNADA

        public static final int KANNADA
        标识KANNADA范围和十进制基数。
        另请参见:
        Constant Field Values
      • MALAYALAM

        public static final int MALAYALAM
        标识MALAYALAM范围和十进制基数。
        另请参见:
        Constant Field Values
      • THAI

        public static final int THAI
        标识THAI范围和十进制基数。
        另请参见:
        Constant Field Values
      • LAO

        public static final int LAO
        标识LAO范围和十进制基数。
        另请参见:
        Constant Field Values
      • TIBETAN

        public static final int TIBETAN
        标识TIBETAN范围和十进制基数。
        另请参见:
        Constant Field Values
      • MYANMAR

        public static final int MYANMAR
        标识MYANMAR范围和十进制基数。
        另请参见:
        Constant Field Values
      • ETHIOPIC

        public static final int ETHIOPIC
        标识ETHIOPIC范围和十进制基数。
        另请参见:
        Constant Field Values
      • KHMER

        public static final int KHMER
        标识KHMER范围和十进制基数。
        另请参见:
        Constant Field Values
      • MONGOLIAN

        public static final int MONGOLIAN
        标识MONGOLIAN范围和十进制基数。
        另请参见:
        Constant Field Values
      • ALL_RANGES

        public static final int ALL_RANGES
        识别所有范围,用于完整的上下文整形。

        该常数指定所有基于位掩码的范围。 使用EnumSet.allOf(NumericShaper.Range.class)指定所有基于枚举的范围。

        另请参见:
        Constant Field Values
    • 方法详细信息

      • getShaper

        public static NumericShaper getShaper​(int singleRange)
        返回提供的unicode范围的整形器。 所有Latin-1(EUROPEAN)数字转换为相应的十进制unicode数字。
        参数
        singleRange - 指定的Unicode范围
        结果
        非上下文数字整形器
        异常
        IllegalArgumentException - 如果范围不是单个范围
      • getShaper

        public static NumericShaper getShaper​(NumericShaper.Range singleRange)
        返回提供的Unicode范围的整形器。 所有Latin-1(EUROPEAN)数字都将转换为指定Unicode范围的相应十进制数字。
        参数
        singleRange - 由NumericShaper.Range常量给出的Unicode范围。
        结果
        一个非上下文的 NumericShaper
        异常
        NullPointerException - 如果 singleRangenull
        从以下版本开始:
        1.7
      • getContextualShaper

        public static NumericShaper getContextualShaper​(int ranges)
        返回提供的unicode范围的上下文整形器。 如果范围是所提供的范围之一,则将Latin-1(EUROPEAN)数字转换为与前一文本范围相对应的十进制数字。 多个范围由值或值组合表示,例如NumericShaper.ARABIC | NumericShaper.THAI 整形器以欧洲方式为起始语境,也就是说,如果字符串中任何强有力的方向文本之前遇到欧洲数字,则上下文被推定为欧洲,因此数字将不会变形。
        参数
        ranges - 指定的Unicode范围
        结果
        指定范围的整形器
      • getContextualShaper

        public static NumericShaper getContextualShaper​(Set<NumericShaper.Range> ranges)
        返回提供的Unicode范围的上下文整形器。 如果范围是提供的范围之一,则将Latin-1(EUROPEAN)数字转换为与前一文本范围相对应的十进制数字。

        整形器以欧洲方式为起始语境,也就是说,如果字符串中任何强有力的方向文本之前遇到欧洲数字,则上下文被推定为欧洲,因此数字将不会变形。

        参数
        ranges - 指定的Unicode范围
        结果
        指定范围的上下文整形器
        异常
        NullPointerException - 如果 rangesnull
        从以下版本开始:
        1.7
      • getContextualShaper

        public static NumericShaper getContextualShaper​(int ranges,
                                                        int defaultContext)
        返回提供的unicode范围的上下文整形器。 如果范围是提供的范围之一,则拉丁-1(欧洲)数字将被转换为对应于前一文本范围的十进制数字。 多个范围由值或值组合表示,例如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范围的上下文整形器。 如果范围是提供的范围之一,则Latin-1(EUROPEAN)数字将被转换为对应于前一文本范围的十进制数字。 整形器使用defaultContext作为起始上下文。
        参数
        ranges - 指定的Unicode范围
        defaultContext - 起始上下文,如 NumericShaper.Range.EUROPEAN
        结果
        指定Unicode范围的上下文整形器。
        异常
        NullPointerException - 如果是 rangesdefaultContextnull
        从以下版本开始:
        1.7
      • shape

        public void shape​(char[] text,
                          int start,
                          int count)
        转换在start和start + count之间发生的文本中的数字。
        参数
        text - 要转换的字符数组
        start - 索引为 text开始转换
        count - 要转换的字符数 text
        异常
        IndexOutOfBoundsException - 如果启动或启动+计数超出范围
        NullPointerException - 如果文本为空
      • shape

        public void shape​(char[] text,
                          int start,
                          int count,
                          int context)
        使用提供的上下文转换在start和start + count之间发生的文本中的数字。 如果整形器不是上下文整形器,则忽略上下文。
        参数
        text - 一个字符数组
        start - 索引到 text开始转换
        count - 要转换的字符数 text
        context - 转换为字符的上下文,如 NumericShaper.EUROPEAN
        异常
        IndexOutOfBoundsException - 如果启动或启动+计数超出范围
        NullPointerException - 如果文本为空
        IllegalArgumentException - 如果这是一个上下文整形器,并且指定的 context不是单个有效范围。
      • shape

        public void shape​(char[] text,
                          int start,
                          int count,
                          NumericShaper.Range context)
        使用提供的context转换出现在startstart + count之间的文本中的数字。 如果整形器不是上下文整形器,则忽略Context
        参数
        text - a char数组
        start - 索引到 text开始转换
        count -数量 char S IN text转换
        context - 转换为字符的上下文,如 NumericShaper.Range.EUROPEAN
        异常
        IndexOutOfBoundsException - 如果 startstart + count超出范围
        NullPointerException - 如果 textcontext为空
        从以下版本开始:
        1.7
      • isContextual

        public boolean isContextual​()
        返回一个 boolean指示此成形器是否内容形状。
        结果
        true如果这个整形器是上下文的; 否则为false
      • getRanges

        public int getRanges​()
        返回一个int ,将所有范围的值组合在一起。

        例如,要检查整形器是否形状为阿拉伯语,您将使用以下内容:

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

        请注意,此方法仅支持基于位掩码的范围。 请致电getRangeSet()查询基于枚举的范围。

        结果
        要形成的所有范围的值。
      • getRangeSet

        public Set<NumericShaper.Range> getRangeSet​()
        返回 Set代表所有的Unicode范围在此 NumericShaper将要成型。
        结果
        所有的Unicode范围都要形成。
        从以下版本开始:
        1.7
      • hashCode

        public int hashCode​()
        返回此整形器的哈希码。
        重写:
        hashCodeObject
        结果
        这个整形器的哈希码。
        另请参见:
        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));
         
        重写:
        equalsObject
        参数
        o -指定要比较的对象这个 NumericShaper
        结果
        true如果o是实例NumericShaper种形状以同样的方式; false否则。
        另请参见:
        Object.equals(java.lang.Object)
      • toString

        public String toString​()
        返回描述此整形器的String 此方法仅用于调试。
        重写:
        toStringObject
        结果
        一个 String描述这个整形器。