///|
fn PdfDocument::pdf_page_resource_entry_count(
self : PdfDocument,
pages : ArrayView[@page.PdfPage],
) -> Int {
let mut count = 0
for resource_key in pdf_page_resource_keys() {
for page in pages {
match self.lookup_direct(resource_key, page.resources) {
Some(PdfDictionary(entries)) => count += entries.length()
_ => ()
}
}
}
count
}
///|
fn PdfDocument::pdf_page_renumber_resource_changes(
self : PdfDocument,
pages : ArrayView[@page.PdfPage],
) -> Array[(@core.PdfName, Int, @core.PdfName, @core.PdfName)] {
let changes : Array[(@core.PdfName, Int, @core.PdfName, @core.PdfName)] = Array(
capacity=self.pdf_page_resource_entry_count(pages),
)
let mut serial = 1
for resource_key in pdf_page_resource_keys() {
for page_index in 0..
for entry in entries {
let (old_name, _) = entry
changes.push(
(
resource_key,
page_index + 1,
old_name,
pdf_page_name("/r" + serial.to_string()),
),
)
serial += 1
}
_ => ()
}
}
}
changes
}
///|
fn pdf_page_renumber_lookup_optional(
changes : ArrayView[(@core.PdfName, Int, @core.PdfName, @core.PdfName)],
resource_key : @core.PdfName,
page_number : Int,
old_name : @core.PdfName,
) -> @core.PdfName? {
for change in changes {
let (change_key, change_page, change_old_name, new_name) = change
if change_key == resource_key &&
change_page == page_number &&
change_old_name == old_name {
break Some(new_name)
}
} nobreak {
None
}
}
///|
fn pdf_page_renumber_lookup(
changes : ArrayView[(@core.PdfName, Int, @core.PdfName, @core.PdfName)],
resource_key : @core.PdfName,
page_number : Int,
old_name : @core.PdfName,
) -> @core.PdfName raise @core.PdfError {
match
pdf_page_renumber_lookup_optional(
changes, resource_key, page_number, old_name,
) {
Some(new_name) => new_name
None => raise DictionaryKeyNotFound(old_name)
}
}