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§fn clone(&self) -> StructTree
fn clone(&self) -> StructTree
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for StructTree
impl Debug for StructTree
Source§impl Default for StructTree
impl Default for StructTree
Source§fn default() -> StructTree
fn default() -> StructTree
Returns the “default value” for a type. Read more
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