You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2016/05/28 10:54:00 UTC
svn commit: r1745866 - in /pdfbox/branches/2.0: ./
fontbox/src/main/java/org/apache/fontbox/ttf/GlyfCompositeDescript.java
Author: lehmi
Date: Sat May 28 10:54:00 2016
New Revision: 1745866
URL: http://svn.apache.org/viewvc?rev=1745866&view=rev
Log:
PDFBOX-3089: cache GlyphDescription
Modified:
pdfbox/branches/2.0/ (props changed)
pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/ttf/GlyfCompositeDescript.java
Propchange: pdfbox/branches/2.0/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat May 28 10:54:00 2016
@@ -1,3 +1,3 @@
/pdfbox/branches/no-awt:1618517-1621410
/pdfbox/no-awt:1618514-1618516
-/pdfbox/trunk:1736223,1736227,1736615,1737043,1737130,1737599-1737600,1738755,1740160,1742437,1742442,1745595,1745606,1745774,1745776,1745779
+/pdfbox/trunk:1736223,1736227,1736615,1737043,1737130,1737599-1737600,1738755,1740160,1742437,1742442,1745595,1745606,1745772,1745774,1745776,1745779
Modified: pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/ttf/GlyfCompositeDescript.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/ttf/GlyfCompositeDescript.java?rev=1745866&r1=1745865&r2=1745866&view=diff
==============================================================================
--- pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/ttf/GlyfCompositeDescript.java (original)
+++ pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/ttf/GlyfCompositeDescript.java Sat May 28 10:54:00 2016
@@ -20,8 +20,11 @@ package org.apache.fontbox.ttf;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -41,10 +44,13 @@ public class GlyfCompositeDescript exten
private static final Log LOG = LogFactory.getLog(GlyfCompositeDescript.class);
private final List<GlyfCompositeComp> components = new ArrayList<GlyfCompositeComp>();
+ private final Map<Integer,GlyphDescription> descriptions = new HashMap<Integer,GlyphDescription>();
private GlyphTable glyphTable = null;
private boolean beingResolved = false;
private boolean resolved = false;
private int pointCount = -1;
+ private int contourCount = -1;
+
/**
* Constructor.
*
@@ -72,6 +78,7 @@ public class GlyfCompositeDescript exten
{
readInstructions(bais, (bais.readUnsignedShort()));
}
+ initDescriptions();
}
/**
@@ -101,8 +108,7 @@ public class GlyfCompositeDescript exten
comp.setFirstIndex(firstIndex);
comp.setFirstContour(firstContour);
- GlyphDescription desc;
- desc = getGlypDescription(comp.getGlyphIndex());
+ GlyphDescription desc = descriptions.get(comp.getGlyphIndex());
if (desc != null)
{
desc.resolve();
@@ -123,7 +129,7 @@ public class GlyfCompositeDescript exten
GlyfCompositeComp c = getCompositeCompEndPt(i);
if (c != null)
{
- GlyphDescription gd = getGlypDescription(c.getGlyphIndex());
+ GlyphDescription gd = descriptions.get(c.getGlyphIndex());
return gd.getEndPtOfContours(i - c.getFirstContour()) + c.getFirstIndex();
}
return 0;
@@ -138,7 +144,7 @@ public class GlyfCompositeDescript exten
GlyfCompositeComp c = getCompositeComp(i);
if (c != null)
{
- GlyphDescription gd = getGlypDescription(c.getGlyphIndex());
+ GlyphDescription gd = descriptions.get(c.getGlyphIndex());
return gd.getFlags(i - c.getFirstIndex());
}
return 0;
@@ -153,7 +159,7 @@ public class GlyfCompositeDescript exten
GlyfCompositeComp c = getCompositeComp(i);
if (c != null)
{
- GlyphDescription gd = getGlypDescription(c.getGlyphIndex());
+ GlyphDescription gd = descriptions.get(c.getGlyphIndex());
int n = i - c.getFirstIndex();
int x = gd.getXCoordinate(n);
int y = gd.getYCoordinate(n);
@@ -173,7 +179,7 @@ public class GlyfCompositeDescript exten
GlyfCompositeComp c = getCompositeComp(i);
if (c != null)
{
- GlyphDescription gd = getGlypDescription(c.getGlyphIndex());
+ GlyphDescription gd = descriptions.get(c.getGlyphIndex());
int n = i - c.getFirstIndex();
int x = gd.getXCoordinate(n);
int y = gd.getYCoordinate(n);
@@ -206,7 +212,7 @@ public class GlyfCompositeDescript exten
if (pointCount < 0)
{
GlyfCompositeComp c = components.get(components.size() - 1);
- GlyphDescription gd = getGlypDescription(c.getGlyphIndex());
+ GlyphDescription gd = descriptions.get(c.getGlyphIndex());
if (gd == null)
{
LOG.error("getGlypDescription(" + c.getGlyphIndex() + ") is null, returning 0");
@@ -230,8 +236,12 @@ public class GlyfCompositeDescript exten
{
LOG.error("getContourCount called on unresolved GlyfCompositeDescript");
}
- GlyfCompositeComp c = components.get(components.size() - 1);
- return c.getFirstContour() + getGlypDescription(c.getGlyphIndex()).getContourCount();
+ if (contourCount < 0)
+ {
+ GlyfCompositeComp c = components.get(components.size() - 1);
+ contourCount = c.getFirstContour() + descriptions.get(c.getGlyphIndex()).getContourCount();
+ }
+ return contourCount;
}
/**
@@ -248,7 +258,7 @@ public class GlyfCompositeDescript exten
{
for (GlyfCompositeComp c : components)
{
- GlyphDescription gd = getGlypDescription(c.getGlyphIndex());
+ GlyphDescription gd = descriptions.get(c.getGlyphIndex());
if (c.getFirstIndex() <= i && i < (c.getFirstIndex() + gd.getPointCount()))
{
return c;
@@ -261,7 +271,7 @@ public class GlyfCompositeDescript exten
{
for (GlyfCompositeComp c : components)
{
- GlyphDescription gd = getGlypDescription(c.getGlyphIndex());
+ GlyphDescription gd = descriptions.get(c.getGlyphIndex());
if (c.getFirstContour() <= i && i < (c.getFirstContour() + gd.getContourCount()))
{
return c;
@@ -270,21 +280,23 @@ public class GlyfCompositeDescript exten
return null;
}
- private GlyphDescription getGlypDescription(int index)
+ private void initDescriptions()
{
- try
+ for (GlyfCompositeComp component : components)
{
- GlyphData glyph = glyphTable.getGlyph(index);
- if (glyph != null)
+ try
{
- return glyph.getDescription();
+ int index = component.getGlyphIndex();
+ GlyphData glyph = glyphTable.getGlyph(index);
+ if (glyph != null)
+ {
+ descriptions.put(index, glyph.getDescription());
+ }
}
- return null;
- }
- catch (IOException e)
- {
- LOG.error(e);
- return null;
+ catch (IOException e)
+ {
+ LOG.error(e);
+ }
}
}
}