Class OpenTypeParser

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable

    class OpenTypeParser
    extends java.lang.Object
    implements java.io.Closeable
    • Field Detail

      • HEAD_LOCA_FORMAT_OFFSET

        private static final int HEAD_LOCA_FORMAT_OFFSET
        See Also:
        Constant Field Values
      • fileName

        protected java.lang.String fileName
        The file name.
      • ttcIndex

        protected int ttcIndex
        The index for the TTC font. It is -1 int for a TTF file.
      • directoryOffset

        protected int directoryOffset
        The offset from the start of the file to the table directory. It is 0 for TTF and may vary for TTC depending on the chosen font.
      • fontName

        protected java.lang.String fontName
        The font name. This name is usually extracted from the table 'name' with the 'Name ID' 6.
      • allNameEntries

        protected java.util.Map<java.lang.Integer,​java.util.List<java.lang.String[]>> allNameEntries
        All the names of the Names-Table.
      • cff

        protected boolean cff
        Indicate, that the font contains 'CFF ' table.
      • cffOffset

        protected int cffOffset
        Offset to 'CFF ' table.
      • cffLength

        protected int cffLength
        Length of 'CFF ' table.
      • glyphWidthsByIndex

        private int[] glyphWidthsByIndex
      • tables

        protected java.util.Map<java.lang.String,​int[]> tables
        Contains the location of the several tables. The key is the name of the table and the value is an int[2] where position 0 is the offset from the start of the file and position 1 is the length of the table.
    • Constructor Detail

      • OpenTypeParser

        public OpenTypeParser​(byte[] ttf)
                       throws java.io.IOException
        Throws:
        java.io.IOException
      • OpenTypeParser

        public OpenTypeParser​(byte[] ttc,
                              int ttcIndex)
                       throws java.io.IOException
        Throws:
        java.io.IOException
      • OpenTypeParser

        public OpenTypeParser​(java.lang.String ttcPath,
                              int ttcIndex)
                       throws java.io.IOException
        Throws:
        java.io.IOException
      • OpenTypeParser

        public OpenTypeParser​(java.lang.String name)
                       throws java.io.IOException
        Throws:
        java.io.IOException
    • Method Detail

      • getPsFontName

        public java.lang.String getPsFontName()
        Gets the Postscript font name.
      • getAllNameEntries

        public java.util.Map<java.lang.Integer,​java.util.List<java.lang.String[]>> getAllNameEntries()
      • getGlyphWidthsByIndex

        public int[] getGlyphWidthsByIndex()
      • getFontNames

        public FontNames getFontNames()
      • isCff

        public boolean isCff()
      • getFullFont

        public byte[] getFullFont()
                           throws java.io.IOException
        Throws:
        java.io.IOException
      • readCffFont

        public byte[] readCffFont()
                           throws java.io.IOException
        If this font file is using the Compact Font File Format, then this method will return the raw bytes needed for the font stream. If this method is ever made public: make sure to add a test if (cff == true).
        Returns:
        a byte array
        Throws:
        java.io.IOException
      • getSubset

        byte[] getSubset​(java.util.Set<java.lang.Integer> glyphs,
                         boolean subset)
                  throws java.io.IOException
        Throws:
        java.io.IOException
      • close

        public void close()
                   throws java.io.IOException
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Throws:
        java.io.IOException
      • initializeSfntTables

        private void initializeSfntTables()
                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • loadTables

        protected void loadTables​(boolean all)
                           throws java.io.IOException
        Reads the font data.
        Parameters:
        all - if true, all tables will be read, otherwise only 'head', 'name', and 'os/2'.
        Throws:
        java.io.IOException
      • getTTCName

        protected static java.lang.String getTTCName​(java.lang.String name)
        Gets the name from a composed TTC file name. If I have for input "myfont.ttc,2" the return will be "myfont.ttc".
        Parameters:
        name - the full name
        Returns:
        the simple file name
      • checkCff

        protected void checkCff()
      • readKerning

        protected IntHashtable readKerning​(int unitsPerEm)
                                    throws java.io.IOException
        Reads the kerning information from the 'kern' table.
        Parameters:
        unitsPerEm - OpenTypeParser.HeaderTable.unitsPerEm.
        Throws:
        java.io.IOException - the font file could not be read
      • readBbox

        protected int[][] readBbox​(int unitsPerEm)
                            throws java.io.IOException
        Read the glyf bboxes from 'glyf' table.
        Parameters:
        unitsPerEm - OpenTypeParser.HeaderTable.unitsPerEm
        Throws:
        IOException - the font is invalid
        java.io.IOException - the font file could not be read
      • readNumGlyphs

        protected int readNumGlyphs()
                             throws java.io.IOException
        Throws:
        java.io.IOException
      • readNameTable

        private void readNameTable()
                            throws java.io.IOException
        Extracts the names of the font in all the languages available.
        Throws:
        IOException - on error
        java.io.IOException - on error
      • readHheaTable

        private void readHheaTable()
                            throws java.io.IOException
        Read horizontal header, table 'hhea'.
        Throws:
        IOException - the font is invalid.
        java.io.IOException - the font file could not be read.
      • readHeadTable

        private void readHeadTable()
                            throws java.io.IOException
        Read font header, table 'head'.
        Throws:
        IOException - the font is invalid.
        java.io.IOException - the font file could not be read.
      • readOs_2Table

        private void readOs_2Table()
                            throws java.io.IOException
        Reads the windows metrics table. The metrics are extracted from the table 'OS/2'. Depends on OpenTypeParser.HeaderTable.unitsPerEm property.
        Throws:
        IOException - the font is invalid.
        java.io.IOException - the font file could not be read.
      • readPostTable

        private void readPostTable()
                            throws java.io.IOException
        Throws:
        java.io.IOException
      • readCmapTable

        private void readCmapTable()
                            throws java.io.IOException
        Reads the several maps from the table 'cmap'. The maps of interest are 1.0 for symbolic fonts and 3.1 for all others. A symbolic font is defined as having the map 3.0. Depends from readGlyphWidths().
        Throws:
        java.io.IOException - the font file could not be read
      • readStandardString

        private java.lang.String readStandardString​(int length)
                                             throws java.io.IOException
        Reads a String from the font file as bytes using the Cp1252 encoding.
        Parameters:
        length - the length of bytes to read
        Returns:
        the String read
        Throws:
        java.io.IOException - the font file could not be read
      • readUnicodeString

        private java.lang.String readUnicodeString​(int length)
                                            throws java.io.IOException
        Reads a Unicode String from the font file. Each character is represented by two bytes.
        Parameters:
        length - the length of bytes to read. The String will have length/2 characters.
        Returns:
        the String read.
        Throws:
        java.io.IOException - the font file could not be read.
      • getGlyphWidth

        protected int getGlyphWidth​(int glyph)
        Gets a glyph width.
        Parameters:
        glyph - the glyph to get the width of
        Returns:
        the width of the glyph in normalized 1000 units (TrueTypeFont.UNITS_NORMALIZATION)
      • readFormat0

        private java.util.Map<java.lang.Integer,​int[]> readFormat0()
                                                                  throws java.io.IOException
        The information in the maps of the table 'cmap' is coded in several formats. Format 0 is the Apple standard character to glyph index mapping table.
        Returns:
        a HashMap representing this map
        Throws:
        java.io.IOException - the font file could not be read
      • readFormat4

        private java.util.Map<java.lang.Integer,​int[]> readFormat4​(boolean fontSpecific)
                                                                  throws java.io.IOException
        The information in the maps of the table 'cmap' is coded in several formats. Format 4 is the Microsoft standard character to glyph index mapping table.
        Returns:
        a HashMap representing this map
        Throws:
        java.io.IOException - the font file could not be read
      • readFormat6

        private java.util.Map<java.lang.Integer,​int[]> readFormat6()
                                                                  throws java.io.IOException
        The information in the maps of the table 'cmap' is coded in several formats. Format 6 is a trimmed table mapping. It is similar to format 0 but can have less than 256 entries.
        Returns:
        a HashMap representing this map
        Throws:
        java.io.IOException - the font file could not be read
      • readFormat12

        private java.util.Map<java.lang.Integer,​int[]> readFormat12()
                                                                   throws java.io.IOException
        Throws:
        java.io.IOException