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)
         {