diff options
author | Adrian Perez de Castro <aperez@igalia.com> | 2013-04-25 09:52:56 +0300 |
---|---|---|
committer | Albert Astals Cid <aacid@kde.org> | 2013-08-17 01:12:48 +0200 |
commit | 402ee8b4e31630a42a0a38db1d39164cc5789f3c (patch) | |
tree | 417a4fb9483243272ceb849742f830bb19995923 | |
parent | c3f953dc87f83ac726f99cb8f1f959c486098391 (diff) |
Tagged-PDF: Accessors in Catalog for the MarkInfo dictionary
-rw-r--r-- | poppler/Catalog.cc | 45 | ||||
-rw-r--r-- | poppler/Catalog.h | 10 |
2 files changed, 55 insertions, 0 deletions
diff --git a/poppler/Catalog.cc b/poppler/Catalog.cc index 6bd511a1..25a89979 100644 --- a/poppler/Catalog.cc +++ b/poppler/Catalog.cc @@ -97,6 +97,7 @@ Catalog::Catalog(PDFDoc *docA) { attrsList = NULL; kidsIdxList = NULL; lastCachedPage = 0; + markInfo = markInfoNull; xref->getCatalog(&catDict); if (!catDict.isDict()) { @@ -857,6 +858,50 @@ Object *Catalog::getStructTreeRoot() return &structTreeRoot; } +Guint Catalog::getMarkInfo() +{ + if (markInfo == markInfoNull) { + markInfo = 0; + + Object catDict; + catalogLocker(); + xref->getCatalog(&catDict); + + if (catDict.isDict()) { + Object markInfoDict; + catDict.dictLookup("MarkInfo", &markInfoDict); + if (markInfoDict.isDict()) { + Object value; + + if (markInfoDict.dictLookup("Marked", &value)->isBool() && value.getBool()) + markInfo |= markInfoMarked; + else if (!value.isNull()) + error(errSyntaxError, -1, "Marked object is wrong type ({0:s})", value.getTypeName()); + value.free(); + + if (markInfoDict.dictLookup("Suspects", &value)->isBool() && value.getBool()) + markInfo |= markInfoSuspects; + else if (!value.isNull()) + error(errSyntaxError, -1, "Suspects object is wrong type ({0:s})", value.getTypeName()); + value.free(); + + if (markInfoDict.dictLookup("UserProperties", &value)->isBool() && value.getBool()) + markInfo |= markInfoUserProperties; + else if (!value.isNull()) + error(errSyntaxError, -1, "UserProperties object is wrong type ({0:s})", value.getTypeName()); + value.free(); + } else if (!markInfoDict.isNull()) { + error(errSyntaxError, -1, "MarkInfo object is wrong type ({0:s})", markInfoDict.getTypeName()); + } + markInfoDict.free(); + } else { + error(errSyntaxError, -1, "Catalog object is wrong type ({0:s})", catDict.getTypeName()); + } + catDict.free(); + } + return markInfo; +} + Object *Catalog::getOutline() { catalogLocker(); diff --git a/poppler/Catalog.h b/poppler/Catalog.h index 24a3dcfb..a89d9aa6 100644 --- a/poppler/Catalog.h +++ b/poppler/Catalog.h @@ -125,6 +125,15 @@ public: // Return the structure tree root object. Object *getStructTreeRoot(); + // Return values from the MarkInfo dictionary as flags in a bitfield. + enum MarkInfoFlags { + markInfoNull = 1 << 0, + markInfoMarked = 1 << 1, + markInfoUserProperties = 1 << 2, + markInfoSuspects = 1 << 3, + }; + Guint getMarkInfo(); + // Find a page, given its object ID. Returns page number, or 0 if // not found. int findPage(int num, int gen); @@ -219,6 +228,7 @@ private: GooString *baseURI; // base URI for URI-type links Object metadata; // metadata stream Object structTreeRoot; // structure tree root dictionary + Guint markInfo; // Flags from MarkInfo dictionary Object outline; // outline dictionary Object acroForm; // AcroForm dictionary Object viewerPreferences; // ViewerPreference dictionary |