diff options
| author | +merlan #flirora <uruwi@protonmail.com> | 2024-06-11 05:14:26 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-11 09:14:26 +0000 |
| commit | a10e3324c21daf25fd8e8fc5336aa72718a87e47 (patch) | |
| tree | 420be1032e6e8b070776c9000cbc90a3146a7a86 | |
| parent | 20475ab0bf4f28511064195b71890a3cf5d188a1 (diff) | |
interrupt_styles: Check all potential style matches (#4345)
| -rw-r--r-- | crates/typst/src/realize/behaviour.rs | 6 | ||||
| -rw-r--r-- | crates/typst/src/realize/mod.rs | 9 | ||||
| -rw-r--r-- | tests/ref/issue-4340-set-document-and-page.png | bin | 0 -> 222 bytes | |||
| -rw-r--r-- | tests/suite/layout/page.typ | 8 |
4 files changed, 20 insertions, 3 deletions
diff --git a/crates/typst/src/realize/behaviour.rs b/crates/typst/src/realize/behaviour.rs index de6fb8a0..945d2f2a 100644 --- a/crates/typst/src/realize/behaviour.rs +++ b/crates/typst/src/realize/behaviour.rs @@ -231,7 +231,13 @@ impl<'a> Default for BehavedBuilder<'a> { /// A sequence of elements with associated styles. #[derive(Clone, PartialEq, Hash)] pub struct StyleVec { + /// The elements themselves. elements: EcoVec<Content>, + /// A run-length encoded list of style lists. + /// + /// Each element is a (styles, count) pair. Any elements whose + /// style falls after the end of this list is considered to + /// have an empty style list. styles: EcoVec<(Styles, usize)>, } diff --git a/crates/typst/src/realize/mod.rs b/crates/typst/src/realize/mod.rs index 40e9a9b0..caad222a 100644 --- a/crates/typst/src/realize/mod.rs +++ b/crates/typst/src/realize/mod.rs @@ -220,16 +220,19 @@ impl<'a, 'v, 't> Builder<'a, 'v, 't> { { bail!(span, "document set rules must appear before any content"); } - } else if let Some(Some(span)) = local.interruption::<PageElem>() { + } + if let Some(Some(span)) = local.interruption::<PageElem>() { if self.doc.is_none() { bail!(span, "page configuration is not allowed inside of containers"); } self.interrupt_page(outer, false)?; - } else if local.interruption::<ParElem>().is_some() + } + if local.interruption::<ParElem>().is_some() || local.interruption::<AlignElem>().is_some() { self.interrupt_par()?; - } else if local.interruption::<ListElem>().is_some() + } + if local.interruption::<ListElem>().is_some() || local.interruption::<EnumElem>().is_some() || local.interruption::<TermsElem>().is_some() { diff --git a/tests/ref/issue-4340-set-document-and-page.png b/tests/ref/issue-4340-set-document-and-page.png Binary files differnew file mode 100644 index 00000000..4737d2eb --- /dev/null +++ b/tests/ref/issue-4340-set-document-and-page.png diff --git a/tests/suite/layout/page.typ b/tests/suite/layout/page.typ index c3576ede..f833af59 100644 --- a/tests/suite/layout/page.typ +++ b/tests/suite/layout/page.typ @@ -258,3 +258,11 @@ Default page numbers now. Hi #pagebreak() = Second + +--- issue-4340-set-document-and-page --- +// Test custom page fields being applied on the last page +// if the document has custom fields. +#set document(author: "") +#set page(fill: gray) +text +#pagebreak() |
