diff --git a/crates/typst/src/introspection/counter.rs b/crates/typst/src/introspection/counter.rs index 16403320a..7b0736818 100644 --- a/crates/typst/src/introspection/counter.rs +++ b/crates/typst/src/introspection/counter.rs @@ -284,12 +284,9 @@ impl Counter { } } - if let Some(update) = match elem.to::() { - Some(elem) => Some(elem.update().clone()), - None => match elem.with::() { - Some(countable) => countable.update().clone(), - None => Some(CounterUpdate::Step(NonZeroUsize::ONE)), - }, + if let Some(update) = match elem.with::() { + Some(countable) => countable.update(), + None => Some(CounterUpdate::Step(NonZeroUsize::ONE)), } { state.update(&mut vt, update)?; } @@ -647,7 +644,7 @@ impl Show for DisplayElem { } /// Executes an update of a counter. -#[elem(Locatable, Show)] +#[elem(Locatable, Show, Count)] struct UpdateElem { /// The key that identifies the counter. #[required] @@ -665,6 +662,12 @@ impl Show for UpdateElem { } } +impl Count for UpdateElem { + fn update(&self) -> Option { + Some(self.update.clone()) + } +} + /// An specialized handler of the page counter that tracks both the physical /// and the logical page counter. #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]