summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohann Birnick <6528009+jbirnick@users.noreply.github.com>2024-08-05 13:02:04 +0200
committerGitHub <noreply@github.com>2024-08-05 11:02:04 +0000
commit211b546e4e4c75caaa6ee31493d52802b898aa2a (patch)
tree24fcdf449af13505743ab21a560fc372764c4dd9
parent9909f12d4f599674055a6d0c775d573d315b89b8 (diff)
Fixes counter stepping behavior (#4631)
Co-authored-by: Laurenz <laurmaedje@gmail.com>
-rw-r--r--crates/typst/src/introspection/counter.rs10
-rw-r--r--tests/ref/outline.pngbin40846 -> 40642 bytes
-rw-r--r--tests/suite/introspection/counter.typ12
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
index 71dd6e1a..c0d22969 100644
--- a/tests/ref/outline.png
+++ b/tests/ref/outline.png
Binary files differ
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))