[poppler] [PATCH 1/6] Tagged-PDF: Accessors in Catalog for the MarkInfo dictionary
Adrian Perez
aperez at igalia.com
Wed May 29 16:47:26 PDT 2013
From: Adrian Perez de Castro <aperez at igalia.com>
---
poppler/Catalog.cc | 45 +++++++++++++++++++++++++++++++++++++++++++++
poppler/Catalog.h | 10 ++++++++++
2 files changed, 55 insertions(+)
diff --git a/poppler/Catalog.cc b/poppler/Catalog.cc
index f49049a..c365e06 100644
--- a/poppler/Catalog.cc
+++ b/poppler/Catalog.cc
@@ -96,6 +96,7 @@ Catalog::Catalog(PDFDoc *docA) {
attrsList = NULL;
kidsIdxList = NULL;
lastCachedPage = 0;
+ markInfo = markInfoNull;
xref->getCatalog(&catDict);
if (!catDict.isDict()) {
@@ -856,6 +857,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 24a3dcf..35b4f87 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
+ int markInfo; // Flags from MarkInfo dictionary
Object outline; // outline dictionary
Object acroForm; // AcroForm dictionary
Object viewerPreferences; // ViewerPreference dictionary
--
1.8.3
More information about the poppler
mailing list