From c393eccd36c7bc69ba340c9fcd2efd916a7b9e43 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Mon, 29 Mar 2021 14:27:17 +0200 Subject: [PATCH] =?UTF-8?q?Fix=20space/newline=20trimming=20=F0=9F=90=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Martin --- src/layout/par.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/layout/par.rs b/src/layout/par.rs index 902ffafa4..6a226fb4d 100644 --- a/src/layout/par.rs +++ b/src/layout/par.rs @@ -5,6 +5,7 @@ use xi_unicode::LineBreakIterator; use super::*; use crate::exec::FontProps; +use crate::parse::is_newline; /// A node that arranges its children into a paragraph. #[derive(Debug, Clone, PartialEq)] @@ -123,8 +124,15 @@ impl ParLayouter { let mut iter = LineBreakIterator::new(&node.text).peekable(); while let Some(&(pos, mandatory)) = iter.peek() { - let part = &node.text[start .. pos].trim_end(); - let frame = shape(part, &mut ctx.env.fonts, &node.props); + let line = &node.text[start .. pos]; + + // Remove trailing newline and spacing at the end of lines. + let mut line = line.trim_end_matches(is_newline); + if pos != node.text.len() { + line = line.trim_end(); + } + + let frame = shape(line, &mut ctx.env.fonts, &node.props); if self.usable().fits(frame.size) { // Still fits into the line.