Author: ssteiner
Date: Thu Oct 6 08:56:20 2016
New Revision: 1763525
URL: http://svn.apache.org/viewvc?rev=1763525&view=rev
Log:
FOP-2525: Memory leak present when using Truetype Collection (.ttc)
Modified:
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/GlyphDefinitionTable.java
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/GlyphPositioningTable.java
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/GlyphSubstitutionTable.java
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/GlyphTable.java
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/OTFAdvancedTypographicTableReader.java
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/scripts/ScriptProcessor.java
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/complexscripts/fonts/ttx/TTXFile.java
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/complexscripts/scripts/arabic/ArabicJoinersTestCase.java
Modified:
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/GlyphDefinitionTable.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/GlyphDefinitionTable.java?rev=1763525&r1=1763524&r2=1763525&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/GlyphDefinitionTable.java
(original)
+++
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/GlyphDefinitionTable.java
Thu Oct 6 08:56:20 2016
@@ -21,6 +21,7 @@ package org.apache.fop.complexscripts.fo
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -72,8 +73,8 @@ public class GlyphDefinitionTable extend
* Instantiate a <code>GlyphDefinitionTable</code> object using the
specified subtables.
* @param subtables a list of identified subtables
*/
- public GlyphDefinitionTable(List subtables) {
- super(null, new HashMap(0));
+ public GlyphDefinitionTable(List subtables, Map<String, ScriptProcessor>
processors) {
+ super(null, new HashMap(0), processors);
if ((subtables == null) || (subtables.size() == 0)) {
throw new AdvancedTypographicTableFormatException("subtables must
be non-empty");
} else {
@@ -101,7 +102,7 @@ public class GlyphDefinitionTable extend
* @return the reordered (output) glyph sequence
*/
public GlyphSequence reorderCombiningMarks(GlyphSequence gs, int[] widths,
int[][] gpa, String script, String language) {
- ScriptProcessor sp = ScriptProcessor.getInstance(script);
+ ScriptProcessor sp = ScriptProcessor.getInstance(script, processors);
return sp.reorderCombiningMarks(this, gs, widths, gpa, script,
language);
}
Modified:
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/GlyphPositioningTable.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/GlyphPositioningTable.java?rev=1763525&r1=1763524&r2=1763525&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/GlyphPositioningTable.java
(original)
+++
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/GlyphPositioningTable.java
Thu Oct 6 08:56:20 2016
@@ -71,8 +71,9 @@ public class GlyphPositioningTable exten
* @param lookups a map of lookup specifications to subtable identifier
strings
* @param subtables a list of identified subtables
*/
- public GlyphPositioningTable(GlyphDefinitionTable gdef, Map lookups, List
subtables) {
- super(gdef, lookups);
+ public GlyphPositioningTable(GlyphDefinitionTable gdef, Map lookups, List
subtables,
+ Map<String, ScriptProcessor> processors) {
+ super(gdef, lookups, processors);
if ((subtables == null) || (subtables.size() == 0)) {
throw new AdvancedTypographicTableFormatException("subtables must
be non-empty");
} else {
@@ -234,7 +235,7 @@ public class GlyphPositioningTable exten
public boolean position(GlyphSequence gs, String script, String language,
int fontSize, int[] widths, int[][] adjustments) {
Map<LookupSpec, List<LookupTable>> lookups = matchLookups(script,
language, "*");
if ((lookups != null) && (lookups.size() > 0)) {
- ScriptProcessor sp = ScriptProcessor.getInstance(script);
+ ScriptProcessor sp = ScriptProcessor.getInstance(script,
processors);
return sp.position(this, gs, script, language, fontSize, lookups,
widths, adjustments);
} else {
return false;
Modified:
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/GlyphSubstitutionTable.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/GlyphSubstitutionTable.java?rev=1763525&r1=1763524&r2=1763525&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/GlyphSubstitutionTable.java
(original)
+++
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/GlyphSubstitutionTable.java
Thu Oct 6 08:56:20 2016
@@ -69,8 +69,9 @@ public class GlyphSubstitutionTable exte
* @param lookups a map of lookup specifications to subtable identifier
strings
* @param subtables a list of identified subtables
*/
- public GlyphSubstitutionTable(GlyphDefinitionTable gdef, Map lookups, List
subtables) {
- super(gdef, lookups);
+ public GlyphSubstitutionTable(GlyphDefinitionTable gdef, Map lookups, List
subtables,
+ Map<String, ScriptProcessor> processors) {
+ super(gdef, lookups, processors);
if ((subtables == null) || (subtables.size() == 0)) {
throw new AdvancedTypographicTableFormatException("subtables must
be non-empty");
} else {
@@ -96,7 +97,7 @@ public class GlyphSubstitutionTable exte
GlyphSequence ogs;
Map<LookupSpec, List<LookupTable>> lookups = matchLookups(script,
language, "*");
if ((lookups != null) && (lookups.size() > 0)) {
- ScriptProcessor sp = ScriptProcessor.getInstance(script);
+ ScriptProcessor sp = ScriptProcessor.getInstance(script,
processors);
ogs = sp.substitute(this, gs, script, language, lookups);
} else {
ogs = gs;
Modified:
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/GlyphTable.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/GlyphTable.java?rev=1763525&r1=1763524&r2=1763525&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/GlyphTable.java
(original)
+++
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/GlyphTable.java
Thu Oct 6 08:56:20 2016
@@ -33,6 +33,7 @@ import java.util.TreeSet;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.fop.complexscripts.scripts.ScriptProcessor;
import org.apache.fop.complexscripts.util.GlyphSequence;
import org.apache.fop.complexscripts.util.ScriptContextTester;
@@ -74,12 +75,16 @@ public class GlyphTable {
// if true, then prevent further subtable addition
private boolean frozen;
+ protected Map<String, ScriptProcessor> processors;
+
/**
* Instantiate glyph table with specified lookups.
* @param gdef glyph definition table that applies
* @param lookups map from lookup specs to lookup tables
*/
- public GlyphTable(GlyphTable gdef, Map<LookupSpec, List<String>> lookups) {
+ public GlyphTable(GlyphTable gdef, Map<LookupSpec, List<String>> lookups,
+ Map<String, ScriptProcessor> processors) {
+ this.processors = processors;
if ((gdef != null) && !(gdef instanceof GlyphDefinitionTable)) {
throw new AdvancedTypographicTableFormatException("bad glyph
definition table");
} else if (lookups == null) {
Modified:
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/OTFAdvancedTypographicTableReader.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/OTFAdvancedTypographicTableReader.java?rev=1763525&r1=1763524&r2=1763525&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/OTFAdvancedTypographicTableReader.java
(original)
+++
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/fonts/OTFAdvancedTypographicTableReader.java
Thu Oct 6 08:56:20 2016
@@ -21,12 +21,14 @@ package org.apache.fop.complexscripts.fo
import java.io.IOException;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.fop.complexscripts.scripts.ScriptProcessor;
import org.apache.fop.fonts.truetype.FontFileReader;
import org.apache.fop.fonts.truetype.OFDirTabEntry;
import org.apache.fop.fonts.truetype.OFTableName;
@@ -57,6 +59,7 @@ public final class OTFAdvancedTypographi
private transient GlyphMappingTable seMapping; // subtable
entry mappings
private transient List seEntries; // subtable
entry entries
private transient List seSubtables; // subtable
entry subtables
+ private Map<String, ScriptProcessor> processors = new HashMap<String,
ScriptProcessor>();
/**
* Construct an <code>OTFAdvancedTypographicTableReader</code> instance.
@@ -3515,7 +3518,7 @@ public final class OTFAdvancedTypographi
List subtables;
if ((subtables = constructGDEFSubtables()) != null) {
if (subtables.size() > 0) {
- gdef = new GlyphDefinitionTable(subtables);
+ gdef = new GlyphDefinitionTable(subtables, processors);
}
}
resetATState();
@@ -3534,7 +3537,7 @@ public final class OTFAdvancedTypographi
List subtables;
if ((subtables = constructGSUBSubtables()) != null) {
if ((lookups.size() > 0) && (subtables.size() > 0)) {
- gsub = new GlyphSubstitutionTable(gdef, lookups,
subtables);
+ gsub = new GlyphSubstitutionTable(gdef, lookups,
subtables, processors);
}
}
}
@@ -3554,7 +3557,7 @@ public final class OTFAdvancedTypographi
List subtables;
if ((subtables = constructGPOSSubtables()) != null) {
if ((lookups.size() > 0) && (subtables.size() > 0)) {
- gpos = new GlyphPositioningTable(gdef, lookups, subtables);
+ gpos = new GlyphPositioningTable(gdef, lookups, subtables,
processors);
}
}
}
Modified:
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/scripts/ScriptProcessor.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/scripts/ScriptProcessor.java?rev=1763525&r1=1763524&r2=1763525&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/scripts/ScriptProcessor.java
(original)
+++
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/scripts/ScriptProcessor.java
Thu Oct 6 08:56:20 2016
@@ -46,8 +46,6 @@ public abstract class ScriptProcessor {
private final Map<AssembledLookupsKey, GlyphTable.UseSpec[]>
assembledLookups;
- private static Map<String, ScriptProcessor> processors = new
HashMap<String, ScriptProcessor>();
-
/**
* Instantiate a script processor.
* @param script a script identifier
@@ -229,7 +227,7 @@ public abstract class ScriptProcessor {
* @param script a script identifier
* @return a script processor instance or null if none found
*/
- public static synchronized ScriptProcessor getInstance(String script) {
+ public static synchronized ScriptProcessor getInstance(String script,
Map<String, ScriptProcessor> processors) {
ScriptProcessor sp = null;
assert processors != null;
if ((sp = processors.get(script)) == null) {
Modified:
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/complexscripts/fonts/ttx/TTXFile.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/complexscripts/fonts/ttx/TTXFile.java?rev=1763525&r1=1763524&r2=1763525&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/complexscripts/fonts/ttx/TTXFile.java
(original)
+++
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/complexscripts/fonts/ttx/TTXFile.java
Thu Oct 6 08:56:20 2016
@@ -62,6 +62,7 @@ import org.apache.fop.complexscripts.fon
import org.apache.fop.complexscripts.fonts.GlyphSubtable;
import org.apache.fop.complexscripts.fonts.GlyphTable;
import org.apache.fop.complexscripts.fonts.GlyphTable.RuleLookup;
+import org.apache.fop.complexscripts.scripts.ScriptProcessor;
import org.apache.fop.complexscripts.util.GlyphSequence;
import org.apache.fop.complexscripts.util.UTF32;
import org.apache.fop.util.CharUtilities;
@@ -162,6 +163,7 @@ public class TTXFile {
private GlyphDefinitionTable gdef; // constructed
glyph definition table
private GlyphSubstitutionTable gsub; // constructed
glyph substitution table
private GlyphPositioningTable gpos; // constructed
glyph positioning table
+ private Map<String, ScriptProcessor> processors = new HashMap<String,
ScriptProcessor>();
public TTXFile() {
elements = new Stack<String[]>();
@@ -2326,17 +2328,17 @@ public class TTXFile {
}
} else if (en[1].equals("GDEF")) {
if (subtables.size() > 0) {
- gdef = new GlyphDefinitionTable(subtables);
+ gdef = new GlyphDefinitionTable(subtables, processors);
}
clearTable();
} else if (en[1].equals("GPOS")) {
if (subtables.size() > 0) {
- gpos = new GlyphPositioningTable(gdef, extractLookups(),
subtables);
+ gpos = new GlyphPositioningTable(gdef, extractLookups(),
subtables, processors);
}
clearTable();
} else if (en[1].equals("GSUB")) {
if (subtables.size() > 0) {
- gsub = new GlyphSubstitutionTable(gdef, extractLookups(),
subtables);
+ gsub = new GlyphSubstitutionTable(gdef, extractLookups(),
subtables, processors);
}
clearTable();
} else if (en[1].equals("GlyphClassDef")) {
Modified:
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/complexscripts/scripts/arabic/ArabicJoinersTestCase.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/complexscripts/scripts/arabic/ArabicJoinersTestCase.java?rev=1763525&r1=1763524&r2=1763525&view=diff
==============================================================================
---
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/complexscripts/scripts/arabic/ArabicJoinersTestCase.java
(original)
+++
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/complexscripts/scripts/arabic/ArabicJoinersTestCase.java
Thu Oct 6 08:56:20 2016
@@ -21,6 +21,7 @@ package org.apache.fop.complexscripts.sc
import java.nio.IntBuffer;
import java.util.BitSet;
+import java.util.HashMap;
import org.junit.Test;
@@ -74,7 +75,7 @@ public class ArabicJoinersTestCase {
@Test
public void testArabicJoiners() {
String script = CharScript.scriptTagFromCode(CharScript.SCRIPT_ARABIC);
- ScriptProcessor sp = ScriptProcessor.getInstance(script);
+ ScriptProcessor sp = ScriptProcessor.getInstance(script, new
HashMap<String, ScriptProcessor>());
assertTrue(sp != null);
ScriptContextTester sct = sp.getSubstitutionContextTester();
assertTrue(sct != null);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]