mirror of
https://github.com/qpdf/qpdf.git
synced 2024-09-28 04:59:05 +00:00
Use QPDFObjGen::set in QPDFPageObjectHelper::getAttribute
This commit is contained in:
parent
8335b2833b
commit
1957ad1e05
@ -246,32 +246,23 @@ QPDFPageObjectHelper::getAttribute(
|
|||||||
std::function<QPDFObjectHandle()> get_fallback,
|
std::function<QPDFObjectHandle()> get_fallback,
|
||||||
bool copy_if_fallback)
|
bool copy_if_fallback)
|
||||||
{
|
{
|
||||||
QPDFObjectHandle result;
|
const bool is_form_xobject = this->oh.isFormXObject();
|
||||||
QPDFObjectHandle dict;
|
|
||||||
bool is_form_xobject = this->oh.isFormXObject();
|
|
||||||
bool inherited = false;
|
bool inherited = false;
|
||||||
if (is_form_xobject) {
|
auto dict = is_form_xobject ? oh.getDict() : oh;
|
||||||
dict = this->oh.getDict();
|
auto result = dict.getKey(name);
|
||||||
result = dict.getKey(name);
|
|
||||||
} else {
|
|
||||||
dict = this->oh;
|
|
||||||
bool inheritable =
|
|
||||||
((name == "/MediaBox") || (name == "/CropBox") ||
|
|
||||||
(name == "/Resources") || (name == "/Rotate"));
|
|
||||||
|
|
||||||
|
if (!is_form_xobject && result.isNull() &&
|
||||||
|
(name == "/MediaBox" || name == "/CropBox" || name == "/Resources" ||
|
||||||
|
name == "/Rotate")) {
|
||||||
QPDFObjectHandle node = dict;
|
QPDFObjectHandle node = dict;
|
||||||
result = node.getKey(name);
|
QPDFObjGen::set seen{};
|
||||||
std::set<QPDFObjGen> seen;
|
while (seen.add(node) && node.hasKey("/Parent")) {
|
||||||
while (inheritable && result.isNull() && node.hasKey("/Parent")) {
|
|
||||||
seen.insert(node.getObjGen());
|
|
||||||
node = node.getKey("/Parent");
|
node = node.getKey("/Parent");
|
||||||
if (seen.count(node.getObjGen())) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
result = node.getKey(name);
|
result = node.getKey(name);
|
||||||
if (!result.isNull()) {
|
if (!result.isNull()) {
|
||||||
QTC::TC("qpdf", "QPDFPageObjectHelper non-trivial inheritance");
|
QTC::TC("qpdf", "QPDFPageObjectHelper non-trivial inheritance");
|
||||||
inherited = true;
|
inherited = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user