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);
}