glib/poppler-action.cc | 2 +- poppler/FontInfo.cc | 4 ++-- poppler/Gfx.cc | 4 ++-- poppler/Object.cc | 4 ++-- poppler/PDFDoc.cc | 18 +++++++++--------- poppler/XRef.cc | 9 +++++++-- poppler/XRef.h | 3 ++- utils/pdfunite.cc | 2 +- 8 files changed, 26 insertions(+), 20 deletions(-)
New commits: commit 4d0cbca6a9ebf92f4947522f56cf9361d4b5314e Author: Albert Astals Cid <[email protected]> Date: Sun Feb 10 16:46:56 2019 +0100 Add an XRef::fetch variant that takes a const Ref makes the code more compact and easier to understand diff --git a/glib/poppler-action.cc b/glib/poppler-action.cc index 7e0bc031..1aa56a79 100644 --- a/glib/poppler-action.cc +++ b/glib/poppler-action.cc @@ -435,7 +435,7 @@ find_annot_movie_for_action (PopplerDocument *document, if (link->hasAnnotRef ()) { const Ref *ref = link->getAnnotRef (); - annotObj = xref->fetch (ref->num, ref->gen); + annotObj = xref->fetch (*ref); } else if (link->hasAnnotTitle ()) { const GooString *title = link->getAnnotTitle (); int i; diff --git a/poppler/FontInfo.cc b/poppler/FontInfo.cc index fe06d87f..cefacad7 100644 --- a/poppler/FontInfo.cc +++ b/poppler/FontInfo.cc @@ -3,7 +3,7 @@ // FontInfo.cc // // Copyright (C) 2005, 2006 Kristian Høgsberg <[email protected]> -// Copyright (C) 2005-2008, 2010, 2017, 2018 Albert Astals Cid <[email protected]> +// Copyright (C) 2005-2008, 2010, 2017-2019 Albert Astals Cid <[email protected]> // Copyright (C) 2005 Brad Hards <[email protected]> // Copyright (C) 2006 Kouhei Sutou <[email protected]> // Copyright (C) 2009 Pino Toscano <[email protected]> @@ -192,7 +192,7 @@ FontInfo::FontInfo(GfxFont *font, XRef *xref) { // look for a ToUnicode map hasToUnicode = false; - Object fontObj = xref->fetch(fontRef.num, fontRef.gen); + Object fontObj = xref->fetch(fontRef); if (fontObj.isDict()) { hasToUnicode = fontObj.dictLookup("ToUnicode").isStream(); } diff --git a/poppler/Gfx.cc b/poppler/Gfx.cc index 8dc2dc93..d9460f2f 100644 --- a/poppler/Gfx.cc +++ b/poppler/Gfx.cc @@ -14,7 +14,7 @@ // under GPL version 2 or later // // Copyright (C) 2005 Jonathan Blandford <[email protected]> -// Copyright (C) 2005-2013, 2015-2018 Albert Astals Cid <[email protected]> +// Copyright (C) 2005-2013, 2015-2019 Albert Astals Cid <[email protected]> // Copyright (C) 2006 Thorkild Stray <[email protected]> // Copyright (C) 2006 Kristian Høgsberg <[email protected]> // Copyright (C) 2006-2011 Carlos Garcia Campos <[email protected]> @@ -505,7 +505,7 @@ Object GfxResources::lookupGState(const char *name) { return item->copy(); } - auto *item = new Object{xref->fetch(ref.num, ref.gen)}; + auto *item = new Object{xref->fetch(ref)}; gStateCache.put(ref, item); return item->copy(); } diff --git a/poppler/Object.cc b/poppler/Object.cc index 3ccf8f42..fca0e42e 100644 --- a/poppler/Object.cc +++ b/poppler/Object.cc @@ -13,7 +13,7 @@ // All changes made under the Poppler project to this file are licensed // under GPL version 2 or later // -// Copyright (C) 2008, 2010, 2012, 2017 Albert Astals Cid <[email protected]> +// Copyright (C) 2008, 2010, 2012, 2017, 2019 Albert Astals Cid <[email protected]> // Copyright (C) 2013 Adrian Johnson <[email protected]> // Copyright (C) 2018 Adam Reichold <[email protected]> // @@ -89,7 +89,7 @@ Object Object::fetch(XRef *xref, int recursion) const { CHECK_NOT_DEAD; return (type == objRef && xref) ? - xref->fetch(ref.num, ref.gen, recursion) : copy(); + xref->fetch(ref, recursion) : copy(); } void Object::free() { diff --git a/poppler/PDFDoc.cc b/poppler/PDFDoc.cc index 6f0dd0e1..822fe613 100644 --- a/poppler/PDFDoc.cc +++ b/poppler/PDFDoc.cc @@ -722,7 +722,7 @@ bool PDFDoc::checkLinearization() { } pageRef.gen = xref->getEntry(pageRef.num)->gen; - Object obj = xref->fetch(pageRef.num, pageRef.gen); + Object obj = xref->fetch(pageRef); if (!obj.isDict("Page")) { linearizationState = 2; return false; @@ -896,7 +896,7 @@ int PDFDoc::savePageAs(const GooString *name, int pageNo) getCatalog()->getPage(pageNo)->getMediaBox(), cropBox); Ref *refPage = getCatalog()->getPageRef(pageNo); - Object page = getXRef()->fetch(refPage->num, refPage->gen); + Object page = getXRef()->fetch(*refPage); if (!(f = openFile(name->c_str(), "wb"))) { error(errIO, -1, "Couldn't open file '{0:t}'", name); @@ -1125,7 +1125,7 @@ void PDFDoc::saveIncrementalUpdate (OutStream* outStr) ref.num = i; ref.gen = xref->getEntry(i)->type == xrefEntryCompressed ? 0 : xref->getEntry(i)->gen; if (xref->getEntry(i)->type != xrefEntryFree) { - Object obj1 = xref->fetch(ref.num, ref.gen, 1); + Object obj1 = xref->fetch(ref, 1 /* recursion */); Goffset offset = writeObjectHeader(&ref, outStr); writeObject(&obj1, outStr, fileKey, encAlgorithm, keyLength, ref.num, ref.gen); writeObjectFooter(outStr); @@ -1203,7 +1203,7 @@ void PDFDoc::saveCompleteRewrite (OutStream* outStr) } else if (type == xrefEntryUncompressed){ ref.num = i; ref.gen = xref->getEntry(i)->gen; - Object obj1 = xref->fetch(ref.num, ref.gen, 1); + Object obj1 = xref->fetch(ref, 1 /* recursion */); Goffset offset = writeObjectHeader(&ref, outStr); // Write unencrypted objects in unencrypted form if (xref->getEntry(i)->getFlag(XRefEntry::Unencrypted)) { @@ -1216,7 +1216,7 @@ void PDFDoc::saveCompleteRewrite (OutStream* outStr) } else if (type == xrefEntryCompressed) { ref.num = i; ref.gen = 0; //compressed entries have gen == 0 - Object obj1 = xref->fetch(ref.num, ref.gen, 1); + Object obj1 = xref->fetch(ref, 1 /* recursion */); Goffset offset = writeObjectHeader(&ref, outStr); writeObject(&obj1, outStr, fileKey, encAlgorithm, keyLength, ref.num, ref.gen); writeObjectFooter(outStr); @@ -1730,7 +1730,7 @@ void PDFDoc::markObject (Object* obj, XRef *xRef, XRef *countRef, unsigned int n if (entry->gen > 9) break; } - Object obj1 = getXRef()->fetch(obj->getRef().num, obj->getRef().gen); + Object obj1 = getXRef()->fetch(obj->getRef()); markObject(&obj1, xRef, countRef, numOffset, oldRefNum, newRefNum); } break; @@ -1744,7 +1744,7 @@ void PDFDoc::replacePageDict(int pageNo, int rotate, const PDFRectangle *cropBox) { Ref *refPage = getCatalog()->getPageRef(pageNo); - Object page = getXRef()->fetch(refPage->num, refPage->gen); + Object page = getXRef()->fetch(*refPage); Dict *pageDict = page.getDict(); pageDict->remove("MediaBoxssdf"); pageDict->remove("MediaBox"); @@ -1818,7 +1818,7 @@ bool PDFDoc::markAnnotations(Object *annotsObj, XRef *xRef, XRef *countRef, unsi } else if (obj2.getRef().num == newPageNum) { continue; } else { - Object page = getXRef()->fetch(obj2.getRef().num, obj2.getRef().gen); + Object page = getXRef()->fetch(obj2.getRef()); if (page.isDict()) { Dict *pageDict = page.getDict(); Object pagetype = pageDict->lookup("Type"); @@ -2093,7 +2093,7 @@ Page *PDFDoc::parsePage(int page) } pageRef.gen = xref->getEntry(pageRef.num)->gen; - Object obj = xref->fetch(pageRef.num, pageRef.gen); + Object obj = xref->fetch(pageRef); if (!obj.isDict("Page")) { error(errSyntaxWarning, -1, "Object ({0:d} {1:d}) is not a pageDict", pageRef.num, pageRef.gen); return nullptr; diff --git a/poppler/XRef.cc b/poppler/XRef.cc index 2541d113..44e7ccac 100644 --- a/poppler/XRef.cc +++ b/poppler/XRef.cc @@ -1072,6 +1072,11 @@ Object XRef::getCatalog() { return catalog; } +Object XRef::fetch(const Ref ref, int recursion) +{ + return fetch(ref.num, ref.gen, recursion); +} + Object XRef::fetch(int num, int gen, int recursion) { XRefEntry *e; Parser *parser; @@ -1635,12 +1640,12 @@ void XRef::markUnencrypted(Object *obj) { } case objRef: { - Ref ref = obj->getRef(); + const Ref ref = obj->getRef(); XRefEntry *e = getEntry(ref.num); if (e->getFlag(XRefEntry::Unencrypted)) return; // We've already been here: prevent infinite recursion e->setFlag(XRefEntry::Unencrypted, true); - obj1 = fetch(ref.num, ref.gen); + obj1 = fetch(ref); markUnencrypted(&obj1); break; } diff --git a/poppler/XRef.h b/poppler/XRef.h index 14b03089..eb8684d3 100644 --- a/poppler/XRef.h +++ b/poppler/XRef.h @@ -14,7 +14,7 @@ // under GPL version 2 or later // // Copyright (C) 2005 Brad Hards <[email protected]> -// Copyright (C) 2006, 2008, 2010-2013, 2017, 2018 Albert Astals Cid <[email protected]> +// Copyright (C) 2006, 2008, 2010-2013, 2017-2019 Albert Astals Cid <[email protected]> // Copyright (C) 2007-2008 Julien Rebetez <[email protected]> // Copyright (C) 2007 Carlos Garcia Campos <[email protected]> // Copyright (C) 2010 Ilya Gorenbein <[email protected]> @@ -143,6 +143,7 @@ public: Object getCatalog(); // Fetch an indirect reference. + Object fetch(const Ref ref, int recursion = 0); Object fetch(int num, int gen, int recursion = 0); // Return the document's Info dictionary (if any). diff --git a/utils/pdfunite.cc b/utils/pdfunite.cc index aa22592f..61613f60 100644 --- a/utils/pdfunite.cc +++ b/utils/pdfunite.cc @@ -287,7 +287,7 @@ int main (int argc, char *argv[]) docs[i]->getCatalog()->getPage(j)->getRotate(), docs[i]->getCatalog()->getPage(j)->getMediaBox(), cropBox); Ref *refPage = docs[i]->getCatalog()->getPageRef(j); - Object page = docs[i]->getXRef()->fetch(refPage->num, refPage->gen); + Object page = docs[i]->getXRef()->fetch(*refPage); Dict *pageDict = page.getDict(); Object *resDict = docs[i]->getCatalog()->getPage(j)->getResourceDictObject(); if (resDict->isDict()) { _______________________________________________ poppler mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/poppler
