summaryrefslogtreecommitdiff
path: root/library/src/meta
diff options
context:
space:
mode:
Diffstat (limited to 'library/src/meta')
-rw-r--r--library/src/meta/figure.rs18
-rw-r--r--library/src/meta/heading.rs27
-rw-r--r--library/src/meta/link.rs2
-rw-r--r--library/src/meta/outline.rs9
-rw-r--r--library/src/meta/reference.rs13
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);
}
}