aboutsummaryrefslogtreecommitdiffstats
path: root/test/java/org/apache
diff options
context:
space:
mode:
authorMehdi Houshmand <mehdi@apache.org>2011-11-21 13:33:00 +0000
committerMehdi Houshmand <mehdi@apache.org>2011-11-21 13:33:00 +0000
commit96f6f23137a6709d0752ce70f5861852c2211bfb (patch)
treec395dae85f3d3ae5283c31ec120216c788a23d13 /test/java/org/apache
parent69e5c269a31bf7add2c66892d30b9a5eb1fa87a8 (diff)
downloadxmlgraphics-fop-96f6f23137a6709d0752ce70f5861852c2211bfb.tar.gz
xmlgraphics-fop-96f6f23137a6709d0752ce70f5861852c2211bfb.zip
Bugzilla #52197: Improved support for AdobeStandardEncoding encoded AFM files for type1 fonts
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1204488 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'test/java/org/apache')
-rw-r--r--test/java/org/apache/fop/StandardTestSuite.java50
-rw-r--r--test/java/org/apache/fop/config/FontsDirectoryBadTestCase.java0
-rw-r--r--test/java/org/apache/fop/events/EventProcessingTestCase.java30
-rw-r--r--test/java/org/apache/fop/fonts/DejaVuLGCSerifTestCase.java5
-rw-r--r--test/java/org/apache/fop/fonts/FontEventProcessingTestCase.java53
-rw-r--r--test/java/org/apache/fop/fonts/substituted-font.fo14
-rw-r--r--test/java/org/apache/fop/fonts/truetype/GlyfTableTestCase.java2
-rw-r--r--test/java/org/apache/fop/fonts/truetype/TTFFontLoaderTestCase.java4
-rw-r--r--test/java/org/apache/fop/fonts/type1/AFMParserTestCase.java131
-rw-r--r--test/java/org/apache/fop/fonts/type1/AdobeStandardEncoding.txt213
-rw-r--r--test/java/org/apache/fop/fonts/type1/AdobeStandardEncodingTestCase.java84
-rw-r--r--test/java/org/apache/fop/fonts/type1/CharMetricsHandlerTestCase.java85
-rw-r--r--test/java/org/apache/fop/fonts/type1/adobe-charset_adobe-encoding.afm158
-rw-r--r--test/java/org/apache/fop/fonts/type1/adobe-charset_unknown-encoding.afm158
-rw-r--r--test/java/org/apache/fop/fonts/type1/notadobe-charset_adobe-encoding.afm158
-rw-r--r--test/java/org/apache/fop/fonts/type1/notadobe-charset_unknown-encoding.afm158
16 files changed, 1257 insertions, 46 deletions
diff --git a/test/java/org/apache/fop/StandardTestSuite.java b/test/java/org/apache/fop/StandardTestSuite.java
index e6800b3c4..548a2e4aa 100644
--- a/test/java/org/apache/fop/StandardTestSuite.java
+++ b/test/java/org/apache/fop/StandardTestSuite.java
@@ -27,7 +27,10 @@ import org.apache.fop.afp.fonts.CharactersetEncoderTestCase;
import org.apache.fop.afp.parser.MODCAParserTestCase;
import org.apache.fop.area.ViewportTestSuite;
import org.apache.fop.fonts.DejaVuLGCSerifTestCase;
+import org.apache.fop.fonts.FontEventProcessingTestCase;
import org.apache.fop.fonts.truetype.GlyfTableTestCase;
+import org.apache.fop.fonts.type1.AFMParserTestCase;
+import org.apache.fop.fonts.type1.AdobeStandardEncodingTestCase;
import org.apache.fop.image.loader.batik.ImageLoaderTestCase;
import org.apache.fop.image.loader.batik.ImagePreloaderTestCase;
import org.apache.fop.intermediate.IFMimickingTestCase;
@@ -47,28 +50,31 @@ import org.apache.fop.traits.MinOptMaxTestCase;
*/
@RunWith(Suite.class)
@SuiteClasses({
- BasicDriverTestSuite.class,
- UtilityCodeTestSuite.class,
- PDFAConformanceTestCase.class,
- PDFEncodingTestCase.class,
- PDFCMapTestCase.class,
- PDFsRGBSettingsTestCase.class,
- DejaVuLGCSerifTestCase.class,
- RichTextFormatTestSuite.class,
- ImageLoaderTestCase.class,
- ImagePreloaderTestCase.class,
- IFMimickingTestCase.class,
- PageBoundariesTestCase.class,
- PageScaleTestCase.class,
- org.apache.fop.afp.AFPTestSuite.class,
- GlyfTableTestCase.class,
- ViewportTestSuite.class,
- RenderPDFTestSuite.class,
- MODCAParserTestCase.class,
- CharactersetEncoderTestCase.class,
- org.apache.fop.render.afp.AFPTestSuite.class,
- PSTestSuite.class,
- MinOptMaxTestCase.class
+ BasicDriverTestSuite.class,
+ UtilityCodeTestSuite.class,
+ PDFAConformanceTestCase.class,
+ PDFEncodingTestCase.class,
+ PDFCMapTestCase.class,
+ PDFsRGBSettingsTestCase.class,
+ DejaVuLGCSerifTestCase.class,
+ RichTextFormatTestSuite.class,
+ ImageLoaderTestCase.class,
+ ImagePreloaderTestCase.class,
+ IFMimickingTestCase.class,
+ PageBoundariesTestCase.class,
+ PageScaleTestCase.class,
+ org.apache.fop.afp.AFPTestSuite.class,
+ GlyfTableTestCase.class,
+ ViewportTestSuite.class,
+ RenderPDFTestSuite.class,
+ MODCAParserTestCase.class,
+ CharactersetEncoderTestCase.class,
+ org.apache.fop.render.afp.AFPTestSuite.class,
+ PSTestSuite.class,
+ MinOptMaxTestCase.class,
+ AdobeStandardEncodingTestCase.class,
+ AFMParserTestCase.class,
+ FontEventProcessingTestCase.class
})
public class StandardTestSuite {
}
diff --git a/test/java/org/apache/fop/config/FontsDirectoryBadTestCase.java b/test/java/org/apache/fop/config/FontsDirectoryBadTestCase.java
deleted file mode 100644
index e69de29bb..000000000
--- a/test/java/org/apache/fop/config/FontsDirectoryBadTestCase.java
+++ /dev/null
diff --git a/test/java/org/apache/fop/events/EventProcessingTestCase.java b/test/java/org/apache/fop/events/EventProcessingTestCase.java
index 16adbfbac..eda016002 100644
--- a/test/java/org/apache/fop/events/EventProcessingTestCase.java
+++ b/test/java/org/apache/fop/events/EventProcessingTestCase.java
@@ -19,8 +19,9 @@
package org.apache.fop.events;
-import java.io.File;
+import java.io.FileInputStream;
import java.io.IOException;
+import java.io.InputStream;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
@@ -45,7 +46,6 @@ import org.apache.fop.apps.FopFactory;
import org.apache.fop.area.AreaEventProducer;
import org.apache.fop.fo.FOValidationEventProducer;
import org.apache.fop.fo.flow.table.TableEventProducer;
-import org.apache.fop.fonts.FontEventProducer;
import org.apache.fop.layoutmgr.BlockLevelEventProducer;
import org.apache.fop.layoutmgr.inline.InlineLevelEventProducer;
@@ -58,7 +58,9 @@ public class EventProcessingTestCase {
private final TransformerFactory tFactory = TransformerFactory.newInstance();
- private void doTest(String filename, String fopConf, String expectedEventID)
+ private static final String BASE_DIR = "test/events/";
+
+ public void doTest(InputStream inStream, String fopConf, String expectedEventID)
throws FOPException, TransformerException, IOException, SAXException {
EventChecker eventChecker = new EventChecker(expectedEventID);
if (fopConf != null) {
@@ -68,17 +70,22 @@ public class EventProcessingTestCase {
userAgent.getEventBroadcaster().addEventListener(eventChecker);
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, userAgent, new NullOutputStream());
Transformer transformer = tFactory.newTransformer();
- Source src = new StreamSource(new File("test/events/" + filename));
+ Source src = new StreamSource(inStream);
Result res = new SAXResult(fop.getDefaultHandler());
transformer.transform(src, res);
eventChecker.end();
}
- private void doTest(String filename, String expectedEventID) throws
+ public void doTest(String filename, String expectedEventID) throws
FOPException, TransformerException, IOException, SAXException {
doTest(filename, null, expectedEventID);
}
+ public void doTest(String filename, String fopConf, String expectedEventID) throws
+ FOPException, TransformerException, IOException, SAXException {
+ doTest(new FileInputStream(BASE_DIR + filename), fopConf, expectedEventID);
+ }
+
@Test
public void testArea() throws TransformerException, IOException, SAXException {
doTest("area.fo",
@@ -118,17 +125,4 @@ public class EventProcessingTestCase {
doTest("inline-level.fo",
InlineLevelEventProducer.class.getName() + ".lineOverflows");
}
-
- @Test
- public void testFont() throws FOPException, TransformerException, IOException, SAXException {
- doTest("font.fo",
- FontEventProducer.class.getName() + ".fontSubstituted");
- }
-
- @Test
- public void testFontWithBadDirectory() throws FOPException, TransformerException, IOException,
- SAXException {
- doTest("font.fo", "test/config/test_fonts_directory_bad.xconf",
- FontEventProducer.class.getName() + ".fontDirectoryNotFound");
- }
}
diff --git a/test/java/org/apache/fop/fonts/DejaVuLGCSerifTestCase.java b/test/java/org/apache/fop/fonts/DejaVuLGCSerifTestCase.java
index f3767675c..322d5f622 100644
--- a/test/java/org/apache/fop/fonts/DejaVuLGCSerifTestCase.java
+++ b/test/java/org/apache/fop/fonts/DejaVuLGCSerifTestCase.java
@@ -42,9 +42,8 @@ public class DejaVuLGCSerifTestCase {
*/
@Before
public void setUp() throws Exception {
- File file = new File("test/resources/fonts/DejaVuLGCSerif.ttf");
- font = FontLoader.loadFont(file, "", true, EncodingMode.AUTO,
- fontResolver);
+ File file = new File("test/resources/fonts/ttf/DejaVuLGCSerif.ttf");
+ font = FontLoader.loadFont(file, "", true, EncodingMode.AUTO, fontResolver);
}
/**
diff --git a/test/java/org/apache/fop/fonts/FontEventProcessingTestCase.java b/test/java/org/apache/fop/fonts/FontEventProcessingTestCase.java
new file mode 100644
index 000000000..b35f38877
--- /dev/null
+++ b/test/java/org/apache/fop/fonts/FontEventProcessingTestCase.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.fonts;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.xml.transform.TransformerException;
+
+import org.junit.Test;
+import org.xml.sax.SAXException;
+
+import org.apache.fop.apps.FOPException;
+import org.apache.fop.events.EventProcessingTestCase;
+
+/**
+ * Testing font events.
+ */
+public class FontEventProcessingTestCase {
+
+ private EventProcessingTestCase eventsTests = new EventProcessingTestCase();
+
+ @Test
+ public void testFont() throws FOPException, TransformerException, IOException, SAXException {
+ InputStream inStream = getClass().getResourceAsStream("substituted-font.fo");
+ eventsTests.doTest(inStream, null, FontEventProducer.class.getName() + ".fontSubstituted");
+ }
+
+ @Test
+ public void testFontWithBadDirectory() throws FOPException, TransformerException, IOException,
+ SAXException {
+ InputStream inStream = getClass().getResourceAsStream("substituted-font.fo");
+ eventsTests.doTest(inStream, "test/config/test_fonts_directory_bad.xconf",
+ FontEventProducer.class.getName() + ".fontDirectoryNotFound");
+ }
+}
diff --git a/test/java/org/apache/fop/fonts/substituted-font.fo b/test/java/org/apache/fop/fonts/substituted-font.fo
new file mode 100644
index 000000000..551527522
--- /dev/null
+++ b/test/java/org/apache/fop/fonts/substituted-font.fo
@@ -0,0 +1,14 @@
+<?xml version="1.0" standalone="no"?>
+<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="page"
+ page-height="420pt" page-width="320pt" margin="10pt">
+ <fo:region-body background-color="#F0F0F0"/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="page">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block font-family="blah">This block uses an unknown font.</fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+</fo:root>
diff --git a/test/java/org/apache/fop/fonts/truetype/GlyfTableTestCase.java b/test/java/org/apache/fop/fonts/truetype/GlyfTableTestCase.java
index a55d94e80..67191accc 100644
--- a/test/java/org/apache/fop/fonts/truetype/GlyfTableTestCase.java
+++ b/test/java/org/apache/fop/fonts/truetype/GlyfTableTestCase.java
@@ -55,7 +55,7 @@ public class GlyfTableTestCase {
@Before
public void setUp() throws IOException {
- originalFontReader = new FontFileReader("test/resources/fonts/DejaVuLGCSerif.ttf");
+ originalFontReader = new FontFileReader("test/resources/fonts/ttf/DejaVuLGCSerif.ttf");
}
/**
diff --git a/test/java/org/apache/fop/fonts/truetype/TTFFontLoaderTestCase.java b/test/java/org/apache/fop/fonts/truetype/TTFFontLoaderTestCase.java
index 595eb9b5f..0d6fc1d48 100644
--- a/test/java/org/apache/fop/fonts/truetype/TTFFontLoaderTestCase.java
+++ b/test/java/org/apache/fop/fonts/truetype/TTFFontLoaderTestCase.java
@@ -38,7 +38,7 @@ public class TTFFontLoaderTestCase {
@Test
public void testUseKerning() throws IOException {
- File file = new File("test/resources/fonts/DejaVuLGCSerif.ttf");
+ File file = new File("test/resources/fonts/ttf/DejaVuLGCSerif.ttf");
String absoluteFilePath = file.toURL().toExternalForm();
FontResolver resolver = FontManager.createMinimalFontResolver();
String fontName = "Deja Vu";
@@ -54,4 +54,4 @@ public class TTFFontLoaderTestCase {
useKerning, resolver);
assertFalse(fontLoader.getFont().hasKerningInfo());
}
-} \ No newline at end of file
+}
diff --git a/test/java/org/apache/fop/fonts/type1/AFMParserTestCase.java b/test/java/org/apache/fop/fonts/type1/AFMParserTestCase.java
new file mode 100644
index 000000000..93443a0d9
--- /dev/null
+++ b/test/java/org/apache/fop/fonts/type1/AFMParserTestCase.java
@@ -0,0 +1,131 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.fonts.type1;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.awt.Rectangle;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
+import org.junit.Test;
+
+/**
+ * Test case for {@link AFMParser}.
+ */
+public class AFMParserTestCase {
+
+ private AFMParser sut = new AFMParser();
+
+ /**
+ * We're testing with two identical files except one has:
+ * EncodingScheme AdobeStandardEncoding
+ * the other has:
+ * EncodingScheme ExpectedEncoding
+ * Both files have the correct character metrics data, and we're checking that both are handled
+ * consistently with both encoding settings.
+ *
+ * @throws IOException if an I/O error occurs
+ */
+ @Test
+ public void testMappingAgainstAdobeStandardEncoding() throws IOException {
+ InputStream expectedStream = getClass().getResourceAsStream(
+ "adobe-charset_unknown-encoding.afm");
+ InputStream adobeStandardStream = getClass().getResourceAsStream(
+ "adobe-charset_adobe-encoding.afm");
+ AFMFile expectedParser = sut.parse(expectedStream, null);
+ AFMFile adobeStandard = sut.parse(adobeStandardStream, null);
+ List<AFMCharMetrics> adobeMetrics = adobeStandard.getCharMetrics();
+ checkCharMtrxList(true, expectedParser.getCharMetrics(), adobeMetrics);
+
+ compareMetrics(adobeMetrics);
+
+ nonAdobeCharsetUnknownEncoding(adobeMetrics);
+
+ nonAdobeCharsetAdobeEncoding(adobeMetrics);
+ }
+
+ private void compareMetrics(List<AFMCharMetrics> charMetrics) {
+ // in order to ensure that every character is parsed properly, we're going to check them
+ // against the AFM file (bboxes were created with a counter)
+ AdobeStandardEncoding[] standardEncoding = AdobeStandardEncoding.values();
+ for (int i = 0; i < charMetrics.size(); i++) {
+ Rectangle expectedBbox = new Rectangle(i + 1, i + 1, 0, 0);
+ AFMCharMetrics thisMetric = charMetrics.get(i);
+ assertTrue(thisMetric.getBBox().equals(expectedBbox));
+ assertEquals(thisMetric.getCharName(), standardEncoding[i].getAdobeName());
+ }
+ }
+
+ /**
+ * A non-adobe encoded file is tested, all the character codes are not AdobeStandardEncoding and
+ * the encoding is not AdobeStandardEncoding, we are checking a failure case here. Checking that
+ * the AdobeStandardEncoding isn't forced on other encodings.
+ *
+ * @param expected the AdobeStandardEncoding encoded character metrics list
+ * @throws IOException if an IO error occurs
+ */
+ private void nonAdobeCharsetUnknownEncoding(List<AFMCharMetrics> expected)
+ throws IOException {
+ InputStream inStream = getClass().getResourceAsStream(
+ "notadobe-charset_unknown-encoding.afm");
+ AFMFile afmFile = sut.parse(inStream, null);
+ List<AFMCharMetrics> unknownEncodingMetrics = afmFile.getCharMetrics();
+ checkCharMtrxList(false, expected, unknownEncodingMetrics);
+ }
+
+ /**
+ * This tests a poorly encoded file, it has AdobeStandardEncoding. We are checking that the
+ * metrics are correctly analysed against properly encoded char metrics.
+ *
+ * @param expected
+ * @throws IOException
+ */
+ private void nonAdobeCharsetAdobeEncoding(List<AFMCharMetrics> expected)
+ throws IOException {
+ InputStream inStream = getClass().getResourceAsStream(
+ "notadobe-charset_adobe-encoding.afm");
+ AFMFile afmFile = sut.parse(inStream, null);
+ List<AFMCharMetrics> correctedCharMetrics = afmFile.getCharMetrics();
+ checkCharMtrxList(true, expected, correctedCharMetrics);
+ }
+
+ private boolean charMetricsEqual(AFMCharMetrics o1, AFMCharMetrics o2) {
+ return o1.getCharCode() == o2.getCharCode()
+ && objectEquals(o1.getCharacter(), o2.getCharacter())
+ && o1.getWidthX() == o2.getWidthX()
+ && o1.getWidthY() == o2.getWidthY()
+ && objectEquals(o1.getBBox(), o2.getBBox());
+ }
+
+ private void checkCharMtrxList(boolean expectedResult, List<AFMCharMetrics> expectedList,
+ List<AFMCharMetrics> actualList) {
+ assertEquals(expectedList.size(), actualList.size());
+ for (int i = 0; i < expectedList.size(); i++) {
+ assertEquals(expectedResult, charMetricsEqual(expectedList.get(i), actualList.get(i)));
+ }
+ }
+
+ private boolean objectEquals(Object o1, Object o2) {
+ return o1 == null ? o2 == null : (o1 == o2 || o1.equals(o2));
+ }
+}
diff --git a/test/java/org/apache/fop/fonts/type1/AdobeStandardEncoding.txt b/test/java/org/apache/fop/fonts/type1/AdobeStandardEncoding.txt
new file mode 100644
index 000000000..e39486a31
--- /dev/null
+++ b/test/java/org/apache/fop/fonts/type1/AdobeStandardEncoding.txt
@@ -0,0 +1,213 @@
+#
+# Name: Adobe Standard Encoding to Unicode
+# Unicode version: 2.0
+# Table version: 1.0
+# Date: 2011 July 12
+#
+# Copyright (c) 1991-2011 Unicode, Inc. All Rights reserved.
+#
+# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). No
+# claims are made as to fitness for any particular purpose. No warranties of
+# any kind are expressed or implied. The recipient agrees to determine
+# applicability of information provided. If this file has been provided on
+# magnetic media by Unicode, Inc., the sole remedy for any claim will be
+# exchange of defective media within 90 days of receipt.
+#
+# Unicode, Inc. hereby grants the right to freely use the information
+# supplied in this file in the creation of products supporting the
+# Unicode Standard, and to make copies of this file in any form for
+# internal or external distribution as long as this notice remains
+# attached.
+#
+# Format: 4 tab-delimited fields:
+#
+# (1) The Unicode value (in hexadecimal)
+# (2) The Adobe Standard Encoding code point (in hexadecimal)
+# (3) # Unicode name
+# (4) # PostScript character name
+#
+# General Notes:
+#
+# The Unicode values in this table were produced as the result of applying
+# the algorithm described in the section "Populating a Unicode space" in the
+# document "Unicode and Glyph Names," at
+# http://partners.adobe.com/asn/developer/typeforum/unicodegn.html
+# to the characters encoded in Adobe Standard Encoding. Note that some
+# Standard Encoding characters, such as "space", are mapped to 2 Unicode
+# values. Refer to the above document for more details.
+#
+# 2011 July 12: The above link is no longer valid. For comparable,
+# more current information, see the document, "Glyph", at:
+# <http://www.adobe.com/devnet/opentype/archives/glyph.html>
+#
+# Revision History:
+#
+# [v1.0, 2011 July 12]
+# Updated terms of use to current wording.
+# Updated contact information and document link.
+# No changes to the mapping data.
+#
+# [v0.2, 30 March 1999]
+# Different algorithm to produce Unicode values (see notes above) results in
+# some character codes being mapped to 2 Unicode values. Updated Unicode
+# names to Unicode 2.0 names.
+#
+# [v0.1, 5 May 1995] First release.
+#
+# Use the Unicode reporting form <http://www.unicode.org/reporting.html>
+# for any questions or comments or to report errors in the data.
+#
+0020 20 # SPACE # space
+00A0 20 # NO-BREAK SPACE # space
+0021 21 # EXCLAMATION MARK # exclam
+0022 22 # QUOTATION MARK # quotedbl
+0023 23 # NUMBER SIGN # numbersign
+0024 24 # DOLLAR SIGN # dollar
+0025 25 # PERCENT SIGN # percent
+0026 26 # AMPERSAND # ampersand
+2019 27 # RIGHT SINGLE QUOTATION MARK # quoteright
+0028 28 # LEFT PARENTHESIS # parenleft
+0029 29 # RIGHT PARENTHESIS # parenright
+002A 2A # ASTERISK # asterisk
+002B 2B # PLUS SIGN # plus
+002C 2C # COMMA # comma
+002D 2D # HYPHEN-MINUS # hyphen
+00AD 2D # SOFT HYPHEN # hyphen
+002E 2E # FULL STOP # period
+002F 2F # SOLIDUS # slash
+0030 30 # DIGIT ZERO # zero
+0031 31 # DIGIT ONE # one
+0032 32 # DIGIT TWO # two
+0033 33 # DIGIT THREE # three
+0034 34 # DIGIT FOUR # four
+0035 35 # DIGIT FIVE # five
+0036 36 # DIGIT SIX # six
+0037 37 # DIGIT SEVEN # seven
+0038 38 # DIGIT EIGHT # eight
+0039 39 # DIGIT NINE # nine
+003A 3A # COLON # colon
+003B 3B # SEMICOLON # semicolon
+003C 3C # LESS-THAN SIGN # less
+003D 3D # EQUALS SIGN # equal
+003E 3E # GREATER-THAN SIGN # greater
+003F 3F # QUESTION MARK # question
+0040 40 # COMMERCIAL AT # at
+0041 41 # LATIN CAPITAL LETTER A # A
+0042 42 # LATIN CAPITAL LETTER B # B
+0043 43 # LATIN CAPITAL LETTER C # C
+0044 44 # LATIN CAPITAL LETTER D # D
+0045 45 # LATIN CAPITAL LETTER E # E
+0046 46 # LATIN CAPITAL LETTER F # F
+0047 47 # LATIN CAPITAL LETTER G # G
+0048 48 # LATIN CAPITAL LETTER H # H
+0049 49 # LATIN CAPITAL LETTER I # I
+004A 4A # LATIN CAPITAL LETTER J # J
+004B 4B # LATIN CAPITAL LETTER K # K
+004C 4C # LATIN CAPITAL LETTER L # L
+004D 4D # LATIN CAPITAL LETTER M # M
+004E 4E # LATIN CAPITAL LETTER N # N
+004F 4F # LATIN CAPITAL LETTER O # O
+0050 50 # LATIN CAPITAL LETTER P # P
+0051 51 # LATIN CAPITAL LETTER Q # Q
+0052 52 # LATIN CAPITAL LETTER R # R
+0053 53 # LATIN CAPITAL LETTER S # S
+0054 54 # LATIN CAPITAL LETTER T # T
+0055 55 # LATIN CAPITAL LETTER U # U
+0056 56 # LATIN CAPITAL LETTER V # V
+0057 57 # LATIN CAPITAL LETTER W # W
+0058 58 # LATIN CAPITAL LETTER X # X
+0059 59 # LATIN CAPITAL LETTER Y # Y
+005A 5A # LATIN CAPITAL LETTER Z # Z
+005B 5B # LEFT SQUARE BRACKET # bracketleft
+005C 5C # REVERSE SOLIDUS # backslash
+005D 5D # RIGHT SQUARE BRACKET # bracketright
+005E 5E # CIRCUMFLEX ACCENT # asciicircum
+005F 5F # LOW LINE # underscore
+2018 60 # LEFT SINGLE QUOTATION MARK # quoteleft
+0061 61 # LATIN SMALL LETTER A # a
+0062 62 # LATIN SMALL LETTER B # b
+0063 63 # LATIN SMALL LETTER C # c
+0064 64 # LATIN SMALL LETTER D # d
+0065 65 # LATIN SMALL LETTER E # e
+0066 66 # LATIN SMALL LETTER F # f
+0067 67 # LATIN SMALL LETTER G # g
+0068 68 # LATIN SMALL LETTER H # h
+0069 69 # LATIN SMALL LETTER I # i
+006A 6A # LATIN SMALL LETTER J # j
+006B 6B # LATIN SMALL LETTER K # k
+006C 6C # LATIN SMALL LETTER L # l
+006D 6D # LATIN SMALL LETTER M # m
+006E 6E # LATIN SMALL LETTER N # n
+006F 6F # LATIN SMALL LETTER O # o
+0070 70 # LATIN SMALL LETTER P # p
+0071 71 # LATIN SMALL LETTER Q # q
+0072 72 # LATIN SMALL LETTER R # r
+0073 73 # LATIN SMALL LETTER S # s
+0074 74 # LATIN SMALL LETTER T # t
+0075 75 # LATIN SMALL LETTER U # u
+0076 76 # LATIN SMALL LETTER V # v
+0077 77 # LATIN SMALL LETTER W # w
+0078 78 # LATIN SMALL LETTER X # x
+0079 79 # LATIN SMALL LETTER Y # y
+007A 7A # LATIN SMALL LETTER Z # z
+007B 7B # LEFT CURLY BRACKET # braceleft
+007C 7C # VERTICAL LINE # bar
+007D 7D # RIGHT CURLY BRACKET # braceright
+007E 7E # TILDE # asciitilde
+00A1 A1 # INVERTED EXCLAMATION MARK # exclamdown
+00A2 A2 # CENT SIGN # cent
+00A3 A3 # POUND SIGN # sterling
+2044 A4 # FRACTION SLASH # fraction
+2215 A4 # DIVISION SLASH # fraction
+00A5 A5 # YEN SIGN # yen
+0192 A6 # LATIN SMALL LETTER F WITH HOOK # florin
+00A7 A7 # SECTION SIGN # section
+00A4 A8 # CURRENCY SIGN # currency
+0027 A9 # APOSTROPHE # quotesingle
+201C AA # LEFT DOUBLE QUOTATION MARK # quotedblleft
+00AB AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK # guillemotleft
+2039 AC # SINGLE LEFT-POINTING ANGLE QUOTATION MARK # guilsinglleft
+203A AD # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK # guilsinglright
+FB01 AE # LATIN SMALL LIGATURE FI # fi
+FB02 AF # LATIN SMALL LIGATURE FL # fl
+2013 B1 # EN DASH # endash
+2020 B2 # DAGGER # dagger
+2021 B3 # DOUBLE DAGGER # daggerdbl
+00B7 B4 # MIDDLE DOT # periodcentered
+2219 B4 # BULLET OPERATOR # periodcentered
+00B6 B6 # PILCROW SIGN # paragraph
+2022 B7 # BULLET # bullet
+201A B8 # SINGLE LOW-9 QUOTATION MARK # quotesinglbase
+201E B9 # DOUBLE LOW-9 QUOTATION MARK # quotedblbase
+201D BA # RIGHT DOUBLE QUOTATION MARK # quotedblright
+00BB BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK # guillemotright
+2026 BC # HORIZONTAL ELLIPSIS # ellipsis
+2030 BD # PER MILLE SIGN # perthousand
+00BF BF # INVERTED QUESTION MARK # questiondown
+0060 C1 # GRAVE ACCENT # grave
+00B4 C2 # ACUTE ACCENT # acute
+02C6 C3 # MODIFIER LETTER CIRCUMFLEX ACCENT # circumflex
+02DC C4 # SMALL TILDE # tilde
+00AF C5 # MACRON # macron
+02C9 C5 # MODIFIER LETTER MACRON # macron
+02D8 C6 # BREVE # breve
+02D9 C7 # DOT ABOVE # dotaccent
+00A8 C8 # DIAERESIS # dieresis
+02DA CA # RING ABOVE # ring
+00B8 CB # CEDILLA # cedilla
+02DD CD # DOUBLE ACUTE ACCENT # hungarumlaut
+02DB CE # OGONEK # ogonek
+02C7 CF # CARON # caron
+2014 D0 # EM DASH # emdash
+00C6 E1 # LATIN CAPITAL LETTER AE # AE
+00AA E3 # FEMININE ORDINAL INDICATOR # ordfeminine
+0141 E8 # LATIN CAPITAL LETTER L WITH STROKE # Lslash
+00D8 E9 # LATIN CAPITAL LETTER O WITH STROKE # Oslash
+0152 EA # LATIN CAPITAL LIGATURE OE # OE
+00BA EB # MASCULINE ORDINAL INDICATOR # ordmasculine
+00E6 F1 # LATIN SMALL LETTER AE # ae
+0131 F5 # LATIN SMALL LETTER DOTLESS I # dotlessi
+0142 F8 # LATIN SMALL LETTER L WITH STROKE # lslash
+00F8 F9 # LATIN SMALL LETTER O WITH STROKE # oslash
+0153 FA # LATIN SMALL LIGATURE OE # oe
+00DF FB # LATIN SMALL LETTER SHARP S # germandbls
diff --git a/test/java/org/apache/fop/fonts/type1/AdobeStandardEncodingTestCase.java b/test/java/org/apache/fop/fonts/type1/AdobeStandardEncodingTestCase.java
new file mode 100644
index 000000000..10ba42119
--- /dev/null
+++ b/test/java/org/apache/fop/fonts/type1/AdobeStandardEncodingTestCase.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.fonts.type1;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * Test case for {@link AdobeStandardEncoding}.
+ */
+public class AdobeStandardEncodingTestCase {
+
+ private static BufferedReader adobeStandardEncoding;
+
+ /**
+ * Sets up the file reader, this file was retrieved from the url below.
+ * http://unicode.org/Public/MAPPINGS/VENDORS/ADOBE/stdenc.txt
+ *
+ * @throws FileNotFoundException if the file was not found
+ */
+ @BeforeClass
+ public static void setupReader() throws FileNotFoundException {
+ InputStream inStream = AdobeStandardEncodingTestCase.class.getResourceAsStream(
+ "AdobeStandardEncoding.txt");
+ adobeStandardEncoding = new BufferedReader(new InputStreamReader(inStream));
+ }
+
+ /**
+ * Probably the best way to test the encoding is by converting it back to format specified in
+ * the file, that way we can ensure data has been migrated properly.
+ *
+ * @throws IOException if an I/O error occurs
+ */
+ @Test
+ public void testCorrectEncoding() throws IOException {
+ for (AdobeStandardEncoding encoding : AdobeStandardEncoding.values()) {
+ String expectedLine = getLine();
+ String hexUnicode = toHexString(encoding.getUnicodeIndex(), 4);
+ String hexAdobe = toHexString(encoding.getAdobeCodePoint(), 2);
+ String actualLine = hexUnicode + "\t"
+ + hexAdobe + "\t# "
+ + encoding.getUnicodeName() + "\t# "
+ + encoding.getAdobeName();
+ assertEquals(expectedLine, actualLine);
+ }
+ }
+
+ private String getLine() throws IOException {
+ String line = "# The first few lines are comments, these should be ignored";
+ while (line.startsWith("#")) {
+ line = adobeStandardEncoding.readLine();
+ }
+ return line;
+ }
+
+ private String toHexString(int number, int length) {
+ return String.format("%0" + length + "X", number);
+ }
+}
diff --git a/test/java/org/apache/fop/fonts/type1/CharMetricsHandlerTestCase.java b/test/java/org/apache/fop/fonts/type1/CharMetricsHandlerTestCase.java
new file mode 100644
index 000000000..de9af2d33
--- /dev/null
+++ b/test/java/org/apache/fop/fonts/type1/CharMetricsHandlerTestCase.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.fonts.type1;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.awt.Rectangle;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Stack;
+
+import org.junit.Test;
+
+import org.apache.fop.fonts.NamedCharacter;
+import org.apache.fop.fonts.type1.AFMParser.ValueHandler;
+
+/**
+ * Test case for {@link CharMetricsHandler}.
+ */
+public class CharMetricsHandlerTestCase {
+
+ private static final String GOOD_LINE = "C 32 ; WX 32 ; N space ; B 1 1 1 1";
+
+ private static final AFMCharMetrics EXPECTED_CHM;
+
+ static {
+ EXPECTED_CHM = new AFMCharMetrics();
+ EXPECTED_CHM.setCharCode(32);
+ EXPECTED_CHM.setWidthX(32.0);
+ EXPECTED_CHM.setCharacter(new NamedCharacter("space"));
+ EXPECTED_CHM.setBBox(new Rectangle(1, 1, 0, 0));
+ }
+
+ @Test
+ public void testHandlers() throws IOException {
+ testEncodingWithMetricsLine("", GOOD_LINE);
+ testEncodingWithMetricsLine("WrongEncoding", GOOD_LINE);
+ testEncodingWithMetricsLine("AdobeStandardEncoding", GOOD_LINE);
+ }
+
+ private void testEncodingWithMetricsLine(String encoding, String line) throws IOException {
+ Map<String, ValueHandler> valueParsers = mock(HashMap.class);
+ ValueHandler cHandler = mock(ValueHandler.class);
+ ValueHandler wxHandler = mock(ValueHandler.class);
+ ValueHandler nHandler = mock(ValueHandler.class);
+ ValueHandler bHandler = mock(ValueHandler.class);
+ when(valueParsers.get("C")).thenReturn(cHandler);
+ when(valueParsers.get("WX")).thenReturn(wxHandler);
+ when(valueParsers.get("N")).thenReturn(nHandler);
+ when(valueParsers.get("B")).thenReturn(bHandler);
+
+ CharMetricsHandler handler = CharMetricsHandler.getHandler(valueParsers, encoding);
+ Stack<Object> stack = new Stack<Object>();
+ handler.parse(line, stack, null);
+
+ verify(valueParsers).get("C");
+ verify(valueParsers).get("WX");
+ verify(valueParsers).get("N");
+ verify(valueParsers).get("B");
+ verify(cHandler).parse("32", 0, new Stack<Object>());
+ verify(wxHandler).parse("32", 0, new Stack<Object>());
+ verify(nHandler).parse("space", 0, new Stack<Object>());
+ verify(bHandler).parse("1 1 1 1", 0, new Stack<Object>());
+ }
+}
diff --git a/test/java/org/apache/fop/fonts/type1/adobe-charset_adobe-encoding.afm b/test/java/org/apache/fop/fonts/type1/adobe-charset_adobe-encoding.afm
new file mode 100644
index 000000000..50f8c3381
--- /dev/null
+++ b/test/java/org/apache/fop/fonts/type1/adobe-charset_adobe-encoding.afm
@@ -0,0 +1,158 @@
+StartFontMetrics 2.0
+EncodingScheme AdobeStandardEncoding
+StartCharMetrics 154
+C 32 ; WX 32 ; N space ; B 1 1 1 1
+C 32 ; WX 32 ; N space ; B 2 2 2 2
+C 33 ; WX 33 ; N exclam ; B 3 3 3 3
+C 34 ; WX 34 ; N quotedbl ; B 4 4 4 4
+C 35 ; WX 35 ; N numbersign ; B 5 5 5 5
+C 36 ; WX 36 ; N dollar ; B 6 6 6 6
+C 37 ; WX 37 ; N percent ; B 7 7 7 7
+C 38 ; WX 38 ; N ampersand ; B 8 8 8 8
+C 39 ; WX 39 ; N quoteright ; B 9 9 9 9
+C 40 ; WX 40 ; N parenleft ; B 10 10 10 10
+C 41 ; WX 41 ; N parenright ; B 11 11 11 11
+C 42 ; WX 42 ; N asterisk ; B 12 12 12 12
+C 43 ; WX 43 ; N plus ; B 13 13 13 13
+C 44 ; WX 44 ; N comma ; B 14 14 14 14
+C 45 ; WX 45 ; N hyphen ; B 15 15 15 15
+C 45 ; WX 45 ; N hyphen ; B 16 16 16 16
+C 46 ; WX 46 ; N period ; B 17 17 17 17
+C 47 ; WX 47 ; N slash ; B 18 18 18 18
+C 48 ; WX 48 ; N zero ; B 19 19 19 19
+C 49 ; WX 49 ; N one ; B 20 20 20 20
+C 50 ; WX 50 ; N two ; B 21 21 21 21
+C 51 ; WX 51 ; N three ; B 22 22 22 22
+C 52 ; WX 52 ; N four ; B 23 23 23 23
+C 53 ; WX 53 ; N five ; B 24 24 24 24
+C 54 ; WX 54 ; N six ; B 25 25 25 25
+C 55 ; WX 55 ; N seven ; B 26 26 26 26
+C 56 ; WX 56 ; N eight ; B 27 27 27 27
+C 57 ; WX 57 ; N nine ; B 28 28 28 28
+C 58 ; WX 58 ; N colon ; B 29 29 29 29
+C 59 ; WX 59 ; N semicolon ; B 30 30 30 30
+C 60 ; WX 60 ; N less ; B 31 31 31 31
+C 61 ; WX 61 ; N equal ; B 32 32 32 32
+C 62 ; WX 62 ; N greater ; B 33 33 33 33
+C 63 ; WX 63 ; N question ; B 34 34 34 34
+C 64 ; WX 64 ; N at ; B 35 35 35 35
+C 65 ; WX 65 ; N A ; B 36 36 36 36
+C 66 ; WX 66 ; N B ; B 37 37 37 37
+C 67 ; WX 67 ; N C ; B 38 38 38 38
+C 68 ; WX 68 ; N D ; B 39 39 39 39
+C 69 ; WX 69 ; N E ; B 40 40 40 40
+C 70 ; WX 70 ; N F ; B 41 41 41 41
+C 71 ; WX 71 ; N G ; B 42 42 42 42
+C 72 ; WX 72 ; N H ; B 43 43 43 43
+C 73 ; WX 73 ; N I ; B 44 44 44 44
+C 74 ; WX 74 ; N J ; B 45 45 45 45
+C 75 ; WX 75 ; N K ; B 46 46 46 46
+C 76 ; WX 76 ; N L ; B 47 47 47 47
+C 77 ; WX 77 ; N M ; B 48 48 48 48
+C 78 ; WX 78 ; N N ; B 49 49 49 49
+C 79 ; WX 79 ; N O ; B 50 50 50 50
+C 80 ; WX 80 ; N P ; B 51 51 51 51
+C 81 ; WX 81 ; N Q ; B 52 52 52 52
+C 82 ; WX 82 ; N R ; B 53 53 53 53
+C 83 ; WX 83 ; N S ; B 54 54 54 54
+C 84 ; WX 84 ; N T ; B 55 55 55 55
+C 85 ; WX 85 ; N U ; B 56 56 56 56
+C 86 ; WX 86 ; N V ; B 57 57 57 57
+C 87 ; WX 87 ; N W ; B 58 58 58 58
+C 88 ; WX 88 ; N X ; B 59 59 59 59
+C 89 ; WX 89 ; N Y ; B 60 60 60 60
+C 90 ; WX 90 ; N Z ; B 61 61 61 61
+C 91 ; WX 91 ; N bracketleft ; B 62 62 62 62
+C 92 ; WX 92 ; N backslash ; B 63 63 63 63
+C 93 ; WX 93 ; N bracketright ; B 64 64 64 64
+C 94 ; WX 94 ; N asciicircum ; B 65 65 65 65
+C 95 ; WX 95 ; N underscore ; B 66 66 66 66
+C 96 ; WX 96 ; N quoteleft ; B 67 67 67 67
+C 97 ; WX 97 ; N a ; B 68 68 68 68
+C 98 ; WX 98 ; N b ; B 69 69 69 69
+C 99 ; WX 99 ; N c ; B 70 70 70 70
+C 100 ; WX 100 ; N d ; B 71 71 71 71
+C 101 ; WX 101 ; N e ; B 72 72 72 72
+C 102 ; WX 102 ; N f ; B 73 73 73 73
+C 103 ; WX 103 ; N g ; B 74 74 74 74
+C 104 ; WX 104 ; N h ; B 75 75 75 75
+C 105 ; WX 105 ; N i ; B 76 76 76 76
+C 106 ; WX 106 ; N j ; B 77 77 77 77
+C 107 ; WX 107 ; N k ; B 78 78 78 78
+C 108 ; WX 108 ; N l ; B 79 79 79 79
+C 109 ; WX 109 ; N m ; B 80 80 80 80
+C 110 ; WX 110 ; N n ; B 81 81 81 81
+C 111 ; WX 111 ; N o ; B 82 82 82 82
+C 112 ; WX 112 ; N p ; B 83 83 83 83
+C 113 ; WX 113 ; N q ; B 84 84 84 84
+C 114 ; WX 114 ; N r ; B 85 85 85 85
+C 115 ; WX 115 ; N s ; B 86 86 86 86
+C 116 ; WX 116 ; N t ; B 87 87 87 87
+C 117 ; WX 117 ; N u ; B 88 88 88 88
+C 118 ; WX 118 ; N v ; B 89 89 89 89
+C 119 ; WX 119 ; N w ; B 90 90 90 90
+C 120 ; WX 120 ; N x ; B 91 91 91 91
+C 121 ; WX 121 ; N y ; B 92 92 92 92
+C 122 ; WX 122 ; N z ; B 93 93 93 93
+C 123 ; WX 123 ; N braceleft ; B 94 94 94 94
+C 124 ; WX 124 ; N bar ; B 95 95 95 95
+C 125 ; WX 125 ; N braceright ; B 96 96 96 96
+C 126 ; WX 126 ; N asciitilde ; B 97 97 97 97
+C 161 ; WX 161 ; N exclamdown ; B 98 98 98 98
+C 162 ; WX 162 ; N cent ; B 99 99 99 99
+C 163 ; WX 163 ; N sterling ; B 100 100 100 100
+C 164 ; WX 164 ; N fraction ; B 101 101 101 101
+C 164 ; WX 164 ; N fraction ; B 102 102 102 102
+C 165 ; WX 165 ; N yen ; B 103 103 103 103
+C 166 ; WX 166 ; N florin ; B 104 104 104 104
+C 167 ; WX 167 ; N section ; B 105 105 105 105
+C 168 ; WX 168 ; N currency ; B 106 106 106 106
+C 169 ; WX 169 ; N quotesingle ; B 107 107 107 107
+C 170 ; WX 170 ; N quotedblleft ; B 108 108 108 108
+C 171 ; WX 171 ; N guillemotleft ; B 109 109 109 109
+C 172 ; WX 172 ; N guilsinglleft ; B 110 110 110 110
+C 173 ; WX 173 ; N guilsinglright ; B 111 111 111 111
+C 174 ; WX 174 ; N fi ; B 112 112 112 112
+C 175 ; WX 175 ; N fl ; B 113 113 113 113
+C 177 ; WX 177 ; N endash ; B 114 114 114 114
+C 178 ; WX 178 ; N dagger ; B 115 115 115 115
+C 179 ; WX 179 ; N daggerdbl ; B 116 116 116 116
+C 180 ; WX 180 ; N periodcentered ; B 117 117 117 117
+C 180 ; WX 180 ; N periodcentered ; B 118 118 118 118
+C 182 ; WX 182 ; N paragraph ; B 119 119 119 119
+C 183 ; WX 183 ; N bullet ; B 120 120 120 120
+C 184 ; WX 184 ; N quotesinglbase ; B 121 121 121 121
+C 185 ; WX 185 ; N quotedblbase ; B 122 122 122 122
+C 186 ; WX 186 ; N quotedblright ; B 123 123 123 123
+C 187 ; WX 187 ; N guillemotright ; B 124 124 124 124
+C 188 ; WX 188 ; N ellipsis ; B 125 125 125 125
+C 189 ; WX 189 ; N perthousand ; B 126 126 126 126
+C 191 ; WX 191 ; N questiondown ; B 127 127 127 127
+C 193 ; WX 193 ; N grave ; B 128 128 128 128
+C 194 ; WX 194 ; N acute ; B 129 129 129 129
+C 195 ; WX 195 ; N circumflex ; B 130 130 130 130
+C 196 ; WX 196 ; N tilde ; B 131 131 131 131
+C 197 ; WX 197 ; N macron ; B 132 132 132 132
+C 197 ; WX 197 ; N macron ; B 133 133 133 133
+C 198 ; WX 198 ; N breve ; B 134 134 134 134
+C 199 ; WX 199 ; N dotaccent ; B 135 135 135 135
+C 200 ; WX 200 ; N dieresis ; B 136 136 136 136
+C 202 ; WX 202 ; N ring ; B 137 137 137 137
+C 203 ; WX 203 ; N cedilla ; B 138 138 138 138
+C 205 ; WX 205 ; N hungarumlaut ; B 139 139 139 139
+C 206 ; WX 206 ; N ogonek ; B 140 140 140 140
+C 207 ; WX 207 ; N caron ; B 141 141 141 141
+C 208 ; WX 208 ; N emdash ; B 142 142 142 142
+C 225 ; WX 225 ; N AE ; B 143 143 143 143
+C 227 ; WX 227 ; N ordfeminine ; B 144 144 144 144
+C 232 ; WX 232 ; N Lslash ; B 145 145 145 145
+C 233 ; WX 233 ; N Oslash ; B 146 146 146 146
+C 234 ; WX 234 ; N OE ; B 147 147 147 147
+C 235 ; WX 235 ; N ordmasculine ; B 148 148 148 148
+C 241 ; WX 241 ; N ae ; B 149 149 149 149
+C 245 ; WX 245 ; N dotlessi ; B 150 150 150 150
+C 248 ; WX 248 ; N lslash ; B 151 151 151 151
+C 249 ; WX 249 ; N oslash ; B 152 152 152 152
+C 250 ; WX 250 ; N oe ; B 153 153 153 153
+C 251 ; WX 251 ; N germandbls ; B 154 154 154 154
+EndCharMetrics
diff --git a/test/java/org/apache/fop/fonts/type1/adobe-charset_unknown-encoding.afm b/test/java/org/apache/fop/fonts/type1/adobe-charset_unknown-encoding.afm
new file mode 100644
index 000000000..8edbe0d76
--- /dev/null
+++ b/test/java/org/apache/fop/fonts/type1/adobe-charset_unknown-encoding.afm
@@ -0,0 +1,158 @@
+StartFontMetrics 2.0
+EncodingScheme FontSpecific
+StartCharMetrics 154
+C 32 ; WX 32 ; N space ; B 1 1 1 1
+C 32 ; WX 32 ; N space ; B 2 2 2 2
+C 33 ; WX 33 ; N exclam ; B 3 3 3 3
+C 34 ; WX 34 ; N quotedbl ; B 4 4 4 4
+C 35 ; WX 35 ; N numbersign ; B 5 5 5 5
+C 36 ; WX 36 ; N dollar ; B 6 6 6 6
+C 37 ; WX 37 ; N percent ; B 7 7 7 7
+C 38 ; WX 38 ; N ampersand ; B 8 8 8 8
+C 39 ; WX 39 ; N quoteright ; B 9 9 9 9
+C 40 ; WX 40 ; N parenleft ; B 10 10 10 10
+C 41 ; WX 41 ; N parenright ; B 11 11 11 11
+C 42 ; WX 42 ; N asterisk ; B 12 12 12 12
+C 43 ; WX 43 ; N plus ; B 13 13 13 13
+C 44 ; WX 44 ; N comma ; B 14 14 14 14
+C 45 ; WX 45 ; N hyphen ; B 15 15 15 15
+C 45 ; WX 45 ; N hyphen ; B 16 16 16 16
+C 46 ; WX 46 ; N period ; B 17 17 17 17
+C 47 ; WX 47 ; N slash ; B 18 18 18 18
+C 48 ; WX 48 ; N zero ; B 19 19 19 19
+C 49 ; WX 49 ; N one ; B 20 20 20 20
+C 50 ; WX 50 ; N two ; B 21 21 21 21
+C 51 ; WX 51 ; N three ; B 22 22 22 22
+C 52 ; WX 52 ; N four ; B 23 23 23 23
+C 53 ; WX 53 ; N five ; B 24 24 24 24
+C 54 ; WX 54 ; N six ; B 25 25 25 25
+C 55 ; WX 55 ; N seven ; B 26 26 26 26
+C 56 ; WX 56 ; N eight ; B 27 27 27 27
+C 57 ; WX 57 ; N nine ; B 28 28 28 28
+C 58 ; WX 58 ; N colon ; B 29 29 29 29
+C 59 ; WX 59 ; N semicolon ; B 30 30 30 30
+C 60 ; WX 60 ; N less ; B 31 31 31 31
+C 61 ; WX 61 ; N equal ; B 32 32 32 32
+C 62 ; WX 62 ; N greater ; B 33 33 33 33
+C 63 ; WX 63 ; N question ; B 34 34 34 34
+C 64 ; WX 64 ; N at ; B 35 35 35 35
+C 65 ; WX 65 ; N A ; B 36 36 36 36
+C 66 ; WX 66 ; N B ; B 37 37 37 37
+C 67 ; WX 67 ; N C ; B 38 38 38 38
+C 68 ; WX 68 ; N D ; B 39 39 39 39
+C 69 ; WX 69 ; N E ; B 40 40 40 40
+C 70 ; WX 70 ; N F ; B 41 41 41 41
+C 71 ; WX 71 ; N G ; B 42 42 42 42
+C 72 ; WX 72 ; N H ; B 43 43 43 43
+C 73 ; WX 73 ; N I ; B 44 44 44 44
+C 74 ; WX 74 ; N J ; B 45 45 45 45
+C 75 ; WX 75 ; N K ; B 46 46 46 46
+C 76 ; WX 76 ; N L ; B 47 47 47 47
+C 77 ; WX 77 ; N M ; B 48 48 48 48
+C 78 ; WX 78 ; N N ; B 49 49 49 49
+C 79 ; WX 79 ; N O ; B 50 50 50 50
+C 80 ; WX 80 ; N P ; B 51 51 51 51
+C 81 ; WX 81 ; N Q ; B 52 52 52 52
+C 82 ; WX 82 ; N R ; B 53 53 53 53
+C 83 ; WX 83 ; N S ; B 54 54 54 54
+C 84 ; WX 84 ; N T ; B 55 55 55 55
+C 85 ; WX 85 ; N U ; B 56 56 56 56
+C 86 ; WX 86 ; N V ; B 57 57 57 57
+C 87 ; WX 87 ; N W ; B 58 58 58 58
+C 88 ; WX 88 ; N X ; B 59 59 59 59
+C 89 ; WX 89 ; N Y ; B 60 60 60 60
+C 90 ; WX 90 ; N Z ; B 61 61 61 61
+C 91 ; WX 91 ; N bracketleft ; B 62 62 62 62
+C 92 ; WX 92 ; N backslash ; B 63 63 63 63
+C 93 ; WX 93 ; N bracketright ; B 64 64 64 64
+C 94 ; WX 94 ; N asciicircum ; B 65 65 65 65
+C 95 ; WX 95 ; N underscore ; B 66 66 66 66
+C 96 ; WX 96 ; N quoteleft ; B 67 67 67 67
+C 97 ; WX 97 ; N a ; B 68 68 68 68
+C 98 ; WX 98 ; N b ; B 69 69 69 69
+C 99 ; WX 99 ; N c ; B 70 70 70 70
+C 100 ; WX 100 ; N d ; B 71 71 71 71
+C 101 ; WX 101 ; N e ; B 72 72 72 72
+C 102 ; WX 102 ; N f ; B 73 73 73 73
+C 103 ; WX 103 ; N g ; B 74 74 74 74
+C 104 ; WX 104 ; N h ; B 75 75 75 75
+C 105 ; WX 105 ; N i ; B 76 76 76 76
+C 106 ; WX 106 ; N j ; B 77 77 77 77
+C 107 ; WX 107 ; N k ; B 78 78 78 78
+C 108 ; WX 108 ; N l ; B 79 79 79 79
+C 109 ; WX 109 ; N m ; B 80 80 80 80
+C 110 ; WX 110 ; N n ; B 81 81 81 81
+C 111 ; WX 111 ; N o ; B 82 82 82 82
+C 112 ; WX 112 ; N p ; B 83 83 83 83
+C 113 ; WX 113 ; N q ; B 84 84 84 84
+C 114 ; WX 114 ; N r ; B 85 85 85 85
+C 115 ; WX 115 ; N s ; B 86 86 86 86
+C 116 ; WX 116 ; N t ; B 87 87 87 87
+C 117 ; WX 117 ; N u ; B 88 88 88 88
+C 118 ; WX 118 ; N v ; B 89 89 89 89
+C 119 ; WX 119 ; N w ; B 90 90 90 90
+C 120 ; WX 120 ; N x ; B 91 91 91 91
+C 121 ; WX 121 ; N y ; B 92 92 92 92
+C 122 ; WX 122 ; N z ; B 93 93 93 93
+C 123 ; WX 123 ; N braceleft ; B 94 94 94 94
+C 124 ; WX 124 ; N bar ; B 95 95 95 95
+C 125 ; WX 125 ; N braceright ; B 96 96 96 96
+C 126 ; WX 126 ; N asciitilde ; B 97 97 97 97
+C 161 ; WX 161 ; N exclamdown ; B 98 98 98 98
+C 162 ; WX 162 ; N cent ; B 99 99 99 99
+C 163 ; WX 163 ; N sterling ; B 100 100 100 100
+C 164 ; WX 164 ; N fraction ; B 101 101 101 101
+C 164 ; WX 164 ; N fraction ; B 102 102 102 102
+C 165 ; WX 165 ; N yen ; B 103 103 103 103
+C 166 ; WX 166 ; N florin ; B 104 104 104 104
+C 167 ; WX 167 ; N section ; B 105 105 105 105
+C 168 ; WX 168 ; N currency ; B 106 106 106 106
+C 169 ; WX 169 ; N quotesingle ; B 107 107 107 107
+C 170 ; WX 170 ; N quotedblleft ; B 108 108 108 108
+C 171 ; WX 171 ; N guillemotleft ; B 109 109 109 109
+C 172 ; WX 172 ; N guilsinglleft ; B 110 110 110 110
+C 173 ; WX 173 ; N guilsinglright ; B 111 111 111 111
+C 174 ; WX 174 ; N fi ; B 112 112 112 112
+C 175 ; WX 175 ; N fl ; B 113 113 113 113
+C 177 ; WX 177 ; N endash ; B 114 114 114 114
+C 178 ; WX 178 ; N dagger ; B 115 115 115 115
+C 179 ; WX 179 ; N daggerdbl ; B 116 116 116 116
+C 180 ; WX 180 ; N periodcentered ; B 117 117 117 117
+C 180 ; WX 180 ; N periodcentered ; B 118 118 118 118
+C 182 ; WX 182 ; N paragraph ; B 119 119 119 119
+C 183 ; WX 183 ; N bullet ; B 120 120 120 120
+C 184 ; WX 184 ; N quotesinglbase ; B 121 121 121 121
+C 185 ; WX 185 ; N quotedblbase ; B 122 122 122 122
+C 186 ; WX 186 ; N quotedblright ; B 123 123 123 123
+C 187 ; WX 187 ; N guillemotright ; B 124 124 124 124
+C 188 ; WX 188 ; N ellipsis ; B 125 125 125 125
+C 189 ; WX 189 ; N perthousand ; B 126 126 126 126
+C 191 ; WX 191 ; N questiondown ; B 127 127 127 127
+C 193 ; WX 193 ; N grave ; B 128 128 128 128
+C 194 ; WX 194 ; N acute ; B 129 129 129 129
+C 195 ; WX 195 ; N circumflex ; B 130 130 130 130
+C 196 ; WX 196 ; N tilde ; B 131 131 131 131
+C 197 ; WX 197 ; N macron ; B 132 132 132 132
+C 197 ; WX 197 ; N macron ; B 133 133 133 133
+C 198 ; WX 198 ; N breve ; B 134 134 134 134
+C 199 ; WX 199 ; N dotaccent ; B 135 135 135 135
+C 200 ; WX 200 ; N dieresis ; B 136 136 136 136
+C 202 ; WX 202 ; N ring ; B 137 137 137 137
+C 203 ; WX 203 ; N cedilla ; B 138 138 138 138
+C 205 ; WX 205 ; N hungarumlaut ; B 139 139 139 139
+C 206 ; WX 206 ; N ogonek ; B 140 140 140 140
+C 207 ; WX 207 ; N caron ; B 141 141 141 141
+C 208 ; WX 208 ; N emdash ; B 142 142 142 142
+C 225 ; WX 225 ; N AE ; B 143 143 143 143
+C 227 ; WX 227 ; N ordfeminine ; B 144 144 144 144
+C 232 ; WX 232 ; N Lslash ; B 145 145 145 145
+C 233 ; WX 233 ; N Oslash ; B 146 146 146 146
+C 234 ; WX 234 ; N OE ; B 147 147 147 147
+C 235 ; WX 235 ; N ordmasculine ; B 148 148 148 148
+C 241 ; WX 241 ; N ae ; B 149 149 149 149
+C 245 ; WX 245 ; N dotlessi ; B 150 150 150 150
+C 248 ; WX 248 ; N lslash ; B 151 151 151 151
+C 249 ; WX 249 ; N oslash ; B 152 152 152 152
+C 250 ; WX 250 ; N oe ; B 153 153 153 153
+C 251 ; WX 251 ; N germandbls ; B 154 154 154 154
+EndCharMetrics
diff --git a/test/java/org/apache/fop/fonts/type1/notadobe-charset_adobe-encoding.afm b/test/java/org/apache/fop/fonts/type1/notadobe-charset_adobe-encoding.afm
new file mode 100644
index 000000000..11cecb17f
--- /dev/null
+++ b/test/java/org/apache/fop/fonts/type1/notadobe-charset_adobe-encoding.afm
@@ -0,0 +1,158 @@
+StartFontMetrics 2.0
+EncodingScheme AdobeStandardEncoding
+StartCharMetrics 154
+C 33 ; WX 32 ; N space ; B 1 1 1 1
+C 33 ; WX 32 ; N space ; B 2 2 2 2
+C 34 ; WX 33 ; N exclam ; B 3 3 3 3
+C 35 ; WX 34 ; N quotedbl ; B 4 4 4 4
+C 36 ; WX 35 ; N numbersign ; B 5 5 5 5
+C 37 ; WX 36 ; N dollar ; B 6 6 6 6
+C 38 ; WX 37 ; N percent ; B 7 7 7 7
+C 39 ; WX 38 ; N ampersand ; B 8 8 8 8
+C 40 ; WX 39 ; N quoteright ; B 9 9 9 9
+C 41 ; WX 40 ; N parenleft ; B 10 10 10 10
+C 42 ; WX 41 ; N parenright ; B 11 11 11 11
+C 43 ; WX 42 ; N asterisk ; B 12 12 12 12
+C 44 ; WX 43 ; N plus ; B 13 13 13 13
+C 45 ; WX 44 ; N comma ; B 14 14 14 14
+C 46 ; WX 45 ; N hyphen ; B 15 15 15 15
+C 46 ; WX 45 ; N hyphen ; B 16 16 16 16
+C 47 ; WX 46 ; N period ; B 17 17 17 17
+C 48 ; WX 47 ; N slash ; B 18 18 18 18
+C 49 ; WX 48 ; N zero ; B 19 19 19 19
+C 50 ; WX 49 ; N one ; B 20 20 20 20
+C 51 ; WX 50 ; N two ; B 21 21 21 21
+C 52 ; WX 51 ; N three ; B 22 22 22 22
+C 53 ; WX 52 ; N four ; B 23 23 23 23
+C 54 ; WX 53 ; N five ; B 24 24 24 24
+C 55 ; WX 54 ; N six ; B 25 25 25 25
+C 56 ; WX 55 ; N seven ; B 26 26 26 26
+C 57 ; WX 56 ; N eight ; B 27 27 27 27
+C 58 ; WX 57 ; N nine ; B 28 28 28 28
+C 59 ; WX 58 ; N colon ; B 29 29 29 29
+C 60 ; WX 59 ; N semicolon ; B 30 30 30 30
+C 61 ; WX 60 ; N less ; B 31 31 31 31
+C 62 ; WX 61 ; N equal ; B 32 32 32 32
+C 63 ; WX 62 ; N greater ; B 33 33 33 33
+C 64 ; WX 63 ; N question ; B 34 34 34 34
+C 65 ; WX 64 ; N at ; B 35 35 35 35
+C 66 ; WX 65 ; N A ; B 36 36 36 36
+C 67 ; WX 66 ; N B ; B 37 37 37 37
+C 68 ; WX 67 ; N C ; B 38 38 38 38
+C 69 ; WX 68 ; N D ; B 39 39 39 39
+C 70 ; WX 69 ; N E ; B 40 40 40 40
+C 71 ; WX 70 ; N F ; B 41 41 41 41
+C 72 ; WX 71 ; N G ; B 42 42 42 42
+C 73 ; WX 72 ; N H ; B 43 43 43 43
+C 74 ; WX 73 ; N I ; B 44 44 44 44
+C 75 ; WX 74 ; N J ; B 45 45 45 45
+C 76 ; WX 75 ; N K ; B 46 46 46 46
+C 77 ; WX 76 ; N L ; B 47 47 47 47
+C 78 ; WX 77 ; N M ; B 48 48 48 48
+C 79 ; WX 78 ; N N ; B 49 49 49 49
+C 80 ; WX 79 ; N O ; B 50 50 50 50
+C 81 ; WX 80 ; N P ; B 51 51 51 51
+C 82 ; WX 81 ; N Q ; B 52 52 52 52
+C 83 ; WX 82 ; N R ; B 53 53 53 53
+C 84 ; WX 83 ; N S ; B 54 54 54 54
+C 85 ; WX 84 ; N T ; B 55 55 55 55
+C 86 ; WX 85 ; N U ; B 56 56 56 56
+C 87 ; WX 86 ; N V ; B 57 57 57 57
+C 88 ; WX 87 ; N W ; B 58 58 58 58
+C 89 ; WX 88 ; N X ; B 59 59 59 59
+C 90 ; WX 89 ; N Y ; B 60 60 60 60
+C 91 ; WX 90 ; N Z ; B 61 61 61 61
+C 92 ; WX 91 ; N bracketleft ; B 62 62 62 62
+C 93 ; WX 92 ; N backslash ; B 63 63 63 63
+C 94 ; WX 93 ; N bracketright ; B 64 64 64 64
+C 95 ; WX 94 ; N asciicircum ; B 65 65 65 65
+C 96 ; WX 95 ; N underscore ; B 66 66 66 66
+C 97 ; WX 96 ; N quoteleft ; B 67 67 67 67
+C 98 ; WX 97 ; N a ; B 68 68 68 68
+C 99 ; WX 98 ; N b ; B 69 69 69 69
+C 100 ; WX 99 ; N c ; B 70 70 70 70
+C 101 ; WX 100 ; N d ; B 71 71 71 71
+C 102 ; WX 101 ; N e ; B 72 72 72 72
+C 103 ; WX 102 ; N f ; B 73 73 73 73
+C 104 ; WX 103 ; N g ; B 74 74 74 74
+C 105 ; WX 104 ; N h ; B 75 75 75 75
+C 106 ; WX 105 ; N i ; B 76 76 76 76
+C 107 ; WX 106 ; N j ; B 77 77 77 77
+C 108 ; WX 107 ; N k ; B 78 78 78 78
+C 109 ; WX 108 ; N l ; B 79 79 79 79
+C 110 ; WX 109 ; N m ; B 80 80 80 80
+C 111 ; WX 110 ; N n ; B 81 81 81 81
+C 112 ; WX 111 ; N o ; B 82 82 82 82
+C 113 ; WX 112 ; N p ; B 83 83 83 83
+C 114 ; WX 113 ; N q ; B 84 84 84 84
+C 115 ; WX 114 ; N r ; B 85 85 85 85
+C 116 ; WX 115 ; N s ; B 86 86 86 86
+C 117 ; WX 116 ; N t ; B 87 87 87 87
+C 118 ; WX 117 ; N u ; B 88 88 88 88
+C 119 ; WX 118 ; N v ; B 89 89 89 89
+C 120 ; WX 119 ; N w ; B 90 90 90 90
+C 121 ; WX 120 ; N x ; B 91 91 91 91
+C 122 ; WX 121 ; N y ; B 92 92 92 92
+C 123 ; WX 122 ; N z ; B 93 93 93 93
+C 124 ; WX 123 ; N braceleft ; B 94 94 94 94
+C 125 ; WX 124 ; N bar ; B 95 95 95 95
+C 126 ; WX 125 ; N braceright ; B 96 96 96 96
+C 127 ; WX 126 ; N asciitilde ; B 97 97 97 97
+C 162 ; WX 161 ; N exclamdown ; B 98 98 98 98
+C 163 ; WX 162 ; N cent ; B 99 99 99 99
+C 164 ; WX 163 ; N sterling ; B 100 100 100 100
+C 165 ; WX 164 ; N fraction ; B 101 101 101 101
+C 165 ; WX 164 ; N fraction ; B 102 102 102 102
+C 166 ; WX 165 ; N yen ; B 103 103 103 103
+C 167 ; WX 166 ; N florin ; B 104 104 104 104
+C 168 ; WX 167 ; N section ; B 105 105 105 105
+C 169 ; WX 168 ; N currency ; B 106 106 106 106
+C 170 ; WX 169 ; N quotesingle ; B 107 107 107 107
+C 171 ; WX 170 ; N quotedblleft ; B 108 108 108 108
+C 172 ; WX 171 ; N guillemotleft ; B 109 109 109 109
+C 173 ; WX 172 ; N guilsinglleft ; B 110 110 110 110
+C 174 ; WX 173 ; N guilsinglright ; B 111 111 111 111
+C 175 ; WX 174 ; N fi ; B 112 112 112 112
+C 176 ; WX 175 ; N fl ; B 113 113 113 113
+C 178 ; WX 177 ; N endash ; B 114 114 114 114
+C 179 ; WX 178 ; N dagger ; B 115 115 115 115
+C 180 ; WX 179 ; N daggerdbl ; B 116 116 116 116
+C 181 ; WX 180 ; N periodcentered ; B 117 117 117 117
+C 181 ; WX 180 ; N periodcentered ; B 118 118 118 118
+C 183 ; WX 182 ; N paragraph ; B 119 119 119 119
+C 184 ; WX 183 ; N bullet ; B 120 120 120 120
+C 185 ; WX 184 ; N quotesinglbase ; B 121 121 121 121
+C 186 ; WX 185 ; N quotedblbase ; B 122 122 122 122
+C 187 ; WX 186 ; N quotedblright ; B 123 123 123 123
+C 188 ; WX 187 ; N guillemotright ; B 124 124 124 124
+C 189 ; WX 188 ; N ellipsis ; B 125 125 125 125
+C 190 ; WX 189 ; N perthousand ; B 126 126 126 126
+C 192 ; WX 191 ; N questiondown ; B 127 127 127 127
+C 194 ; WX 193 ; N grave ; B 128 128 128 128
+C 195 ; WX 194 ; N acute ; B 129 129 129 129
+C 196 ; WX 195 ; N circumflex ; B 130 130 130 130
+C 197 ; WX 196 ; N tilde ; B 131 131 131 131
+C 198 ; WX 197 ; N macron ; B 132 132 132 132
+C 198 ; WX 197 ; N macron ; B 133 133 133 133
+C 199 ; WX 198 ; N breve ; B 134 134 134 134
+C 200 ; WX 199 ; N dotaccent ; B 135 135 135 135
+C 201 ; WX 200 ; N dieresis ; B 136 136 136 136
+C 203 ; WX 202 ; N ring ; B 137 137 137 137
+C 204 ; WX 203 ; N cedilla ; B 138 138 138 138
+C 206 ; WX 205 ; N hungarumlaut ; B 139 139 139 139
+C 207 ; WX 206 ; N ogonek ; B 140 140 140 140
+C 208 ; WX 207 ; N caron ; B 141 141 141 141
+C 209 ; WX 208 ; N emdash ; B 142 142 142 142
+C 226 ; WX 225 ; N AE ; B 143 143 143 143
+C 228 ; WX 227 ; N ordfeminine ; B 144 144 144 144
+C 233 ; WX 232 ; N Lslash ; B 145 145 145 145
+C 234 ; WX 233 ; N Oslash ; B 146 146 146 146
+C 235 ; WX 234 ; N OE ; B 147 147 147 147
+C 236 ; WX 235 ; N ordmasculine ; B 148 148 148 148
+C 242 ; WX 241 ; N ae ; B 149 149 149 149
+C 246 ; WX 245 ; N dotlessi ; B 150 150 150 150
+C 249 ; WX 248 ; N lslash ; B 151 151 151 151
+C 250 ; WX 249 ; N oslash ; B 152 152 152 152
+C 251 ; WX 250 ; N oe ; B 153 153 153 153
+C 252 ; WX 251 ; N germandbls ; B 154 154 154 154
+EndCharMetrics
diff --git a/test/java/org/apache/fop/fonts/type1/notadobe-charset_unknown-encoding.afm b/test/java/org/apache/fop/fonts/type1/notadobe-charset_unknown-encoding.afm
new file mode 100644
index 000000000..1714288ab
--- /dev/null
+++ b/test/java/org/apache/fop/fonts/type1/notadobe-charset_unknown-encoding.afm
@@ -0,0 +1,158 @@
+StartFontMetrics 2.0
+EncodingScheme FontSpecific
+StartCharMetrics 154
+C 33 ; WX 32 ; N space ; B 1 1 1 1
+C 33 ; WX 32 ; N space ; B 2 2 2 2
+C 34 ; WX 33 ; N exclam ; B 3 3 3 3
+C 35 ; WX 34 ; N quotedbl ; B 4 4 4 4
+C 36 ; WX 35 ; N numbersign ; B 5 5 5 5
+C 37 ; WX 36 ; N dollar ; B 6 6 6 6
+C 38 ; WX 37 ; N percent ; B 7 7 7 7
+C 39 ; WX 38 ; N ampersand ; B 8 8 8 8
+C 40 ; WX 39 ; N quoteright ; B 9 9 9 9
+C 41 ; WX 40 ; N parenleft ; B 10 10 10 10
+C 42 ; WX 41 ; N parenright ; B 11 11 11 11
+C 43 ; WX 42 ; N asterisk ; B 12 12 12 12
+C 44 ; WX 43 ; N plus ; B 13 13 13 13
+C 45 ; WX 44 ; N comma ; B 14 14 14 14
+C 46 ; WX 45 ; N hyphen ; B 15 15 15 15
+C 46 ; WX 45 ; N hyphen ; B 16 16 16 16
+C 47 ; WX 46 ; N period ; B 17 17 17 17
+C 48 ; WX 47 ; N slash ; B 18 18 18 18
+C 49 ; WX 48 ; N zero ; B 19 19 19 19
+C 50 ; WX 49 ; N one ; B 20 20 20 20
+C 51 ; WX 50 ; N two ; B 21 21 21 21
+C 52 ; WX 51 ; N three ; B 22 22 22 22
+C 53 ; WX 52 ; N four ; B 23 23 23 23
+C 54 ; WX 53 ; N five ; B 24 24 24 24
+C 55 ; WX 54 ; N six ; B 25 25 25 25
+C 56 ; WX 55 ; N seven ; B 26 26 26 26
+C 57 ; WX 56 ; N eight ; B 27 27 27 27
+C 58 ; WX 57 ; N nine ; B 28 28 28 28
+C 59 ; WX 58 ; N colon ; B 29 29 29 29
+C 60 ; WX 59 ; N semicolon ; B 30 30 30 30
+C 61 ; WX 60 ; N less ; B 31 31 31 31
+C 62 ; WX 61 ; N equal ; B 32 32 32 32
+C 63 ; WX 62 ; N greater ; B 33 33 33 33
+C 64 ; WX 63 ; N question ; B 34 34 34 34
+C 65 ; WX 64 ; N at ; B 35 35 35 35
+C 66 ; WX 65 ; N A ; B 36 36 36 36
+C 67 ; WX 66 ; N B ; B 37 37 37 37
+C 68 ; WX 67 ; N C ; B 38 38 38 38
+C 69 ; WX 68 ; N D ; B 39 39 39 39
+C 70 ; WX 69 ; N E ; B 40 40 40 40
+C 71 ; WX 70 ; N F ; B 41 41 41 41
+C 72 ; WX 71 ; N G ; B 42 42 42 42
+C 73 ; WX 72 ; N H ; B 43 43 43 43
+C 74 ; WX 73 ; N I ; B 44 44 44 44
+C 75 ; WX 74 ; N J ; B 45 45 45 45
+C 76 ; WX 75 ; N K ; B 46 46 46 46
+C 77 ; WX 76 ; N L ; B 47 47 47 47
+C 78 ; WX 77 ; N M ; B 48 48 48 48
+C 79 ; WX 78 ; N N ; B 49 49 49 49
+C 80 ; WX 79 ; N O ; B 50 50 50 50
+C 81 ; WX 80 ; N P ; B 51 51 51 51
+C 82 ; WX 81 ; N Q ; B 52 52 52 52
+C 83 ; WX 82 ; N R ; B 53 53 53 53
+C 84 ; WX 83 ; N S ; B 54 54 54 54
+C 85 ; WX 84 ; N T ; B 55 55 55 55
+C 86 ; WX 85 ; N U ; B 56 56 56 56
+C 87 ; WX 86 ; N V ; B 57 57 57 57
+C 88 ; WX 87 ; N W ; B 58 58 58 58
+C 89 ; WX 88 ; N X ; B 59 59 59 59
+C 90 ; WX 89 ; N Y ; B 60 60 60 60
+C 91 ; WX 90 ; N Z ; B 61 61 61 61
+C 92 ; WX 91 ; N bracketleft ; B 62 62 62 62
+C 93 ; WX 92 ; N backslash ; B 63 63 63 63
+C 94 ; WX 93 ; N bracketright ; B 64 64 64 64
+C 95 ; WX 94 ; N asciicircum ; B 65 65 65 65
+C 96 ; WX 95 ; N underscore ; B 66 66 66 66
+C 97 ; WX 96 ; N quoteleft ; B 67 67 67 67
+C 98 ; WX 97 ; N a ; B 68 68 68 68
+C 99 ; WX 98 ; N b ; B 69 69 69 69
+C 100 ; WX 99 ; N c ; B 70 70 70 70
+C 101 ; WX 100 ; N d ; B 71 71 71 71
+C 102 ; WX 101 ; N e ; B 72 72 72 72
+C 103 ; WX 102 ; N f ; B 73 73 73 73
+C 104 ; WX 103 ; N g ; B 74 74 74 74
+C 105 ; WX 104 ; N h ; B 75 75 75 75
+C 106 ; WX 105 ; N i ; B 76 76 76 76
+C 107 ; WX 106 ; N j ; B 77 77 77 77
+C 108 ; WX 107 ; N k ; B 78 78 78 78
+C 109 ; WX 108 ; N l ; B 79 79 79 79
+C 110 ; WX 109 ; N m ; B 80 80 80 80
+C 111 ; WX 110 ; N n ; B 81 81 81 81
+C 112 ; WX 111 ; N o ; B 82 82 82 82
+C 113 ; WX 112 ; N p ; B 83 83 83 83
+C 114 ; WX 113 ; N q ; B 84 84 84 84
+C 115 ; WX 114 ; N r ; B 85 85 85 85
+C 116 ; WX 115 ; N s ; B 86 86 86 86
+C 117 ; WX 116 ; N t ; B 87 87 87 87
+C 118 ; WX 117 ; N u ; B 88 88 88 88
+C 119 ; WX 118 ; N v ; B 89 89 89 89
+C 120 ; WX 119 ; N w ; B 90 90 90 90
+C 121 ; WX 120 ; N x ; B 91 91 91 91
+C 122 ; WX 121 ; N y ; B 92 92 92 92
+C 123 ; WX 122 ; N z ; B 93 93 93 93
+C 124 ; WX 123 ; N braceleft ; B 94 94 94 94
+C 125 ; WX 124 ; N bar ; B 95 95 95 95
+C 126 ; WX 125 ; N braceright ; B 96 96 96 96
+C 127 ; WX 126 ; N asciitilde ; B 97 97 97 97
+C 162 ; WX 161 ; N exclamdown ; B 98 98 98 98
+C 163 ; WX 162 ; N cent ; B 99 99 99 99
+C 164 ; WX 163 ; N sterling ; B 100 100 100 100
+C 165 ; WX 164 ; N fraction ; B 101 101 101 101
+C 165 ; WX 164 ; N fraction ; B 102 102 102 102
+C 166 ; WX 165 ; N yen ; B 103 103 103 103
+C 167 ; WX 166 ; N florin ; B 104 104 104 104
+C 168 ; WX 167 ; N section ; B 105 105 105 105
+C 169 ; WX 168 ; N currency ; B 106 106 106 106
+C 170 ; WX 169 ; N quotesingle ; B 107 107 107 107
+C 171 ; WX 170 ; N quotedblleft ; B 108 108 108 108
+C 172 ; WX 171 ; N guillemotleft ; B 109 109 109 109
+C 173 ; WX 172 ; N guilsinglleft ; B 110 110 110 110
+C 174 ; WX 173 ; N guilsinglright ; B 111 111 111 111
+C 175 ; WX 174 ; N fi ; B 112 112 112 112
+C 176 ; WX 175 ; N fl ; B 113 113 113 113
+C 178 ; WX 177 ; N endash ; B 114 114 114 114
+C 179 ; WX 178 ; N dagger ; B 115 115 115 115
+C 180 ; WX 179 ; N daggerdbl ; B 116 116 116 116
+C 181 ; WX 180 ; N periodcentered ; B 117 117 117 117
+C 181 ; WX 180 ; N periodcentered ; B 118 118 118 118
+C 183 ; WX 182 ; N paragraph ; B 119 119 119 119
+C 184 ; WX 183 ; N bullet ; B 120 120 120 120
+C 185 ; WX 184 ; N quotesinglbase ; B 121 121 121 121
+C 186 ; WX 185 ; N quotedblbase ; B 122 122 122 122
+C 187 ; WX 186 ; N quotedblright ; B 123 123 123 123
+C 188 ; WX 187 ; N guillemotright ; B 124 124 124 124
+C 189 ; WX 188 ; N ellipsis ; B 125 125 125 125
+C 190 ; WX 189 ; N perthousand ; B 126 126 126 126
+C 192 ; WX 191 ; N questiondown ; B 127 127 127 127
+C 194 ; WX 193 ; N grave ; B 128 128 128 128
+C 195 ; WX 194 ; N acute ; B 129 129 129 129
+C 196 ; WX 195 ; N circumflex ; B 130 130 130 130
+C 197 ; WX 196 ; N tilde ; B 131 131 131 131
+C 198 ; WX 197 ; N macron ; B 132 132 132 132
+C 198 ; WX 197 ; N macron ; B 133 133 133 133
+C 199 ; WX 198 ; N breve ; B 134 134 134 134
+C 200 ; WX 199 ; N dotaccent ; B 135 135 135 135
+C 201 ; WX 200 ; N dieresis ; B 136 136 136 136
+C 203 ; WX 202 ; N ring ; B 137 137 137 137
+C 204 ; WX 203 ; N cedilla ; B 138 138 138 138
+C 206 ; WX 205 ; N hungarumlaut ; B 139 139 139 139
+C 207 ; WX 206 ; N ogonek ; B 140 140 140 140
+C 208 ; WX 207 ; N caron ; B 141 141 141 141
+C 209 ; WX 208 ; N emdash ; B 142 142 142 142
+C 226 ; WX 225 ; N AE ; B 143 143 143 143
+C 228 ; WX 227 ; N ordfeminine ; B 144 144 144 144
+C 233 ; WX 232 ; N Lslash ; B 145 145 145 145
+C 234 ; WX 233 ; N Oslash ; B 146 146 146 146
+C 235 ; WX 234 ; N OE ; B 147 147 147 147
+C 236 ; WX 235 ; N ordmasculine ; B 148 148 148 148
+C 242 ; WX 241 ; N ae ; B 149 149 149 149
+C 246 ; WX 245 ; N dotlessi ; B 150 150 150 150
+C 249 ; WX 248 ; N lslash ; B 151 151 151 151
+C 250 ; WX 249 ; N oslash ; B 152 152 152 152
+C 251 ; WX 250 ; N oe ; B 153 153 153 153
+C 252 ; WX 251 ; N germandbls ; B 154 154 154 154
+EndCharMetrics