[pkg-java] r14819 - in trunk/fop/debian: . patches
Mathieu Malaterre
malat-guest at alioth.debian.org
Sun Sep 11 13:06:21 UTC 2011
Author: malat-guest
Date: 2011-09-11 13:06:21 +0000 (Sun, 11 Sep 2011)
New Revision: 14819
Added:
trunk/fop/debian/patches/enco.patch
trunk/fop/debian/patches/enco2.patch
Modified:
trunk/fop/debian/changelog
trunk/fop/debian/patches/dump_exception.patch
trunk/fop/debian/patches/series
Log:
Fix one issue where font was misrender. Regression from 0.95
Modified: trunk/fop/debian/changelog
===================================================================
--- trunk/fop/debian/changelog 2011-09-11 10:15:52 UTC (rev 14818)
+++ trunk/fop/debian/changelog 2011-09-11 13:06:21 UTC (rev 14819)
@@ -1,3 +1,9 @@
+fop (1:1.0.dfsg2-3) UNRELEASED; urgency=low
+
+ * Fix misrender issue. Closes: #610344
+
+ -- Mathieu Malaterre <mathieu.malaterre at gmail.com> Sun, 11 Sep 2011 15:01:03 +0200
+
fop (1:1.0.dfsg2-2) unstable; urgency=low
[ Mathieu Malaterre ]
Modified: trunk/fop/debian/patches/dump_exception.patch
===================================================================
--- trunk/fop/debian/patches/dump_exception.patch 2011-09-11 10:15:52 UTC (rev 14818)
+++ trunk/fop/debian/patches/dump_exception.patch 2011-09-11 13:06:21 UTC (rev 14819)
@@ -1,8 +1,8 @@
Dump exception, as suggest on bug #639162
Index: fop-1.0/src/java/org/apache/fop/cli/Main.java
===================================================================
---- fop-1.0.orig/src/java/org/apache/fop/cli/Main.java 2010-07-12 21:34:44.000000000 +0200
-+++ fop-1.0/src/java/org/apache/fop/cli/Main.java 2011-08-26 14:40:54.000000000 +0200
+--- fop-1.0.orig/src/java/org/apache/fop/cli/Main.java 2011-09-11 14:50:52.000000000 +0200
++++ fop-1.0/src/java/org/apache/fop/cli/Main.java 2011-09-11 14:51:11.000000000 +0200
@@ -186,6 +186,8 @@
System.exit(0);
}
Added: trunk/fop/debian/patches/enco.patch
===================================================================
--- trunk/fop/debian/patches/enco.patch (rev 0)
+++ trunk/fop/debian/patches/enco.patch 2011-09-11 13:06:21 UTC (rev 14819)
@@ -0,0 +1,70 @@
+Description: Removed fallback mechanism in AbstractCodePointMapping. This is superfluous now that SingleByteFont handles all substitutions. This actually fixes a bug: the glyph "minus" was painted using "hyphen" but used the width of "minus" due to this fallback mechanism.
+Bug: https://issues.apache.org/bugzilla/show_bug.cgi?id=50605
+Last-Update: 2011-09-11
+Origin: http://svn.apache.org/viewvc?view=revision&revision=1142188
+
+Index: fop-1.0/src/java/org/apache/fop/fonts/AbstractCodePointMapping.java
+===================================================================
+--- fop-1.0.orig/src/java/org/apache/fop/fonts/AbstractCodePointMapping.java 2011-09-11 14:51:37.000000000 +0200
++++ fop-1.0/src/java/org/apache/fop/fonts/AbstractCodePointMapping.java 2011-09-11 14:52:41.000000000 +0200
+@@ -20,7 +20,6 @@
+ package org.apache.fop.fonts;
+
+ import java.util.Arrays;
+-import java.util.Map;
+
+ import org.apache.xmlgraphics.fonts.Glyphs;
+
+@@ -37,7 +36,6 @@
+ private char[] codepoints;
+ private char[] unicodeMap; //code point to Unicode char
+ private String[] charNameMap; //all character names in the encoding
+- private Map fallbackMap; //Here we accumulate all mappings we have found through substitution
+
+ /**
+ * Main constructor.
+@@ -140,44 +138,9 @@
+ bot = mid + 1;
+ }
+ }
+-
+- //Fallback: using cache
+- synchronized (this) {
+- if (fallbackMap != null) {
+- Character fallback = (Character)fallbackMap.get(new Character(c));
+- if (fallback != null) {
+- return fallback.charValue();
+- }
+- }
+- }
+- //Fallback: find alternatives (slow!)
+- String glyphName = Glyphs.charToGlyphName(c);
+- if (glyphName.length() > 0) {
+- String[] alternatives = Glyphs.getCharNameAlternativesFor(glyphName);
+- if (alternatives != null) {
+- for (int i = 0, ic = alternatives.length; i < ic; i++) {
+- int idx = getCodePointForGlyph(alternatives[i]);
+- if (idx >= 0) {
+- putFallbackCharacter(c, (char)idx);
+- return (char)idx;
+- }
+- }
+- }
+- }
+-
+- putFallbackCharacter(c, NOT_FOUND_CODE_POINT);
+ return NOT_FOUND_CODE_POINT;
+ }
+
+- private void putFallbackCharacter(char c, char mapTo) {
+- synchronized (this) {
+- if (this.fallbackMap == null) {
+- this.fallbackMap = new java.util.HashMap();
+- }
+- this.fallbackMap.put(new Character(c), new Character(mapTo));
+- }
+- }
+-
+ /**
+ * Returns the main Unicode value that is associated with the given code point in the encoding.
+ * Note that multiple Unicode values can theoretically be mapped to one code point in the
Added: trunk/fop/debian/patches/enco2.patch
===================================================================
--- trunk/fop/debian/patches/enco2.patch (rev 0)
+++ trunk/fop/debian/patches/enco2.patch 2011-09-11 13:06:21 UTC (rev 14819)
@@ -0,0 +1,198 @@
+Description: AFMFile sometimes indirectly caused wrong assignments of char widths to code points in a single-byte encoding due to mapping multiple characters to the same code points (see overridePrimaryEncoding). Fixed some FindBugs issues. Added some generics.
+Bug: https://issues.apache.org/bugzilla/show_bug.cgi?id=50605
+Last-Update: 2011-09-11
+Origin: http://svn.apache.org/viewvc?view=revision&revision=1142189
+
+http://svn.apache.org/viewvc?view=revision&revision=1142189
+Index: fop-1.0/src/java/org/apache/fop/fonts/type1/AFMFile.java
+===================================================================
+--- fop-1.0.orig/src/java/org/apache/fop/fonts/type1/AFMFile.java 2010-07-12 21:34:34.000000000 +0200
++++ fop-1.0/src/java/org/apache/fop/fonts/type1/AFMFile.java 2011-09-11 14:49:37.000000000 +0200
+@@ -22,10 +22,12 @@
+ import java.awt.geom.Dimension2D;
+ import java.awt.geom.RectangularShape;
+ import java.util.Collections;
+-import java.util.Iterator;
+ import java.util.List;
+ import java.util.Map;
+
++import org.apache.commons.logging.Log;
++import org.apache.commons.logging.LogFactory;
++
+ import org.apache.xmlgraphics.java2d.Dimension2DDouble;
+
+ import org.apache.fop.fonts.NamedCharacter;
+@@ -36,6 +38,9 @@
+ */
+ public class AFMFile {
+
++ /** logging instance */
++ private static final Log LOG = LogFactory.getLog(AFMFile.class);
++
+ private String fontName;
+ private String fullName;
+ private String familyName;
+@@ -56,15 +61,13 @@
+ private AFMWritingDirectionMetrics[] writingDirectionMetrics
+ = new AFMWritingDirectionMetrics[3];
+
+- private List charMetrics = new java.util.ArrayList();
+- //List<AFMCharMetrics>
+- private Map charNameToMetrics = new java.util.HashMap();
+- //Map<String, AFMCharMetrics>
++ private List<AFMCharMetrics> charMetrics = new java.util.ArrayList<AFMCharMetrics>();
++ private Map<String, AFMCharMetrics> charNameToMetrics
++ = new java.util.HashMap<String, AFMCharMetrics>();
+ private int firstChar = -1;
+ private int lastChar = -1;
+
+- private Map kerningMap;
+- //Map<String, Map<String, Dimension2D>>
++ private Map<String, Map<String, Dimension2D>> kerningMap;
+
+ /**
+ * Default constructor.
+@@ -365,14 +368,14 @@
+ * @return the character metrics or null if there's no such character
+ */
+ public AFMCharMetrics getChar(String name) {
+- return (AFMCharMetrics)this.charNameToMetrics.get(name);
++ return this.charNameToMetrics.get(name);
+ }
+
+ /**
+ * Returns the list of AFMCharMetrics instances representing all the available characters.
+ * @return a List of AFMCharMetrics instances
+ */
+- public List getCharMetrics() {
++ public List<AFMCharMetrics> getCharMetrics() {
+ return Collections.unmodifiableList(this.charMetrics);
+ }
+
+@@ -384,11 +387,11 @@
+ */
+ public void addXKerning(String name1, String name2, double kx) {
+ if (this.kerningMap == null) {
+- this.kerningMap = new java.util.HashMap();
++ this.kerningMap = new java.util.HashMap<String, Map<String, Dimension2D>>();
+ }
+- Map entries = (Map)this.kerningMap.get(name1);
++ Map<String, Dimension2D> entries = this.kerningMap.get(name1);
+ if (entries == null) {
+- entries = new java.util.HashMap();
++ entries = new java.util.HashMap<String, Dimension2D>();
+ this.kerningMap.put(name1, entries);
+ }
+ entries.put(name2, new Dimension2DDouble(kx, 0));
+@@ -406,40 +409,37 @@
+ * Creates and returns a kerning map for writing mode 0 (ltr) with character codes.
+ * @return the kerning map or null if there is no kerning information.
+ */
+- public Map createXKerningMapEncoded() {
++ public Map<Integer, Map<Integer, Integer>> createXKerningMapEncoded() {
+ if (!hasKerning()) {
+ return null;
+ }
+- Map m = new java.util.HashMap();
+- Iterator iterFrom = this.kerningMap.entrySet().iterator();
+- while (iterFrom.hasNext()) {
+- Map.Entry entryFrom = (Map.Entry)iterFrom.next();
+- String name1 = (String)entryFrom.getKey();
++ Map<Integer, Map<Integer, Integer>> m
++ = new java.util.HashMap<Integer, Map<Integer, Integer>>();
++ for (Map.Entry<String, Map<String, Dimension2D>> entryFrom : this.kerningMap.entrySet()) {
++ String name1 = entryFrom.getKey();
+ AFMCharMetrics chm1 = getChar(name1);
+ if (chm1 == null || !chm1.hasCharCode()) {
+ continue;
+ }
+- Map container = null;
+- Map entriesTo = (Map)entryFrom.getValue();
+- Iterator iterTo = entriesTo.entrySet().iterator();
+- while (iterTo.hasNext()) {
+- Map.Entry entryTo = (Map.Entry)iterTo.next();
+- String name2 = (String)entryTo.getKey();
++ Map<Integer, Integer> container = null;
++ Map<String, Dimension2D> entriesTo = entryFrom.getValue();
++ for (Map.Entry<String, Dimension2D> entryTo : entriesTo.entrySet()) {
++ String name2 = entryTo.getKey();
+ AFMCharMetrics chm2 = getChar(name2);
+ if (chm2 == null || !chm2.hasCharCode()) {
+ continue;
+ }
+ if (container == null) {
+- Integer k1 = new Integer(chm1.getCharCode());
+- container = (Map)m.get(k1);
++ Integer k1 = Integer.valueOf(chm1.getCharCode());
++ container = m.get(k1);
+ if (container == null) {
+- container = new java.util.HashMap();
++ container = new java.util.HashMap<Integer, Integer>();
+ m.put(k1, container);
+ }
+ }
+- Dimension2D dim = (Dimension2D)entryTo.getValue();
+- container.put(new Integer(chm2.getCharCode()),
+- new Integer((int)Math.round(dim.getWidth())));
++ Dimension2D dim = entryTo.getValue();
++ container.put(Integer.valueOf(chm2.getCharCode()),
++ Integer.valueOf((int)Math.round(dim.getWidth())));
+ }
+ }
+ return m;
+@@ -451,14 +451,41 @@
+ * @param encoding the encoding to replace the one given in the AFM
+ */
+ public void overridePrimaryEncoding(SingleByteEncoding encoding) {
+- Iterator iter = this.charMetrics.iterator();
+- while (iter.hasNext()) {
+- AFMCharMetrics cm = (AFMCharMetrics)iter.next();
++ if (LOG.isDebugEnabled()) {
++ LOG.debug("Overriding primary encoding of " + getFontName() + " with: " + encoding);
++ }
++ AFMCharMetrics[] mapped = new AFMCharMetrics[256];
++ for (AFMCharMetrics cm : this.charMetrics) {
+ NamedCharacter nc = cm.getCharacter();
+ if (nc.hasSingleUnicodeValue()) {
+- int mapped = encoding.mapChar(nc.getSingleUnicodeValue());
+- if (mapped > 0) {
+- cm.setCharCode(mapped);
++ int codePoint = encoding.mapChar(nc.getSingleUnicodeValue());
++ if (codePoint > 0) {
++ if (mapped[codePoint] != null) {
++ if (LOG.isDebugEnabled()) {
++ AFMCharMetrics other = mapped[codePoint];
++ String msg = "Not mapping character " + nc + " to code point "
++ + codePoint + " (" + Integer.toHexString(codePoint) + ") in "
++ + encoding + ". "
++ + other + " has already been assigned that code point.";
++ if (other.getUnicodeSequence()
++ .equals(nc.getUnicodeSequence())) {
++ msg += " This is a specialized glyph for the"
++ + " same Unicode character.";
++ //TODO should these be mapped to a private Unicode area to make
++ //them accessible?
++ } else {
++ msg += " This is a similar character.";
++ }
++ if (cm.getWidthX() != other.getWidthX()) {
++ msg += " They have differing widths: "
++ + cm.getWidthX() + " vs. " + other.getWidthX();
++ }
++ LOG.debug(msg);
++ }
++ } else {
++ cm.setCharCode(codePoint);
++ mapped[codePoint] = cm;
++ }
+ } else {
+ cm.setCharCode(-1);
+ }
+@@ -470,6 +497,7 @@
+ }
+
+ /** {@inheritDoc} */
++ @Override
+ public String toString() {
+ return "AFM: " + getFullName();
+ }
Modified: trunk/fop/debian/patches/series
===================================================================
--- trunk/fop/debian/patches/series 2011-09-11 10:15:52 UTC (rev 14818)
+++ trunk/fop/debian/patches/series 2011-09-11 13:06:21 UTC (rev 14819)
@@ -1,2 +1,4 @@
04_fixqdoxbuildfailure.patch
dump_exception.patch
+enco.patch
+enco2.patch
More information about the pkg-java-commits
mailing list