summaryrefslogtreecommitdiff
path: root/library/src/meta/counter.rs
diff options
context:
space:
mode:
Diffstat (limited to 'library/src/meta/counter.rs')
-rw-r--r--library/src/meta/counter.rs17
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