org.apache.fop.fonts

## Class MultiByteFont

- java.lang.Object
- - org.apache.fop.fonts.Typeface
  - - org.apache.fop.fonts.CustomFont
    - - org.apache.fop.fonts.CIDFont
      - - org.apache.fop.fonts.MultiByteFont

- All Implemented Interfaces:
    Positionable, Substitutable, FontDescriptor, FontMetrics, MutableFont
  Direct Known Subclasses:
    CFFToType1Font

      public class MultiByteFont
      extends CIDFont
      implements Substitutable, Positionable

  Generic MultiByte (CID) font

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected java.awt.Rectangle[]` | `boundingBoxes` Contains the character bounding boxes for all characters in the font
    `protected CIDSet` | `cidSet`

    - ### Fields inherited from class org.apache.fop.fonts.CIDFont

      `width`

    - ### Fields inherited from class org.apache.fop.fonts.CustomFont

      `additionalEncodings, cmap, svgs, unencodedCharacters`

    - ### Fields inherited from class org.apache.fop.fonts.Typeface

      `eventListener, NOT_FOUND`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `MultiByteFont(InternalResourceResolver resourceResolver, EmbeddingMode embeddingMode)` Default constructor

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `addPrivateUseMapping(int pu, int gi)` Add a private use mapping {PU,GI} to the existing character map.
    `GlyphSequence` | `charSequenceToGlyphSequence(java.lang.CharSequence charSequence, java.util.List associations)`
    `int` | `findGlyphIndex(int c)` Returns the glyph index for a Unicode character.
    `java.awt.Rectangle` | `getBoundingBox(int glyphIndex, int size)` Returns the bounding box of the glyph at the given index, for the given font size.
    `protected char[]` | `getChars()`
    `CIDSet` | `getCIDSet()` Returns the subset information for this font.
    `CIDFontType` | `getCIDType()` Returns the type of the CID font.
    `java.io.InputStream` | `getCmapStream()`
    `int` | `getDefaultWidth()` Returns the default width for this font.
    `java.lang.String` | `getEmbedFontName()` Returns the font name for font embedding (may include a prefix, Example: "1E28bcArialMT").
    `java.lang.String` | `getEncodingName()` Get the encoding of the font.
    `GlyphDefinitionTable` | `getGDEF()` Obtain glyph definition table.
    `int` | `getGIDFromChar(char ch)` Gets the original glyph index in the font from a character.
    `protected java.util.BitSet` | `getGlyphIndices()`
    `GlyphPositioningTable` | `getGPOS()` Obtain glyph positioning table.
    `GlyphSubstitutionTable` | `getGSUB()` Obtain glyph substitution table.
    `java.lang.String` | `getOrdering()` Returns a font name for use within a registry.
    `java.lang.String` | `getRegistry()` Returns the name of the issuer of the font.
    `int` | `getSupplement()` Returns the supplement number of the character collection.
    `SVGGlyphData` | `getSVG(int c)`
    `java.lang.String` | `getTTCName()` Returns the TrueType Collection Name.
    `char` | `getUnicodeFromGID(int glyphIndex)` Returns the character from it's original glyph index in the font
    `protected int[]` | `getUnscaledWidths(GlyphSequence gs)`
    `java.util.LinkedHashMap<java.lang.Integer,java.lang.String>` | `getUsedGlyphNames()`
    `java.util.Map<java.lang.Integer,java.lang.Integer>` | `getUsedGlyphs()` Returns a Map of used Glyphs.
    `int` | `getWidth(int i, int size)` Return the width (in 1/1000ths of point size) of the character at code point i.
    `int[]` | `getWidths()` Return the array of widths.
    `java.util.Map<java.lang.Integer,java.lang.Integer>` | `getWidthsMap()`
    `boolean` | `hasChar(char c)` Determines whether this font contains a particular character/glyph.
    `boolean` | `hasCodePoint(int cp)` Determines whether this font contains a particular code point/glyph.
    `boolean` | `hasFeature(int tableType, java.lang.String script, java.lang.String language, java.lang.String feature)` Determine if metrics supports specific feature in specified font table.
    `boolean` | `isEmbeddable()` Indicates if this font may be embedded.
    `boolean` | `isOTFFile()`
    `boolean` | `isSubsetEmbedded()` Indicates whether this font is subset embedded.
    `char` | `mapChar(char c)` Map a Unicode character to a code point in the font.
    `int` | `mapCodePoint(int cp)` Map a Unicode code point to a code point in the font.
    `void` | `mapUsedGlyphName(int gid, java.lang.String value)`
    `int[][]` | `performPositioning(java.lang.CharSequence cs, java.lang.String script, java.lang.String language)` Perform glyph positioning using an implied font size.
    `int[][]` | `performPositioning(java.lang.CharSequence cs, java.lang.String script, java.lang.String language, int fontSize)` Perform glyph positioning.
    `boolean` | `performsPositioning()` Determines if font performs glyph positioning.
    `boolean` | `performsSubstitution()` Determines if font performs glyph substitution.
    `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.
    `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.
    `void` | `setBBoxArray(java.awt.Rectangle[] boundingBoxes)` Sets the bounding boxes array.
    `void` | `setCIDType(CIDFontType cidType)` Sets the CIDType.
    `void` | `setDefaultWidth(int defaultWidth)` Sets the defaultWidth.
    `void` | `setGDEF(GlyphDefinitionTable gdef)` Establishes the glyph definition table.
    `void` | `setGPOS(GlyphPositioningTable gpos)` Establishes the glyph positioning table.
    `void` | `setGSUB(GlyphSubstitutionTable gsub)` Establishes the glyph substitution table.
    `void` | `setIsOTFFile(boolean isOTFFile)`
    `void` | `setTTCName(java.lang.String ttcName)` Sets the the TrueType Collection Name.
    `void` | `setWidthArray(int[] wds)` Sets the width array.

    - ### Methods inherited from class org.apache.fop.fonts.CIDFont

      `isMultiByte`

    - ### Methods inherited from class org.apache.fop.fonts.CustomFont

      `addUnencodedCharacter, getAdditionalEncoding, getAdditionalEncodingCount, getAscender, getAscender, getCapHeight, getCapHeight, getCMap, getDescender, getDescender, getEmbeddingMode, getEmbedFileURI, getEmbedResourceName, getFamilyNames, getFirstChar, getFlags, getFontBBox, getFontName, getFontSubName, getFontType, getFontURI, getFullName, getInputStream, getItalicAngle, getKerningInfo, getLastChar, getMissingWidth, getSimulateStyle, getStemV, getStrikeoutPosition, getStrikeoutThickness, getStrippedFontName, getUnderlinePosition, getUnderlineThickness, getWeight, getXHeight, hasAdditionalEncodings, hasKerningInfo, hasSVG, isAdvancedEnabled, isKerningEnabled, isSymbolicFont, mapUnencodedChar, putKerningEntry, replaceKerningMap, setAdvancedEnabled, setAscender, setCapHeight, setCMap, setDescender, setEmbeddingMode, setEmbedResourceName, setEmbedURI, setFamilyNames, setFirstChar, setFlags, setFontBBox, setFontName, setFontSubFamilyName, setFontType, setFontURI, setFullName, setItalicAngle, setKerningEnabled, setLastChar, setMissingWidth, setSimulateStyle, setStemV, setStrikeoutPosition, setStrikeoutThickness, setSVG, setUnderlinePosition, setUnderlineThickness, setWeight, setXHeight`

    - ### Methods inherited from class org.apache.fop.fonts.Typeface

      `getMaxAscent, hadMappingOperations, isCID, notifyMapOperation, setEventListener, toString, warnMissingGlyph`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface org.apache.fop.fonts.FontMetrics

      `getMaxAscent`

- - ### Field Detail

    - #### cidSet

          protected final CIDSet cidSet

    - #### boundingBoxes

          protected java.awt.Rectangle[] boundingBoxes

      Contains the character bounding boxes for all characters in the font

  - ### Constructor Detail

    - #### MultiByteFont

          public MultiByteFont(InternalResourceResolver resourceResolver,
                               EmbeddingMode embeddingMode)

      Default constructor

  - ### 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.

    - #### 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

    - #### 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()

    - #### getSVG

          public SVGGlyphData getSVG(int c)

Copyright 1999-2022 The Apache Software Foundation. All Rights Reserved.