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.ObjectThe 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 classCharacterSetBuilder.DoubleByteLoaderDouble-byte (CID Keyed font (Type 0)) implementation of AFPFontReader.private classCharacterSetBuilder.FontControlprivate static classCharacterSetBuilder.FontDescriptorprivate static classCharacterSetBuilder.SingleByteLoaderprivate static classCharacterSetBuilder.ValueNormalizer
-
Field Summary
Fields Modifier and Type Field Description private static byte[]CHARACTER_TABLE_SFCharacter table MO:DCA structured field.private org.apache.xmlgraphics.image.loader.util.SoftMapCachecharacterSetsCacheCache of charactersetsprivate static byte[]CODEPAGE_SFCodepage MO:DCA structured field.private java.util.Map<java.lang.String,java.util.Map<java.lang.String,java.lang.String>>codePagesCacheThe collection of code pagesprivate static CharacterSetOrientation[]EMPTY_CSO_ARRAYTemplate used to convert lists to arrays.private static byte[]FONT_CONTROL_SFFont control MO:DCA structured field.private static byte[]FONT_DESCRIPTOR_SFFont descriptor MO:DCA structured field.private static byte[]FONT_INDEX_SFFont index MO:DCA structured field.private static byte[]FONT_ORIENTATION_SFFont orientation MO:DCA structured field.private static byte[]FONT_POSITION_SFFont position MO:DCA structured field.protected static org.apache.commons.logging.LogLOGStatic logging instance
-
Constructor Summary
Constructors Modifier Constructor Description privateCharacterSetBuilder()Default constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description CharacterSetbuild(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.CharacterSetbuild(java.lang.String characterSetName, java.lang.String codePageName, java.lang.String encoding, Typeface typeface, AFPResourceAccessor accessor, AFPEventProducer eventProducer)CharacterSetbuildDBCS(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.CharacterSetbuildSBCS(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 voidcloseInputStream(java.io.InputStream inputStream)Closes the inputstreamprivate static intdetermineOrientation(byte orientation)static CharacterSetBuildergetDoubleByteInstance()Factory method for the double-byte (CID Keyed font (Type 0)) implementation of AFPFontReader.private static intgetSBIN(byte[] data, int start)static CharacterSetBuildergetSingleByteInstance()Factory method for the single-byte implementation of AFPFontReader.private static intgetUBIN(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.InputStreamopenInputStream(AFPResourceAccessor accessor, java.lang.String uriStr, AFPEventProducer eventProducer)Returns an InputStream to a given file path and filenameprivate CharacterSetprocessFont(java.lang.String characterSetName, java.lang.String codePageName, java.lang.String encoding, CharacterSetType charsetType, AFPResourceAccessor accessor, AFPEventProducer eventProducer)private CharacterSetBuilder.FontControlprocessFontControl(StructuredFieldReader structuredFieldReader)Process the font control details using the structured field reader.private static CharacterSetBuilder.FontDescriptorprocessFontDescriptor(StructuredFieldReader structuredFieldReader)Process the font descriptor details using the structured field reader.private voidprocessFontIndex(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 voidprocessFontPosition(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.IOExceptionLoad 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)
-
-