///|
fn PdfDocument::pdf_image_indirect_mask_number(
self : PdfDocument,
image : @syntax.PdfObject,
key : @core.PdfName,
) -> Int? {
match self.direct(image) {
PdfDictionary(entries)
| PdfStreamObject({ dictionary: PdfDictionary(entries), .. }) =>
for entry in entries {
if entry.0 == key {
break match entry.1 {
PdfIndirect(number) => Some(number)
_ => None
}
}
} nobreak {
None
}
_ => None
}
}
///|
fn PdfDocument::pdf_image_list_mask(
self : PdfDocument,
resources : @syntax.PdfObject,
page_number : Int,
image : @syntax.PdfObject,
inline : Bool,
entries : Array[PdfImageListEntry],
form_numbers : @hashmap.HashMap[Int, Bool],
) -> (String, Int?) raise @core.PdfError {
match
self.lookup_direct_or_else(
pdf_image_image_mask_key(),
pdf_image_im_key(),
image,
) {
Some(PdfBoolean(true)) => ("ImageMask", None)
_ =>
match self.lookup_direct(pdf_image_mask_key(), image) {
Some(PdfStreamObject(_)) => {
let number = self.pdf_image_indirect_mask_number(
image,
pdf_image_mask_key(),
)
match number {
Some(number) =>
self.pdf_image_collect_xobject(
resources,
page_number,
pdf_image_name("/Mask"),
PdfIndirect(number),
inline,
entries,
form_numbers,
)
None => ()
}
("ExplicitMask", number)
}
Some(_) => ("ColourKeyMask", None)
None =>
match self.lookup_direct(pdf_image_smask_key(), image) {
Some(_) => {
let number = self.pdf_image_indirect_mask_number(
image,
pdf_image_smask_key(),
)
match number {
Some(number) =>
self.pdf_image_collect_xobject(
resources,
page_number,
pdf_image_name("/SMask"),
PdfIndirect(number),
inline,
entries,
form_numbers,
)
None => ()
}
("SMask", number)
}
None =>
match self.lookup_direct(pdf_image_smask_in_data_key(), image) {
Some(_) => ("SMaskInData", None)
None => ("NoMask", None)
}
}
}
}
}