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(); --------------------------------------------------------------------- To unsubscribe, e-mail: fop-commits-unsubscr...@xmlgraphics.apache.org For additional commands, e-mail: fop-commits-h...@xmlgraphics.apache.org