Class CharacterSetBuilder

  • Direct Known Subclasses:
    CharacterSetBuilder.DoubleByteLoader, CharacterSetBuilder.SingleByteLoader

    public abstract class CharacterSetBuilder
    extends java.lang.Object
    The CharacterSetBuilder is responsible building the a CharacterSet instance that holds the font metric data. The data is either read from disk and passed to a CharacterSet (*) or a FopCharacterSet is instantiated that is composed of a Typeface instance configured with this data.
    -*- For referenced fonts CharacterSetBuilder is responsible for reading the font attributes from binary code page files and the character set metric files. In IBM font structure, a code page maps each character of text to the characters in a character set. Each character is translated into a code point. When the character is printed, each code point is matched to a character ID on the code page specified. The character ID is then matched to the image (raster pattern or outline pattern) of the character in the character set specified. The image in the character set is the image that is printed in the document. To be a valid code page for a particular character set, all character IDs in the code page must be included in that character set.
    This class will read the font information from the binary code page files and character set metric files in order to determine the correct metrics to use when rendering the formatted object.
    • Field Detail

      • LOG

        protected static final org.apache.commons.logging.Log LOG
        Static logging instance
      • EMPTY_CSO_ARRAY

        private static final CharacterSetOrientation[] EMPTY_CSO_ARRAY
        Template used to convert lists to arrays.
      • CODEPAGE_SF

        private static final byte[] CODEPAGE_SF
        Codepage MO:DCA structured field.
      • CHARACTER_TABLE_SF

        private static final byte[] CHARACTER_TABLE_SF
        Character table MO:DCA structured field.
      • FONT_DESCRIPTOR_SF

        private static final byte[] FONT_DESCRIPTOR_SF
        Font descriptor MO:DCA structured field.
      • FONT_CONTROL_SF

        private static final byte[] FONT_CONTROL_SF
        Font control MO:DCA structured field.
      • FONT_ORIENTATION_SF

        private static final byte[] FONT_ORIENTATION_SF
        Font orientation MO:DCA structured field.
      • FONT_POSITION_SF

        private static final byte[] FONT_POSITION_SF
        Font position MO:DCA structured field.
      • FONT_INDEX_SF

        private static final byte[] FONT_INDEX_SF
        Font index MO:DCA structured field.
      • codePagesCache

        private final java.util.Map<java.lang.String,​java.util.Map<java.lang.String,​java.lang.String>> codePagesCache
        The collection of code pages
      • characterSetsCache

        private final org.apache.xmlgraphics.image.loader.util.SoftMapCache characterSetsCache
        Cache of charactersets
    • Constructor Detail

      • CharacterSetBuilder

        private CharacterSetBuilder()
        Default constructor.
    • Method Detail

      • getSingleByteInstance

        public static CharacterSetBuilder getSingleByteInstance()
        Factory method for the single-byte implementation of AFPFontReader.
        Returns:
        AFPFontReader
      • getDoubleByteInstance

        public static CharacterSetBuilder getDoubleByteInstance()
        Factory method for the double-byte (CID Keyed font (Type 0)) implementation of AFPFontReader.
        Returns:
        AFPFontReader
      • openInputStream

        private java.io.InputStream openInputStream​(AFPResourceAccessor accessor,
                                                    java.lang.String uriStr,
                                                    AFPEventProducer eventProducer)
                                             throws java.io.IOException
        Returns an InputStream to a given file path and filename
        Parameters:
        accessor - the resource accessor
        uriStr - the URI
        eventProducer - for handling AFP related events
        Returns:
        an inputStream
        Throws:
        java.io.IOException - in the event that an I/O exception of some sort has occurred
      • closeInputStream

        private void closeInputStream​(java.io.InputStream inputStream)
        Closes the inputstream
        Parameters:
        inputStream - the inputstream to close
      • buildSBCS

        public CharacterSet buildSBCS​(java.lang.String characterSetName,
                                      java.lang.String codePageName,
                                      java.lang.String encoding,
                                      AFPResourceAccessor accessor,
                                      AFPEventProducer eventProducer)
                               throws java.io.IOException
        Load the font details and metrics into the CharacterSetMetric object, this will use the actual afp code page and character set files to load the object with the necessary metrics.
        Parameters:
        characterSetName - name of the characterset
        codePageName - name of the code page file
        encoding - encoding name
        accessor - used to load codepage and characterset
        eventProducer - for handling AFP related events
        Returns:
        CharacterSet object
        Throws:
        java.io.IOException - if an I/O error occurs
      • buildDBCS

        public CharacterSet buildDBCS​(java.lang.String characterSetName,
                                      java.lang.String codePageName,
                                      java.lang.String encoding,
                                      CharacterSetType charsetType,
                                      AFPResourceAccessor accessor,
                                      AFPEventProducer eventProducer)
                               throws java.io.IOException
        Load the font details and metrics into the CharacterSetMetric object, this will use the actual afp code page and character set files to load the object with the necessary metrics. This method is to be used for double byte character sets (DBCS).
        Parameters:
        characterSetName - name of the characterset
        codePageName - name of the code page file
        encoding - encoding name
        charsetType - the characterset type
        accessor - used to load codepage and characterset
        eventProducer - for handling AFP related events
        Returns:
        CharacterSet object
        Throws:
        java.io.IOException - if an I/O error occurs
      • build

        public CharacterSet build​(java.lang.String characterSetName,
                                  java.lang.String codePageName,
                                  java.lang.String encoding,
                                  Typeface typeface,
                                  AFPEventProducer eventProducer)
                           throws java.io.IOException
        Load the font details and metrics into the CharacterSetMetric object, this will use the actual afp code page and character set files to load the object with the necessary metrics.
        Parameters:
        characterSetName - the CharacterSetMetric object to populate
        codePageName - the name of the code page to use
        encoding - name of the encoding in use
        typeface - base14 font name
        eventProducer - for handling AFP related events
        Returns:
        CharacterSet object
        Throws:
        java.io.IOException - if an I/O error occurs
      • loadCodePage

        protected java.util.Map<java.lang.String,​java.lang.String> loadCodePage​(java.lang.String codePage,
                                                                                      java.lang.String encoding,
                                                                                      AFPResourceAccessor accessor,
                                                                                      AFPEventProducer eventProducer)
                                                                               throws java.io.IOException
        Load the code page information from the appropriate file. The file name to load is determined by the code page name and the file extension 'CDP'.
        Parameters:
        codePage - the code page identifier
        encoding - the encoding to use for the character decoding
        accessor - the resource accessor
        eventProducer - for handling AFP related events
        Returns:
        a code page mapping (key: GCGID, value: Unicode character)
        Throws:
        java.io.IOException - if an I/O exception of some sort has occurred.
      • processFontDescriptor

        private static CharacterSetBuilder.FontDescriptor processFontDescriptor​(StructuredFieldReader structuredFieldReader)
                                                                         throws java.io.IOException
        Process the font descriptor details using the structured field reader.
        Parameters:
        structuredFieldReader - the structured field reader
        Returns:
        a class representing the font descriptor
        Throws:
        java.io.IOException - if an I/O exception of some sort has occurred.
      • processFontControl

        private CharacterSetBuilder.FontControl processFontControl​(StructuredFieldReader structuredFieldReader)
                                                            throws java.io.IOException
        Process the font control details using the structured field reader.
        Parameters:
        structuredFieldReader - the structured field reader
        Returns:
        the FontControl
        Throws:
        java.io.IOException - if an I/O exception of some sort has occurred.
      • processFontOrientation

        private CharacterSetOrientation[] processFontOrientation​(StructuredFieldReader structuredFieldReader)
                                                          throws java.io.IOException
        Process the font orientation details from using the structured field reader.
        Parameters:
        structuredFieldReader - the structured field reader
        Returns:
        CharacterSetOrientation array
        Throws:
        java.io.IOException - if an I/O exception of some sort has occurred.
      • processFontPosition

        private void processFontPosition​(StructuredFieldReader structuredFieldReader,
                                         CharacterSetOrientation[] characterSetOrientations,
                                         CharacterSetBuilder.ValueNormalizer normalizer)
                                  throws java.io.IOException
        Populate the CharacterSetOrientation object in the suplied array with the font position details using the supplied structured field reader.
        Parameters:
        structuredFieldReader - the structured field reader
        characterSetOrientations - the array of CharacterSetOrientation objects
        metricNormalizationFactor - factor to apply to the metrics to get normalized font metric values
        Throws:
        java.io.IOException - if an I/O exception of some sort has occurred.
      • getUBIN

        private static int getUBIN​(byte[] data,
                                   int start)
      • getSBIN

        private static int getSBIN​(byte[] data,
                                   int start)
      • determineOrientation

        private static int determineOrientation​(byte orientation)