org.apache.fop.fonts.truetype

## Class OpenFont

- java.lang.Object
- - org.apache.fop.fonts.truetype.OpenFont

Direct Known Subclasses:
  OTFFile, TTFFile

    public abstract class OpenFont
    extends Object

### Nested Class Summary

Nested Classes
`static class` `OpenFont.PostScriptVersion` Version of the PostScript table (post) contained in this font.

### Field Summary

Fields
`protected OTFAdvancedTypographicTableReader` `advancedTableReader`
`protected boolean` `cid`
`protected Map<OFTableName,OFDirTabEntry>` `dirTabs` Table directory
`protected String` `embedFontName`
`protected Set<String>` `familyNames`
`protected FontFileReader` `fontFile` The FontFileReader used to read this TrueType font.
`protected String` `fullName`
`protected long` `lastLoca` Offset to last loca
`protected int` `locaFormat`
`protected org.apache.commons.logging.Log` `log` logging instance
`protected OFMtxEntry[]` `mtxTab` Contains glyph data
`protected int` `nhmtx`
`protected String` `notice`
`protected int` `numberOfGlyphs`
`protected String` `postScriptName`
`protected String` `subFamilyName`
`protected Map<Integer,SVGGlyphData>` `svgs`
`static boolean` `TRACE_ENABLED` Set to true to get even more debug output than with level DEBUG
`protected List<org.apache.fop.fonts.truetype.OpenFont.UnicodeMapping>` `unicodeMappings`
`protected boolean` `useAdvanced`
`protected boolean` `useKerning`

### Constructor Summary

Constructors
Constructor and Description
`OpenFont()`
`OpenFont(boolean useKerning, boolean useAdvanced)` Constructor

### Method Summary

All Methods Static Methods Instance Methods Abstract Methods Concrete Methods
`protected boolean` `checkTTC(String tag, String name)` Check if this is a TrueType collection and that the given name exists in the collection.
`int` `convertTTFUnit2PDFUnit(int n)` Convert from truetype unit to pdf unit based on the unitsPerEm field in the "head" table
`protected void` `createCMaps()`
`protected void` `determineAscDesc()` Determines the right source for the ascender and descender values.
`Map<Integer,Map<Integer,Integer>>` `getAnsiKerning()` Returns the ANSI kerning table.
`int[]` `getBBox(int glyphIndex)` Returns an array (xMin, yMin, xMax, yMax) for a glyph.
`int[]` `getBBoxRaw()` Returns the original bounding box values from the HEAD table
`Rectangle[]` `getBoundingBoxes()`
`int` `getCapHeight()` Returns the CapHeight attribute of the font.
`String` `getCharSetName()` Returns the name of the character set used.
`int` `getCharWidth(int idx)` Returns the width of a given character.
`int` `getCharWidthRaw(int idx)` Returns the width of a given character in raw units
`List<CMapSegment>` `getCMaps()` Returns this font's character to glyph mapping.
`String` `getCopyrightNotice()`
`OFDirTabEntry` `getDirectoryEntry(OFTableName name)` Obtain directory table entry.
`String` `getEmbedFontName()`
`Set<String>` `getFamilyNames()` Returns the font family names of the font.
`short` `getFirstChar()` Returns the index of the first character.
`int` `getFlags()` Returns the Flags attribute of the font.
`int[]` `getFontBBox()`
`String` `getFullName()` Returns the full name of the font.
`GlyphDefinitionTable` `getGDEF()` Returns the GDEF table or null if none present.
`GlyphPositioningTable` `getGPOS()` Returns the GPOS table or null if none present.
`GlyphSubstitutionTable` `getGSUB()` Returns the GSUB table or null if none present.
`String` `getItalicAngle()` Returns the ItalicAngle attribute of the font.
`Map<Integer,Map<Integer,Integer>>` `getKerning()` Returns the kerning table.
`short` `getLastChar()` Returns the index of the last character, but this is for WinAnsiEncoding only, so the last char is < 256.
`int` `getLowerCaseAscent()` Returns the LowerCaseAscent attribute of the font.
`int` `getLowerCaseDescent()` Returns the LowerCaseDescent attribute of the font.
`List<OFMtxEntry>` `getMtx()`
`protected void` `getNumGlyphs()` Read the number of glyphs from the "maxp" table
`protected int` `getPadSize(int currentPosition)` Returns the number of bytes necessary to pad the currentPosition so that a table begins on a 4-byte boundary.
`String` `getPostScriptName()` Returns the PostScript name of the font.
`String` `getStemV()` Returns the StemV attribute of the font.
`int` `getStrikeoutPosition()`
`int` `getStrikeoutThickness()`
`String` `getSubFamilyName()` Returns the font sub family name of the font.
`List<String>` `getTTCnames(FontFileReader in)` Return TTC font names
`int` `getUnderlinePosition()`
`int` `getUnderlineThickness()`
`int` `getWeightClass()` Returns the weight class of this font.
`int[]` `getWidths()` Returns an array of character widths.
`int` `getXHeight()` Returns the XHeight attribute of the font.
`protected void` `guessVerticalMetricsFromGlyphBBox()`
`protected void` `handleCharacterSpacing(FontFileReader in)`
`boolean` `hasAdvancedTable()` Determine if advanced (typographic) table is present.
`protected void` `initAnsiWidths()` initialize the ansiWidths array (for winAnsiEncoding) and fill with the missingwidth
`protected abstract void` `initializeFont(FontFileReader in)`
`boolean` `isCFF()` Indicates whether or not the font is an OpenType CFF font (rather than a TrueType font).
`boolean` `isEmbeddable()` Indicates if the font may be embedded.
`static void` `main(String[] args)` Static main method to get info about a TrueType font.
`void` `printStuff()` Dumps a few informational values to System.out.
`protected boolean` `readCMAP()` Read the cmap table, return false if the table is not present or only unsupported tables are present.
`protected void` `readDirTabs()` Read Table Directory from the current position in the FontFileReader and fill the global HashMap dirTabs with the table name (String) as key and a TTFDirTabEntry as value.
`void` `readFont(FontFileReader in, String header)` Reads the font using a FontFileReader.
`void` `readFont(FontFileReader in, String header, MultiByteFont mbfont)` Reads a font.
`boolean` `readFont(FontFileReader in, String header, String name)` Read the font data.
`protected void` `readFontHeader()` Read the "head" table, this reads the bounding box and sets the upem (unitsPerEM) variable
`protected void` `readHorizontalHeader()` Read the "hhea" table to find the ascender and descender and size of "hmtx" table, as a fixed size font might have only one width.
`protected void` `readHorizontalMetrics()` Read "hmtx" table and put the horizontal metrics in the mtxTab array.
`protected void` `readKerning()` Read the kerning table, create a table for both CIDs and winAnsiEncoding.
`protected abstract void` `readName()`
`protected void` `readOS2()` Read the "OS/2" table
`protected boolean` `readPCLT()` Read the "PCLT" table to find xHeight and capHeight.
`protected void` `readPostScript()` Read the "post" table containing the PostScript names of the glyphs.
`boolean` `seekTab(FontFileReader in, OFTableName tableName, long offset)` Position inputstream to position indicated in the dirtab offset + offset
`void` `stream(TTFOutputStream ttfOut)` Streams a font.
`protected abstract void` `updateBBoxAndOffset()`

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

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

### Field Detail

#### fontFile

    protected FontFileReader fontFile

The FontFileReader used to read this TrueType font.

#### TRACE_ENABLED

    public static final boolean TRACE_ENABLED

Set to true to get even more debug output than with level DEBUG

See Also:
  Constant Field Values

#### useKerning

    protected boolean useKerning

#### dirTabs

    protected Map<OFTableName,OFDirTabEntry> dirTabs

Table directory

#### unicodeMappings

    protected List<org.apache.fop.fonts.truetype.OpenFont.UnicodeMapping> unicodeMappings

#### nhmtx

    protected int nhmtx

#### locaFormat

    protected int locaFormat

#### lastLoca

    protected long lastLoca

Offset to last loca

#### numberOfGlyphs

    protected int numberOfGlyphs

#### mtxTab

    protected OFMtxEntry[] mtxTab

Contains glyph data

#### postScriptName

    protected String postScriptName

#### fullName

    protected String fullName

#### embedFontName

    protected String embedFontName

#### notice

    protected String notice

#### familyNames

    protected final Set<String> familyNames

#### subFamilyName

    protected String subFamilyName

#### cid

    protected boolean cid

#### svgs

    protected Map<Integer,SVGGlyphData> svgs

#### useAdvanced

    protected boolean useAdvanced

#### advancedTableReader

    protected OTFAdvancedTypographicTableReader advancedTableReader

#### log

    protected org.apache.commons.logging.Log log

logging instance

### Constructor Detail

#### OpenFont

    public OpenFont()

#### OpenFont

    public OpenFont(boolean useKerning,
                    boolean useAdvanced)

Constructor

Parameters:
  `useKerning` - true if kerning data should be loaded
  `useAdvanced` - true if advanced typographic tables should be loaded

### Method Detail

#### getDirectoryEntry

    public OFDirTabEntry getDirectoryEntry(OFTableName name)

Obtain directory table entry.

Parameters:
  `name` - (tag) of entry
Returns:
  a directory table entry or null if none found

#### seekTab

    public boolean seekTab(FontFileReader in,
                           OFTableName tableName,
                           long offset)
                    throws IOException

Position inputstream to position indicated in the dirtab offset + offset

Parameters:
  `in` - font file reader
  `tableName` - (tag) of table
  `offset` - from start of table
Returns:
  true if seek succeeded
Throws:
  `IOException` - if I/O exception occurs during seek

#### convertTTFUnit2PDFUnit

    public int convertTTFUnit2PDFUnit(int n)

Convert from truetype unit to pdf unit based on the unitsPerEm field in the "head" table

Parameters:
  `n` - truetype unit
Returns:
  pdf unit

#### readCMAP

    protected boolean readCMAP()
                        throws IOException

Read the cmap table, return false if the table is not present or only unsupported tables are present. Currently only unicode cmaps are supported. Set the unicodeIndex in the TTFMtxEntries and fills in the cmaps vector.

Throws:
  `IOException`
See Also:
  TrueType-Reference-Manual

#### getMtx

    public List<OFMtxEntry> getMtx()

Returns:
  mmtx data

#### readFont

    public void readFont(FontFileReader in,
                         String header)
                  throws IOException

Reads the font using a FontFileReader.

Parameters:
  `in` - The FontFileReader to use
Throws:
  `IOException` - In case of an I/O problem

#### initAnsiWidths

    protected void initAnsiWidths()

initialize the ansiWidths array (for winAnsiEncoding) and fill with the missingwidth

#### readFont

    public boolean readFont(FontFileReader in,
                            String header,
                            String name)
                     throws IOException

Read the font data. If the fontfile is a TrueType Collection (.ttc file) the name of the font to read data for must be supplied, else the name is ignored.

Parameters:
  `in` - The FontFileReader to use
  `name` - The name of the font
Returns:
  boolean Returns true if the font is valid
Throws:
  `IOException` - In case of an I/O problem

#### readFont

    public void readFont(FontFileReader in,
                         String header,
                         MultiByteFont mbfont)
                  throws IOException

Reads a font.

Parameters:
  `in` - FontFileReader to read from
Throws:
  `IOException` - in case of an I/O problem

#### updateBBoxAndOffset

    protected abstract void updateBBoxAndOffset()
                                         throws IOException

Throws:
  `IOException`

#### readName

    protected abstract void readName()
                              throws IOException

Throws:
  `IOException`

#### initializeFont

    protected abstract void initializeFont(FontFileReader in)
                                    throws IOException

Throws:
  `IOException`

#### handleCharacterSpacing

    protected void handleCharacterSpacing(FontFileReader in)
                                   throws IOException

Throws:
  `IOException`

#### createCMaps

    protected void createCMaps()

#### getPostScriptName

    public String getPostScriptName()

Returns the PostScript name of the font.

Returns:
  String The PostScript name

#### getFamilyNames

    public Set<String> getFamilyNames()

Returns the font family names of the font.

Returns:
  Set The family names (a Set of Strings)

#### getSubFamilyName

    public String getSubFamilyName()

Returns the font sub family name of the font.

Returns:
  String The sub family name

#### getFullName

    public String getFullName()

Returns the full name of the font.

Returns:
  String The full name

#### getCharSetName

    public String getCharSetName()

Returns the name of the character set used.

Returns:
  String The caracter set

#### getCapHeight

    public int getCapHeight()

Returns the CapHeight attribute of the font.

Returns:
  int The CapHeight

#### getXHeight

    public int getXHeight()

Returns the XHeight attribute of the font.

Returns:
  int The XHeight

#### getPadSize

    protected int getPadSize(int currentPosition)

Returns the number of bytes necessary to pad the currentPosition so that a table begins on a 4-byte boundary.

Parameters:
  `currentPosition` - the position to pad.
Returns:
  int the number of bytes to pad.

#### getFlags

    public int getFlags()

Returns the Flags attribute of the font.

Returns:
  int The Flags

#### getWeightClass

    public int getWeightClass()

Returns the weight class of this font. Valid values are 100, 200....,800, 900.

Returns:
  the weight class value (or 0 if there was no OS/2 table in the font)

#### getStemV

    public String getStemV()

Returns the StemV attribute of the font.

Returns:
  String The StemV

#### getItalicAngle

    public String getItalicAngle()

Returns the ItalicAngle attribute of the font.

Returns:
  String The ItalicAngle

#### getFontBBox

    public int[] getFontBBox()

Returns:
  int[] The font bbox

#### getBBoxRaw

    public int[] getBBoxRaw()

Returns the original bounding box values from the HEAD table

Returns:
  An array of bounding box values

#### getLowerCaseAscent

    public int getLowerCaseAscent()

Returns the LowerCaseAscent attribute of the font.

Returns:
  int The LowerCaseAscent

#### getLowerCaseDescent

    public int getLowerCaseDescent()

Returns the LowerCaseDescent attribute of the font.

Returns:
  int The LowerCaseDescent

#### getLastChar

    public short getLastChar()

Returns the index of the last character, but this is for WinAnsiEncoding only, so the last char is < 256.

Returns:
  short Index of the last character (<256)

#### getFirstChar

    public short getFirstChar()

Returns the index of the first character.

Returns:
  short Index of the first character

#### getWidths

    public int[] getWidths()

Returns an array of character widths.

Returns:
  int[] The character widths

#### getBoundingBoxes

    public Rectangle[] getBoundingBoxes()

#### getBBox

    public int[] getBBox(int glyphIndex)

Returns an array (xMin, yMin, xMax, yMax) for a glyph.

Parameters:
  `glyphIndex` - the index of the glyph
Returns:
  int[] Array defining bounding box.

#### getCharWidth

    public int getCharWidth(int idx)

Returns the width of a given character.

Parameters:
  `idx` - Index of the character
Returns:
  int Standard width

#### getCharWidthRaw

    public int getCharWidthRaw(int idx)

Returns the width of a given character in raw units

Parameters:
  `idx` - Index of the character
Returns:
  int Width in it's raw form stored in the font

#### getKerning

    public Map<Integer,Map<Integer,Integer>> getKerning()

Returns the kerning table.

Returns:
  Map The kerning table

#### getAnsiKerning

    public Map<Integer,Map<Integer,Integer>> getAnsiKerning()

Returns the ANSI kerning table.

Returns:
  Map The ANSI kerning table

#### getUnderlinePosition

    public int getUnderlinePosition()

#### getUnderlineThickness

    public int getUnderlineThickness()

#### getStrikeoutPosition

    public int getStrikeoutPosition()

#### getStrikeoutThickness

    public int getStrikeoutThickness()

#### isEmbeddable

    public boolean isEmbeddable()

Indicates if the font may be embedded.

Returns:
  boolean True if it may be embedded

#### isCFF

    public boolean isCFF()

Indicates whether or not the font is an OpenType CFF font (rather than a TrueType font).

Returns:
  true if the font is in OpenType CFF format.

#### readDirTabs

    protected void readDirTabs()
                        throws IOException

Read Table Directory from the current position in the FontFileReader and fill the global HashMap dirTabs with the table name (String) as key and a TTFDirTabEntry as value.

Throws:
  `IOException` - in case of an I/O problem

#### readFontHeader

    protected void readFontHeader()
                           throws IOException

Read the "head" table, this reads the bounding box and sets the upem (unitsPerEM) variable

Throws:
  `IOException` - in case of an I/O problem

#### getNumGlyphs

    protected void getNumGlyphs()
                         throws IOException

Read the number of glyphs from the "maxp" table

Throws:
  `IOException` - in case of an I/O problem

#### readHorizontalHeader

    protected void readHorizontalHeader()
                                 throws IOException

Read the "hhea" table to find the ascender and descender and size of "hmtx" table, as a fixed size font might have only one width.

Throws:
  `IOException` - in case of an I/O problem

#### readHorizontalMetrics

    protected void readHorizontalMetrics()
                                  throws IOException

Read "hmtx" table and put the horizontal metrics in the mtxTab array. If the number of metrics is less than the number of glyphs (eg fixed size fonts), extend the mtxTab array and fill in the missing widths

Throws:
  `IOException` - in case of an I/O problem

#### readPostScript

    protected void readPostScript()
                           throws IOException

Read the "post" table containing the PostScript names of the glyphs.

Throws:
  `IOException`

#### readOS2

    protected void readOS2()
                    throws IOException

Read the "OS/2" table

Throws:
  `IOException`

#### readPCLT

    protected boolean readPCLT()
                        throws IOException

Read the "PCLT" table to find xHeight and capHeight.

Throws:
  `IOException` - In case of a I/O problem

#### determineAscDesc

    protected void determineAscDesc()

Determines the right source for the ascender and descender values. The problem here is that the interpretation of these values is not the same for every font. There doesn't seem to be a uniform definition of an ascender and a descender. In some fonts the hhea values are defined after the Apple interpretation, but not in every font. The same problem is in the OS/2 table. FOP needs the ascender and descender to determine the baseline so we need values which add up more or less to the "em box". However, due to accent modifiers a character can grow beyond the em box.

#### guessVerticalMetricsFromGlyphBBox

    protected void guessVerticalMetricsFromGlyphBBox()

#### readKerning

    protected void readKerning()
                        throws IOException

Read the kerning table, create a table for both CIDs and winAnsiEncoding.

Throws:
  `IOException` - In case of a I/O problem

#### stream

    public void stream(TTFOutputStream ttfOut)
                throws IOException

Streams a font.

Parameters:
  `ttfOut` - The interface for streaming TrueType tables.
Throws:
  `IOException` - file write error

#### getCMaps

    public List<CMapSegment> getCMaps()

Returns this font's character to glyph mapping.

Returns:
  the font's cmap

#### checkTTC

    protected final boolean checkTTC(String tag,
                                     String name)
                              throws IOException

Check if this is a TrueType collection and that the given name exists in the collection. If it does, set offset in fontfile to the beginning of the Table Directory for that font.

Parameters:
  `name` - The name to check
Returns:
  True if not collection or font name present, false otherwise
Throws:
  `IOException` - In case of an I/O problem

#### getTTCnames

    public final List<String> getTTCnames(FontFileReader in)
                                   throws IOException

Return TTC font names

Parameters:
  `in` - FontFileReader to read from
Returns:
  True if not collection or font name present, false otherwise
Throws:
  `IOException` - In case of an I/O problem

#### printStuff

    public void printStuff()

Dumps a few informational values to System.out.

#### hasAdvancedTable

    public boolean hasAdvancedTable()

Determine if advanced (typographic) table is present.

Returns:
  true if advanced (typographic) table is present

#### getGDEF

    public GlyphDefinitionTable getGDEF()

Returns the GDEF table or null if none present.

Returns:
  the GDEF table

#### getGSUB

    public GlyphSubstitutionTable getGSUB()

Returns the GSUB table or null if none present.

Returns:
  the GSUB table

#### getGPOS

    public GlyphPositioningTable getGPOS()

Returns the GPOS table or null if none present.

Returns:
  the GPOS table

#### main

    public static void main(String[] args)

Static main method to get info about a TrueType font.

Parameters:
  `args` - The command line arguments

#### getEmbedFontName

    public String getEmbedFontName()

#### getCopyrightNotice

    public String getCopyrightNotice()