diff options
| author | Laurenz <laurmaedje@gmail.com> | 2022-12-30 19:40:29 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2022-12-30 20:00:50 +0100 |
| commit | a6d90c1bf1e9fefa0af04206909a40e112d6bb14 (patch) | |
| tree | fc16276142f74b9a50102a2e855942f7e2593c25 /library/src/meta | |
| parent | f70cea508cd30fa40770ea989fe2a19e715a357b (diff) | |
Numbering functions
Diffstat (limited to 'library/src/meta')
| -rw-r--r-- | library/src/meta/outline.rs | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/library/src/meta/outline.rs b/library/src/meta/outline.rs index c3d17196..4b70666b 100644 --- a/library/src/meta/outline.rs +++ b/library/src/meta/outline.rs @@ -84,7 +84,12 @@ impl OutlineNode { } impl Prepare for OutlineNode { - fn prepare(&self, vt: &mut Vt, mut this: Content, _: StyleChain) -> Content { + fn prepare( + &self, + vt: &mut Vt, + mut this: Content, + _: StyleChain, + ) -> SourceResult<Content> { let headings = vt .locate(Selector::node::<HeadingNode>()) .into_iter() @@ -94,7 +99,7 @@ impl Prepare for OutlineNode { .collect(); this.push_field("headings", Value::Array(Array::from_vec(headings))); - this + Ok(this) } } @@ -151,32 +156,27 @@ impl Show for OutlineNode { // Add hidden ancestors numberings to realize the indent. if indent { - let text = ancestors + let hidden: Vec<_> = ancestors .iter() - .filter_map(|node| match node.field("numbers").unwrap() { - Value::Str(numbering) => { - Some(EcoString::from(numbering) + ' '.into()) - } - _ => None, - }) - .collect::<EcoString>(); - - if !text.is_empty() { - seq.push(HideNode(TextNode::packed(text)).pack()); + .map(|node| node.field("numbers").unwrap()) + .filter(|numbers| *numbers != Value::None) + .map(|numbers| numbers.display() + SpaceNode.pack()) + .collect(); + + if !hidden.is_empty() { + seq.push(HideNode(Content::sequence(hidden)).pack()); seq.push(SpaceNode.pack()); } } // Format the numbering. - let numbering = match node.field("numbers").unwrap() { - Value::Str(numbering) => { - TextNode::packed(EcoString::from(numbering) + ' '.into()) - } - _ => Content::empty(), + let mut start = heading.title.clone(); + let numbers = node.field("numbers").unwrap(); + if numbers != Value::None { + start = numbers.display() + SpaceNode.pack() + start; }; // Add the numbering and section name. - let start = numbering + heading.title.clone(); seq.push(start.linked(Destination::Internal(loc))); // Add filler symbols between the section name and page number. |
