aboutsummaryrefslogtreecommitdiffstats
path: root/askama_parser/src/node.rs
diff options
context:
space:
mode:
authorLibravatar Dirkjan Ochtman <dirkjan@ochtman.nl>2023-07-02 11:18:27 +0200
committerLibravatar Dirkjan Ochtman <dirkjan@ochtman.nl>2023-07-31 10:27:15 +0200
commit1677fd6f57bcbfe1c810b3839bf155b3a0a02b76 (patch)
tree3f98c03924de513b82004e36301ad6f0fa1a3bea /askama_parser/src/node.rs
parent17ee42cb6a49e4bf4f7a61359445d46b1fc3d74c (diff)
downloadaskama-1677fd6f57bcbfe1c810b3839bf155b3a0a02b76.tar.gz
askama-1677fd6f57bcbfe1c810b3839bf155b3a0a02b76.tar.bz2
askama-1677fd6f57bcbfe1c810b3839bf155b3a0a02b76.zip
parser: move helper functions into State impl
Diffstat (limited to 'askama_parser/src/node.rs')
-rw-r--r--askama_parser/src/node.rs63
1 files changed, 31 insertions, 32 deletions
diff --git a/askama_parser/src/node.rs b/askama_parser/src/node.rs
index 5d44162..6a8899f 100644
--- a/askama_parser/src/node.rs
+++ b/askama_parser/src/node.rs
@@ -10,9 +10,8 @@ use nom::sequence::{delimited, pair, preceded, terminated, tuple};
use nom::{error_position, IResult};
use super::{
- bool_lit, char_lit, identifier, keyword, num_lit, path, skip_till, split_ws_parts, str_lit,
- tag_block_end, tag_block_start, tag_comment_end, tag_comment_start, tag_expr_end,
- tag_expr_start, take_content, ws, Expr, State,
+ bool_lit, char_lit, identifier, keyword, num_lit, path, skip_till, split_ws_parts, str_lit, ws,
+ Expr, State,
};
#[derive(Debug, PartialEq)]
@@ -103,7 +102,7 @@ pub struct CondTest<'a> {
}
impl Node<'_> {
- pub(super) fn parse<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Vec<Node<'a>>> {
+ pub(super) fn parse<'i>(i: &'i str, s: &State<'_>) -> IResult<&'i str, Vec<Node<'i>>> {
parse_template(i, s)
}
}
@@ -161,13 +160,13 @@ fn cond_if(i: &str) -> IResult<&str, CondTest<'_>> {
fn cond_block<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Cond<'a>> {
let mut p = tuple((
- |i| tag_block_start(i, s),
+ |i| s.tag_block_start(i),
opt(expr_handle_ws),
ws(keyword("else")),
cut(tuple((
opt(cond_if),
opt(expr_handle_ws),
- |i| tag_block_end(i, s),
+ |i| s.tag_block_end(i),
cut(|i| parse_template(i, s)),
))),
));
@@ -181,12 +180,12 @@ fn block_if<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Node<'a>> {
cond_if,
cut(tuple((
opt(expr_handle_ws),
- |i| tag_block_end(i, s),
+ |i| s.tag_block_end(i),
cut(tuple((
|i| parse_template(i, s),
many0(|i| cond_block(i, s)),
cut(tuple((
- |i| tag_block_start(i, s),
+ |i| s.tag_block_start(i),
opt(expr_handle_ws),
ws(keyword("endif")),
opt(expr_handle_ws),
@@ -203,12 +202,12 @@ fn block_if<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Node<'a>> {
fn match_else_block<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, When<'a>> {
let mut p = tuple((
- |i| tag_block_start(i, s),
+ |i| s.tag_block_start(i),
opt(expr_handle_ws),
ws(keyword("else")),
cut(tuple((
opt(expr_handle_ws),
- |i| tag_block_end(i, s),
+ |i| s.tag_block_end(i),
cut(|i| parse_template(i, s)),
))),
));
@@ -218,13 +217,13 @@ fn match_else_block<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, When<'a>>
fn when_block<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, When<'a>> {
let mut p = tuple((
- |i| tag_block_start(i, s),
+ |i| s.tag_block_start(i),
opt(expr_handle_ws),
ws(keyword("when")),
cut(tuple((
ws(Target::parse),
opt(expr_handle_ws),
- |i| tag_block_end(i, s),
+ |i| s.tag_block_end(i),
cut(|i| parse_template(i, s)),
))),
));
@@ -239,14 +238,14 @@ fn block_match<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Node<'a>> {
cut(tuple((
ws(Expr::parse),
opt(expr_handle_ws),
- |i| tag_block_end(i, s),
+ |i| s.tag_block_end(i),
cut(tuple((
ws(many0(ws(value((), |i| block_comment(i, s))))),
many1(|i| when_block(i, s)),
cut(tuple((
opt(|i| match_else_block(i, s)),
cut(tuple((
- ws(|i| tag_block_start(i, s)),
+ ws(|i| s.tag_block_start(i)),
opt(expr_handle_ws),
ws(keyword("endmatch")),
opt(expr_handle_ws),
@@ -302,9 +301,9 @@ fn block_for<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Node<'a>> {
cut(tuple((
opt(expr_handle_ws),
delimited(
- |i| tag_block_end(i, s),
+ |i| s.tag_block_end(i),
|i| parse_template(i, s),
- |i| tag_block_start(i, s),
+ |i| s.tag_block_start(i),
),
opt(expr_handle_ws),
))),
@@ -322,11 +321,11 @@ fn block_for<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Node<'a>> {
ws(Expr::parse),
opt(if_cond),
opt(expr_handle_ws),
- |i| tag_block_end(i, s),
+ |i| s.tag_block_end(i),
cut(tuple((
|i| parse_loop_content(i, s),
cut(tuple((
- |i| tag_block_start(i, s),
+ |i| s.tag_block_start(i),
opt(expr_handle_ws),
opt(else_block),
ws(keyword("endfor")),
@@ -364,7 +363,7 @@ fn block_block<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Node<'a>> {
opt(expr_handle_ws),
ws(keyword("block")),
cut(tuple((ws(identifier), opt(expr_handle_ws), |i| {
- tag_block_end(i, s)
+ s.tag_block_end(i)
}))),
));
let (i, (pws1, _, (name, nws1, _))) = start(i)?;
@@ -372,7 +371,7 @@ fn block_block<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Node<'a>> {
let mut end = cut(tuple((
|i| parse_template(i, s),
cut(tuple((
- |i| tag_block_start(i, s),
+ |i| s.tag_block_start(i),
opt(expr_handle_ws),
ws(keyword("endblock")),
cut(tuple((opt(ws(keyword(name))), opt(expr_handle_ws)))),
@@ -418,7 +417,7 @@ fn block_macro<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Node<'a>> {
ws(identifier),
opt(ws(parameters)),
opt(expr_handle_ws),
- |i| tag_block_end(i, s),
+ |i| s.tag_block_end(i),
))),
));
let (i, (pws1, _, (name, params, nws1, _))) = start(i)?;
@@ -426,7 +425,7 @@ fn block_macro<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Node<'a>> {
let mut end = cut(tuple((
|i| parse_template(i, s),
cut(tuple((
- |i| tag_block_start(i, s),
+ |i| s.tag_block_start(i),
opt(expr_handle_ws),
ws(keyword("endmacro")),
cut(tuple((opt(ws(keyword(name))), opt(expr_handle_ws)))),
@@ -454,11 +453,11 @@ fn block_macro<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Node<'a>> {
fn block_raw<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Node<'a>> {
let endraw = tuple((
- |i| tag_block_start(i, s),
+ |i| s.tag_block_start(i),
opt(expr_handle_ws),
ws(keyword("endraw")),
opt(expr_handle_ws),
- peek(|i| tag_block_end(i, s)),
+ peek(|i| s.tag_block_end(i)),
));
let mut p = tuple((
@@ -466,7 +465,7 @@ fn block_raw<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Node<'a>> {
ws(keyword("raw")),
cut(tuple((
opt(expr_handle_ws),
- |i| tag_block_end(i, s),
+ |i| s.tag_block_end(i),
consumed(skip_till(endraw)),
))),
));
@@ -509,7 +508,7 @@ fn continue_statement<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Node<'a
fn block_node<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Node<'a>> {
let mut p = tuple((
- |i| tag_block_start(i, s),
+ |i| s.tag_block_start(i),
alt((
block_call,
block_let,
@@ -525,7 +524,7 @@ fn block_node<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Node<'a>> {
|i| break_statement(i, s),
|i| continue_statement(i, s),
)),
- cut(|i| tag_block_end(i, s)),
+ cut(|i| s.tag_block_end(i)),
));
let (i, (_, contents, _)) = p(i)?;
Ok((i, contents))
@@ -551,11 +550,11 @@ fn block_comment_body<'a>(mut i: &'a str, s: &State<'_>) -> IResult<&'a str, &'a
fn block_comment<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Node<'a>> {
let mut p = tuple((
- |i| tag_comment_start(i, s),
+ |i| s.tag_comment_start(i),
cut(tuple((
opt(expr_handle_ws),
|i| block_comment_body(i, s),
- |i| tag_comment_end(i, s),
+ |i| s.tag_comment_end(i),
))),
));
let (i, (_, (pws, tail, _))) = p(i)?;
@@ -573,12 +572,12 @@ fn block_comment<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Node<'a>> {
fn expr_node<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Node<'a>> {
let mut p = tuple((
- |i| tag_expr_start(i, s),
+ |i| s.tag_expr_start(i),
cut(tuple((
opt(expr_handle_ws),
ws(Expr::parse),
opt(expr_handle_ws),
- |i| tag_expr_end(i, s),
+ |i| s.tag_expr_end(i),
))),
));
let (i, (_, (pws, expr, nws, _))) = p(i)?;
@@ -587,7 +586,7 @@ fn expr_node<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Node<'a>> {
fn parse_template<'a>(i: &'a str, s: &State<'_>) -> IResult<&'a str, Vec<Node<'a>>> {
many0(alt((
- complete(|i| take_content(i, s)),
+ complete(|i| s.take_content(i)),
complete(|i| block_comment(i, s)),
complete(|i| expr_node(i, s)),
complete(|i| block_node(i, s)),