diff options
Diffstat (limited to 'library/src/meta')
| -rw-r--r-- | library/src/meta/figure.rs | 18 | ||||
| -rw-r--r-- | library/src/meta/heading.rs | 27 | ||||
| -rw-r--r-- | library/src/meta/link.rs | 2 | ||||
| -rw-r--r-- | library/src/meta/outline.rs | 9 | ||||
| -rw-r--r-- | library/src/meta/reference.rs | 13 |
5 files changed, 28 insertions, 41 deletions
diff --git a/library/src/meta/figure.rs b/library/src/meta/figure.rs index 4a0ddc68..4f6ccc00 100644 --- a/library/src/meta/figure.rs +++ b/library/src/meta/figure.rs @@ -23,7 +23,7 @@ use crate::text::TextNode; /// /// Display: Figure /// Category: meta -#[node(Synthesize, Show, LocalName)] +#[node(Locatable, Synthesize, Show, LocalName)] pub struct FigureNode { /// The content of the figure. Often, an [image]($func/image). #[required] @@ -57,26 +57,24 @@ impl FigureNode { } impl Synthesize for FigureNode { - fn synthesize(&self, vt: &mut Vt, styles: StyleChain) -> Content { - let my_id = vt.identify(self); + fn synthesize(&mut self, vt: &Vt, styles: StyleChain) { + let my_id = self.0.stable_id().unwrap(); let element = self.element(); - let numbering = self.numbering(styles); let mut number = None; + let numbering = self.numbering(styles); if numbering.is_some() { number = NonZeroUsize::new( 1 + vt - .locate(Selector::node::<Self>()) - .into_iter() + .locate_node::<Self>() .take_while(|&(id, _)| id != my_id) - .filter(|(_, node)| node.to::<Self>().unwrap().element() == element) + .filter(|(_, figure)| figure.element() == element) .count(), ); } - let node = self.clone().with_number(number).with_numbering(numbering).pack(); - let meta = Meta::Node(my_id, node.clone()); - node.styled(MetaNode::set_data(vec![meta])) + self.push_number(number); + self.push_numbering(numbering); } } diff --git a/library/src/meta/heading.rs b/library/src/meta/heading.rs index 47047927..4d1b87e6 100644 --- a/library/src/meta/heading.rs +++ b/library/src/meta/heading.rs @@ -40,7 +40,7 @@ use crate::text::{TextNode, TextSize}; /// /// Display: Heading /// Category: meta -#[node(Synthesize, Show, Finalize, LocalName)] +#[node(Locatable, Synthesize, Show, Finalize, LocalName)] pub struct HeadingNode { /// The logical nesting depth of the heading, starting from one. #[default(NonZeroUsize::new(1).unwrap())] @@ -83,19 +83,16 @@ pub struct HeadingNode { } impl Synthesize for HeadingNode { - fn synthesize(&self, vt: &mut Vt, styles: StyleChain) -> Content { - let my_id = vt.identify(self); + fn synthesize(&mut self, vt: &Vt, styles: StyleChain) { + let my_id = self.0.stable_id().unwrap(); let numbering = self.numbering(styles); let mut counter = HeadingCounter::new(); if numbering.is_some() { // Advance past existing headings. - for (_, node) in vt - .locate(Selector::node::<Self>()) - .into_iter() - .take_while(|&(id, _)| id != my_id) + for (_, heading) in + vt.locate_node::<Self>().take_while(|&(id, _)| id != my_id) { - let heading = node.to::<Self>().unwrap(); if heading.numbering(StyleChain::default()).is_some() { counter.advance(heading); } @@ -105,16 +102,10 @@ impl Synthesize for HeadingNode { counter.advance(self); } - let node = self - .clone() - .with_level(self.level(styles)) - .with_outlined(self.outlined(styles)) - .with_numbers(numbering.is_some().then(|| counter.take())) - .with_numbering(numbering) - .pack(); - - let meta = Meta::Node(my_id, node.clone()); - node.styled(MetaNode::set_data(vec![meta])) + self.push_level(self.level(styles)); + self.push_outlined(self.outlined(styles)); + self.push_numbers(numbering.is_some().then(|| counter.take())); + self.push_numbering(numbering); } } diff --git a/library/src/meta/link.rs b/library/src/meta/link.rs index 4aba3697..bca1945a 100644 --- a/library/src/meta/link.rs +++ b/library/src/meta/link.rs @@ -86,7 +86,7 @@ impl Show for LinkNode { impl Finalize for LinkNode { fn finalize(&self, realized: Content, _: StyleChain) -> Content { realized - .styled(MetaNode::set_data(vec![Meta::Link(self.dest())])) + .linked(self.dest()) .styled(TextNode::set_hyphenate(Hyphenate(Smart::Custom(false)))) } } diff --git a/library/src/meta/outline.rs b/library/src/meta/outline.rs index 81785212..7ce0ce1d 100644 --- a/library/src/meta/outline.rs +++ b/library/src/meta/outline.rs @@ -74,15 +74,14 @@ pub struct OutlineNode { } impl Synthesize for OutlineNode { - fn synthesize(&self, vt: &mut Vt, _: StyleChain) -> Content { + fn synthesize(&mut self, vt: &Vt, _: StyleChain) { let headings = vt - .locate(Selector::node::<HeadingNode>()) - .into_iter() - .map(|(_, node)| node.to::<HeadingNode>().unwrap().clone()) + .locate_node::<HeadingNode>() + .map(|(_, node)| node.clone()) .filter(|node| node.outlined(StyleChain::default())) .collect(); - self.clone().with_headings(headings).pack() + self.push_headings(headings); } } diff --git a/library/src/meta/reference.rs b/library/src/meta/reference.rs index 55f2fc6e..18f0aa3f 100644 --- a/library/src/meta/reference.rs +++ b/library/src/meta/reference.rs @@ -37,9 +37,9 @@ use crate::text::TextNode; /// Category: meta #[node(Synthesize, Show)] pub struct RefNode { - /// The label that should be referenced. + /// The target label that should be referenced. #[required] - pub label: Label, + pub target: Label, /// The prefix before the referenced number. /// @@ -59,20 +59,19 @@ pub struct RefNode { /// ``` pub prefix: Smart<Option<Func>>, - /// All elements with the `target` label in the document. + /// All elements with the target label in the document. #[synthesized] pub matches: Vec<Content>, } impl Synthesize for RefNode { - fn synthesize(&self, vt: &mut Vt, _: StyleChain) -> Content { + fn synthesize(&mut self, vt: &Vt, _: StyleChain) { let matches = vt - .locate(Selector::Label(self.label())) - .into_iter() + .locate(Selector::Label(self.target())) .map(|(_, node)| node.clone()) .collect(); - self.clone().with_matches(matches).pack() + self.push_matches(matches); } } |
