Class CFFParser


  • public class CFFParser
    extends java.lang.Object
    This class represents a parser for a CFF font.
    • Field Detail

      • LOG

        private static final org.apache.commons.logging.Log LOG
        Log instance.
      • stringIndex

        private java.lang.String[] stringIndex
      • debugFontName

        private java.lang.String debugFontName
    • Constructor Detail

      • CFFParser

        public CFFParser()
    • Method Detail

      • parse

        public java.util.List<CFFFont> parse​(byte[] bytes,
                                             CFFParser.ByteSource source)
                                      throws java.io.IOException
        Parse CFF font using byte array, also passing in a byte source for future use.
        Parameters:
        bytes - source bytes
        source - source to re-read bytes from in the future
        Returns:
        the parsed CFF fonts
        Throws:
        java.io.IOException - If there is an error reading from the stream
      • parse

        public java.util.List<CFFFont> parse​(RandomAccessRead randomAccessRead)
                                      throws java.io.IOException
        Parse CFF font using a RandomAccessRead as input.
        Parameters:
        randomAccessRead - the source to be parsed
        Returns:
        the parsed CFF fonts
        Throws:
        java.io.IOException - If there is an error reading from the stream
      • parseFirstSubFontROS

        public void parseFirstSubFontROS​(RandomAccessRead randomAccessRead,
                                         FontHeaders outHeaders)
                                  throws java.io.IOException
        Extract "Registry", "Ordering" and "Supplement" properties from the first CFF subfont.
        Parameters:
        randomAccessRead - the source to be parsed
        outHeaders - where to put results
        Throws:
        java.io.IOException - If there is an error reading from the stream
      • skipHeader

        private DataInput skipHeader​(DataInput input)
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • parse

        private java.util.List<CFFFont> parse​(DataInput input)
                                       throws java.io.IOException
        Parse CFF font using a DataInput as input.
        Parameters:
        input - the source to be parsed
        Throws:
        java.io.IOException - If there is an error reading from the stream
      • createTaggedCFFDataInput

        private DataInput createTaggedCFFDataInput​(DataInput input)
                                            throws java.io.IOException
        Throws:
        java.io.IOException
      • readTagName

        private static java.lang.String readTagName​(DataInput input)
                                             throws java.io.IOException
        Throws:
        java.io.IOException
      • readLong

        private static long readLong​(DataInput input)
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • readOffSize

        private static int readOffSize​(DataInput input)
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • readHeader

        private static CFFParser.Header readHeader​(DataInput input)
                                            throws java.io.IOException
        Throws:
        java.io.IOException
      • readIndexDataOffsets

        private static int[] readIndexDataOffsets​(DataInput input)
                                           throws java.io.IOException
        Throws:
        java.io.IOException
      • readIndexData

        private static byte[][] readIndexData​(DataInput input)
                                       throws java.io.IOException
        Throws:
        java.io.IOException
      • readStringIndexData

        private static java.lang.String[] readStringIndexData​(DataInput input)
                                                       throws java.io.IOException
        Throws:
        java.io.IOException
      • readDictData

        private static CFFParser.DictData readDictData​(DataInput input)
                                                throws java.io.IOException
        Throws:
        java.io.IOException
      • readDictData

        private static CFFParser.DictData readDictData​(DataInput input,
                                                       int offset,
                                                       int dictSize)
                                                throws java.io.IOException
        Throws:
        java.io.IOException
      • readOperator

        private static java.lang.String readOperator​(DataInput input,
                                                     int b0)
                                              throws java.io.IOException
        Throws:
        java.io.IOException
      • readIntegerNumber

        private static java.lang.Integer readIntegerNumber​(DataInput input,
                                                           int b0)
                                                    throws java.io.IOException
        Throws:
        java.io.IOException
      • readRealNumber

        private static java.lang.Double readRealNumber​(DataInput input)
                                                throws java.io.IOException
        Throws:
        java.io.IOException
      • parseROS

        private CFFCIDFont parseROS​(CFFParser.DictData topDict)
                             throws java.io.IOException
        Extracts Registry, Ordering and Supplement from topDict["ROS"].
        Throws:
        java.io.IOException
      • parseFont

        private CFFFont parseFont​(DataInput input,
                                  java.lang.String name,
                                  byte[] topDictIndex)
                           throws java.io.IOException
        Throws:
        java.io.IOException
      • concatenateMatrix

        private void concatenateMatrix​(java.util.List<java.lang.Number> matrixDest,
                                       java.util.List<java.lang.Number> matrixConcat)
      • parseCIDFontDicts

        private void parseCIDFontDicts​(DataInput input,
                                       CFFParser.DictData topDict,
                                       CFFCIDFont font,
                                       int nrOfcharStrings)
                                throws java.io.IOException
        Parse dictionaries specific to a CIDFont.
        Throws:
        java.io.IOException
      • readPrivateDict

        private java.util.Map<java.lang.String,​java.lang.Object> readPrivateDict​(CFFParser.DictData privateDict)
      • parseType1Dicts

        private void parseType1Dicts​(DataInput input,
                                     CFFParser.DictData topDict,
                                     CFFType1Font font,
                                     CFFCharset charset)
                              throws java.io.IOException
        Parse dictionaries specific to a Type 1-equivalent font.
        Throws:
        java.io.IOException
      • readString

        private java.lang.String readString​(int index)
                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • getString

        private java.lang.String getString​(CFFParser.DictData dict,
                                           java.lang.String name)
                                    throws java.io.IOException
        Throws:
        java.io.IOException
      • readEncoding

        private CFFEncoding readEncoding​(DataInput dataInput,
                                         CFFCharset charset)
                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • readFDSelect

        private static FDSelect readFDSelect​(DataInput dataInput,
                                             int nGlyphs)
                                      throws java.io.IOException
        Read the FDSelect Data according to the format.
        Parameters:
        dataInput -
        nGlyphs -
        Returns:
        the FDSelect data
        Throws:
        java.io.IOException
      • readFormat0FDSelect

        private static CFFParser.Format0FDSelect readFormat0FDSelect​(DataInput dataInput,
                                                                     int nGlyphs)
                                                              throws java.io.IOException
        Read the Format 0 of the FDSelect data structure.
        Parameters:
        dataInput -
        nGlyphs -
        Returns:
        the Format 0 of the FDSelect data
        Throws:
        java.io.IOException
      • readFormat3FDSelect

        private static CFFParser.Format3FDSelect readFormat3FDSelect​(DataInput dataInput)
                                                              throws java.io.IOException
        Read the Format 3 of the FDSelect data structure.
        Parameters:
        dataInput -
        Returns:
        the Format 3 of the FDSelect data
        Throws:
        java.io.IOException
      • readCharset

        private CFFCharset readCharset​(DataInput dataInput,
                                       int nGlyphs,
                                       boolean isCIDFont)
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • readFormat0Charset

        private CFFParser.Format0Charset readFormat0Charset​(DataInput dataInput,
                                                            int nGlyphs,
                                                            boolean isCIDFont)
                                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • readFormat1Charset

        private CFFParser.Format1Charset readFormat1Charset​(DataInput dataInput,
                                                            int nGlyphs,
                                                            boolean isCIDFont)
                                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • readFormat2Charset

        private CFFParser.Format2Charset readFormat2Charset​(DataInput dataInput,
                                                            int nGlyphs,
                                                            boolean isCIDFont)
                                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object