From 85db05727b1cfab18480fd4296bd054cec786646 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Mon, 26 Feb 2024 14:39:41 +0100 Subject: [PATCH] Fix fold order for vectors (#3496) --- crates/typst/src/foundations/styles.rs | 12 ++++++------ crates/typst/src/model/enum.rs | 1 - tests/ref/bugs/fold-vector.png | Bin 0 -> 3771 bytes tests/typ/bugs/fold-vector.typ | 20 ++++++++++++++++++++ 4 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 tests/ref/bugs/fold-vector.png create mode 100644 tests/typ/bugs/fold-vector.typ diff --git a/crates/typst/src/foundations/styles.rs b/crates/typst/src/foundations/styles.rs index 30213cfc..7a36c4ca 100644 --- a/crates/typst/src/foundations/styles.rs +++ b/crates/typst/src/foundations/styles.rs @@ -731,16 +731,16 @@ impl Fold for Option { } impl Fold for Vec { - fn fold(mut self, outer: Self) -> Self { - self.extend(outer); - self + fn fold(self, mut outer: Self) -> Self { + outer.extend(self); + outer } } impl Fold for SmallVec<[T; N]> { - fn fold(mut self, outer: Self) -> Self { - self.extend(outer); - self + fn fold(self, mut outer: Self) -> Self { + outer.extend(self); + outer } } diff --git a/crates/typst/src/model/enum.rs b/crates/typst/src/model/enum.rs index 6677913b..4233cf0e 100644 --- a/crates/typst/src/model/enum.rs +++ b/crates/typst/src/model/enum.rs @@ -230,7 +230,6 @@ impl LayoutMultiple for Packed { let mut cells = vec![]; let mut number = self.start(styles); let mut parents = EnumElem::parents_in(styles); - parents.reverse(); let full = self.full(styles); diff --git a/tests/ref/bugs/fold-vector.png b/tests/ref/bugs/fold-vector.png new file mode 100644 index 0000000000000000000000000000000000000000..d8503a8eb9eba77d95ce90f5ea7ca395dce90a9e GIT binary patch literal 3771 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 literal 0 HcmV?d00001 diff --git a/tests/typ/bugs/fold-vector.typ b/tests/typ/bugs/fold-vector.typ new file mode 100644 index 00000000..5d57ad33 --- /dev/null +++ b/tests/typ/bugs/fold-vector.typ @@ -0,0 +1,20 @@ +// Test fold order of vectors. + +--- +#set text(features: (liga: 1)) +#set text(features: (liga: 0)) +fi + +--- +#underline(stroke: aqua + 4pt)[ + #underline[Hello] +] + +--- +#let c = counter("mycounter") +#c.update(1) +#locate(loc => [ + #c.update(2) + #c.at(loc) \ + Second: #locate(loc => c.at(loc)) +])