diff options
Diffstat (limited to 'library/src/meta/counter.rs')
| -rw-r--r-- | library/src/meta/counter.rs | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/library/src/meta/counter.rs b/library/src/meta/counter.rs index d771168d..b1d2e3bd 100644 --- a/library/src/meta/counter.rs +++ b/library/src/meta/counter.rs @@ -335,7 +335,10 @@ impl Counter { /// Get the value of the state at the given location. pub fn at(&self, vt: &mut Vt, location: Location) -> SourceResult<CounterState> { let sequence = self.sequence(vt)?; - let offset = vt.introspector.query_before(self.selector(), location).len(); + let offset = vt + .introspector + .query(&Selector::before(self.selector(), location, true)) + .len(); let (mut state, page) = sequence[offset].clone(); if self.is_page() { let delta = vt.introspector.page(location).get().saturating_sub(page.get()); @@ -359,7 +362,10 @@ impl Counter { /// Get the current and final value of the state combined in one state. pub fn both(&self, vt: &mut Vt, location: Location) -> SourceResult<CounterState> { let sequence = self.sequence(vt)?; - let offset = vt.introspector.query_before(self.selector(), location).len(); + let offset = vt + .introspector + .query(&Selector::before(self.selector(), location, true)) + .len(); let (mut at_state, at_page) = sequence[offset].clone(); let (mut final_state, final_page) = sequence.last().unwrap().clone(); if self.is_page() { @@ -412,11 +418,10 @@ impl Counter { let mut page = NonZeroUsize::ONE; let mut stops = eco_vec![(state.clone(), page)]; - for elem in introspector.query(self.selector()) { + for elem in introspector.query(&self.selector()) { if self.is_page() { - let location = elem.location().unwrap(); let prev = page; - page = introspector.page(location); + page = introspector.page(elem.location().unwrap()); let delta = page.get() - prev.get(); if delta > 0 { @@ -446,7 +451,7 @@ impl Counter { Selector::Elem(UpdateElem::func(), Some(dict! { "counter" => self.clone() })); if let CounterKey::Selector(key) = &self.0 { - selector = Selector::Any(eco_vec![selector, key.clone()]); + selector = Selector::Or(eco_vec![selector, key.clone()]); } selector |
