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]

Reply via email to