Add first working pipeline of parse -> ast -> instr -> render

Signed-off-by: Marcel Müller <neikos@neikos.email>
This commit is contained in:
Marcel Müller 2026-03-06 11:03:48 +01:00
parent f5050e369e
commit 1ea15f0e49
5 changed files with 234 additions and 6 deletions

View file

@ -285,6 +285,14 @@ impl<'input> TemplateToken<'input> {
source,
}
}
pub fn kind(&self) -> TokenKind {
self.kind
}
pub fn source(&self) -> &'input str {
self.source
}
}
pub fn parse(input: &str) -> Result<ParsedTemplate<'_>, ParseFailure> {
@ -321,6 +329,7 @@ fn parse_interpolate<'input>(
) -> PResult<'input, Vec<TemplateToken<'input>>> {
let prev_whitespace = opt(parse_whitespace).parse_next(input)?;
let left_delim = "{{".map(TemplateToken::left_delim).parse_next(input)?;
let wants_output = opt("=".map(TemplateToken::wants_output)).parse_next(input)?;
let get_tokens = repeat_till(1.., parse_interpolate_token, peek("}}"));
let recover = take_until(0.., "}}").void();
@ -337,6 +346,7 @@ fn parse_interpolate<'input>(
let mut tokens = vec![];
tokens.extend(prev_whitespace);
tokens.push(left_delim);
tokens.extend(wants_output);
tokens.extend(inside_tokens);
tokens.push(right_delim);
tokens.extend(post_whitespace);