svn commit: r1814222 - in /xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox: FOPPDFFont.java FOPPDFMultiByteFont.java FOPPDFSingleByteFont.java MergeFontsPDFWriter.java

[email protected]
Newsgroups gmane.text.xml.fop.cvs
Message-ID <[email protected]>
Author: ssteiner
Date: Fri Nov  3 16:06:21 2017
New Revision: 1814222

URL: http://svn.apache.org/viewvc?rev=1814222&view=rev
Log:
Clean up font merge word mapping

Modified:
    xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFFont.java
    xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFMultiByteFont.java
    xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFSingleByteFont.java
    xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/MergeFontsPDFWriter.java

Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFFont.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFFont.java?rev=1814222&r1=1814221&r2=1814222&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFFont.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFFont.java Fri Nov  3 16:06:21 2017
@@ -17,6 +17,7 @@
 package org.apache.fop.render.pdf.pdfbox;
 
 import java.io.IOException;
+import java.util.List;
 
 import org.apache.pdfbox.cos.COSDictionary;
 
@@ -28,4 +29,5 @@ interface FOPPDFFont extends RefPDFFont
     void setRef(PDFDictionary d);
     String addFont(COSDictionary fontdata) throws IOException;
     int size();
+    String getMappedWord(List<String> word, byte[] bytes, FontContainer oldFont);
 }

Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFMultiByteFont.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFMultiByteFont.java?rev=1814222&r1=1814221&r2=1814222&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFMultiByteFont.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFMultiByteFont.java Fri Nov  3 16:06:21 2017
@@ -21,6 +21,8 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.TreeMap;
 
@@ -152,22 +154,23 @@ public class FOPPDFMultiByteFont extends
                 mappedChar = "" + (char)mappedChar.hashCode();
             }
             if (!charMapGlobal.containsKey(mappedChar)) {
+                char c = mappedChar.charAt(0);
                 if (glyphData.length > 0
                         && glyphData[key] == null
-                        && !CharUtilities.isAdjustableSpace(mappedChar.charAt(0))) {
+                        && !CharUtilities.isAdjustableSpace(c)) {
                     continue;
                 }
                 boolean addToEnd = charMapGlobal.containsValue(key);
                 if (addToEnd) {
-                    addPrivateUseMapping(mappedChar.charAt(0), charMapGlobal.size() + 1);
+                    addPrivateUseMapping(c, charMapGlobal.size() + 1);
                     charMapGlobal.put(mappedChar, charMapGlobal.size() + 1);
                 } else {
-                    addPrivateUseMapping(mappedChar.charAt(0), key);
+                    addPrivateUseMapping(c, key);
                     charMapGlobal.put(mappedChar, key);
                 }
                 int glyph = 0;
-                if (hasChar(mappedChar.charAt(0))) {
-                    glyph = (int) mapChar(mappedChar.charAt(0));
+                if (hasChar(c)) {
+                    glyph = (int) mapChar(c);
                 }
                 oldToNewGIMap.put(key, glyph);
                 if (!skipWidth) {
@@ -370,4 +373,21 @@ public class FOPPDFMultiByteFont extends
         outMaxp.setMaxComponentElements(outMaxp.getMaxComponentElements() + mp.getMaxComponentElements());
         outMaxp.setMaxComponentDepth(outMaxp.getMaxComponentDepth() + mp.getMaxComponentDepth());
     }
+
+    public String getMappedWord(List<String> word, byte[] bytes, FontContainer oldFont) {
+        StringBuilder newHex = new StringBuilder();
+        for (String str : word) {
+            char c = str.charAt(0);
+            if (str.length() > 1) {
+                c = (char) str.hashCode();
+            }
+            if (hasChar(c)) {
+                int mapped = (int)mapChar(c);
+                newHex.append(String.format("%1$04x", mapped & 0xFFFF).toUpperCase(Locale.getDefault()));
+            } else {
+                return null;
+            }
+        }
+        return "<" + newHex.toString() + ">";
+    }
 }

Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFSingleByteFont.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFSingleByteFont.java?rev=1814222&r1=1814221&r2=1814222&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFSingleByteFont.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFSingleByteFont.java Fri Nov  3 16:06:21 2017
@@ -54,6 +54,7 @@ import org.apache.fop.fonts.FontType;
 import org.apache.fop.fonts.SingleByteEncoding;
 import org.apache.fop.fonts.SingleByteFont;
 import org.apache.fop.pdf.PDFDictionary;
+import org.apache.fop.pdf.PDFText;
 
 public class FOPPDFSingleByteFont extends SingleByteFont implements FOPPDFFont {
     private int fontCount;
@@ -477,4 +478,36 @@ public class FOPPDFSingleByteFont extend
         }
         return fontMap.get(fontData);
     }
+
+    public String getMappedWord(List<String> word, byte[] bytes, FontContainer oldFont) {
+        StringBuffer newOct = new StringBuffer();
+        int i = 0;
+        for (String str : word) {
+            Integer mapped = getMapping(bytes[i], oldFont);
+            if (mapped == null) {
+                char c = str.charAt(0);
+                if (str.length() > 1) {
+                    c = (char) str.hashCode();
+                }
+                if (hasChar(c)) {
+                    mapped = (int)mapChar(c);
+                } else {
+                    return null;
+                }
+            }
+            PDFText.escapeStringChar((char)mapped.intValue(), newOct);
+            i++;
+        }
+        return "(" + newOct.toString() + ")";
+    }
+
+    private Integer getMapping(byte i, FontContainer oldFont) {
+        if (oldFont.getEncoding() != null) {
+            String name = oldFont.getEncoding().getName(i);
+            if (!name.equals(".notdef") && charMapGlobal.containsKey(name)) {
+                return charMapGlobal.get(name);
+            }
+        }
+        return null;
+    }
 }

Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/MergeFontsPDFWriter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/MergeFontsPDFWriter.java?rev=1814222&r1=1814221&r2=1814222&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/MergeFontsPDFWriter.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/MergeFontsPDFWriter.java Fri Nov  3 16:06:21 2017
@@ -24,7 +24,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
-import java.util.Locale;
 import java.util.Map;
 import java.util.regex.Pattern;
 
@@ -54,7 +53,6 @@ import org.apache.pdfbox.pdmodel.font.PD
 import org.apache.pdfbox.pdmodel.font.PDType1Font;
 
 import org.apache.fop.fonts.FontInfo;
-import org.apache.fop.fonts.SingleByteFont;
 import org.apache.fop.fonts.Typeface;
 import org.apache.fop.fonts.truetype.OTFSubSetFile;
 
@@ -120,7 +118,7 @@ public class MergeFontsPDFWriter extends
                 if (word == null) {
                     s.append(PDFText.escapeString(getString((COSString) c)));
                 } else {
-                    String x = getMappedWord(word, font, ((COSString) c).getBytes());
+                    String x = ((FOPPDFFont)font).getMappedWord(word, ((COSString) c).getBytes(), oldFont);
                     if (x == null) {
                         s.append(PDFText.escapeString(getString((COSString) c)));
                     } else {
@@ -240,43 +238,6 @@ public class MergeFontsPDFWriter extends
         return new String(data, start, data.length - start, encoding);
     }
 
-    private String getMappedWord(List<String> word, Typeface font, byte[] bytes) throws IOException {
-        StringBuffer newOct = new StringBuffer();
-        StringBuilder newHex = new StringBuilder();
-        int i = 0;
-        for (String str : word) {
-            Integer mapped = getMapping(bytes[i]);
-            if (mapped == null) {
-                char c = str.charAt(0);
-                if (str.length() > 1) {
-                    c = (char) str.hashCode();
-                }
-                if (font.hasChar(c)) {
-                    mapped = (int)font.mapChar(c);
-                } else {
-                    return null;
-                }
-            }
-            newHex.append(String.format("%1$04x", mapped & 0xFFFF).toUpperCase(Locale.getDefault()));
-            PDFText.escapeStringChar((char)mapped.intValue(), newOct);
-            i++;
-        }
-        if (font instanceof SingleByteFont) {
-            return "(" + newOct.toString() + ")";
-        }
-        return "<" + newHex.toString() + ">";
-    }
-
-    private Integer getMapping(byte i) throws IOException {
-        if (oldFont.getEncoding() != null && font instanceof FOPPDFSingleByteFont) {
-            String name = oldFont.getEncoding().getName(i);
-            if (!name.equals(".notdef") && ((FOPPDFSingleByteFont)font).charMapGlobal.containsKey(name)) {
-                return ((FOPPDFSingleByteFont)font).charMapGlobal.get(name);
-            }
-        }
-        return null;
-    }
-
     private List<String> readCOSString(COSString s, FontContainer oldFont) throws IOException {
         List<String> word = new ArrayList<String>();
         byte[] string = s.getBytes();
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.