diff options
Diffstat (limited to 'askama_codegen/src/parser.rs')
-rw-r--r-- | askama_codegen/src/parser.rs | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/askama_codegen/src/parser.rs b/askama_codegen/src/parser.rs index b7a712b..5f3f8c5 100644 --- a/askama_codegen/src/parser.rs +++ b/askama_codegen/src/parser.rs @@ -1,8 +1,12 @@ use nom::{self, IResult}; +pub enum Expr<'a> { + Var(&'a [u8]), +} + pub enum Node<'a> { Lit(&'a [u8]), - Expr(&'a [u8]), + Expr(Expr<'a>), } fn take_content(i: &[u8]) -> IResult<&[u8], Node> { @@ -23,9 +27,11 @@ fn take_content(i: &[u8]) -> IResult<&[u8], Node> { IResult::Done(&i[..0], Node::Lit(&i[..])) } -named!(expr_str, delimited!(tag!("{{"), take_until!("}}"), tag!("}}"))); +named!(expr_var<Expr>, map!(ws!(nom::alphanumeric), Expr::Var)); + +named!(any_expr<Expr>, delimited!(tag!("{{"), expr_var, tag!("}}"))); -named!(expr_node<Node>, map!(expr_str, Node::Expr)); +named!(expr_node<Node>, map!(any_expr, Node::Expr)); named!(parse_template< Vec<Node> >, many1!(alt!(take_content | expr_node))); |