diff options
| author | Johann Birnick <6528009+jbirnick@users.noreply.github.com> | 2024-08-05 13:02:04 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-05 11:02:04 +0000 |
| commit | 211b546e4e4c75caaa6ee31493d52802b898aa2a (patch) | |
| tree | 24fcdf449af13505743ab21a560fc372764c4dd9 | |
| parent | 9909f12d4f599674055a6d0c775d573d315b89b8 (diff) | |
Fixes counter stepping behavior (#4631)
Co-authored-by: Laurenz <laurmaedje@gmail.com>
| -rw-r--r-- | crates/typst/src/introspection/counter.rs | 10 | ||||
| -rw-r--r-- | tests/ref/outline.png | bin | 40846 -> 40642 bytes | |||
| -rw-r--r-- | tests/suite/introspection/counter.typ | 12 |
3 files changed, 16 insertions, 6 deletions
diff --git a/crates/typst/src/introspection/counter.rs b/crates/typst/src/introspection/counter.rs index 2aefb68e..b9462e3d 100644 --- a/crates/typst/src/introspection/counter.rs +++ b/crates/typst/src/introspection/counter.rs @@ -685,14 +685,12 @@ impl CounterState { pub fn step(&mut self, level: NonZeroUsize, by: usize) { let level = level.get(); - if self.0.len() >= level { - self.0[level - 1] = self.0[level - 1].saturating_add(by); - self.0.truncate(level); - } - while self.0.len() < level { - self.0.push(1); + self.0.push(0); } + + self.0[level - 1] = self.0[level - 1].saturating_add(by); + self.0.truncate(level); } /// Get the first number of the state. diff --git a/tests/ref/outline.png b/tests/ref/outline.png Binary files differindex 71dd6e1a..c0d22969 100644 --- a/tests/ref/outline.png +++ b/tests/ref/outline.png diff --git a/tests/suite/introspection/counter.typ b/tests/suite/introspection/counter.typ index be17d7e0..0d2be6e2 100644 --- a/tests/suite/introspection/counter.typ +++ b/tests/suite/introspection/counter.typ @@ -104,3 +104,15 @@ At Beta, it was #context { #block(foo()) #block(foo()) #foo() + +--- issue-4626-counter-depth-skip --- +// When we step and skip a level, the levels should be filled with zeros, not +// with ones. +#let c = counter("c") +#context test(c.get(), (0,)) +#c.step(level: 4) +#context test(c.get(), (0, 0, 0, 1)) +#c.step(level: 1) +#context test(c.get(), (1,)) +#c.step(level: 3) +#context test(c.get(), (1, 0, 1)) |
