Author: mehdi
Date: Tue May 15 09:07:02 2012
New Revision: 1338605
URL: http://svn.apache.org/viewvc?rev=1338605&view=rev
Log:
Improved handling of AFP double-byte character sets
Modified:
xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/fonts/CharacterSet.java
xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/fonts/CharacterSetBuilder.java
xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/fonts/CharactersetEncoder.java
xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/fonts/FopCharacterSet.java
xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/ptoca/PtocaProducer.java
xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/ptoca/TextDataInfoProducer.java
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/AFPRendererConfigurator.java
xmlgraphics/fop/trunk/test/java/org/apache/fop/afp/fonts/CharactersetEncoderTestCase.java
Modified:
xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/fonts/CharacterSet.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/fonts/CharacterSet.java?rev=1338605&r1=1338604&r2=1338605&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/fonts/CharacterSet.java
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/fonts/CharacterSet.java
Tue May 15 09:07:02 2012
@@ -94,12 +94,12 @@ public class CharacterSet {
*
* @param codePage the code page identifier
* @param encoding the encoding of the font
- * @param isEBDCS if this is an EBCDIC double byte character set.
+ * @param charsetType the type of the characterset
* @param name the character set name
* @param accessor the resource accessor to load resource with
* @param eventProducer for handling AFP related events
*/
- CharacterSet(String codePage, String encoding, boolean isEBDCS, String
name,
+ CharacterSet(String codePage, String encoding, CharacterSetType
charsetType, String name,
ResourceAccessor accessor, AFPEventProducer eventProducer) {
if (name.length() > MAX_NAME_LEN) {
String msg = "Character set name '" + name + "' must be a maximum
of "
@@ -115,7 +115,7 @@ public class CharacterSet {
}
this.codePage = codePage;
this.encoding = encoding;
- this.encoder = CharactersetEncoder.newInstance(encoding, isEBDCS);
+ this.encoder = CharactersetEncoder.newInstance(encoding, charsetType);
this.accessor = accessor;
this.characterSetOrientations = new HashMap<String,
CharacterSetOrientation>(4);
@@ -306,7 +306,7 @@ public class CharacterSet {
*/
private CharacterSetOrientation getCharacterSetOrientation() {
CharacterSetOrientation c
- = (CharacterSetOrientation)
characterSetOrientations.get(currentOrientation);
+ = characterSetOrientations.get(currentOrientation);
return c;
}
Modified:
xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/fonts/CharacterSetBuilder.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/fonts/CharacterSetBuilder.java?rev=1338605&r1=1338604&r2=1338605&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/fonts/CharacterSetBuilder.java
(original)
+++
xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/fonts/CharacterSetBuilder.java
Tue May 15 09:07:02 2012
@@ -190,10 +190,10 @@ public abstract class CharacterSetBuilde
* @return CharacterSet object
* @throws IOException if an I/O error occurs
*/
- public CharacterSet build(String characterSetName, String codePageName,
String encoding,
+ public CharacterSet buildSBCS(String characterSetName, String
codePageName, String encoding,
ResourceAccessor accessor, AFPEventProducer eventProducer) throws
IOException {
- return processFont(characterSetName, codePageName, encoding, false,
accessor,
- eventProducer);
+ return processFont(characterSetName, codePageName, encoding,
CharacterSetType.SINGLE_BYTE,
+ accessor, eventProducer);
}
/**
@@ -204,16 +204,16 @@ public abstract class CharacterSetBuilde
* @param characterSetName name of the characterset
* @param codePageName name of the code page file
* @param encoding encoding name
- * @param isEDBCS if this is an EBCDIC double byte character set (DBCS)
+ * @param charsetType the characterset type
* @param accessor used to load codepage and characterset
* @param eventProducer for handling AFP related events
* @return CharacterSet object
* @throws IOException if an I/O error occurs
*/
public CharacterSet buildDBCS(String characterSetName, String
codePageName, String encoding,
- boolean isEDBCS, ResourceAccessor accessor, AFPEventProducer
eventProducer)
+ CharacterSetType charsetType, ResourceAccessor accessor,
AFPEventProducer eventProducer)
throws IOException {
- return processFont(characterSetName, codePageName, encoding, isEDBCS,
accessor,
+ return processFont(characterSetName, codePageName, encoding,
charsetType, accessor,
eventProducer);
}
@@ -236,7 +236,7 @@ public abstract class CharacterSetBuilde
}
private CharacterSet processFont(String characterSetName, String
codePageName, String encoding,
- boolean isEDBCS, ResourceAccessor accessor, AFPEventProducer
eventProducer)
+ CharacterSetType charsetType, ResourceAccessor accessor,
AFPEventProducer eventProducer)
throws IOException {
// check for cached version of the characterset
String descriptor = characterSetName + "_" + encoding + "_" +
codePageName;
@@ -247,7 +247,7 @@ public abstract class CharacterSetBuilde
}
// characterset not in the cache, so recreating
- characterSet = new CharacterSet(codePageName, encoding, isEDBCS,
characterSetName,
+ characterSet = new CharacterSet(codePageName, encoding, charsetType,
characterSetName,
accessor, eventProducer);
InputStream inputStream = null;
@@ -465,8 +465,7 @@ public abstract class CharacterSetBuilde
}
}
- return (CharacterSetOrientation[]) orientations
- .toArray(EMPTY_CSO_ARRAY);
+ return orientations.toArray(EMPTY_CSO_ARRAY);
}
/**
@@ -570,7 +569,7 @@ public abstract class CharacterSetBuilde
String gcgiString = new String(gcgid,
AFPConstants.EBCIDIC_ENCODING);
- String idx = (String) codepage.get(gcgiString);
+ String idx = codepage.get(gcgiString);
if (idx != null) {
Modified:
xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/fonts/CharactersetEncoder.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/fonts/CharactersetEncoder.java?rev=1338605&r1=1338604&r2=1338605&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/fonts/CharactersetEncoder.java
(original)
+++
xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/fonts/CharactersetEncoder.java
Tue May 15 09:07:02 2012
@@ -82,13 +82,12 @@ public abstract class CharactersetEncode
*
* @param chars the character sequence
* @param encoding the encoding type
- * @param isEDBCS if this encoding represents a double-byte character set
* @return encoded data
* @throws CharacterCodingException if encoding fails
*/
- public static EncodedChars encodeSBCS(CharSequence chars, String encoding,
boolean isEDBCS)
+ public static EncodedChars encodeSBCS(CharSequence chars, String encoding)
throws CharacterCodingException {
- CharactersetEncoder encoder = newInstance(encoding, isEDBCS);
+ CharactersetEncoder encoder = newInstance(encoding,
CharacterSetType.SINGLE_BYTE);
return encoder.encode(chars);
}
@@ -98,8 +97,8 @@ public abstract class CharactersetEncode
* sequence it will return its EBCDIC code-point, however, the "Shift In -
Shift Out" operators
* are removed from the sequence of bytes. These are only used in Line
Data.
*/
- private static final class EbcdicDoubleByteEncoder extends
CharactersetEncoder {
- private EbcdicDoubleByteEncoder(String encoding) {
+ private static final class EbcdicDoubleByteLineDataEncoder extends
CharactersetEncoder {
+ private EbcdicDoubleByteLineDataEncoder(String encoding) {
super(encoding);
}
@Override
@@ -117,13 +116,16 @@ public abstract class CharactersetEncode
* byte character sets (DBCS).
*/
private static final class DefaultEncoder extends CharactersetEncoder {
- private DefaultEncoder(String encoding) {
+ private final boolean isDBCS;
+
+ private DefaultEncoder(String encoding, boolean isDBCS) {
super(encoding);
+ this.isDBCS = isDBCS;
}
@Override
EncodedChars getEncodedChars(byte[] byteArray, int length) {
- return new EncodedChars(byteArray, false);
+ return new EncodedChars(byteArray, isDBCS);
}
}
@@ -134,17 +136,21 @@ public abstract class CharactersetEncode
* @param isEbcdicDBCS whether or not this wraps a double-byte EBCDIC code
page.
* @return the CharactersetEncoder
*/
- static CharactersetEncoder newInstance(String encoding, boolean
isEbcdicDBCS) {
- if (isEbcdicDBCS) {
- return new EbcdicDoubleByteEncoder(encoding);
- } else {
- return new DefaultEncoder(encoding);
+ static CharactersetEncoder newInstance(String encoding, CharacterSetType
charsetType) {
+ switch (charsetType) {
+ case DOUBLE_BYTE_LINE_DATA:
+ return new EbcdicDoubleByteLineDataEncoder(encoding);
+ case DOUBLE_BYTE:
+ return new DefaultEncoder(encoding, true);
+ default:
+ return new DefaultEncoder(encoding, false);
}
}
/**
* A container for encoded character bytes
*/
+ // CSOFF: FinalClass - disabling "final" modifier so that this class can
be mocked
public static class EncodedChars {
private final byte[] bytes;
Modified:
xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/fonts/FopCharacterSet.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/fonts/FopCharacterSet.java?rev=1338605&r1=1338604&r2=1338605&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/fonts/FopCharacterSet.java
(original)
+++
xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/fonts/FopCharacterSet.java
Tue May 15 09:07:02 2012
@@ -42,7 +42,8 @@ public class FopCharacterSet extends Cha
*/
public FopCharacterSet(String codePage, String encoding, String name,
Typeface charSet,
AFPEventProducer eventProducer) {
- super(codePage, encoding, false, name, (ResourceAccessor) null,
eventProducer);
+ super(codePage, encoding, CharacterSetType.SINGLE_BYTE, name,
(ResourceAccessor) null,
+ eventProducer);
this.charSet = charSet;
}
@@ -132,5 +133,4 @@ public class FopCharacterSet extends Cha
public char mapChar(char c) {
return charSet.mapChar(c);
}
-
}
Modified:
xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/ptoca/PtocaProducer.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/ptoca/PtocaProducer.java?rev=1338605&r1=1338604&r2=1338605&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/ptoca/PtocaProducer.java
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/ptoca/PtocaProducer.java
Tue May 15 09:07:02 2012
@@ -22,8 +22,8 @@ package org.apache.fop.afp.ptoca;
import java.io.IOException;
/**
- * Producer interface that is passed to a {@link PresentationTextObject} to
produce PTOCA control
- * sequences using a {@link PtocaBuilder}.
+ * Producer interface that is passed to a {@link
org.apache.fop.afp.modca.PresentationTextObject}
+ * to produce PTOCA control sequences using a {@link PtocaBuilder}.
*/
public interface PtocaProducer {
Modified:
xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/ptoca/TextDataInfoProducer.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/ptoca/TextDataInfoProducer.java?rev=1338605&r1=1338604&r2=1338605&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/ptoca/TextDataInfoProducer.java
(original)
+++
xmlgraphics/fop/trunk/src/java/org/apache/fop/afp/ptoca/TextDataInfoProducer.java
Tue May 15 09:07:02 2012
@@ -56,7 +56,7 @@ public class TextDataInfoProducer implem
// Add transparent data
String textString = textDataInfo.getString();
String encoding = textDataInfo.getEncoding();
- builder.addTransparentData(CharactersetEncoder.encodeSBCS(textString,
encoding, false));
+ builder.addTransparentData(CharactersetEncoder.encodeSBCS(textString,
encoding));
}
}
Modified:
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/AFPRendererConfigurator.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/AFPRendererConfigurator.java?rev=1338605&r1=1338604&r2=1338605&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/AFPRendererConfigurator.java
(original)
+++
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/afp/AFPRendererConfigurator.java
Tue May 15 09:07:02 2012
@@ -37,6 +37,7 @@ import org.apache.fop.afp.fonts.AFPFontC
import org.apache.fop.afp.fonts.AFPFontInfo;
import org.apache.fop.afp.fonts.CharacterSet;
import org.apache.fop.afp.fonts.CharacterSetBuilder;
+import org.apache.fop.afp.fonts.CharacterSetType;
import org.apache.fop.afp.fonts.DoubleByteFont;
import org.apache.fop.afp.fonts.OutlineFont;
import org.apache.fop.afp.fonts.RasterFont;
@@ -220,7 +221,7 @@ public class AFPRendererConfigurator ext
}
} else {
font.addCharacterSet(sizeMpt,
CharacterSetBuilder.getSingleByteInstance()
- .build(characterset, codepage, encoding,
accessor, eventProducer));
+ .buildSBCS(characterset, codepage, encoding,
accessor, eventProducer));
}
}
return font;
@@ -254,7 +255,7 @@ public class AFPRendererConfigurator ext
log.error(msg);
}
} else {
- characterSet =
CharacterSetBuilder.getSingleByteInstance().build(
+ characterSet =
CharacterSetBuilder.getSingleByteInstance().buildSBCS(
characterset, codepage, encoding, accessor,
eventProducer);
}
// Return new font object
@@ -269,10 +270,10 @@ public class AFPRendererConfigurator ext
}
String name = afpFontCfg.getAttribute("name", characterset);
CharacterSet characterSet = null;
- boolean ebcdicDBCS =
afpFontCfg.getAttributeAsBoolean("ebcdic-dbcs", false);
-
+ CharacterSetType charsetType =
afpFontCfg.getAttributeAsBoolean("ebcdic-dbcs", false)
+ ? CharacterSetType.DOUBLE_BYTE_LINE_DATA :
CharacterSetType.DOUBLE_BYTE;
characterSet =
CharacterSetBuilder.getDoubleByteInstance().buildDBCS(characterset,
- codepage, encoding, ebcdicDBCS, accessor, eventProducer);
+ codepage, encoding, charsetType, accessor, eventProducer);
// Create a new font object
DoubleByteFont font = new DoubleByteFont(name, characterSet);
@@ -322,7 +323,7 @@ public class AFPRendererConfigurator ext
}
List<FontTriplet> fontTriplets = afi.getFontTriplets();
for (int j = 0; j < fontTriplets.size(); ++j) {
- FontTriplet triplet = (FontTriplet) fontTriplets.get(j);
+ FontTriplet triplet = fontTriplets.get(j);
if (log.isDebugEnabled()) {
log.debug(" Font triplet "
+ triplet.getName() + ", "
Modified:
xmlgraphics/fop/trunk/test/java/org/apache/fop/afp/fonts/CharactersetEncoderTestCase.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/afp/fonts/CharactersetEncoderTestCase.java?rev=1338605&r1=1338604&r2=1338605&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/test/java/org/apache/fop/afp/fonts/CharactersetEncoderTestCase.java
(original)
+++
xmlgraphics/fop/trunk/test/java/org/apache/fop/afp/fonts/CharactersetEncoderTestCase.java
Tue May 15 09:07:02 2012
@@ -19,10 +19,6 @@
package org.apache.fop.afp.fonts;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.charset.CharacterCodingException;
@@ -30,6 +26,10 @@ import java.nio.charset.CharacterCodingE
import org.junit.Before;
import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
/**
* Test {@link CharactersetEncoder}
*/
@@ -39,8 +39,9 @@ public class CharactersetEncoderTestCase
@Before
public void setUp() {
- singlebyteEncoder = CharactersetEncoder.newInstance("cp500", false);
- doublebyteEncoder = CharactersetEncoder.newInstance("cp937", true);
+ singlebyteEncoder = CharactersetEncoder.newInstance("cp500",
CharacterSetType.SINGLE_BYTE);
+ doublebyteEncoder = CharactersetEncoder.newInstance("cp937",
+ CharacterSetType.DOUBLE_BYTE_LINE_DATA);
}
// This is just an arbitrary CJK string
@@ -95,7 +96,7 @@ public class CharactersetEncoderTestCase
@Test
public void testEncode() throws CharacterCodingException, IOException {
- CharactersetEncoder.EncodedChars encChars;// =
doublebyteEncoder.encode(testCJKText);
+ CharactersetEncoder.EncodedChars encChars; // =
doublebyteEncoder.encode(testCJKText);
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
// JAVA 1.5 has a bug in the JVM in which these err for some reason...
JAVA 1.6 no issues
/*encChars.writeTo(bOut, 0, encChars.getLength());
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]