///|
fn PdfDocument::pdf_bookmark_import_parse_line(
self : PdfDocument,
line : BytesView,
line_number : Int,
) -> @bookmark.PdfBookmark? raise @core.PdfError {
let line = pdf_bookmark_import_trim_line_end(line)
let index = Ref::{ val: 0, }
pdf_bookmark_import_skip_whitespace(line, index)
if index.val == line.length() {
None
} else {
let level = match pdf_bookmark_import_parse_int(line, index) {
Some(value) => value
None =>
raise SoftError("Bad bookmark file, line " + line_number.to_string())
}
let title = match pdf_bookmark_import_parse_quoted(line, index) {
Some(value) => value
None =>
raise SoftError("Bad bookmark file, line " + line_number.to_string())
}
let page_number = match pdf_bookmark_import_parse_int(line, index) {
Some(value) => value
None =>
raise SoftError("Bad bookmark file, line " + line_number.to_string())
}
let is_open = pdf_bookmark_import_take_open(line, index)
let destination = pdf_bookmark_import_optional_destination(line, index)
Some(
self.pdf_bookmark_import_bookmark(
level, title, page_number, is_open, destination,
),
)
}
}
///|
fn PdfDocument::pdf_bookmark_import_verify(
self : PdfDocument,
bookmarks : ArrayView[@bookmark.PdfBookmark],
) -> Bool raise @core.PdfError {
if bookmarks.length() == 0 {
true
} else if bookmarks[0].level != 0 {
false
} else {
let page_reference_numbers = self.page_reference_numbers()
let page_number_lookup = pdf_page_number_lookup(page_reference_numbers)
let end_page = self.endpage()
let mut last_level = 0
for index in 1..= last_level + 2 ||
bookmark.level < 0 ||
page_number > end_page ||
page_number < 0 {
break false
}
last_level = bookmark.level
} nobreak {
true
}
}
}