From 5594868f8b7a3ca5155804653fc2f2d2fb84a48e Mon Sep 17 00:00:00 2001 From: Laurenz Date: Sat, 25 Sep 2021 23:35:27 +0200 Subject: Prevent paragraph from overflowing due to trailing linebreak --- src/layout/par.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src/layout/par.rs') diff --git a/src/layout/par.rs b/src/layout/par.rs index dc2ce0ef..18a701cd 100644 --- a/src/layout/par.rs +++ b/src/layout/par.rs @@ -218,21 +218,25 @@ impl<'a> ParLayouter<'a> { stack.constraints.max.y.set_min(stack.size.h + line.size.h); stack.finish_region(ctx); } + // If the line does not fit horizontally or we have a mandatory // line break (i.e. due to "\n"), we push the line into the // stack. if mandatory || !stack.regions.current.w.fits(line.size.w) { - stack.push(line); start = end; last = None; + stack.push(line); stack.constraints.min.y = Some(stack.size.h); // If there is a trailing line break at the end of the // paragraph, we want to force an empty line. if mandatory && end == self.bidi.text.len() { - stack.push(LineLayout::new(ctx, &self, end .. end)); - stack.constraints.min.y = Some(stack.size.h); + let line = LineLayout::new(ctx, &self, end .. end); + if stack.regions.current.h.fits(line.size.h) { + stack.push(line); + stack.constraints.min.y = Some(stack.size.h); + } } } else { // Otherwise, the line fits both horizontally and vertically -- cgit v1.2.3