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 2018/03/04 12:38:32 UTC
svn commit: r1825812 - in /pdfbox/trunk: ./
fontbox/src/main/java/org/apache/fontbox/cmap/
fontbox/src/test/java/org/apache/fontbox/cmap/
fontbox/src/test/resources/cmap/
Author: lehmi
Date: Sun Mar 4 12:38:32 2018
New Revision: 1825812
URL: http://svn.apache.org/viewvc?rev=1825812&view=rev
Log:
PDFBOX-4139: replace single value cidranges with a simple mapping, merge consecutive cidranges
Modified:
pdfbox/trunk/ (props changed)
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cmap/CIDRange.java
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cmap/CMap.java
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java
pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMapParser.java
pdfbox/trunk/fontbox/src/test/resources/cmap/CMapTest
Propchange: pdfbox/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Mar 4 12:38:32 2018
@@ -1,3 +1,3 @@
-/pdfbox/branches/2.0:1760418,1761484,1762133,1763609,1779822,1780783,1780789,1782684,1784450,1792784,1795704,1795712,1799081-1799082,1814046,1814285,1814459,1824914
+/pdfbox/branches/2.0:1760418,1761484,1762133,1763609,1779822,1780783,1780789,1782684,1784450,1792784,1795704,1795712,1799081-1799082,1814046,1814285,1814459,1824914,1825811
/pdfbox/branches/no-awt:1618517-1621410
/pdfbox/no-awt:1618514-1618516
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cmap/CIDRange.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cmap/CIDRange.java?rev=1825812&r1=1825811&r2=1825812&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cmap/CIDRange.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cmap/CIDRange.java Sun Mar 4 12:38:32 2018
@@ -25,7 +25,7 @@ class CIDRange
private final char from;
- private final char to;
+ private char to;
private final int cid;
@@ -66,4 +66,23 @@ class CIDRange
return -1;
}
+ /**
+ * Check if the given values represent a consecutive range of the given range. If so, extend the given range instead
+ * of creating a new one.
+ *
+ * @param newFrom start value of the new range
+ * @param newTo end value of the new range
+ * @param newCid start CID value of the range
+ * @return true if the given range was extended
+ */
+ public boolean extend(char newFrom, char newTo, int newCid)
+ {
+ if ((newFrom == to + 1) && (newCid == cid + to - from + 1))
+ {
+ to = newTo;
+ return true;
+ }
+ return false;
+ }
+
}
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cmap/CMap.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cmap/CMap.java?rev=1825812&r1=1825811&r2=1825812&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cmap/CMap.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cmap/CMap.java Sun Mar 4 12:38:32 2018
@@ -218,7 +218,15 @@ public class CMap
*/
void addCIDRange(char from, char to, int cid)
{
- codeToCidRanges.add(new CIDRange(from, to, cid));
+ CIDRange lastRange = null;
+ if (!codeToCidRanges.isEmpty())
+ {
+ lastRange = codeToCidRanges.get(codeToCidRanges.size() - 1);
+ }
+ if (lastRange == null || !lastRange.extend(from, to, cid))
+ {
+ codeToCidRanges.add(new CIDRange(from, to, cid));
+ }
}
/**
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java?rev=1825812&r1=1825811&r2=1825812&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java Sun Mar 4 12:38:32 2018
@@ -296,7 +296,15 @@ public class CMapParser
int mappedCode = (Integer) parseNextToken(cmapStream);
if (startCode.length <= 2 && endCode.length <= 2)
{
- result.addCIDRange((char) start, (char) end, mappedCode);
+ // some CMaps are using CID ranges to map single values
+ if (end == start)
+ {
+ result.addCIDMapping(start, mappedCode);
+ }
+ else
+ {
+ result.addCIDRange((char) start, (char) end, mappedCode);
+ }
}
else
{
Modified: pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMapParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMapParser.java?rev=1825812&r1=1825811&r2=1825812&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMapParser.java (original)
+++ pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMapParser.java Sun Mar 4 12:38:32 2018
@@ -70,6 +70,23 @@ public class TestCMapParser extends Test
int cid3 = 520;
int strCID3 = 0x0208;
assertEquals("CID 520 from cidchar <0208> 520", strCID3, cMap.toCID(cid3));
+
+ int cid4 = 300;
+ int strCID4 = 0x12C;
+ assertEquals("CID 300 from cidrange <0300> <0300> 300", strCID4, cMap.toCID(cid4));
+ }
+
+ public void testIdentity() throws IOException
+ {
+ final String resourceDir = "src/main/resources/org/apache/fontbox/cmap";
+ File inDir = new File(resourceDir);
+
+ CMapParser parser = new CMapParser();
+ CMap cMap = parser.parse(new File(inDir, "Identity-H"));
+
+ assertEquals("Indentity-H CID 65", 65, cMap.toCID(65));
+ assertEquals("Indentity-H CID 12345", 12345, cMap.toCID(12345));
+ assertEquals("Indentity-H CID 0xFFFF", 0xFFFF, cMap.toCID(0xFFFF));
}
/**
Modified: pdfbox/trunk/fontbox/src/test/resources/cmap/CMapTest
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/test/resources/cmap/CMapTest?rev=1825812&r1=1825811&r2=1825812&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/test/resources/cmap/CMapTest (original)
+++ pdfbox/trunk/fontbox/src/test/resources/cmap/CMapTest Sun Mar 4 12:38:32 2018
@@ -40,6 +40,7 @@ endcidchar
2 begincidrange
<0000> <00ff> 0
<0100> <01ff> 256
+<0300> <0300> 300
endcidrange
endcmap