You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2023/12/11 14:46:41 UTC

svn commit: r1914539 - /pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharStringParser.java

Author: tilman
Date: Mon Dec 11 14:46:41 2023
New Revision: 1914539

URL: http://svn.apache.org/viewvc?rev=1914539&view=rev
Log:
PDFBOX-5695: DRY refactoring, by Axel Howind

Modified:
    pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharStringParser.java

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=1914539&r1=1914538&r2=1914539&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 Mon Dec 11 14:46:41 2023
@@ -83,12 +83,12 @@ public class Type2CharStringParser
             int b0 = input.readUnsignedByte();
             if (b0 == CALLSUBR && localSubroutineIndexProvided)
             {
-                processCallSubr(globalSubrIndex, localSubrIndex);
-            } 
+                processCallSubr(globalSubrIndex, localSubrIndex, localSubrIndex);
+            }
             else if (b0 == CALLGSUBR && globalSubroutineIndexProvided)
             {
-                processCallGSubr(globalSubrIndex, localSubrIndex);
-            } 
+                processCallSubr(globalSubrIndex, localSubrIndex, globalSubrIndex);
+            }
             else if ( (b0 >= 0 && b0 <= 27) || (b0 >= 29 && b0 <= 31))
             {
                 sequence.add(readCommand(b0, input));
@@ -105,33 +105,14 @@ public class Type2CharStringParser
         return sequence;
     }
 
-    private void processCallSubr(byte[][] globalSubrIndex, byte[][] localSubrIndex)
-            throws IOException
-    {
-        int subrNumber = calculateSubrNumber((Integer) sequence.remove(sequence.size() - 1),
-                localSubrIndex.length);
-        if (subrNumber < localSubrIndex.length)
-        {
-            byte[] subrBytes = localSubrIndex[subrNumber];
-            parseSequence(subrBytes, globalSubrIndex, localSubrIndex);
-            Object lastItem = sequence.get(sequence.size() - 1);
-            if (lastItem instanceof CharStringCommand
-                    && Type2KeyWord.RET == ((CharStringCommand) lastItem).getType2KeyWord())
-            {
-                // remove "return" command
-                sequence.remove(sequence.size() - 1);
-            }
-        }
-    }
-
-    private void processCallGSubr(byte[][] globalSubrIndex, byte[][] localSubrIndex)
+    private void processCallSubr(byte[][] globalSubrIndex, byte[][] localSubrIndex, byte[][] subrIndex)
             throws IOException
     {
         int subrNumber = calculateSubrNumber((Integer) sequence.remove(sequence.size() - 1),
-                globalSubrIndex.length);
-        if (subrNumber < globalSubrIndex.length)
+                subrIndex.length);
+        if (subrNumber < subrIndex.length)
         {
-            byte[] subrBytes = globalSubrIndex[subrNumber];
+            byte[] subrBytes = subrIndex[subrNumber];
             parseSequence(subrBytes, globalSubrIndex, localSubrIndex);
             Object lastItem = sequence.get(sequence.size() - 1);
             if (lastItem instanceof CharStringCommand