diff --git a/examples/simple/src/main.rs b/examples/simple/src/main.rs index 46384a0..5709c02 100644 --- a/examples/simple/src/main.rs +++ b/examples/simple/src/main.rs @@ -286,3 +286,15 @@ fn test_page_two() { \n\n\n", ) } + +#[test] +fn test_some_expressions() { + assert_eq!( + r2s(|o| some_expressions(o, "name")), + "

name

\ + \n

name.name

\ + \n

4

\ + \n

name.len()

\ + \n

1

\n" + ) +} diff --git a/examples/simple/templates/some_expressions.rs.html b/examples/simple/templates/some_expressions.rs.html new file mode 100644 index 0000000..0ad9cd1 --- /dev/null +++ b/examples/simple/templates/some_expressions.rs.html @@ -0,0 +1,7 @@ +@(arg: &str) + +

@arg

+

@arg.@arg

+

@arg.len()

+

@(arg).len()

+

@((2_i8 - 3).abs())

@* Note extra parens needed here *@ diff --git a/src/templateexpression.rs b/src/templateexpression.rs index b9e84d2..992331e 100644 --- a/src/templateexpression.rs +++ b/src/templateexpression.rs @@ -125,6 +125,7 @@ pub fn template_expression(input: &[u8]) -> PResult { tag("@"), tag("{"), tag("}"), + tag("("), terminated(alt((tag("if"), tag("for"))), tag(" ")), value(&b""[..], tag("")), )), @@ -193,6 +194,11 @@ pub fn template_expression(input: &[u8]) -> PResult { body, }, )(i), + (i, Some(b"(")) => map(terminated(expression, tag(")")), |expr| { + TemplateExpression::Expression { + expr: expr.to_string(), + } + })(i), (i, Some(b"")) => { map(expression, |expr| TemplateExpression::Expression { expr: expr.to_string(),