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 2024/12/02 09:12:26 UTC

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

Author: tilman
Date: Mon Dec  2 09:12:26 2024
New Revision: 1922254

URL: http://svn.apache.org/viewvc?rev=1922254&view=rev
Log:
PDFBOX-5915: hintmask and cntrmask should handled separately, by Andreas Lehmkühler

Modified:
    pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CharStringCommand.java
    pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharStringParser.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=1922254&r1=1922253&r2=1922254&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 Mon Dec  2 09:12:26 2024
@@ -152,11 +152,6 @@ public enum CharStringCommand
      */
     public static CharStringCommand getInstance(int[] values)
     {
-        if (values[0] == 19 || values[0] == 20)
-        {
-            //TODO store the rest (hintmask and cntrmask) if we ever process these.
-            return getInstance(values[0]);
-        }
         switch (values.length)
         {
         case 1:

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=1922254&r1=1922253&r2=1922254&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  2 09:12:26 2024
@@ -30,8 +30,12 @@ import org.apache.fontbox.cff.CharString
 public class Type2CharStringParser
 {
     // 1-byte commands
-    private static final int CALLSUBR = 10;
-    private static final int CALLGSUBR = 29;
+    private static final int CALLSUBR = CharStringCommand.CALLSUBR.getValue();
+    private static final int CALLGSUBR = CharStringCommand.CALLGSUBR.getValue();
+
+    // not yet supported commands
+    private static final int HINTMASK = CharStringCommand.HINTMASK.getValue();
+    private static final int CNTRMASK = CharStringCommand.CNTRMASK.getValue();
 
     private final String fontName;
 
@@ -79,7 +83,17 @@ public class Type2CharStringParser
             {
                 processCallGSubr(globalSubrIndex, localSubrIndex, glyphData);
             }
-            else if ((b0 >= 0 && b0 <= 27) || (b0 >= 29 && b0 <= 31))
+            else if (b0 == HINTMASK || b0 == CNTRMASK)
+            {
+                int maskLength = getMaskLength(glyphData.hstemCount, glyphData.vstemCount);
+                // drop the following bytes representing the mask as long as we don't support HINTMASK and CNTRMASK
+                for (int i = 0; i < maskLength; i++)
+                {
+                    input.readUnsignedByte();
+                }
+                glyphData.sequence.add(CharStringCommand.getInstance(b0));
+            }
+            else if ((b0 >= 0 && b0 <= 18) || (b0 >= 21 && b0 <= 27) || (b0 >= 29 && b0 <= 31))
             {
                 glyphData.sequence.add(readCommand(b0, input, glyphData));
             }
@@ -163,18 +177,6 @@ public class Type2CharStringParser
             return CharStringCommand.getInstance(b0);
         case 12:
             return CharStringCommand.getInstance(b0, input.readUnsignedByte());
-        case 19:
-        case 20:
-            glyphData.vstemCount += countNumbers(glyphData.sequence) / 2;
-            int[] value = new int[1 + getMaskLength(glyphData.hstemCount, glyphData.vstemCount)];
-            value[0] = b0;
-
-            for (int i = 1; i < value.length; i++)
-            {
-                value[i] = input.readUnsignedByte();
-            }
-
-            return CharStringCommand.getInstance(value);
         default:
             return CharStringCommand.getInstance(b0);
         }