summaryrefslogtreecommitdiff
path: root/library/src/meta
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-12-30 19:40:29 +0100
committerLaurenz <laurmaedje@gmail.com>2022-12-30 20:00:50 +0100
commita6d90c1bf1e9fefa0af04206909a40e112d6bb14 (patch)
treefc16276142f74b9a50102a2e855942f7e2593c25 /library/src/meta
parentf70cea508cd30fa40770ea989fe2a19e715a357b (diff)
Numbering functions
Diffstat (limited to 'library/src/meta')
-rw-r--r--library/src/meta/outline.rs38
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.