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 2022/05/08 17:22:23 UTC
svn commit: r1900706 - in /pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff: CharStringHandler.java Type1CharString.java Type2CharString.java
Author: lehmi
Date: Sun May 8 17:22:23 2022
New Revision: 1900706
URL: http://svn.apache.org/viewvc?rev=1900706&view=rev
Log:
PDFBOX-5143: simplify by removing functional interface
Removed:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CharStringHandler.java
Modified:
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/Type1CharString.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type1CharString.java?rev=1900706&r1=1900705&r2=1900706&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 Sun May 8 17:22:23 2022
@@ -138,15 +138,6 @@ public class Type1CharString
}
/**
- * Returns the Type 1 char string sequence.
- * @return the Type 1 sequence
- */
- public List<Object> getType1Sequence()
- {
- return type1Sequence;
- }
-
- /**
* Renders the Type 1 char string sequence to a GeneralPath.
*/
private void render()
@@ -154,8 +145,19 @@ public class Type1CharString
path = new GeneralPath();
leftSideBearing = new Point2D.Float(0, 0);
width = 0;
- CharStringHandler handler = Type1CharString.this::handleType1Command;
- handler.handleSequence(type1Sequence);
+ List<Number> numbers = new ArrayList<>();
+ type1Sequence.forEach(obj -> {
+ if (obj instanceof CharStringCommand)
+ {
+ List<Number> results = handleType1Command(numbers, (CharStringCommand) obj);
+ numbers.clear();
+ numbers.addAll(results);
+ }
+ else
+ {
+ numbers.add((Number) obj);
+ }
+ });
}
private List<Number> handleType1Command(List<Number> numbers, CharStringCommand command)
@@ -511,6 +513,20 @@ public class Type1CharString
type1Sequence.add(command);
}
+ protected boolean isSequenceEmpty()
+ {
+ return type1Sequence.isEmpty();
+ }
+
+ protected Object getLastSequenceEntry()
+ {
+ if (!type1Sequence.isEmpty())
+ {
+ type1Sequence.get(type1Sequence.size() - 1);
+ }
+ return null;
+ }
+
@Override
public String toString()
{
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=1900706&r1=1900705&r2=1900706&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 Sun May 8 17:22:23 2022
@@ -73,11 +73,22 @@ public class Type2CharString extends Typ
private void convertType1ToType2(List<Object> sequence)
{
pathCount = 0;
- CharStringHandler handler = Type2CharString.this::handleType2Command;
- handler.handleSequence(sequence);
+ List<Number> numbers = new ArrayList<>();
+ sequence.forEach(obj -> {
+ if (obj instanceof CharStringCommand)
+ {
+ List<Number> results = convertType2Command(numbers, (CharStringCommand) obj);
+ numbers.clear();
+ numbers.addAll(results);
+ }
+ else
+ {
+ numbers.add((Number) obj);
+ }
+ });
}
- private List<Number> handleType2Command(List<Number> numbers, CharStringCommand command)
+ private List<Number> convertType2Command(List<Number> numbers, CharStringCommand command)
{
Type2KeyWord type2KeyWord = command.getType2KeyWord();
if (type2KeyWord == null)
@@ -108,7 +119,7 @@ public class Type2CharString extends Typ
break;
case HLINETO:
case VLINETO:
- drawAlternatingLine(numbers, type2KeyWord == Type2KeyWord.HLINETO);
+ addAlternatingLine(numbers, type2KeyWord == Type2KeyWord.HLINETO);
break;
case RRCURVETO:
addCommandList(split(numbers, 6), command);
@@ -134,7 +145,7 @@ public class Type2CharString extends Typ
break;
case HVCURVETO:
case VHCURVETO:
- drawAlternatingCurve(numbers, type2KeyWord == Type2KeyWord.HVCURVETO);
+ addAlternatingCurve(numbers, type2KeyWord == Type2KeyWord.HVCURVETO);
break;
case HFLEX:
if (numbers.size() >= 7)
@@ -200,7 +211,7 @@ public class Type2CharString extends Typ
break;
case HHCURVETO:
case VVCURVETO:
- drawCurve(numbers, type2KeyWord == Type2KeyWord.HHCURVETO);
+ addCurve(numbers, type2KeyWord == Type2KeyWord.HHCURVETO);
break;
default:
addCommand(numbers, command);
@@ -211,7 +222,7 @@ public class Type2CharString extends Typ
private List<Number> clearStack(List<Number> numbers, boolean flag)
{
- if (getType1Sequence().isEmpty())
+ if (isSequenceEmpty())
{
if (flag)
{
@@ -247,15 +258,15 @@ public class Type2CharString extends Typ
private void closeCharString2Path()
{
- CharStringCommand command = pathCount > 0
- ? (CharStringCommand) getType1Sequence().get(getType1Sequence().size() - 1) : null;
+ CharStringCommand command = pathCount > 0 ? (CharStringCommand) getLastSequenceEntry()
+ : null;
if (command != null && command.getType1KeyWord() != Type1KeyWord.CLOSEPATH)
{
addCommand(Collections.<Number> emptyList(), CharStringCommand.COMMAND_CLOSEPATH);
}
}
- private void drawAlternatingLine(List<Number> numbers, boolean horizontal)
+ private void addAlternatingLine(List<Number> numbers, boolean horizontal)
{
while (!numbers.isEmpty())
{
@@ -266,7 +277,7 @@ public class Type2CharString extends Typ
}
}
- private void drawAlternatingCurve(List<Number> numbers, boolean horizontal)
+ private void addAlternatingCurve(List<Number> numbers, boolean horizontal)
{
while (numbers.size() >= 4)
{
@@ -290,7 +301,7 @@ public class Type2CharString extends Typ
}
}
- private void drawCurve(List<Number> numbers, boolean horizontal)
+ private void addCurve(List<Number> numbers, boolean horizontal)
{
while (numbers.size() >= 4)
{