pub struct StructTree {
pub elements: Vec<StructElement>,
pub top: Vec<Option<usize>>,
}Expand description
One page’s view of the document’s structure tree.
use pdfrum_common::{Diagnostics, Limits};
use pdfrum_doc::StructTree;
use pdfrum_object::{Dict, Name, NoResolve, Object};
// "Tagged" is `/MarkInfo /Marked` read as a non-zero integer, so a
// Boolean `true` and a written `1` both count.
let catalog = Dict::from_pairs([(
Name::from("MarkInfo"),
Object::Dict(Dict::from_pairs([(Name::from("Marked"), Object::Bool(true))])),
)]);
let (limits, mut diags) = (Limits::default(), Diagnostics::default());
let tree = StructTree::load_page(
&catalog, &Dict::default(), 1, &NoResolve, &limits, &mut diags,
).expect("the document is tagged");
// No `/StructTreeRoot`: a tree, but an empty one.
assert!(tree.elements.is_empty());Fields§
§elements: Vec<StructElement>Every element reached from this page, in discovery order. Kid and parent links are indices into this table.
top: Vec<Option<usize>>The root’s /K slots. Sized from /K, filled only where the upward
walk reached a top-level element, so a None is normal.
Implementations§
Source§impl StructTree
impl StructTree
Sourcepub fn load_page<R: Resolve>(
catalog: &Dict,
page: &Dict,
page_obj_num: u32,
r: &R,
limits: &Limits,
diags: &mut Diagnostics,
) -> Option<StructTree>
pub fn load_page<R: Resolve>( catalog: &Dict, page: &Dict, page_obj_num: u32, r: &R, limits: &Limits, diags: &mut Diagnostics, ) -> Option<StructTree>
Builds the tree for one page, or nothing when the document is not tagged.
“Tagged” is catalog[/MarkInfo][/Marked] read as a non-zero
integer, and a Boolean has an integer reading of zero or one — so
the spec-conforming /Marked true works, and so does a file writing
/Marked 1.
use pdfrum_common::{Diagnostics, Limits};
use pdfrum_doc::StructTree;
use pdfrum_object::{Dict, Name, NoResolve, Object};
// "Tagged" is `/MarkInfo /Marked` read as a non-zero integer, so a
// Boolean `true` and a written `1` both count.
let catalog = Dict::from_pairs([(
Name::from("MarkInfo"),
Object::Dict(Dict::from_pairs([(Name::from("Marked"), Object::Bool(true))])),
)]);
let (limits, mut diags) = (Limits::default(), Diagnostics::default());
let page = Dict::default();
assert!(
StructTree::load_page(&catalog, &page, 1, &NoResolve, &limits, &mut diags).is_some(),
);
// An untagged document has no tree at all -- a different answer from
// an empty one.
assert!(
StructTree::load_page(
&Dict::default(), &page, 1, &NoResolve, &limits, &mut diags,
).is_none(),
);Trait Implementations§
Source§impl Clone for StructTree
impl Clone for StructTree
Source§impl Debug for StructTree
impl Debug for StructTree
Source§impl Default for StructTree
impl Default for StructTree
Source§impl PartialEq for StructTree
impl PartialEq for StructTree
impl StructuralPartialEq for StructTree
Auto Trait Implementations§
impl Freeze for StructTree
impl RefUnwindSafe for StructTree
impl Send for StructTree
impl Sync for StructTree
impl Unpin for StructTree
impl UnsafeUnpin for StructTree
impl UnwindSafe for StructTree
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more