Author: tilman
Date: Mon Jul 20 13:33:24 2026
New Revision: 1936376
Log:
PDFBOX-6220: cache splitter, as suggested by Olivier Bruchez
Modified:
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForBengali.java
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForDevanagari.java
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForDflt.java
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForGujarati.java
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForLatin.java
Modified:
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForBengali.java
==============================================================================
---
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForBengali.java
Mon Jul 20 13:30:23 2026 (r1936375)
+++
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForBengali.java
Mon Jul 20 13:33:24 2026 (r1936376)
@@ -24,6 +24,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.WeakHashMap;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -64,6 +65,7 @@ public class GsubWorkerForBengali implem
private final List<Integer> beforeHalfGlyphIds;
private final Map<Integer, BeforeAndAfterSpanComponent>
beforeAndAfterSpanGlyphIds;
+ private Map<String,GlyphArraySplitter> map = new WeakHashMap<>();
GsubWorkerForBengali(CmapLookup cmapLookup, GsubData gsubData)
{
@@ -154,8 +156,8 @@ public class GsubWorkerForBengali implem
return originalGlyphs;
}
- GlyphArraySplitter glyphArraySplitter = new
GlyphArraySplitterRegexImpl(
- allGlyphIdsForSubstitution);
+ GlyphArraySplitter glyphArraySplitter =
+ map.computeIfAbsent(scriptFeature.getName(), k -> new
GlyphArraySplitterRegexImpl(allGlyphIdsForSubstitution));
List<List<Integer>> tokens = glyphArraySplitter.split(originalGlyphs);
Modified:
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForDevanagari.java
==============================================================================
---
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForDevanagari.java
Mon Jul 20 13:30:23 2026 (r1936375)
+++
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForDevanagari.java
Mon Jul 20 13:33:24 2026 (r1936376)
@@ -21,7 +21,9 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
import java.util.Set;
+import java.util.WeakHashMap;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -66,6 +68,8 @@ public class GsubWorkerForDevanagari imp
private final List<Integer> beforeRephGlyphIds;
private final List<Integer> beforeHalfGlyphIds;
+ private Map<String,GlyphArraySplitter> map = new WeakHashMap<>();
+
GsubWorkerForDevanagari(CmapLookup cmapLookup, GsubData gsubData)
{
this.cmapLookup = cmapLookup;
@@ -224,8 +228,8 @@ public class GsubWorkerForDevanagari imp
}
return originalGlyphs;
}
- GlyphArraySplitter glyphArraySplitter = new
GlyphArraySplitterRegexImpl(
- allGlyphIdsForSubstitution);
+ GlyphArraySplitter glyphArraySplitter =
+ map.computeIfAbsent(scriptFeature.getName(), k -> new
GlyphArraySplitterRegexImpl(allGlyphIdsForSubstitution));
List<List<Integer>> tokens = glyphArraySplitter.split(originalGlyphs);
List<Integer> gsubProcessedGlyphs = new ArrayList<>(tokens.size());
tokens.forEach(chunk ->
Modified:
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForDflt.java
==============================================================================
---
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForDflt.java
Mon Jul 20 13:30:23 2026 (r1936375)
+++
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForDflt.java
Mon Jul 20 13:33:24 2026 (r1936376)
@@ -21,6 +21,8 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
+import java.util.WeakHashMap;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -65,6 +67,8 @@ public class GsubWorkerForDflt implement
private final GsubData gsubData;
+ private Map<String,GlyphArraySplitter> map = new WeakHashMap<>();
+
GsubWorkerForDflt(GsubData gsubData)
{
this.gsubData = gsubData;
@@ -103,8 +107,8 @@ public class GsubWorkerForDflt implement
return originalGlyphs;
}
- GlyphArraySplitter glyphArraySplitter = new
GlyphArraySplitterRegexImpl(
- scriptFeature.getAllGlyphIdsForSubstitution());
+ GlyphArraySplitter glyphArraySplitter =
+ map.computeIfAbsent(scriptFeature.getName(), k -> new
GlyphArraySplitterRegexImpl(allGlyphIdsForSubstitution));
List<List<Integer>> tokens = glyphArraySplitter.split(originalGlyphs);
List<Integer> gsubProcessedGlyphs = new ArrayList<>();
Modified:
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForGujarati.java
==============================================================================
---
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForGujarati.java
Mon Jul 20 13:30:23 2026 (r1936375)
+++
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForGujarati.java
Mon Jul 20 13:33:24 2026 (r1936376)
@@ -21,7 +21,9 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
import java.util.Set;
+import java.util.WeakHashMap;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -66,6 +68,8 @@ public class GsubWorkerForGujarati imple
private final List<Integer> beforeRephGlyphIds;
private final List<Integer> beforeHalfGlyphIds;
+ private Map<String,GlyphArraySplitter> map = new WeakHashMap<>();
+
GsubWorkerForGujarati(CmapLookup cmapLookup, GsubData gsubData)
{
this.cmapLookup = cmapLookup;
@@ -223,8 +227,8 @@ public class GsubWorkerForGujarati imple
}
return originalGlyphs;
}
- GlyphArraySplitter glyphArraySplitter = new
GlyphArraySplitterRegexImpl(
- allGlyphIdsForSubstitution);
+ GlyphArraySplitter glyphArraySplitter =
+ map.computeIfAbsent(scriptFeature.getName(), k -> new
GlyphArraySplitterRegexImpl(allGlyphIdsForSubstitution));
List<List<Integer>> tokens = glyphArraySplitter.split(originalGlyphs);
List<Integer> gsubProcessedGlyphs = new ArrayList<>(tokens.size());
tokens.forEach(chunk ->
Modified:
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForLatin.java
==============================================================================
---
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForLatin.java
Mon Jul 20 13:30:23 2026 (r1936375)
+++
pdfbox/branches/3.0/fontbox/src/main/java/org/apache/fontbox/ttf/gsub/GsubWorkerForLatin.java
Mon Jul 20 13:33:24 2026 (r1936376)
@@ -21,6 +21,8 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
+import java.util.WeakHashMap;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -47,6 +49,8 @@ public class GsubWorkerForLatin implemen
private final GsubData gsubData;
+ private Map<String,GlyphArraySplitter> map = new WeakHashMap<>();
+
GsubWorkerForLatin(GsubData gsubData)
{
this.gsubData = gsubData;
@@ -85,8 +89,8 @@ public class GsubWorkerForLatin implemen
return originalGlyphs;
}
- GlyphArraySplitter glyphArraySplitter = new
GlyphArraySplitterRegexImpl(
- scriptFeature.getAllGlyphIdsForSubstitution());
+ GlyphArraySplitter glyphArraySplitter =
+ map.computeIfAbsent(scriptFeature.getName(), k -> new
GlyphArraySplitterRegexImpl(allGlyphIdsForSubstitution));
List<List<Integer>> tokens = glyphArraySplitter.split(originalGlyphs);
List<Integer> gsubProcessedGlyphs = new ArrayList<>();