aboutsummaryrefslogtreecommitdiffstats
path: root/askama_codegen/src/parser.rs
diff options
context:
space:
mode:
Diffstat (limited to 'askama_codegen/src/parser.rs')
-rw-r--r--askama_codegen/src/parser.rs12
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)));