summaryrefslogtreecommitdiff
path: root/library/src/layout/mod.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-11-28 17:57:16 +0100
committerLaurenz <laurmaedje@gmail.com>2022-11-28 17:57:16 +0100
commit836692e73cff0356e409a9ba5b4887b86809d4ca (patch)
treee174178047c368c66746ee073eea1b3129825479 /library/src/layout/mod.rs
parent989d170dc7318ca3cbaa5b76760eb14f4e6a8605 (diff)
Widow and orphan prevention
Diffstat (limited to 'library/src/layout/mod.rs')
-rw-r--r--library/src/layout/mod.rs13
1 files changed, 4 insertions, 9 deletions
diff --git a/library/src/layout/mod.rs b/library/src/layout/mod.rs
index 3481a6bd..7edc88ad 100644
--- a/library/src/layout/mod.rs
+++ b/library/src/layout/mod.rs
@@ -227,7 +227,7 @@ fn realize_block<'a>(
builder.accept(content, styles)?;
builder.interrupt_par()?;
let (children, shared) = builder.flow.0.finish();
- Ok((FlowNode(children).pack(), shared))
+ Ok((FlowNode(children, false).pack(), shared))
}
/// Builds a document or a flow node from content.
@@ -400,10 +400,10 @@ impl<'a> Builder<'a> {
self.interrupt_par()?;
let Some(doc) = &mut self.doc else { return Ok(()) };
if !self.flow.0.is_empty() || (doc.keep_next && styles.is_some()) {
- let (flow, shared) = mem::take(&mut self.flow).finish();
+ let (flow, shared) = mem::take(&mut self.flow).0.finish();
let styles =
if shared == StyleChain::default() { styles.unwrap() } else { shared };
- let page = PageNode(flow).pack();
+ let page = PageNode(FlowNode(flow, true).pack()).pack();
let stored = self.scratch.content.alloc(page);
self.accept(stored, styles)?;
}
@@ -461,7 +461,7 @@ impl<'a> FlowBuilder<'a> {
return true;
}
- if content.has::<dyn Layout>() {
+ if content.has::<dyn Layout>() || content.is::<ParNode>() {
let is_tight_list = if let Some(node) = content.to::<ListNode>() {
node.tight
} else if let Some(node) = content.to::<EnumNode>() {
@@ -488,11 +488,6 @@ impl<'a> FlowBuilder<'a> {
false
}
-
- fn finish(self) -> (Content, StyleChain<'a>) {
- let (flow, shared) = self.0.finish();
- (FlowNode(flow).pack(), shared)
- }
}
/// Accepts paragraph content.