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 2015/12/26 13:47:52 UTC
svn commit: r1721729 - in
/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff: CFFCIDFont.java
CFFFont.java CFFParser.java CFFType1Font.java Type2CharStringParser.java
Author: lehmi
Date: Sat Dec 26 12:47:51 2015
New Revision: 1721729
URL: http://svn.apache.org/viewvc?rev=1721729&view=rev
Log:
PDFBOX-3131: use arrays instead if lists
Modified:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFType1Font.java
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharStringParser.java
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java?rev=1721729&r1=1721728&r2=1721729&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java Sat Dec 26 12:47:51 2015
@@ -203,15 +203,15 @@ public class CFFCIDFont extends CFFFont
*
* @param gid GID
*/
- private List<byte[]> getLocalSubrIndex(int gid)
+ private byte[][] getLocalSubrIndex(int gid)
{
int fdArrayIndex = this.fdSelect.getFDIndex(gid);
if (fdArrayIndex == -1)
{
- return new ArrayList<byte[]>();
+ return null;
}
Map<String, Object> privDict = this.privateDictionaries.get(fdArrayIndex);
- return (List<byte[]>)privDict.get("Subrs");
+ return (byte[][])privDict.get("Subrs");
}
/**
@@ -228,10 +228,10 @@ public class CFFCIDFont extends CFFFont
{
int gid = charset.getGIDForCID(cid);
- byte[] bytes = charStrings.get(gid);
+ byte[] bytes = charStrings[gid];
if (bytes == null)
{
- bytes = charStrings.get(0); // .notdef
+ bytes = charStrings[0]; // .notdef
}
Type2CharStringParser parser = new Type2CharStringParser(fontName, cid);
List<Object> type2seq = parser.parse(bytes, globalSubrIndex, getLocalSubrIndex(gid));
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java?rev=1721729&r1=1721728&r2=1721729&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java Sat Dec 26 12:47:51 2015
@@ -18,6 +18,7 @@ package org.apache.fontbox.cff;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
@@ -37,8 +38,8 @@ public abstract class CFFFont implements
protected String fontName;
protected final Map<String, Object> topDict = new LinkedHashMap<String, Object>();
protected CFFCharset charset;
- protected final List<byte[]> charStrings = new ArrayList<byte[]>();
- protected List<byte[]> globalSubrIndex;
+ protected byte[][] charStrings;
+ protected byte[][] globalSubrIndex;
private CFFParser.ByteSource source;
/**
@@ -129,7 +130,7 @@ public abstract class CFFFont implements
*/
public final List<byte[]> getCharStringBytes()
{
- return Collections.unmodifiableList(charStrings);
+ return Arrays.asList(charStrings);
}
/**
@@ -153,7 +154,7 @@ public abstract class CFFFont implements
*/
public int getNumCharStrings()
{
- return charStrings.size();
+ return charStrings.length;
}
/**
@@ -161,7 +162,7 @@ public abstract class CFFFont implements
*
* @param globalSubrIndexValue an list containing the global subroutines
*/
- void setGlobalSubrIndex(List<byte[]> globalSubrIndexValue)
+ void setGlobalSubrIndex(byte[][] globalSubrIndexValue)
{
globalSubrIndex = globalSubrIndexValue;
}
@@ -173,7 +174,7 @@ public abstract class CFFFont implements
*/
public List<byte[]> getGlobalSubrIndex()
{
- return Collections.unmodifiableList(globalSubrIndex);
+ return Arrays.asList(globalSubrIndex);
}
/**
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java?rev=1721729&r1=1721728&r2=1721729&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java Sat Dec 26 12:47:51 2015
@@ -131,9 +131,9 @@ public class CFFParser
@SuppressWarnings("unused")
Header header = readHeader(input);
String[] nameIndex = readStringIndexData(input);
- byte[][] topDictIndex = readIndexDataAsArray(input);
+ byte[][] topDictIndex = readIndexData(input);
stringIndex = readStringIndexData(input);
- List<byte[]> globalSubrIndex = readIndexData(input);
+ byte[][] globalSubrIndex = readIndexData(input);
List<CFFFont> fonts = new ArrayList<CFFFont>();
for (int i = 0; i < nameIndex.length; i++)
@@ -188,7 +188,7 @@ public class CFFParser
return offsets;
}
- private static byte[][] readIndexDataAsArray(CFFDataInput input) throws IOException
+ private static byte[][] readIndexData(CFFDataInput input) throws IOException
{
int[] offsets = readIndexDataOffsets(input);
if (offsets == null)
@@ -205,16 +205,6 @@ public class CFFParser
return indexDataValues;
}
- private static List<byte[]> readIndexData(CFFDataInput input) throws IOException
- {
- byte[][] indexDataValuesAsArray = readIndexDataAsArray(input);
- if (indexDataValuesAsArray == null)
- {
- return new ArrayList<byte[]>(0);
- }
- return Arrays.asList(indexDataValuesAsArray);
- }
-
private static String[] readStringIndexData(CFFDataInput input) throws IOException
{
int[] offsets = readIndexDataOffsets(input);
@@ -453,7 +443,7 @@ public class CFFParser
DictData.Entry charStringsEntry = topDict.getEntry("CharStrings");
int charStringsOffset = charStringsEntry.getNumber(0).intValue();
input.setPosition(charStringsOffset);
- List<byte[]> charStringsIndex = readIndexData(input);
+ byte[][] charStringsIndex = readIndexData(input);
// charset
DictData.Entry charsetEntry = topDict.getEntry("charset");
@@ -476,7 +466,7 @@ public class CFFParser
else
{
input.setPosition(charsetId);
- charset = readCharset(input, charStringsIndex.size(), isCIDFont);
+ charset = readCharset(input, charStringsIndex.length, isCIDFont);
}
}
else
@@ -484,7 +474,7 @@ public class CFFParser
if (isCIDFont)
{
// a CID font with no charset does not default to any predefined charset
- charset = new EmptyCharset(charStringsIndex.size());
+ charset = new EmptyCharset(charStringsIndex.length);
}
else
{
@@ -494,12 +484,12 @@ public class CFFParser
font.setCharset(charset);
// charstrings dict
- font.charStrings.addAll(charStringsIndex);
+ font.charStrings = charStringsIndex;
// format-specific dictionaries
if (isCIDFont)
{
- parseCIDFontDicts(input, topDict, (CFFCIDFont) font, charStringsIndex.size());
+ parseCIDFontDicts(input, topDict, (CFFCIDFont) font, charStringsIndex.length);
// some malformed fonts have FontMatrix in their Font DICT, see PDFBOX-2495
if (topDict.getEntry("FontMatrix") == null)
@@ -544,7 +534,7 @@ public class CFFParser
// font dict index
int fontDictOffset = fdArrayEntry.getNumber(0).intValue();
input.setPosition(fontDictOffset);
- byte[][] fdIndex = readIndexDataAsArray(input);
+ byte[][] fdIndex = readIndexData(input);
List<Map<String, Object>> privateDictionaries = new LinkedList<Map<String, Object>>();
List<Map<String, Object>> fontDictionaries = new LinkedList<Map<String, Object>>();
@@ -582,11 +572,7 @@ public class CFFParser
// local subrs
int localSubrOffset = (Integer) privateDict.getNumber("Subrs", 0);
- if (localSubrOffset == 0)
- {
- privDict.put("Subrs", new ArrayList<byte[]>());
- }
- else
+ if (localSubrOffset > 0)
{
input.setPosition(privateOffset + localSubrOffset);
privDict.put("Subrs", readIndexData(input));
@@ -676,11 +662,7 @@ public class CFFParser
// local subrs
int localSubrOffset = (Integer) privateDict.getNumber("Subrs", 0);
- if (localSubrOffset == 0)
- {
- font.addToPrivateDict("Subrs", new ArrayList<byte[]>());
- }
- else
+ if (localSubrOffset > 0)
{
input.setPosition(privateOffset + localSubrOffset);
font.addToPrivateDict("Subrs", readIndexData(input));
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFType1Font.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFType1Font.java?rev=1721729&r1=1721728&r2=1721729&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFType1Font.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFType1Font.java Sat Dec 26 12:47:51 2015
@@ -128,14 +128,14 @@ public class CFFType1Font extends CFFFon
if (type2 == null)
{
byte[] bytes = null;
- if (gid < charStrings.size())
+ if (gid < charStrings.length)
{
- bytes = charStrings.get(gid);
+ bytes = charStrings[gid];
}
if (bytes == null)
{
// .notdef
- bytes = charStrings.get(0);
+ bytes = charStrings[0];
}
Type2CharStringParser parser = new Type2CharStringParser(fontName, name);
List<Object> type2seq = parser.parse(bytes, globalSubrIndex, getLocalSubrIndex());
@@ -192,9 +192,9 @@ public class CFFType1Font extends CFFFon
this.encoding = encoding;
}
- private List<byte[]> getLocalSubrIndex()
+ private byte[][] getLocalSubrIndex()
{
- return (List<byte[]>)privateDict.get("Subrs");
+ return (byte[][])privateDict.get("Subrs");
}
// helper for looking up keys/values
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharStringParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharStringParser.java?rev=1721729&r1=1721728&r2=1721729&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharStringParser.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharStringParser.java Sat Dec 26 12:47:51 2015
@@ -29,6 +29,7 @@ public class Type2CharStringParser
private int hstemCount = 0;
private int vstemCount = 0;
private List<Object> sequence = null;
+ @SuppressWarnings("unused")
private final String fontName, glyphName;
/**
@@ -58,18 +59,18 @@ public class Type2CharStringParser
/**
* The given byte array will be parsed and converted to a Type2 sequence.
* @param bytes the given mapping as byte array
- * @param globalSubrIndex list containing all global subroutines
- * @param localSubrIndex list containing all local subroutines
+ * @param globalSubrIndex array containing all global subroutines
+ * @param localSubrIndex array containing all local subroutines
*
* @return the Type2 sequence
* @throws IOException if an error occurs during reading
*/
- public List<Object> parse(byte[] bytes, List<byte[]> globalSubrIndex, List<byte[]> localSubrIndex) throws IOException
+ public List<Object> parse(byte[] bytes, byte[][] globalSubrIndex, byte[][] localSubrIndex) throws IOException
{
return parse(bytes, globalSubrIndex, localSubrIndex, true);
}
- private List<Object> parse(byte[] bytes, List<byte[]> globalSubrIndex, List<byte[]> localSubrIndex, boolean init) throws IOException
+ private List<Object> parse(byte[] bytes, byte[][] globalSubrIndex, byte[][] localSubrIndex, boolean init) throws IOException
{
if (init)
{
@@ -78,8 +79,8 @@ public class Type2CharStringParser
sequence = new ArrayList<Object>();
}
DataInput input = new DataInput(bytes);
- boolean localSubroutineIndexProvided = localSubrIndex != null && localSubrIndex.size() > 0;
- boolean globalSubroutineIndexProvided = globalSubrIndex != null && globalSubrIndex.size() > 0;
+ boolean localSubroutineIndexProvided = localSubrIndex != null && localSubrIndex.length > 0;
+ boolean globalSubroutineIndexProvided = globalSubrIndex != null && globalSubrIndex.length > 0;
while (input.hasRemaining())
{
@@ -89,7 +90,7 @@ public class Type2CharStringParser
Integer operand=(Integer)sequence.remove(sequence.size()-1);
//get subrbias
int bias = 0;
- int nSubrs = localSubrIndex.size();
+ int nSubrs = localSubrIndex.length;
if (nSubrs < 1240)
{
@@ -104,9 +105,9 @@ public class Type2CharStringParser
bias = 32768;
}
int subrNumber = bias+operand;
- if (subrNumber < localSubrIndex.size())
+ if (subrNumber < localSubrIndex.length)
{
- byte[] subrBytes = localSubrIndex.get(subrNumber);
+ byte[] subrBytes = localSubrIndex[subrNumber];
parse(subrBytes, globalSubrIndex, localSubrIndex, false);
Object lastItem=sequence.get(sequence.size()-1);
if (lastItem instanceof CharStringCommand && ((CharStringCommand)lastItem).getKey().getValue()[0] == 11)
@@ -121,7 +122,7 @@ public class Type2CharStringParser
Integer operand=(Integer)sequence.remove(sequence.size()-1);
//get subrbias
int bias = 0;
- int nSubrs = globalSubrIndex.size();
+ int nSubrs = globalSubrIndex.length;
if (nSubrs < 1240)
{
@@ -137,9 +138,9 @@ public class Type2CharStringParser
}
int subrNumber = bias+operand;
- if (subrNumber < globalSubrIndex.size())
+ if (subrNumber < globalSubrIndex.length)
{
- byte[] subrBytes = globalSubrIndex.get(subrNumber);
+ byte[] subrBytes = globalSubrIndex[subrNumber];
parse(subrBytes, globalSubrIndex, localSubrIndex, false);
Object lastItem=sequence.get(sequence.size()-1);
if (lastItem instanceof CharStringCommand && ((CharStringCommand)lastItem).getKey().getValue()[0]==11)