Browse Source

reserved words are really only for tags, not for variables at all (close #194, ref #177).

Andreas Stenius 10 years ago
parent
commit
48b256abd9
3 changed files with 17 additions and 5 deletions
  1. 9 4
      src/erlydtl_scanner.erl
  2. 1 0
      src/erlydtl_scanner.slex
  3. 7 1
      test/erlydtl_test_defs.erl

+ 9 - 4
src/erlydtl_scanner.erl

@@ -36,7 +36,7 @@
 %%%-------------------------------------------------------------------
 %%%-------------------------------------------------------------------
 -module(erlydtl_scanner).
 -module(erlydtl_scanner).
 
 
-%% This file was generated 2014-06-29 19:46:00 UTC by slex 0.2.1-2-g7814678.
+%% This file was generated 2014-12-16 17:54:22 UTC by slex 0.2.1-2-g7814678.
 %% http://github.com/erlydtl/slex
 %% http://github.com/erlydtl/slex
 -slex_source(["src/erlydtl_scanner.slex"]).
 -slex_source(["src/erlydtl_scanner.slex"]).
 
 
@@ -350,7 +350,7 @@ scan(" " ++ T, S, {R, C} = P,
      {in_verbatim_code, E} = St) ->
      {in_verbatim_code, E} = St) ->
     {Tag, Backtrack} = E,
     {Tag, Backtrack} = E,
     scan(T, S, {R, C + 1},
     scan(T, S, {R, C + 1},
-	 {in_verbatim_code, {Tag, [$  | Backtrack]}});
+	 {in_verbatim_code, {Tag, [$\s | Backtrack]}});
 scan("endverbatim%}" ++ T, S, {R, C} = P,
 scan("endverbatim%}" ++ T, S, {R, C} = P,
      {in_verbatim_code, E} = St)
      {in_verbatim_code, E} = St)
     when element(1, E) =:= undefined ->
     when element(1, E) =:= undefined ->
@@ -366,7 +366,8 @@ scan(" " ++ T, S, {R, C} = P,
     when element(3, E) =:= "" ->
     when element(3, E) =:= "" ->
     {Tag, Backtrack, EndTag} = E,
     {Tag, Backtrack, EndTag} = E,
     scan(T, S, {R, C + 1},
     scan(T, S, {R, C + 1},
-	 {in_endverbatim_code, {Tag, [$  | Backtrack], EndTag}});
+	 {in_endverbatim_code,
+	  {Tag, [$\s | Backtrack], EndTag}});
 scan([H | T], S, {R, C} = P,
 scan([H | T], S, {R, C} = P,
      {in_endverbatim_code, E} = St)
      {in_endverbatim_code, E} = St)
     when H >= $a andalso H =< $z orelse
     when H >= $a andalso H =< $z orelse
@@ -380,7 +381,7 @@ scan(" " ++ T, S, {R, C} = P,
     when element(1, E) =:= element(3, E) ->
     when element(1, E) =:= element(3, E) ->
     {Tag, Backtrack, Tag} = E,
     {Tag, Backtrack, Tag} = E,
     scan(T, S, {R, C + 1},
     scan(T, S, {R, C + 1},
-	 {in_endverbatim_code, {Tag, [$  | Backtrack], Tag}});
+	 {in_endverbatim_code, {Tag, [$\s | Backtrack], Tag}});
 scan("%}" ++ T, S, {R, C} = P,
 scan("%}" ++ T, S, {R, C} = P,
      {in_endverbatim_code, E} = St)
      {in_endverbatim_code, E} = St)
     when element(1, E) =:= element(3, E) ->
     when element(1, E) =:= element(3, E) ->
@@ -563,6 +564,10 @@ post_process([{open_tag, _, _} | _],
 post_process([{open_tag, _, _} | _],
 post_process([{open_tag, _, _} | _],
 	     {identifier, _, L} = T, _) ->
 	     {identifier, _, L} = T, _) ->
     is_keyword(open_tag, T);
     is_keyword(open_tag, T);
+post_process([{open_var, _, _} | _],
+	     {identifier, _, L} = T, _) ->
+    setelement(3, T,
+	       begin L1 = lists:reverse(L), L2 = to_atom(L1), L2 end);
 post_process([{'.', _} | _], {identifier, _, L} = T,
 post_process([{'.', _} | _], {identifier, _, L} = T,
 	     _) ->
 	     _) ->
     setelement(3, T,
     setelement(3, T,

+ 1 - 0
src/erlydtl_scanner.slex

@@ -266,6 +266,7 @@ close_tag: to_atom.
 
 
 open_tag identifier, close_tag: expr is_keyword(all, T) end.
 open_tag identifier, close_tag: expr is_keyword(all, T) end.
 open_tag identifier: expr is_keyword(open_tag, T) end.
 open_tag identifier: expr is_keyword(open_tag, T) end.
+open_var identifier: lists reverse, to_atom.
 \. - identifier: lists reverse, to_atom.
 \. - identifier: lists reverse, to_atom.
 identifier, close_tag: expr is_keyword(close_tag, T) end.
 identifier, close_tag: expr is_keyword(close_tag, T) end.
 identifier: expr is_keyword(any, T) end.
 identifier: expr is_keyword(any, T) end.

+ 7 - 1
test/erlydtl_test_defs.erl

@@ -28,7 +28,13 @@ all_test_defs() ->
         [{var1, "foo"}], <<"foo">>},
         [{var1, "foo"}], <<"foo">>},
        {"Variable name is a tag name",
        {"Variable name is a tag name",
         <<"{{ comment }}">>,
         <<"{{ comment }}">>,
-        [{comment, "Nice work!"}], <<"Nice work!">>}
+        [{comment, "Nice work!"}], <<"Nice work!">>},
+       #test{
+          title = "reserved name ok as variable name",
+          source = <<"{{ from }}">>,
+          render_vars = [{from, "test"}],
+          output = <<"test">>
+         }
       ]},
       ]},
      {"comment",
      {"comment",
       [{"comment block is excised",
       [{"comment block is excised",