You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2012/07/08 15:32:30 UTC

svn commit: r1358740 - /pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestTTFParser.java

Author: lehmi
Date: Sun Jul  8 13:32:30 2012
New Revision: 1358740

URL: http://svn.apache.org/viewvc?rev=1358740&view=rev
Log:
PDFBOX-1349: new unit test for the postscript table parser as proposed by Wolfgang Glas

Added:
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestTTFParser.java

Added: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestTTFParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestTTFParser.java?rev=1358740&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestTTFParser.java (added)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestTTFParser.java Sun Jul  8 13:32:30 2012
@@ -0,0 +1,148 @@
+/*
+ * 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.
+ */
+package org.apache.pdfbox.pdmodel.font;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import junit.framework.Assert;
+
+import org.apache.fontbox.ttf.CMAPEncodingEntry;
+import org.apache.fontbox.ttf.CMAPTable;
+import org.apache.fontbox.ttf.NameRecord;
+import org.apache.fontbox.ttf.PostScriptTable;
+import org.apache.fontbox.ttf.TTFParser;
+import org.apache.fontbox.ttf.TrueTypeFont;
+import org.apache.pdfbox.encoding.Encoding;
+import org.apache.pdfbox.encoding.WinAnsiEncoding;
+import org.junit.Test;
+
+/**
+ * A test for correctly parsing TTF files.
+ */
+public class TestTTFParser 
+{
+
+    /**
+     * Test the post table parser.
+     * @throws IOException if an error occurs.
+     */
+    @Test
+    public void testPostTable() throws IOException 
+    {
+        InputStream arialIs = TestTTFParser.class.getClassLoader()
+                .getResourceAsStream(
+                        "org/apache/pdfbox/resources/ttf/ArialMT.ttf");
+        Assert.assertNotNull(arialIs);
+
+        TTFParser parser = new TTFParser();
+
+        TrueTypeFont arial = parser.parseTTF(arialIs);
+
+        CMAPTable cmap = arial.getCMAP();
+        Assert.assertNotNull(cmap);
+
+        CMAPEncodingEntry[] cmaps = cmap.getCmaps();
+        Assert.assertNotNull(cmaps);
+
+        CMAPEncodingEntry uc = null;
+
+        for (CMAPEncodingEntry e : cmaps) 
+        {
+            if (e.getPlatformId() == NameRecord.PLATFORM_WINDOWS
+                    && e.getPlatformEncodingId() == NameRecord.PLATFORM_ENCODING_WINDOWS_UNICODE) 
+            {
+                uc = e;
+                break;
+            }
+        }
+
+        Assert.assertNotNull(uc);
+
+        PostScriptTable post = arial.getPostScript();
+        Assert.assertNotNull(post);
+
+        String[] glyphNames = arial.getPostScript().getGlyphNames();
+        Assert.assertNotNull(glyphNames);
+
+        Encoding enc = new WinAnsiEncoding();
+
+        int[] charCodes = uc.getGlyphIdToCharacterCode();
+        Assert.assertNotNull(charCodes);
+
+        for (int gid = 0; gid < charCodes.length; ++gid) 
+        {
+            int charCode = charCodes[gid];
+            String name = glyphNames[gid];
+            if (charCode < 0x8000 && charCode >= 32) 
+            {
+                if ("space".equals(name) || "slash".equals(name)
+                        || "bracketleft".equals(name)
+                        || "bracketright".equals(name)
+                        || "braceleft".equals(name)
+                        || "braceright".equals(name) || "product".equals(name)
+                        || "integral".equals(name) || "Omega".equals(name)
+                        || "radical".equals(name) || "tilde".equals(name)) 
+                {
+                    Assert.assertTrue(enc.getNameFromCharacter((char) charCode)
+                            .startsWith(name));
+                } 
+                else if ("bar".equals(name)) 
+                {
+                    Assert.assertTrue(enc.getNameFromCharacter((char) charCode)
+                            .endsWith(name));
+                } 
+                else if ("germandbls".equals(name)) 
+                {
+                    Assert.assertEquals("xff",
+                            enc.getNameFromCharacter((char) charCode));
+                } 
+                else if ("sfthyphen".equals(name)) 
+                {
+                    Assert.assertEquals("softhyphen",
+                            enc.getNameFromCharacter((char) charCode));
+                }
+                else if ("periodcentered".equals(name)
+                        && !enc.getNameFromCharacter((char) charCode).equals(
+                                name)) 
+                {
+                    Assert.assertEquals("bulletoperator",
+                            enc.getNameFromCharacter((char) charCode));
+                }
+                else if ("fraction".equals(name)) 
+                {
+                    Assert.assertEquals("divisionslash",
+                            enc.getNameFromCharacter((char) charCode));
+                }
+                else if ("mu".equals(name)) 
+                {
+                    Assert.assertEquals("mu1",
+                            enc.getNameFromCharacter((char) charCode));
+                }
+                else if ("pi".equals(name)) 
+                {
+                    Assert.assertEquals(0x03c0, charCode);
+                }
+                else 
+                {
+                    Assert.assertEquals(
+                            enc.getNameFromCharacter((char) charCode), name);
+                }
+            }
+        }
+    }
+}