Class CharacterSetBuilder

java.lang.Object
org.apache.fop.afp.fonts.CharacterSetBuilder
Direct Known Subclasses:
CharacterSetBuilder.DoubleByteLoader, CharacterSetBuilder.SingleByteLoader

public abstract class CharacterSetBuilder extends 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 Details

    • 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 Map<String,Map<String,String>> codePagesCache
      The collection of code pages
    • characterSetsCache

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

    • CharacterSetBuilder

      private CharacterSetBuilder()
      Default constructor.
  • Method Details

    • 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 InputStream openInputStream(AFPResourceAccessor accessor, String uriStr, AFPEventProducer eventProducer) throws 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:
      IOException - in the event that an I/O exception of some sort has occurred
    • closeInputStream

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

      public CharacterSet buildSBCS(String characterSetName, String codePageName, String encoding, AFPResourceAccessor accessor, AFPEventProducer eventProducer) throws 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:
      IOException - if an I/O error occurs
    • buildDBCS

      public CharacterSet buildDBCS(String characterSetName, String codePageName, String encoding, CharacterSetType charsetType, AFPResourceAccessor accessor, AFPEventProducer eventProducer) throws 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:
      IOException - if an I/O error occurs
    • build

      public CharacterSet build(String characterSetName, String codePageName, String encoding, Typeface typeface, AFPEventProducer eventProducer) throws 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:
      IOException - if an I/O error occurs
    • build

      public CharacterSet build(String characterSetName, String codePageName, String encoding, Typeface typeface, AFPResourceAccessor accessor, AFPEventProducer eventProducer) throws IOException
      Throws:
      IOException
    • processFont

      private CharacterSet processFont(String characterSetName, String codePageName, String encoding, CharacterSetType charsetType, AFPResourceAccessor accessor, AFPEventProducer eventProducer) throws IOException
      Throws:
      IOException
    • loadCodePage

      protected Map<String,String> loadCodePage(String codePage, String encoding, AFPResourceAccessor accessor, AFPEventProducer eventProducer) throws 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:
      IOException - if an I/O exception of some sort has occurred.
    • processFontDescriptor

      private static CharacterSetBuilder.FontDescriptor processFontDescriptor(StructuredFieldReader structuredFieldReader) throws 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:
      IOException - if an I/O exception of some sort has occurred.
    • processFontControl

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

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

      private void processFontPosition(StructuredFieldReader structuredFieldReader, CharacterSetOrientation[] characterSetOrientations, CharacterSetBuilder.ValueNormalizer normalizer) throws 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:
      IOException - if an I/O exception of some sort has occurred.
    • processFontIndex

      private void processFontIndex(StructuredFieldReader structuredFieldReader, CharacterSetOrientation cso, Map<String,String> codepage, CharacterSetBuilder.ValueNormalizer normalizer) throws IOException
      Throws:
      IOException
    • 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)