Package 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 Description protected java.awt.Rectangle[]
boundingBoxes
Contains the character bounding boxes for all characters in the fontprotected CIDSet
cidSet
-
Fields inherited from class org.apache.fop.fonts.CustomFont
additionalEncodings, cmap, unencodedCharacters
-
Fields inherited from class org.apache.fop.fonts.Typeface
eventListener, NOT_FOUND
-
-
Constructor Summary
Constructors Constructor Description MultiByteFont(InternalResourceResolver resourceResolver, EmbeddingMode embeddingMode)
Default constructor
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method 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.java.lang.String
getTTCName()
Returns the TrueType Collection Name.char
getUnicodeFromGID(int glyphIndex)
Returns the character from it's original glyph index in the fontprotected 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, 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, 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 classCIDFont
- Returns:
- the default width
-
getRegistry
public java.lang.String getRegistry()
Returns the name of the issuer of the font.- Specified by:
getRegistry
in classCIDFont
- 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 classCIDFont
- 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 classCIDFont
- Returns:
- the supplement number
-
getCIDType
public CIDFontType getCIDType()
Returns the type of the CID font.- Specified by:
getCIDType
in classCIDFont
- 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 interfaceFontMetrics
- Overrides:
getEmbedFontName
in classCustomFont
- Returns:
- the name for font embedding
-
isEmbeddable
public boolean isEmbeddable()
Indicates if this font may be embedded.- Specified by:
isEmbeddable
in interfaceFontDescriptor
- 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 interfaceFontDescriptor
- Returns:
- true if this font is subset embedded
-
getCIDSet
public CIDSet getCIDSet()
Returns the subset information for this font.
-
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 classTypeface
- 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 interfaceFontMetrics
- Parameters:
i
- code point indexsize
- 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 interfaceFontMetrics
- 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 interfaceFontMetrics
- Parameters:
glyphIndex
- glyph indexsize
- 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.
-
mapCodePoint
public int mapCodePoint(int cp)
Map a Unicode code point to a code point in the font.- Specified by:
mapCodePoint
in classCIDFont
- 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.
-
hasCodePoint
public boolean hasCodePoint(int cp)
Determines whether this font contains a particular code point/glyph.- Specified by:
hasCodePoint
in classCIDFont
- 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 classCustomFont
- 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 classCustomFont
- 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 interfaceSubstitutable
- 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 interfaceSubstitutable
- Parameters:
charSequence
- character sequence to map to output font encoding character sequencescript
- a script identifierlanguage
- a language identifierassociations
- optional list to receive list of character associationsretainControls
- 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 interfaceSubstitutable
- Parameters:
cs
- character sequence within which combining marks to be reorderedgpa
- associated glyph position adjustments (also reordered)script
- a script identifierlanguage
- a language identifierassociations
- 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 interfacePositionable
- 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 interfacePositionable
- Parameters:
cs
- character sequence to map to position offsets (advancement adjustments)script
- a script identifierlanguage
- a language identifierfontSize
- 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 interfacePositionable
- Parameters:
cs
- character sequence to map to position offsets (advancement adjustments)script
- a script identifierlanguage
- 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 interfaceFontMetrics
- Overrides:
hasFeature
in classTypeface
- Parameters:
tableType
- type of table (GSUB, GPOS, ...), see GlyphTable.GLYPH_TABLE_TYPE_*script
- to qualify feature lookuplanguage
- to qualify feature lookupfeature
- 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()
-
-