///|
fn PdfDocument::pdf_bookmark_has_outlines(
self : PdfDocument,
) -> Bool raise @core.PdfError {
let root = self.pdf_bookmark_catalog()
self.lookup_direct(pdf_bookmark_outlines_key(), root) is Some(_)
}
///|
fn pdf_bookmark_mark_ancestors(
bookmarks : ArrayView[@bookmark.PdfBookmark],
keep : Array[Bool],
index : Int,
) -> Unit {
let mut wanted_level = bookmarks[index].level - 1
let mut current = index - 1
while current >= 0 && wanted_level >= 0 {
if bookmarks[current].level == wanted_level {
keep[current] = true
wanted_level -= 1
}
current -= 1
}
}
///|
fn PdfDocument::pdf_bookmarks_for_pages(
self : PdfDocument,
page_numbers : ArrayView[Int],
) -> Array[@bookmark.PdfBookmark] raise @core.PdfError {
let bookmarks = self.read_bookmarks(preserve_actions=true)
let page_reference_numbers = self.page_reference_numbers()
let page_number_lookup = pdf_page_number_lookup(page_reference_numbers)
let selected_pages = @core.pdf_number_set(page_numbers)
let keep = [ for _ in bookmarks => false ]
for index in 0..