From 587cfdea530422584fa5e97c049387058e7900b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20M=C3=BCller?= Date: Mon, 9 Mar 2026 13:14:58 +0100 Subject: [PATCH] Add parsing of whitespace trimming MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marcel Müller --- src/parser/mod.rs | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 6c4f857..20f2a14 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -16,6 +16,7 @@ use winnow::combinator::eof; use winnow::combinator::not; use winnow::combinator::opt; use winnow::combinator::peek; +use winnow::combinator::preceded; use winnow::combinator::repeat_till; use winnow::combinator::terminated; use winnow::combinator::trace; @@ -201,6 +202,7 @@ pub enum TokenKind { Content, LeftDelim, RightDelim, + TrimWhitespace, WantsOutput, Ident, Whitespace, @@ -286,6 +288,7 @@ impl TemplateToken { content => TokenKind::Content, left_delim => TokenKind::LeftDelim, right_delim => TokenKind::RightDelim, + trim_whitespace => TokenKind::TrimWhitespace, wants_output => TokenKind::WantsOutput, ident => TokenKind::Ident, whitespace => TokenKind::Whitespace, @@ -344,9 +347,10 @@ fn parse_content<'input>(input: &mut Input<'input>) -> PResult<'input, Vec(input: &mut Input<'input>) -> PResult<'input, Vec> { let prev_whitespace = opt(parse_whitespace).parse_next(input)?; let left_delim = "{{".map(TemplateToken::left_delim).parse_next(input)?; + let left_trim = opt("-".map(TemplateToken::trim_whitespace)).parse_next(input)?; let wants_output = opt("=".map(TemplateToken::wants_output)).parse_next(input)?; - let get_tokens = repeat_till(1.., parse_block_token, peek("}}")); + let get_tokens = repeat_till(1.., parse_block_token, peek(preceded(opt("-"), "}}"))); let recover = take_until(0.., "}}").void(); let (inside_tokens, _): (Vec<_>, _) = get_tokens @@ -357,14 +361,17 @@ fn parse_interpolate<'input>(input: &mut Input<'input>) -> PResult<'input, Vec