summaryrefslogtreecommitdiff
path: root/src/exec/context.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-02-21 11:43:25 +0100
committerLaurenz <laurmaedje@gmail.com>2021-02-21 11:43:25 +0100
commitde37a056ed3e90d8ba93c4b3a315a8046ef53484 (patch)
tree35701a2b79fe968a9b613cfbf77bc1198046d7b2 /src/exec/context.rs
parent4d42c79b169063f6c8e7603db6777d0e60ff2e0b (diff)
Split pushed text at newlines ✂
Diffstat (limited to 'src/exec/context.rs')
-rw-r--r--src/exec/context.rs21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/exec/context.rs b/src/exec/context.rs
index 5ff55c00..62f50880 100644
--- a/src/exec/context.rs
+++ b/src/exec/context.rs
@@ -9,6 +9,7 @@ use crate::geom::{ChildAlign, Dir, Gen, LayoutDirs, Length, Linear, Sides, Size}
use crate::layout::{
Expansion, Node, NodePad, NodePages, NodePar, NodeSpacing, NodeStack, NodeText, Tree,
};
+use crate::parse::is_newline;
/// The context for execution.
#[derive(Debug)]
@@ -217,7 +218,7 @@ impl<'a> ExecContext<'a> {
}
}
- /// Push a normal space.
+ /// Push a normal word space.
pub fn push_space(&mut self) {
let em = self.state.font.font_size();
self.push(NodeSpacing {
@@ -226,10 +227,20 @@ impl<'a> ExecContext<'a> {
});
}
- /// Push a text node.
- pub fn push_text(&mut self, text: impl Into<String>) {
- let node = self.make_text_node(text.into());
- self.push(node);
+ /// Push text into the context.
+ ///
+ /// The text is split into lines at newlines.
+ pub fn push_text(&mut self, text: &str) {
+ let mut newline = false;
+ for line in text.split_terminator(is_newline) {
+ if newline {
+ self.apply_linebreak();
+ }
+
+ let node = self.make_text_node(line.into());
+ self.push(node);
+ newline = true;
+ }
}
/// Construct a text node from the given string based on the active text