Package org.apache.fop.afp.fonts
Class CharacterSetBuilder
- java.lang.Object
-
- org.apache.fop.afp.fonts.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.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
CharacterSetBuilder.DoubleByteLoader
Double-byte (CID Keyed font (Type 0)) implementation of AFPFontReader.private class
CharacterSetBuilder.FontControl
private static class
CharacterSetBuilder.FontDescriptor
private static class
CharacterSetBuilder.SingleByteLoader
private static class
CharacterSetBuilder.ValueNormalizer
-
Field Summary
Fields Modifier and Type Field Description private static byte[]
CHARACTER_TABLE_SF
Character table MO:DCA structured field.private org.apache.xmlgraphics.image.loader.util.SoftMapCache
characterSetsCache
Cache of charactersetsprivate static byte[]
CODEPAGE_SF
Codepage MO:DCA structured field.private java.util.Map<java.lang.String,java.util.Map<java.lang.String,java.lang.String>>
codePagesCache
The collection of code pagesprivate static CharacterSetOrientation[]
EMPTY_CSO_ARRAY
Template used to convert lists to arrays.private static byte[]
FONT_CONTROL_SF
Font control MO:DCA structured field.private static byte[]
FONT_DESCRIPTOR_SF
Font descriptor MO:DCA structured field.private static byte[]
FONT_INDEX_SF
Font index MO:DCA structured field.private static byte[]
FONT_ORIENTATION_SF
Font orientation MO:DCA structured field.private static byte[]
FONT_POSITION_SF
Font position MO:DCA structured field.protected static org.apache.commons.logging.Log
LOG
Static logging instance
-
Constructor Summary
Constructors Modifier Constructor Description private
CharacterSetBuilder()
Default constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description CharacterSet
build(java.lang.String characterSetName, java.lang.String codePageName, java.lang.String encoding, Typeface typeface, AFPEventProducer eventProducer)
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.CharacterSet
build(java.lang.String characterSetName, java.lang.String codePageName, java.lang.String encoding, Typeface typeface, AFPResourceAccessor accessor, AFPEventProducer eventProducer)
CharacterSet
buildDBCS(java.lang.String characterSetName, java.lang.String codePageName, java.lang.String encoding, CharacterSetType charsetType, AFPResourceAccessor accessor, AFPEventProducer eventProducer)
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.CharacterSet
buildSBCS(java.lang.String characterSetName, java.lang.String codePageName, java.lang.String encoding, AFPResourceAccessor accessor, AFPEventProducer eventProducer)
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.private void
closeInputStream(java.io.InputStream inputStream)
Closes the inputstreamprivate static int
determineOrientation(byte orientation)
static CharacterSetBuilder
getDoubleByteInstance()
Factory method for the double-byte (CID Keyed font (Type 0)) implementation of AFPFontReader.private static int
getSBIN(byte[] data, int start)
static CharacterSetBuilder
getSingleByteInstance()
Factory method for the single-byte implementation of AFPFontReader.private static int
getUBIN(byte[] data, int start)
protected java.util.Map<java.lang.String,java.lang.String>
loadCodePage(java.lang.String codePage, java.lang.String encoding, AFPResourceAccessor accessor, AFPEventProducer eventProducer)
Load the code page information from the appropriate file.private java.io.InputStream
openInputStream(AFPResourceAccessor accessor, java.lang.String uriStr, AFPEventProducer eventProducer)
Returns an InputStream to a given file path and filenameprivate CharacterSet
processFont(java.lang.String characterSetName, java.lang.String codePageName, java.lang.String encoding, CharacterSetType charsetType, AFPResourceAccessor accessor, AFPEventProducer eventProducer)
private CharacterSetBuilder.FontControl
processFontControl(StructuredFieldReader structuredFieldReader)
Process the font control details using the structured field reader.private static CharacterSetBuilder.FontDescriptor
processFontDescriptor(StructuredFieldReader structuredFieldReader)
Process the font descriptor details using the structured field reader.private void
processFontIndex(StructuredFieldReader structuredFieldReader, CharacterSetOrientation cso, java.util.Map<java.lang.String,java.lang.String> codepage, CharacterSetBuilder.ValueNormalizer normalizer)
private CharacterSetOrientation[]
processFontOrientation(StructuredFieldReader structuredFieldReader)
Process the font orientation details from using the structured field reader.private void
processFontPosition(StructuredFieldReader structuredFieldReader, CharacterSetOrientation[] characterSetOrientations, CharacterSetBuilder.ValueNormalizer normalizer)
Populate the CharacterSetOrientation object in the suplied array with the font position details using the supplied structured field reader.
-
-
-
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
-
-
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 accessoruriStr
- the URIeventProducer
- 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 charactersetcodePageName
- name of the code page fileencoding
- encoding nameaccessor
- used to load codepage and characterseteventProducer
- 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 charactersetcodePageName
- name of the code page fileencoding
- encoding namecharsetType
- the characterset typeaccessor
- used to load codepage and characterseteventProducer
- 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 populatecodePageName
- the name of the code page to useencoding
- name of the encoding in usetypeface
- base14 font nameeventProducer
- 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, AFPResourceAccessor accessor, AFPEventProducer eventProducer) throws java.io.IOException
- Throws:
java.io.IOException
-
processFont
private CharacterSet processFont(java.lang.String characterSetName, java.lang.String codePageName, java.lang.String encoding, CharacterSetType charsetType, AFPResourceAccessor accessor, AFPEventProducer eventProducer) throws java.io.IOException
- Throws:
java.io.IOException
-
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 identifierencoding
- the encoding to use for the character decodingaccessor
- the resource accessoreventProducer
- 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 readercharacterSetOrientations
- the array of CharacterSetOrientation objectsmetricNormalizationFactor
- 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.
-
processFontIndex
private void processFontIndex(StructuredFieldReader structuredFieldReader, CharacterSetOrientation cso, java.util.Map<java.lang.String,java.lang.String> codepage, CharacterSetBuilder.ValueNormalizer normalizer) throws java.io.IOException
- Throws:
java.io.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)
-
-