///|
fn PdfDocument::pdf_ua_matterhorn_check_30_001(self : PdfDocument) -> Json? {
for entry in self.parsed_object_entries() {
match
(
self.lookup_direct(pdf_ua_subtype_key(), entry.2),
self.lookup_direct(pdf_ua_matterhorn_ref_key(), entry.2),
) {
(Some(PdfNameObject(subtype)), Some(_)) if subtype ==
pdf_ua_matterhorn_form() => return Some(Json::null())
_ => ()
}
}
None
}
///|
fn PdfDocument::pdf_ua_matterhorn_ops_contain_mcid(
self : PdfDocument,
ops : ArrayView[@content.PdfContentOp],
) -> Bool {
for op in ops {
match op {
Op_BDC(_, properties) =>
if self.lookup_direct(pdf_ua_matterhorn_mcid_key(), properties)
is Some(_) {
return true
}
_ => ()
}
}
false
}
///|
fn PdfDocument::pdf_ua_matterhorn_form_xobject_contains_mcid(
self : PdfDocument,
object_number : Int,
) -> Bool raise @core.PdfError {
let object = self.lookup_object_or_null(object_number)
let resources = self.pdf_ua_matterhorn_stream_resources(object)
let ops = self.parse_content_ops_with_resources(resources, [object])
self.pdf_ua_matterhorn_ops_contain_mcid(ops)
}
///|
fn PdfDocument::pdf_ua_matterhorn_form_xobject_numbers(
self : PdfDocument,
) -> Array[Int] {
self.select_object_numbers(fn(object) {
pdf_ua_matterhorn_is_form_stream(self, object)
})
}
///|
fn PdfDocument::pdf_ua_matterhorn_referenced_mcid_xobjects(
self : PdfDocument,
object_number : Int,
containing_mcids : ArrayView[Int],
) -> Array[Int] {
let references : Array[Int] = []
match
self.lookup_direct(
pdf_ua_matterhorn_resources_key(),
PdfIndirect(object_number),
) {
Some(resources) =>
match self.lookup_direct(pdf_ua_matterhorn_xobject_key(), resources) {
Some(PdfDictionary(entries)) =>
for entry in entries {
match entry.1 {
PdfIndirect(target) =>
if pdf_ua_matterhorn_int_array_contains(
containing_mcids, target,
) {
references.push(target)
}
_ => ()
}
}
_ => ()
}
None => ()
}
references
}
///|
fn PdfDocument::pdf_ua_matterhorn_check_30_002(
self : PdfDocument,
) -> Json? raise @core.PdfError {
let page_numbers = self.page_reference_numbers()
self.replace_inherit(page_numbers)
let form_xobject_numbers = self.pdf_ua_matterhorn_form_xobject_numbers()
let containing_mcids : Array[Int] = []
for number in form_xobject_numbers {
if self.pdf_ua_matterhorn_form_xobject_contains_mcid(number) {
containing_mcids.push(number)
}
}
let seen : Array[Int] = []
for number in form_xobject_numbers {
for
target in self.pdf_ua_matterhorn_referenced_mcid_xobjects(
number, containing_mcids,
) {
if pdf_ua_matterhorn_int_array_contains(seen, target) {
return Some(Json::null())
}
seen.push(target)
}
}
for number in page_numbers {
for
target in self.pdf_ua_matterhorn_referenced_mcid_xobjects(
number, containing_mcids,
) {
if pdf_ua_matterhorn_int_array_contains(seen, target) {
return Some(Json::null())
}
seen.push(target)
}
}
None
}