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 2020/10/31 12:06:34 UTC
svn commit: r1883013 - in
/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff:
CharStringCommand.java Type1CharString.java Type2CharString.java
Author: lehmi
Date: Sat Oct 31 12:06:33 2020
New Revision: 1883013
URL: http://svn.apache.org/viewvc?rev=1883013&view=rev
Log:
PDFBOX-4987: improved enum implementation as proposed by Maruan Sahyoun
Modified:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CharStringCommand.java
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharString.java
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharString.java
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CharStringCommand.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CharStringCommand.java?rev=1883013&r1=1883012&r2=1883013&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CharStringCommand.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CharStringCommand.java Sat Oct 31 12:06:33 2020
@@ -17,8 +17,7 @@
package org.apache.fontbox.cff;
import java.util.Arrays;
-import java.util.Collections;
-import java.util.LinkedHashMap;
+import java.util.HashMap;
import java.util.Map;
/**
@@ -83,13 +82,18 @@ public class CharStringCommand
public String toString()
{
String str = null;
- if (TYPE2_VOCABULARY.containsKey(getKey()))
+ Type2KeyWord type2KeyWord = Type2KeyWord.valueOfKey(getKey());
+ if (type2KeyWord != null)
{
- str = TYPE2_VOCABULARY.get(getKey()).name();
+ str = type2KeyWord.toString();
}
- else if (TYPE1_VOCABULARY.containsKey(getKey()))
+ else
{
- str = TYPE1_VOCABULARY.get(getKey()).name();
+ Type1KeyWord type1KeyWord = Type1KeyWord.valueOfKey(getKey());
+ if (type1KeyWord != null)
+ {
+ str = type1KeyWord.toString();
+ }
}
if (str == null)
{
@@ -221,117 +225,82 @@ public class CharStringCommand
}
/**
- * A map with the Type1 vocabulary.
- */
- public static final Map<Key, Type1KeyWord> TYPE1_VOCABULARY;
-
- /**
* Enum of all valid type1 key words
*/
public enum Type1KeyWord
{
- HSTEM, VSTEM, VMOVETO, RLINETO, HLINETO, VLINETO, RRCURVETO, CLOSEPATH, CALLSUBR, RET, ESCAPE, DOTSECTION, VSTEM3, HSTEM3, SEAC, SBW, DIV, CALLOTHERSUBR, POP, SETCURRENTPOINT, HSBW, ENDCHAR, RMOVETO, HMOVETO, VHCURVETO, HVCURVETO
- }
+ HSTEM(new Key(1)), VSTEM(new Key(3)), VMOVETO(new Key(4)), RLINETO(new Key(5)), //
+ HLINETO(new Key(6)), VLINETO(new Key(7)), RRCURVETO(new Key(8)), CLOSEPATH(new Key(9)), //
+ CALLSUBR(new Key(10)), RET(new Key(11)), ESCAPE(new Key(12)), DOTSECTION(new Key(12, 0)), //
+ VSTEM3(new Key(12, 1)), HSTEM3(new Key(12, 2)), SEAC(new Key(12, 6)), SBW(new Key(12, 7)), //
+ DIV(new Key(12, 12)), CALLOTHERSUBR(new Key(12, 16)), POP(new Key(12, 17)), //
+ SETCURRENTPOINT(new Key(12, 33)), HSBW(new Key(13)), ENDCHAR(new Key(14)), //
+ RMOVETO(new Key(21)), HMOVETO(new Key(22)), VHCURVETO(new Key(30)), HVCURVETO(new Key(31));
- static
- {
- Map<Key, Type1KeyWord> map = new LinkedHashMap<>(26);
- map.put(new Key(1), Type1KeyWord.HSTEM);
- map.put(new Key(3), Type1KeyWord.VSTEM);
- map.put(new Key(4), Type1KeyWord.VMOVETO);
- map.put(new Key(5), Type1KeyWord.RLINETO);
- map.put(new Key(6), Type1KeyWord.HLINETO);
- map.put(new Key(7), Type1KeyWord.VLINETO);
- map.put(new Key(8), Type1KeyWord.RRCURVETO);
- map.put(new Key(9), Type1KeyWord.CLOSEPATH);
- map.put(new Key(10), Type1KeyWord.CALLSUBR);
- map.put(new Key(11), Type1KeyWord.RET);
- map.put(new Key(12), Type1KeyWord.ESCAPE);
- map.put(new Key(12, 0), Type1KeyWord.DOTSECTION);
- map.put(new Key(12, 1), Type1KeyWord.VSTEM3);
- map.put(new Key(12, 2), Type1KeyWord.HSTEM3);
- map.put(new Key(12, 6), Type1KeyWord.SEAC);
- map.put(new Key(12, 7), Type1KeyWord.SBW);
- map.put(new Key(12, 12), Type1KeyWord.DIV);
- map.put(new Key(12, 16), Type1KeyWord.CALLOTHERSUBR);
- map.put(new Key(12, 17), Type1KeyWord.POP);
- map.put(new Key(12, 33), Type1KeyWord.SETCURRENTPOINT);
- map.put(new Key(13), Type1KeyWord.HSBW);
- map.put(new Key(14), Type1KeyWord.ENDCHAR);
- map.put(new Key(21), Type1KeyWord.RMOVETO);
- map.put(new Key(22), Type1KeyWord.HMOVETO);
- map.put(new Key(30), Type1KeyWord.VHCURVETO);
- map.put(new Key(31), Type1KeyWord.HVCURVETO);
+ final Key key;
- TYPE1_VOCABULARY = Collections.unmodifiableMap(map);
- }
+ private Type1KeyWord(Key key)
+ {
+ this.key = key;
+ }
- /**
- * A map with the Type2 vocabulary.
- */
- public static final Map<Key, Type2KeyWord> TYPE2_VOCABULARY;
+ private static final Map<Key, Type1KeyWord> BY_KEY = new HashMap<>();
+
+ static
+ {
+ for (Type1KeyWord e : values())
+ {
+ BY_KEY.put(e.key, e);
+ }
+ }
+
+ public static Type1KeyWord valueOfKey(Key key)
+ {
+ return BY_KEY.get(key);
+ }
+
+ }
/**
* Enum of all valid type2 key words
*/
public enum Type2KeyWord
{
- HSTEM, VSTEM, VMOVETO, RLINETO, HLINETO, VLINETO, RRCURVETO, CALLSUBR, RET, ESCAPE, AND, OR, NOT, ABS, ADD, SUB, DIV, NEG, EQ, DROP, PUT, GET, IFELSE, RANDOM, MUL, SQRT, DUP, EXCH, INDEX, ROLL, HFLEX, FLEX, HFLEX1, FLEX1, ENDCHAR, HSTEMHM, HINTMASK, CNTRMASK, RMOVETO, HMOVETO, VSTEMHM, RCURVELINE, RLINECURVE, VVCURVETO, HHCURVETO, SHORTINT, CALLGSUBR, VHCURVETO, HVCURVETO
- }
-
- static
- {
- Map<Key, Type2KeyWord> map = new LinkedHashMap<>(48);
- map.put(new Key(1), Type2KeyWord.HSTEM);
- map.put(new Key(3), Type2KeyWord.VSTEM);
- map.put(new Key(4), Type2KeyWord.VMOVETO);
- map.put(new Key(5), Type2KeyWord.RLINETO);
- map.put(new Key(6), Type2KeyWord.HLINETO);
- map.put(new Key(7), Type2KeyWord.VLINETO);
- map.put(new Key(8), Type2KeyWord.RRCURVETO);
- map.put(new Key(10), Type2KeyWord.CALLSUBR);
- map.put(new Key(11), Type2KeyWord.RET);
- map.put(new Key(12), Type2KeyWord.ESCAPE);
- map.put(new Key(12, 3), Type2KeyWord.AND);
- map.put(new Key(12, 4), Type2KeyWord.OR);
- map.put(new Key(12, 5), Type2KeyWord.NOT);
- map.put(new Key(12, 9), Type2KeyWord.ABS);
- map.put(new Key(12, 10), Type2KeyWord.ADD);
- map.put(new Key(12, 11), Type2KeyWord.SUB);
- map.put(new Key(12, 12), Type2KeyWord.DIV);
- map.put(new Key(12, 14), Type2KeyWord.NEG);
- map.put(new Key(12, 15), Type2KeyWord.EQ);
- map.put(new Key(12, 18), Type2KeyWord.DROP);
- map.put(new Key(12, 20), Type2KeyWord.PUT);
- map.put(new Key(12, 21), Type2KeyWord.GET);
- map.put(new Key(12, 22), Type2KeyWord.IFELSE);
- map.put(new Key(12, 23), Type2KeyWord.RANDOM);
- map.put(new Key(12, 24), Type2KeyWord.MUL);
- map.put(new Key(12, 26), Type2KeyWord.SQRT);
- map.put(new Key(12, 27), Type2KeyWord.DUP);
- map.put(new Key(12, 28), Type2KeyWord.EXCH);
- map.put(new Key(12, 29), Type2KeyWord.INDEX);
- map.put(new Key(12, 30), Type2KeyWord.ROLL);
- map.put(new Key(12, 34), Type2KeyWord.HFLEX);
- map.put(new Key(12, 35), Type2KeyWord.FLEX);
- map.put(new Key(12, 36), Type2KeyWord.HFLEX1);
- map.put(new Key(12, 37), Type2KeyWord.FLEX1);
- map.put(new Key(14), Type2KeyWord.ENDCHAR);
- map.put(new Key(18), Type2KeyWord.HSTEMHM);
- map.put(new Key(19), Type2KeyWord.HINTMASK);
- map.put(new Key(20), Type2KeyWord.CNTRMASK);
- map.put(new Key(21), Type2KeyWord.RMOVETO);
- map.put(new Key(22), Type2KeyWord.HMOVETO);
- map.put(new Key(23), Type2KeyWord.VSTEMHM);
- map.put(new Key(24), Type2KeyWord.RCURVELINE);
- map.put(new Key(25), Type2KeyWord.RLINECURVE);
- map.put(new Key(26), Type2KeyWord.VVCURVETO);
- map.put(new Key(27), Type2KeyWord.HHCURVETO);
- map.put(new Key(28), Type2KeyWord.SHORTINT);
- map.put(new Key(29), Type2KeyWord.CALLGSUBR);
- map.put(new Key(30), Type2KeyWord.VHCURVETO);
- map.put(new Key(31), Type2KeyWord.HVCURVETO);
-
- TYPE2_VOCABULARY = Collections.unmodifiableMap(map);
+ HSTEM(new Key(1)), VSTEM(new Key(3)), VMOVETO(new Key(4)), RLINETO(new Key(5)), //
+ HLINETO(new Key(6)), VLINETO(new Key(7)), RRCURVETO(new Key(8)), CALLSUBR(new Key(10)), //
+ RET(new Key(11)), ESCAPE(new Key(12)), AND(new Key(12, 3)), OR(new Key(12, 4)), //
+ NOT(new Key(12, 5)), ABS(new Key(12, 9)), ADD(new Key(12, 10)), SUB(new Key(12, 11)), //
+ DIV(new Key(12, 12)), NEG(new Key(12, 14)), EQ(new Key(12, 15)), DROP(new Key(12, 18)), //
+ PUT(new Key(12, 20)), GET(new Key(12, 21)), IFELSE(new Key(12, 22)), //
+ RANDOM(new Key(12, 23)), MUL(new Key(12, 24)), SQRT(new Key(12, 26)), DUP(new Key(12, 27)), //
+ EXCH(new Key(12, 28)), INDEX(new Key(12, 29)), ROLL(new Key(12, 30)), //
+ HFLEX(new Key(12, 34)), FLEX(new Key(12, 35)), HFLEX1(new Key(12, 36)), //
+ FLEX1(new Key(12, 37)), ENDCHAR(new Key(14)), HSTEMHM(new Key(18)), HINTMASK(new Key(19)), //
+ CNTRMASK(new Key(20)), RMOVETO(new Key(21)), HMOVETO(new Key(22)), VSTEMHM(new Key(23)), //
+ RCURVELINE(new Key(24)), RLINECURVE(new Key(25)), VVCURVETO(new Key(26)), //
+ HHCURVETO(new Key(27)), SHORTINT(new Key(28)), CALLGSUBR(new Key(29)), //
+ VHCURVETO(new Key(30)), HVCURVETO(new Key(31));
+
+ final Key key;
+
+ private Type2KeyWord(Key key)
+ {
+ this.key = key;
+ }
+
+ private static final Map<Key, Type2KeyWord> BY_KEY = new HashMap<>();
+
+ static
+ {
+ for (Type2KeyWord e : values())
+ {
+ BY_KEY.put(e.key, e);
+ }
+ }
+
+ public static Type2KeyWord valueOfKey(Key key)
+ {
+ return BY_KEY.get(key);
+ }
}
}
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharString.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharString.java?rev=1883013&r1=1883012&r2=1883013&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharString.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharString.java Sat Oct 31 12:06:33 2020
@@ -161,7 +161,7 @@ public class Type1CharString
private List<Number> handleCommand(List<Number> numbers, CharStringCommand command)
{
commandCount++;
- Type1KeyWord type1KeyWord = CharStringCommand.TYPE1_VOCABULARY.get(command.getKey());
+ Type1KeyWord type1KeyWord = CharStringCommand.Type1KeyWord.valueOfKey(command.getKey());
if (type1KeyWord == null)
{
// indicates an invalid charstring
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharString.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharString.java?rev=1883013&r1=1883012&r2=1883013&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharString.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharString.java Sat Oct 31 12:06:33 2020
@@ -90,7 +90,7 @@ public class Type2CharString extends Typ
private List<Number> handleCommand(List<Number> numbers, CharStringCommand command)
{
commandCount++;
- Type2KeyWord type2KeyWord = CharStringCommand.TYPE2_VOCABULARY.get(command.getKey());
+ Type2KeyWord type2KeyWord = CharStringCommand.Type2KeyWord.valueOfKey(command.getKey());
if (type2KeyWord == null)
{
addCommand(numbers, command);