Commit b2a6eab1 authored by Marco Pesenti Gritti's avatar Marco Pesenti Gritti

2005-09-16 Marco Pesenti Gritti <mpg@redhat.com>

        * poppler/CMap.cc:

        Improvements from xpdf 3.01
parent 3f69f215
2005-09-16 Marco Pesenti Gritti <mpg@redhat.com>
* poppler/CMap.cc:
Improvements from xpdf 3.01
2005-09-16 Marco Pesenti Gritti <mpg@redhat.com> 2005-09-16 Marco Pesenti Gritti <mpg@redhat.com>
* poppler/NameToUnicodeTable.h: * poppler/NameToUnicodeTable.h:
......
...@@ -49,7 +49,7 @@ CMap *CMap::parse(CMapCache *cache, GooString *collectionA, ...@@ -49,7 +49,7 @@ CMap *CMap::parse(CMapCache *cache, GooString *collectionA,
PSTokenizer *pst; PSTokenizer *pst;
char tok1[256], tok2[256], tok3[256]; char tok1[256], tok2[256], tok3[256];
int n1, n2, n3; int n1, n2, n3;
Guint start, end; Guint start, end, code;
if (!(f = globalParams->findCMapFile(collectionA, cMapNameA))) { if (!(f = globalParams->findCMapFile(collectionA, cMapNameA))) {
...@@ -99,6 +99,30 @@ CMap *CMap::parse(CMapCache *cache, GooString *collectionA, ...@@ -99,6 +99,30 @@ CMap *CMap::parse(CMapCache *cache, GooString *collectionA,
} }
} }
pst->getToken(tok1, sizeof(tok1), &n1); pst->getToken(tok1, sizeof(tok1), &n1);
} else if (!strcmp(tok2, "begincidchar")) {
while (pst->getToken(tok1, sizeof(tok1), &n1)) {
if (!strcmp(tok1, "endcidchar")) {
break;
}
if (!pst->getToken(tok2, sizeof(tok2), &n2) ||
!strcmp(tok2, "endcidchar")) {
error(-1, "Illegal entry in cidchar block in CMap");
break;
}
if (!(tok1[0] == '<' && tok1[n1 - 1] == '>' &&
n1 >= 4 && (n1 & 1) == 0)) {
error(-1, "Illegal entry in cidchar block in CMap");
continue;
}
tok1[n1 - 1] = '\0';
if (sscanf(tok1 + 1, "%x", &code) != 1) {
error(-1, "Illegal entry in cidchar block in CMap");
continue;
}
n1 = (n1 - 2) / 2;
cmap->addCIDs(code, code, n1, (CID)atoi(tok2));
}
pst->getToken(tok1, sizeof(tok1), &n1);
} else if (!strcmp(tok2, "begincidrange")) { } else if (!strcmp(tok2, "begincidrange")) {
while (pst->getToken(tok1, sizeof(tok1), &n1)) { while (pst->getToken(tok1, sizeof(tok1), &n1)) {
if (!strcmp(tok1, "endcidrange")) { if (!strcmp(tok1, "endcidrange")) {
...@@ -234,7 +258,7 @@ void CMap::addCIDs(Guint start, Guint end, Guint nBytes, CID firstCID) { ...@@ -234,7 +258,7 @@ void CMap::addCIDs(Guint start, Guint end, Guint nBytes, CID firstCID) {
for (i = nBytes - 1; i >= 1; --i) { for (i = nBytes - 1; i >= 1; --i) {
byte = (start >> (8 * i)) & 0xff; byte = (start >> (8 * i)) & 0xff;
if (!vec[byte].isVector) { if (!vec[byte].isVector) {
error(-1, "Invalid CID (%*x - %*x) in CMap", error(-1, "Invalid CID (%0*x - %0*x) in CMap",
2*nBytes, start, 2*nBytes, end); 2*nBytes, start, 2*nBytes, end);
return; return;
} }
...@@ -243,7 +267,7 @@ void CMap::addCIDs(Guint start, Guint end, Guint nBytes, CID firstCID) { ...@@ -243,7 +267,7 @@ void CMap::addCIDs(Guint start, Guint end, Guint nBytes, CID firstCID) {
cid = firstCID; cid = firstCID;
for (byte = (int)(start & 0xff); byte <= (int)(end & 0xff); ++byte) { for (byte = (int)(start & 0xff); byte <= (int)(end & 0xff); ++byte) {
if (vec[byte].isVector) { if (vec[byte].isVector) {
error(-1, "Invalid CID (%*x - %*x) in CMap", error(-1, "Invalid CID (%0*x - %0*x) in CMap",
2*nBytes, start, 2*nBytes, end); 2*nBytes, start, 2*nBytes, end);
} else { } else {
vec[byte].cid = cid; vec[byte].cid = cid;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment