summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/library/layout/page.rs5
-rw-r--r--src/model/content.rs8
-rw-r--r--tests/ref/layout/pagebreak.pngbin2115 -> 8640 bytes
-rw-r--r--tests/typ/layout/pagebreak.typ26
4 files changed, 31 insertions, 8 deletions
diff --git a/src/library/layout/page.rs b/src/library/layout/page.rs
index 13583f09..38ba53e9 100644
--- a/src/library/layout/page.rs
+++ b/src/library/layout/page.rs
@@ -164,8 +164,9 @@ pub struct PagebreakNode;
#[node]
impl PagebreakNode {
- fn construct(_: &mut Context, _: &mut Args) -> TypResult<Content> {
- Ok(Content::Pagebreak)
+ fn construct(_: &mut Context, args: &mut Args) -> TypResult<Content> {
+ let soft = args.named("soft")?.unwrap_or(false);
+ Ok(Content::Pagebreak(soft))
}
}
diff --git a/src/model/content.rs b/src/model/content.rs
index 4077f696..04d5fc5f 100644
--- a/src/model/content.rs
+++ b/src/model/content.rs
@@ -63,7 +63,7 @@ pub enum Content {
/// An item in an ordered list.
Enum(ListItem),
/// A page break.
- Pagebreak,
+ Pagebreak(bool),
/// A page node.
Page(PageNode),
/// A node that can be realized with styles.
@@ -262,7 +262,7 @@ impl Debug for Content {
f.write_str(". ")?;
item.body.fmt(f)
}
- Self::Pagebreak => f.pad("Pagebreak"),
+ Self::Pagebreak(soft) => write!(f, "Pagebreak({soft})"),
Self::Page(page) => page.fmt(f),
Self::Show(node) => {
f.write_str("Show(")?;
@@ -463,8 +463,8 @@ impl<'a> Builder<'a> {
staged: vec![],
});
}
- Content::Pagebreak => {
- self.finish_page(ctx, true, true, styles)?;
+ Content::Pagebreak(soft) => {
+ self.finish_page(ctx, !soft, !soft, styles)?;
}
Content::Page(page) => {
self.finish_page(ctx, false, false, styles)?;
diff --git a/tests/ref/layout/pagebreak.png b/tests/ref/layout/pagebreak.png
index 293e1b06..741ed50f 100644
--- a/tests/ref/layout/pagebreak.png
+++ b/tests/ref/layout/pagebreak.png
Binary files differ
diff --git a/tests/typ/layout/pagebreak.typ b/tests/typ/layout/pagebreak.typ
index 005ca244..df3b0423 100644
--- a/tests/typ/layout/pagebreak.typ
+++ b/tests/typ/layout/pagebreak.typ
@@ -2,18 +2,29 @@
---
// Just a pagebreak.
-// Should result in two auto-sized pages.
+// Should result in two pages.
#pagebreak()
---
// Pagebreak, empty with styles and then pagebreak
-// Should result in one auto-sized page and two conifer-colored A11 pages.
+// Should result in one auto-sized page and two conifer-colored 2cm wide pages.
#pagebreak()
#set page(width: 2cm, fill: conifer)
#pagebreak()
---
+// Two text bodies separated with and surrounded by soft pagebreaks.
+// Should result in two aqua-colored pages.
+#set page(fill: aqua)
+#pagebreak(soft: true)
+First
+#pagebreak(soft: true)
+Second
+#pagebreak(soft: true)
+
+---
// Test a combination of pagebreaks, styled pages and pages with bodies.
+// Should result in three five pages, with the fourth one being forest-colored.
#set page(width: 80pt, height: 30pt)
[#set page(width: 60pt); First]
#pagebreak()
@@ -21,3 +32,14 @@
Third
#page(height: 20pt, fill: forest)[]
Fif[#set page();th]
+
+---
+// Test hard and soft pagebreak followed by page with body.
+// Should result in three navy-colored pages.
+#set page(fill: navy)
+#set text(fill: white)
+First
+#pagebreak()
+#page[Second]
+#pagebreak(soft: true)
+#page[Third]