Class MultiByteFont

    • Field Detail

      • log

        private static final org.apache.commons.logging.Log log
        logging instance
      • ttcName

        private java.lang.String ttcName
      • encoding

        private java.lang.String encoding
      • defaultWidth

        private int defaultWidth
      • cidSet

        protected final CIDSet cidSet
      • numMapped

        private int numMapped
      • numUnmapped

        private int numUnmapped
      • nextPrivateUse

        private int nextPrivateUse
      • firstPrivate

        private int firstPrivate
      • lastPrivate

        private int lastPrivate
      • firstUnmapped

        private int firstUnmapped
      • lastUnmapped

        private int lastUnmapped
      • boundingBoxes

        protected java.awt.Rectangle[] boundingBoxes
        Contains the character bounding boxes for all characters in the font
      • isOTFFile

        private boolean isOTFFile
      • NUM_MOST_LIKELY_GLYPHS

        private static final int NUM_MOST_LIKELY_GLYPHS
        See Also:
        Constant Field Values
      • mostLikelyGlyphs

        private int[] mostLikelyGlyphs
      • usedGlyphNames

        private java.util.LinkedHashMap<java.lang.Integer,​java.lang.String> usedGlyphNames
    • Method Detail

      • getDefaultWidth

        public int getDefaultWidth()
        Returns the default width for this font.
        Overrides:
        getDefaultWidth in class CIDFont
        Returns:
        the default width
      • getRegistry

        public java.lang.String getRegistry()
        Returns the name of the issuer of the font.
        Specified by:
        getRegistry in class CIDFont
        Returns:
        a String identifying an issuer of character collections - for example, Adobe
      • getOrdering

        public java.lang.String getOrdering()
        Returns a font name for use within a registry.
        Specified by:
        getOrdering in class CIDFont
        Returns:
        a String that uniquely names a character collection issued by a specific registry - for example, Japan1.
      • getSupplement

        public int getSupplement()
        Returns the supplement number of the character collection.
        Specified by:
        getSupplement in class CIDFont
        Returns:
        the supplement number
      • getCIDType

        public CIDFontType getCIDType()
        Returns the type of the CID font.
        Specified by:
        getCIDType in class CIDFont
        Returns:
        the type of the CID font
      • setIsOTFFile

        public void setIsOTFFile​(boolean isOTFFile)
      • isOTFFile

        public boolean isOTFFile()
      • setCIDType

        public void setCIDType​(CIDFontType cidType)
        Sets the CIDType.
        Parameters:
        cidType - The cidType to set
      • getEmbedFontName

        public java.lang.String getEmbedFontName()
        Returns the font name for font embedding (may include a prefix, Example: "1E28bcArialMT").
        Specified by:
        getEmbedFontName in interface FontMetrics
        Overrides:
        getEmbedFontName in class CustomFont
        Returns:
        the name for font embedding
      • isEmbeddable

        public boolean isEmbeddable()
        Indicates if this font may be embedded.
        Specified by:
        isEmbeddable in interface FontDescriptor
        Returns:
        True, if embedding is possible/permitted
      • isSubsetEmbedded

        public boolean isSubsetEmbedded()
        Description copied from interface: FontDescriptor
        Indicates whether this font is subset embedded.
        Specified by:
        isSubsetEmbedded in interface FontDescriptor
        Returns:
        true if this font is subset embedded
      • getCIDSet

        public CIDSet getCIDSet()
        Returns the subset information for this font.
        Specified by:
        getCIDSet in class CIDFont
        Returns:
        the subset information
      • mapUsedGlyphName

        public void mapUsedGlyphName​(int gid,
                                     java.lang.String value)
      • getUsedGlyphNames

        public java.util.LinkedHashMap<java.lang.Integer,​java.lang.String> getUsedGlyphNames()
      • getEncodingName

        public java.lang.String getEncodingName()
        Get the encoding of the font.
        Specified by:
        getEncodingName in class Typeface
        Returns:
        the encoding
      • getWidth

        public int getWidth​(int i,
                            int size)
        Return the width (in 1/1000ths of point size) of the character at code point i.
        Specified by:
        getWidth in interface FontMetrics
        Parameters:
        i - code point index
        size - font size
        Returns:
        the width of the character
      • getWidths

        public int[] getWidths()
        Return the array of widths.

        This is used to get an array for inserting in an output format. It should not be used for lookup.

        Specified by:
        getWidths in interface FontMetrics
        Returns:
        an array of widths
      • getBoundingBox

        public java.awt.Rectangle getBoundingBox​(int glyphIndex,
                                                 int size)
        Description copied from interface: FontMetrics
        Returns the bounding box of the glyph at the given index, for the given font size.
        Specified by:
        getBoundingBox in interface FontMetrics
        Parameters:
        glyphIndex - glyph index
        size - font size
        Returns:
        the scaled bounding box scaled in 1/1000ths of the given size
      • findGlyphIndex

        public int findGlyphIndex​(int c)
        Returns the glyph index for a Unicode character. The method returns 0 if there's no such glyph in the character map.
        Parameters:
        c - the Unicode character index
        Returns:
        the glyph index (or 0 if the glyph is not available)
      • addPrivateUseMapping

        protected void addPrivateUseMapping​(int pu,
                                            int gi)
        Add a private use mapping {PU,GI} to the existing character map. N.B. Does not insert in order, merely appends to end of existing map.
      • createPrivateUseMapping

        private int createPrivateUseMapping​(int gi)
        Given a glyph index, create a new private use mapping, augmenting the bfentries table. This is needed to accommodate the presence of an (output) glyph index in a complex script glyph substitution that does not correspond to a character in the font's CMAP. The creation of such private use mappings is deferred until an attempt is actually made to perform the reverse lookup from the glyph index. This is necessary in order to avoid exhausting the private use space on fonts containing many such non-mapped glyph indices, if these mappings had been created statically at font load time.
        Parameters:
        gi - glyph index
      • findCharacterFromGlyphIndex

        private int findCharacterFromGlyphIndex​(int gi,
                                                boolean augment)
        Returns the Unicode scalar value that corresponds to the glyph index. If more than one correspondence exists, then the first one is returned (ordered by bfentries[]).
        Parameters:
        gi - glyph index
        Returns:
        unicode scalar value
      • findCharacterFromGlyphIndex

        private int findCharacterFromGlyphIndex​(int gi)
      • getGlyphIndices

        protected java.util.BitSet getGlyphIndices()
      • getChars

        protected char[] getChars()
      • mapChar

        public char mapChar​(char c)
        Map a Unicode character to a code point in the font.
        Specified by:
        mapChar in class Typeface
        Parameters:
        c - character to map
        Returns:
        the mapped character
      • mapCodePoint

        public int mapCodePoint​(int cp)
        Map a Unicode code point to a code point in the font.
        Specified by:
        mapCodePoint in class CIDFont
        Parameters:
        cp - code point to map
        Returns:
        the mapped code point
      • hasChar

        public boolean hasChar​(char c)
        Determines whether this font contains a particular character/glyph.
        Specified by:
        hasChar in class Typeface
        Parameters:
        c - character to check
        Returns:
        True if the character is supported, Falso otherwise
      • hasCodePoint

        public boolean hasCodePoint​(int cp)
        Determines whether this font contains a particular code point/glyph.
        Specified by:
        hasCodePoint in class CIDFont
        Parameters:
        cp - character to check
        Returns:
        True if the character is supported, False otherwise
      • setDefaultWidth

        public void setDefaultWidth​(int defaultWidth)
        Sets the defaultWidth.
        Parameters:
        defaultWidth - The defaultWidth to set
      • getTTCName

        public java.lang.String getTTCName()
        Returns the TrueType Collection Name.
        Returns:
        the TrueType Collection Name
      • setTTCName

        public void setTTCName​(java.lang.String ttcName)
        Sets the the TrueType Collection Name.
        Parameters:
        ttcName - the TrueType Collection Name
      • setWidthArray

        public void setWidthArray​(int[] wds)
        Sets the width array.
        Parameters:
        wds - array of widths.
      • setBBoxArray

        public void setBBoxArray​(java.awt.Rectangle[] boundingBoxes)
        Sets the bounding boxes array.
        Parameters:
        boundingBoxes - array of bounding boxes.
      • getUsedGlyphs

        public java.util.Map<java.lang.Integer,​java.lang.Integer> getUsedGlyphs()
        Returns a Map of used Glyphs.
        Specified by:
        getUsedGlyphs in class CustomFont
        Returns:
        Map Map of used Glyphs
      • getUnicodeFromGID

        public char getUnicodeFromGID​(int glyphIndex)
        Returns the character from it's original glyph index in the font
        Specified by:
        getUnicodeFromGID in class CustomFont
        Parameters:
        glyphIndex - The original index of the character
        Returns:
        The character
      • getGIDFromChar

        public int getGIDFromChar​(char ch)
        Gets the original glyph index in the font from a character.
        Parameters:
        ch - The character
        Returns:
        The glyph index in the font
      • setGDEF

        public void setGDEF​(GlyphDefinitionTable gdef)
        Establishes the glyph definition table.
        Parameters:
        gdef - the glyph definition table to be used by this font
      • getGDEF

        public GlyphDefinitionTable getGDEF()
        Obtain glyph definition table.
        Returns:
        glyph definition table or null if none is associated with font
      • setGSUB

        public void setGSUB​(GlyphSubstitutionTable gsub)
        Establishes the glyph substitution table.
        Parameters:
        gsub - the glyph substitution table to be used by this font
      • getGSUB

        public GlyphSubstitutionTable getGSUB()
        Obtain glyph substitution table.
        Returns:
        glyph substitution table or null if none is associated with font
      • setGPOS

        public void setGPOS​(GlyphPositioningTable gpos)
        Establishes the glyph positioning table.
        Parameters:
        gpos - the glyph positioning table to be used by this font
      • getGPOS

        public GlyphPositioningTable getGPOS()
        Obtain glyph positioning table.
        Returns:
        glyph positioning table or null if none is associated with font
      • performsSubstitution

        public boolean performsSubstitution()
        Determines if font performs glyph substitution.
        Specified by:
        performsSubstitution in interface Substitutable
        Returns:
        true if performs substitution.
      • performSubstitution

        public java.lang.CharSequence performSubstitution​(java.lang.CharSequence charSequence,
                                                          java.lang.String script,
                                                          java.lang.String language,
                                                          java.util.List associations,
                                                          boolean retainControls)
        Perform substitutions on characters to effect glyph substitution. If some substitution is performed, it entails mapping from one or more input characters denoting textual character information to one or more output character codes denoting glyphs in this font, where the output character codes may make use of private character code values that have significance only for this font.
        Specified by:
        performSubstitution in interface Substitutable
        Parameters:
        charSequence - character sequence to map to output font encoding character sequence
        script - a script identifier
        language - a language identifier
        associations - optional list to receive list of character associations
        retainControls - if true, then retain control characters and their glyph mappings, otherwise remove
        Returns:
        output sequence (represented as a character sequence, where each character in the returned sequence denotes "font characters", i.e., character codes that map directly (1-1) to their associated glyphs
      • charSequenceToGlyphSequence

        public GlyphSequence charSequenceToGlyphSequence​(java.lang.CharSequence charSequence,
                                                         java.util.List associations)
      • reorderCombiningMarks

        public java.lang.CharSequence reorderCombiningMarks​(java.lang.CharSequence cs,
                                                            int[][] gpa,
                                                            java.lang.String script,
                                                            java.lang.String language,
                                                            java.util.List associations)
        Reorder combining marks in character sequence so that they precede (within the sequence) the base character to which they are applied. N.B. In the case of LTR segments, marks are not reordered by this, method since when the segment is reversed by BIDI processing, marks are automatically reordered to precede their base character.
        Specified by:
        reorderCombiningMarks in interface Substitutable
        Parameters:
        cs - character sequence within which combining marks to be reordered
        gpa - associated glyph position adjustments (also reordered)
        script - a script identifier
        language - a language identifier
        associations - optional list of associations to be reordered
        Returns:
        output sequence containing reordered "font characters"
      • getUnscaledWidths

        protected int[] getUnscaledWidths​(GlyphSequence gs)
      • performsPositioning

        public boolean performsPositioning()
        Determines if font performs glyph positioning.
        Specified by:
        performsPositioning in interface Positionable
        Returns:
        true if performs positioning
      • performPositioning

        public int[][] performPositioning​(java.lang.CharSequence cs,
                                          java.lang.String script,
                                          java.lang.String language,
                                          int fontSize)
        Perform glyph positioning.
        Specified by:
        performPositioning in interface Positionable
        Parameters:
        cs - character sequence to map to position offsets (advancement adjustments)
        script - a script identifier
        language - a language identifier
        fontSize - font size
        Returns:
        array (sequence) of 4-tuples of placement [PX,PY] and advance [AX,AY] adjustments, in that order, with one 4-tuple for each element of glyph sequence, or null if no non-zero adjustment applies
      • performPositioning

        public int[][] performPositioning​(java.lang.CharSequence cs,
                                          java.lang.String script,
                                          java.lang.String language)
        Perform glyph positioning using an implied font size.
        Specified by:
        performPositioning in interface Positionable
        Parameters:
        cs - character sequence to map to position offsets (advancement adjustments)
        script - a script identifier
        language - a language identifier
        Returns:
        array (sequence) of 4-tuples of placement [PX,PY] and advance [AX,AY] adjustments, in that order, with one 4-tuple for each element of glyph sequence, or null if no non-zero adjustment applies
      • scaleAdjustments

        private int[][] scaleAdjustments​(int[][] adjustments,
                                         int fontSize)
      • mapCharsToGlyphs

        private GlyphSequence mapCharsToGlyphs​(java.lang.CharSequence cs,
                                               java.util.List associations)
        Map sequence CS, comprising a sequence of UTF-16 encoded Unicode Code Points, to an output character sequence GS, comprising a sequence of Glyph Indices. N.B. Unlike mapChar(), this method does not make use of embedded subset encodings.
        Parameters:
        cs - a CharSequence containing UTF-16 encoded Unicode characters
      • mapGlyphsToChars

        private java.lang.CharSequence mapGlyphsToChars​(GlyphSequence gs)
        Map sequence GS, comprising a sequence of Glyph Indices, to output sequence CS, comprising a sequence of UTF-16 encoded Unicode Code Points.
        Parameters:
        gs - a GlyphSequence containing glyph indices
      • normalize

        private java.lang.CharSequence normalize​(java.lang.CharSequence cs,
                                                 java.util.List associations)
      • hasDecomposable

        private boolean hasDecomposable​(java.lang.CharSequence cs)
      • decompose

        private java.lang.CharSequence decompose​(java.lang.CharSequence cs,
                                                 java.util.List associations)
      • elideControls

        private static GlyphSequence elideControls​(GlyphSequence gs)
        Removes the glyphs associated with elidable control characters. All the characters in an association must be elidable in order to remove the corresponding glyph.
        Parameters:
        gs - GlyphSequence that may contains the elidable glyphs
        Returns:
        GlyphSequence without the elidable glyphs
      • hasElidableControl

        private static boolean hasElidableControl​(GlyphSequence gs)
      • isElidableControl

        private static boolean isElidableControl​(int ch)
      • hasFeature

        public boolean hasFeature​(int tableType,
                                  java.lang.String script,
                                  java.lang.String language,
                                  java.lang.String feature)
        Description copied from class: Typeface
        Determine if metrics supports specific feature in specified font table.
        Specified by:
        hasFeature in interface FontMetrics
        Overrides:
        hasFeature in class Typeface
        Parameters:
        tableType - type of table (GSUB, GPOS, ...), see GlyphTable.GLYPH_TABLE_TYPE_*
        script - to qualify feature lookup
        language - to qualify feature lookup
        feature - to test
        Returns:
        true if feature supported (and has at least one lookup)
      • getWidthsMap

        public java.util.Map<java.lang.Integer,​java.lang.Integer> getWidthsMap()
      • getCmapStream

        public java.io.InputStream getCmapStream()