poppler/Annot.cc | 5 +---- poppler/Gfx.cc | 22 +++++++--------------- poppler/OptionalContent.cc | 14 +++++++++++--- 3 files changed, 19 insertions(+), 22 deletions(-)
New commits: commit 6ddb51d81b064346dc85d2ae72570a956a184d74 Author: Carlos Garcia Campos <[email protected]> Date: Sun Sep 18 12:59:28 2011 +0200 xpdf303: The spec doesn't say OC must be null or ref diff --git a/poppler/Annot.cc b/poppler/Annot.cc index 2827e75..235120c 100644 --- a/poppler/Annot.cc +++ b/poppler/Annot.cc @@ -1011,9 +1011,6 @@ void Annot::initialize(PDFDoc *docA, Dict *dict) { obj1.free(); dict->lookupNF("OC", &oc); - if (!oc.isRef() && !oc.isNull()) { - error (errSyntaxError, -1, "Annotation OC value not null or dict: {0:d}", oc.getType()); - } } void Annot::getRect(double *x1, double *y1, double *x2, double *y2) const { @@ -1338,7 +1335,7 @@ GBool Annot::isVisible(GBool printing) { // check the OC OCGs *optContentConfig = doc->getCatalog()->getOptContentConfig(); - if (optContentConfig && oc.isRef()) { + if (optContentConfig) { if (! optContentConfig->optContentIsVisible(&oc)) return gFalse; } diff --git a/poppler/Gfx.cc b/poppler/Gfx.cc index ded78c6..70c3b09 100644 --- a/poppler/Gfx.cc +++ b/poppler/Gfx.cc @@ -3988,16 +3988,10 @@ void Gfx::opXObject(Object args[], int numArgs) { } obj1.streamGetDict()->lookupNF("OC", &obj2); - if (obj2.isNull()) { - // No OC entry - so we proceed as normal - } else if (obj2.isRef()) { - if ( catalog->getOptContentConfig() && ! catalog->getOptContentConfig()->optContentIsVisible( &obj2 ) ) { - obj2.free(); - obj1.free(); - return; - } - } else { - error(errSyntaxError, getPos(), "XObject OC value not null or dict: {0:d}", obj2.getType()); + if (catalog->getOptContentConfig() && !catalog->getOptContentConfig()->optContentIsVisible(&obj2)) { + obj2.free(); + obj1.free(); + return; } obj2.free(); @@ -4804,11 +4798,9 @@ void Gfx::opBeginMarkedContent(Object args[], int numArgs) { char* name1 = args[1].getName(); Object markedContent; if ( res->lookupMarkedContentNF( name1, &markedContent ) ) { - if ( markedContent.isRef() ) { - bool visible = contentConfig->optContentIsVisible( &markedContent ); - MarkedContentStack *mc = mcStack; - mc->ocSuppressed = !(visible); - } + bool visible = contentConfig->optContentIsVisible(&markedContent); + MarkedContentStack *mc = mcStack; + mc->ocSuppressed = !(visible); } else { error(errSyntaxError, getPos(), "DID NOT find {0:s}", name1); } commit 434bb9b38319edc7282be22044bd7761403a38a6 Author: Carlos Garcia Campos <[email protected]> Date: Sun Sep 18 12:45:12 2011 +0200 xpdf303: OC entry can be an optional content group too Not only an optional content membership dictionary. diff --git a/poppler/OptionalContent.cc b/poppler/OptionalContent.cc index 6badf54..8e22468 100644 --- a/poppler/OptionalContent.cc +++ b/poppler/OptionalContent.cc @@ -178,6 +178,16 @@ bool OCGs::optContentIsVisible( Object *dictRef ) Object policy; Object ve; bool result = true; + + if (dictRef->isNull()) + return result; + + if (dictRef->isRef()) { + OptionalContentGroup *oc = findOcgByRef(dictRef->getRef()); + if (oc) + return oc->getState() == OptionalContentGroup::On; + } + dictRef->fetch( m_xref, &dictObj ); if ( ! dictObj.isDict() ) { error(errSyntaxWarning, -1, "Unexpected oc reference target: {0:d}", dictObj.getType() ); commit 56410b80fdabb99e2de0c6589de6ee745936c523 Author: Carlos Garcia Campos <[email protected]> Date: Sun Sep 18 12:44:02 2011 +0200 xpdf303: Not finding an oc group is not necessarily a syntax error diff --git a/poppler/OptionalContent.cc b/poppler/OptionalContent.cc index b13d897..6badf54 100644 --- a/poppler/OptionalContent.cc +++ b/poppler/OptionalContent.cc @@ -165,8 +165,6 @@ OptionalContentGroup* OCGs::findOcgByRef( const Ref &ref) } } - error(errSyntaxWarning, -1, "Could not find a OCG with Ref ({0:d}:{1:d})", ref.num, ref.gen); - // not found return NULL; } commit 4bb4439450e342479375cb56d10561457475bd13 Author: Carlos Garcia Campos <[email protected]> Date: Sun Sep 18 12:42:15 2011 +0200 xpdf303: Fix check of OptionalContentGroup::getState() We use an enum, not a boolean. diff --git a/poppler/OptionalContent.cc b/poppler/OptionalContent.cc index c564d06..b13d897 100644 --- a/poppler/OptionalContent.cc +++ b/poppler/OptionalContent.cc @@ -243,7 +243,7 @@ GBool OCGs::evalOCVisibilityExpr(Object *expr, int recursion) { } if (expr->isRef()) { if ((ocg = findOcgByRef(expr->getRef()))) { - return ocg->getState(); + return ocg->getState() == OptionalContentGroup::On; } } expr->fetch(m_xref, &expr2); _______________________________________________ poppler mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/poppler
