///|
/// Scan a byte view for reconstructed trailer dictionaries.
///
/// The caller supplies parser callbacks because xref-stream trailer extraction
/// depends on higher-level indirect-object parsing outside this package.
pub fn pdf_reader_reconstruction_trailers(
data : BytesView,
include_xref_streams : Bool,
read_trailer_at : (@core.ByteCursor, Int) -> @syntax.PdfObject raise @core.PdfError,
read_xref_stream_trailer_at : (@core.ByteCursor, Int) -> @syntax.PdfObject raise @core.PdfError,
) -> Array[@syntax.PdfObject] {
let trailers : Array[@syntax.PdfObject] = Array(capacity=1)
let cursor = @core.byte_cursor_of_view(data)
for position in 0.. Err(err)
} noraise {
value => Ok(value)
}
match trailer {
Ok(object) => trailers.push(object)
Err(_) => ()
}
} else if include_xref_streams &&
pdf_reader_reconstruction_indirect_header_at(data, position) {
let trailer : Result[@syntax.PdfObject, Error] = try
read_xref_stream_trailer_at(cursor, position)
catch {
err => Err(err)
} noraise {
value => Ok(value)
}
match trailer {
Ok(object) => trailers.push(object)
Err(_) => ()
}
}
}
trailers
}