Browse Source

bugfixes, now all tests work again

Roberto Saccon 17 years ago
parent
commit
338b7b3b24

+ 30 - 22
src/erlydtl/erlydtl_base.erl

@@ -86,22 +86,14 @@ parse(File) ->
 parse_transform({var, Line, Val}, Var, Val) when is_atom(Var) ->
 parse_transform({var, Line, Val}, Var, Val) when is_atom(Var) ->
     io:format("TRACE ~p:~p var_parse_transform1atom: ~p~n",[?MODULE, ?LINE, "Val"]),
     io:format("TRACE ~p:~p var_parse_transform1atom: ~p~n",[?MODULE, ?LINE, "Val"]),
     {var, Line, Var}.
     {var, Line, Var}.
-    
 
 
-parse_transform({block, _, Name, [nil, Block]}, #dtl{buffer = Buffer} = Dtl) ->
-	case lists:keysearch(Name, 3, Buffer) of
-		false -> 
-            parse_transform(Block, Dtl);
-		{value, {_, _, _, [H | T]}} -> 
-		    {_, Buffer1, Args1, Props1} = build_tree2(H, T, Dtl),
-            parse_transform(lists:reverse(Buffer1), Dtl#dtl{args = Args1, props = Props1})
- 	end;
-parse_transform(Other, #dtl{args = Args}) ->    
-    {Other, Args};                
+                                               
 parse_transform({tree, variable, _, Var}, Args) ->
 parse_transform({tree, variable, _, Var}, Args) ->
+    %% io:format("TRACE ~p:~p var_parse_transform2 ~p~n",[?MODULE, ?LINE, "variable"]),
     Var2 = list_to_atom(tl(atom_to_list(Var))),
     Var2 = list_to_atom(tl(atom_to_list(Var))),
     binary_string(proplists:get_value(Var2, Args));      
     binary_string(proplists:get_value(Var2, Args));      
 parse_transform(Other, _) ->    
 parse_transform(Other, _) ->    
+    %% io:format("TRACE ~p:~p var_parse_transform2 ~p~n",[?MODULE, ?LINE, "Other"]),
     Other.
     Other.
         
         
 
 
@@ -135,18 +127,33 @@ new_var(List, Acc) ->
 %%====================================================================
 %%====================================================================
 %% Internal functions
 %% Internal functions
 %%====================================================================
 %%====================================================================
-build_tree2(nil, [{extends, Line, Name}], #dtl{doc_root = DocRoot, ext = Ext} = Dtl) ->
+build_tree2(nil, [{extends, Line, Name}], Dtl) ->
+    #dtl{buffer = Buffer, doc_root = DocRoot, ext = Ext} = Dtl,
     case parse(filename:join([DocRoot, Name])) of
     case parse(filename:join([DocRoot, Name])) of
-        {ok, ParentAst} ->
-		    [H|T] = ParentAst,
-			{_, Buffer1, Args1, _} = build_tree(H, T, DocRoot, Ext),			 
-			{Buffer2, Args3} = lists:foldl(fun(X, {AccBuffer, AccArgs}) ->  
-                    {Buffer3, Args4} = parse_transform(X, Dtl#dtl{args = AccArgs, var = []}),           
-                    {[Buffer3 | AccBuffer], Args4}
+        {ok, [AstH | AstT]} ->
+			{_, BaseBuffer, BaseArgs, _} = build_tree(AstH, AstT, DocRoot, Ext),			 
+			{Buffer1, Args1} = lists:foldl(fun(X, {AccBuffer, AccArgs}) ->   
+                    case X of
+                        {block, _, BlockName, _} ->
+                            case lists:keysearch(BlockName, 3, Buffer) of
+                        		{value, {block, _, BlockName, [H | T]}} ->
+                        		    {_, Buffer2, Args2, _Props2} = build_tree(H, T, Ext),
+                        		    Buffer3 = [lists:reverse(Buffer2), AccBuffer],
+                        		    Args3 = [Args2, AccArgs],
+                        		    {lists:flatten(Buffer3), lists:flatten(Args3)};
+                        		_ ->
+                            	    io:format("TRACE ~p:~p wrong-block: ~p~n~n",[?MODULE, ?LINE, X]),
+                            	    % create error message
+                            	    {AccBuffer, AccArgs}                        		     
+                            end;
+                        _ ->
+                            io:format("TRACE ~p:~p other-not-block: ~p~n~n",[?MODULE, ?LINE, X]),
+                            {[X | AccBuffer], AccArgs}
+                    end
                 end, 
                 end, 
-                {[], Args1}, 
-                Buffer1),		   
-		    {inherited, lists:reverse(lists:flatten([Buffer2])), lists:flatten(Args3), []};
+                {[], BaseArgs}, 
+                BaseBuffer),           		   
+		    {inherited, lists:reverse(lists:flatten([Buffer1])), lists:flatten(Args1), []};
 	    {error, _} ->
 	    {error, _} ->
 		     {error, {extends, Line, "file not found"}}		
 		     {error, {extends, Line, "file not found"}}		
     end;
     end;
@@ -269,4 +276,5 @@ handle_tag(TagName, Line, TagArgs, Acc0, Ext) ->
   
   
     
     
 binary_string(String) ->
 binary_string(String) ->
-    erl_syntax:binary([erl_syntax:binary_field(erl_syntax:integer(X)) || X <- String]).
+    % erl_syntax:binary([erl_syntax:binary_field(erl_syntax:integer(X)) || X <- String]).
+    erl_syntax:string(String).

+ 2 - 2
src/erlydtl/erlydtl_parser.erl

@@ -3,8 +3,8 @@
 -file("src/erlydtl/erlydtl_parser.yrl", 68).
 -file("src/erlydtl/erlydtl_parser.yrl", 68).
 
 
 string({_, String}) ->
 string({_, String}) ->
-    erl_syntax:binary([erl_syntax:binary_field(erl_syntax:integer(X)) || X <- String]).
-
+    %erl_syntax:binary([erl_syntax:binary_field(erl_syntax:integer(X)) || X <- String]).
+    erl_syntax:string(String).
 
 
 var({_, Line, Var}) ->
 var({_, Line, Var}) ->
     case string:tokens(Var, ".") of
     case string:tokens(Var, ".") of

+ 3 - 2
src/erlydtl/erlydtl_parser.yrl

@@ -68,8 +68,9 @@ Element -> for Elements endfor : for('$1', '$2').
 Erlang code.
 Erlang code.
 
 
 string({_, String}) ->
 string({_, String}) ->
-    erl_syntax:binary([erl_syntax:binary_field(erl_syntax:integer(X)) || X <- String]).
-
+    %erl_syntax:binary([erl_syntax:binary_field(erl_syntax:integer(X)) || X <- String]).
+    erl_syntax:string(String).
+    
 
 
 var({_, Line, Var}) ->
 var({_, Line, Var}) ->
     case string:tokens(Var, ".") of
     case string:tokens(Var, ".") of

+ 2 - 198
src/erlydtl/erlydtl_server.erl

@@ -206,6 +206,7 @@ create_module(List, Args, Module, Function, Reload) ->
     [ModAST, CmpAST] = [erl_syntax:attribute(erl_syntax:atom(X), [erl_syntax:atom(Y)]) ||
     [ModAST, CmpAST] = [erl_syntax:attribute(erl_syntax:atom(X), [erl_syntax:atom(Y)]) ||
         {X, Y} <- [{"module", Module}, {"compile", "export_all"}]],
         {X, Y} <- [{"module", Module}, {"compile", "export_all"}]],
     Forms = [erl_syntax:revert(X) || X <- [ModAST, CmpAST, FuncAST]],
     Forms = [erl_syntax:revert(X) || X <- [ModAST, CmpAST, FuncAST]],
+%io:format("TRACE ~p:~p Forms: ~p~n",[?MODULE, ?LINE, Forms]),
     case compile:forms(Forms) of
     case compile:forms(Forms) of
         {ok, Module1, Bin} ->
         {ok, Module1, Bin} ->
             case erlydtl:write_beam(Module1, Bin, "ebin") of
             case erlydtl:write_beam(Module1, Bin, "ebin") of
@@ -226,201 +227,4 @@ create_module(List, Args, Module, Function, Reload) ->
             end;
             end;
         _ ->
         _ ->
             {error, "compilation failed"}
             {error, "compilation failed"}
-    end.    
-     
-     
-     
-     
-     
-    
-     
- 
-%% build_tree(nil, [{extends, _Line, Name}], Out, Args, RelDir, Ext, _, _) -> 
-%%     case parse(filename:join([RelDir, Name])) of
-%%         {ok, ParentAst} ->
-%%          [H|T]=ParentAst,
-%%          {_, List, Args1, _} = build_tree(H, T, [], [], RelDir, Ext, [], []),             
-%%          {List3, Args3} = lists:foldl(fun(X, {List2, Args2}) -> 
-%%                     {List4, Args4} = parse_transform(X, Out, Args2, Ext, [],[]),           
-%%                     {[List4 | List2], Args4}
-%%                 end, 
-%%                 {[], Args1}, 
-%%                 List),          
-%%          {inherited, lists:reverse(lists:flatten([List3])), lists:flatten(Args3), []};
-%%      {error, Msg} ->
-%%           io:format("TRACE ~p:~p Parent Parser failure: ~p~n",[?MODULE, ?LINE, Name]),
-%%           {regular, Out, Args, []}           
-%%     end;
-%%     
-%% build_tree(nil, [{var, Line, Var}], Out, Args, DocRoot, Ext, Var, Rec) ->
-%%     {regular, [erl_syntax:variable(Var) | Out], Args, Rec};
-%% 
-%% build_tree(nil, [{var, Line, Ns, Var}], Out, Args, DocRoot, Ext, Ns, Rec) ->
-%%     Var1 = lists:concat([Ns, ".", Var]),
-%%     Rec1 = [list_to_atom(Var1) | Rec],
-%%     {regular, [erl_syntax:variable(Var1) | Out], Args, Rec1};
-%%          
-%% build_tree(nil, [{var, Line, Var}], Out, Args, _, _, _, Rec)  ->
-%%     case lists:member(Var, Args) of
-%%         true ->
-%%             {regular, [{var, Line, Var} | Out], Args, Rec};
-%%         _ ->
-%%             {regular, [{var, Line, Var} | Out], [Var | Args], Rec} 
-%%     end;    
-%%     
-%% build_tree(nil, [{tag, _Line, TagName, TagArgs}], Out, Args, _, Ext, _, Rec) ->
-%%     Out2 = load_tag(TagName, TagArgs, Out, default, Ext),    
-%%     {regular, Out2, Args, Rec};
-%%     
-%% build_tree(nil, [{for, _Line, It, Var, [HFor | TFor]}], Out, Args, _, Ext, _, Rec) -> 
-%%     {_, List1, Args1, Rec1} = build_tree(HFor, TFor, [], Args, undefined, Ext, It, []),  
-%%     Args2 = case lists:member(Var, Args1) of
-%%         true ->
-%%             Args1;
-%%         _ ->
-%%             [Var | Args1]
-%%  end,  
-%%  ItAST = erl_syntax:variable(It),
-%%     Out1 = case Rec1 of
-%%         [] ->
-%%             BodyAST = erl_syntax:generator(ItAST, erl_syntax:variable(Var)),  
-%%             erl_syntax:list_comp(erl_syntax:list(List1), [BodyAST]);
-%%         _ ->                                 
-%%             FunBodyAST = lists:foldl(fun(X, Acc) -> 
-%%                     [_,Prop] = string:tokens(tl(atom_to_list(X)), "."),
-%%                     A = erl_syntax:variable(X),
-%%                     B = erl_syntax:application(erl_syntax:atom(proplists), 
-%%                         erl_syntax:atom(get_value), [erl_syntax:atom(Prop), ItAST]),
-%%                     [erl_syntax:match_expr(A, B) | Acc]
-%%                  end,
-%%                  [erl_syntax:list(List1)],
-%%                  Rec1),
-%%             FunClauseAST = erl_syntax:clause([ItAST], none, FunBodyAST),
-%%             erl_syntax:application(erl_syntax:atom(lists), 
-%%                 erl_syntax:atom(map),
-%%                 [erl_syntax:fun_expr([FunClauseAST]), erl_syntax:variable(Var)])
-%%     end,
-%%     {regular, Out1, Args2, Rec};   
-%%     
-%% build_tree(nil, [Token], Out, Args, _, _, _, Rec) ->
-%%     {regular, [Token | Out], Args, Rec}; 
-%% 
-%% build_tree([H | T], [{var, Line, Var}], Out, Args, DocRoot, Ext, Var, Rec) ->
-%%     build_tree(H, T, [erl_syntax:variable(Var) | Out], Args, DocRoot, Ext, Var, Rec);
-%%  
-%% build_tree([H | T], [{var, Line, Ns, Var}], Out, Args, DocRoot, Ext, Ns, Rec) ->
-%%     Var1 = lists:concat([Ns, ".", Var]),
-%%     Rec1 = [list_to_atom(Var1) | Rec],
-%%     build_tree(H, T, [erl_syntax:variable(Var1) | Out], Args, DocRoot, Ext, Ns, Rec1);
-%%                  
-%% build_tree([H | T], [{var, Line, Var}], Out, Args, DocRoot, Ext, IgnoreVar, Rec) ->
-%%     case lists:member(Var, Args) of
-%%         true ->
-%%             build_tree(H, T, [{var, Line, Var} | Out], Args, DocRoot, Ext, IgnoreVar, Rec);
-%%         _ ->
-%%             build_tree(H, T, [{var, Line, Var} | Out], [Var | Args], DocRoot, Ext, IgnoreVar, Rec)
-%%     end;    
-%%  
-%% build_tree([H | T], [{tag, _Line, TagName, TagArgs}], Out, Args, DocRoot, Ext, IgnoreVar, Rec) ->
-%%     Out2 = load_tag(TagName, TagArgs, Out, default, Ext),
-%%     build_tree(H, T, Out2, Args, DocRoot, Ext, IgnoreVar, Rec);
-%%  
-%% build_tree([H | T], [{for, _Line, It, Var, [HFor | TFor]}], Out, Args, DocRoot, Ext, IgnoreVar, Rec) ->
-%%     {_, List1, Args1, Rec1} = build_tree(HFor, TFor, [], Args, undefined, Ext, It, []),  
-%%     Args2 = case lists:member(Var, Args1) of
-%%         true ->
-%%             Args1;
-%%         _ ->
-%%             [Var | Args1]
-%%  end,  
-%%  ItAST = erl_syntax:variable(It),
-%%     Out1 = case Rec1 of
-%%         [] ->
-%%             BodyAST = erl_syntax:generator(ItAST, erl_syntax:variable(Var)),  
-%%             erl_syntax:list_comp(erl_syntax:list(List1), [BodyAST]);
-%%         _ ->                                 
-%%             FunBodyAST = lists:foldl(fun(X, Acc) -> 
-%%                     [_,Prop] = string:tokens(tl(atom_to_list(X)), "."),
-%%                     A = erl_syntax:variable(X),
-%%                     B = erl_syntax:application(erl_syntax:atom(proplists), 
-%%                         erl_syntax:atom(get_value), [erl_syntax:atom(Prop), ItAST]),
-%%                     [erl_syntax:match_expr(A, B) | Acc]
-%%                  end,
-%%                  [erl_syntax:list(List1)],
-%%                  Rec1),
-%%             FunClauseAST = erl_syntax:clause([ItAST], none, FunBodyAST),
-%%             erl_syntax:application(erl_syntax:atom(lists), 
-%%                 erl_syntax:atom(map),
-%%                 [erl_syntax:fun_expr([FunClauseAST]), erl_syntax:variable(Var)])
-%%     end,
-%%     build_tree(H, T, lists:flatten([Out1, Out]), Args2, DocRoot, Ext, IgnoreVar, Rec);
-%%          
-%% build_tree([H | T], [Token], Out, Args, DocRoot, Ext, IgnoreVar, Rec) ->      
-%%     build_tree(H, T, [Token | Out], Args, DocRoot, Ext, IgnoreVar, Rec).
-%% 
-%% 
-%% parse_transform({block, _Line, Name, [nil, Val]}, List, Args, Ext, IgnoreVar, Rec) ->
-%%  case lists:keysearch(Name, 3, List) of
-%%      false -> 
-%%             parse_transform(Val, List, Args, Ext, IgnoreVar, Rec);
-%%      {value, {_, _, _, [H | T]}} -> 
-%%          {_, List2, Args2, Rec1} = build_tree(H, T, [], Args, undefined, Ext, IgnoreVar, Rec),
-%%             parse_transform(lists:reverse(List2), List, Args2, Ext, IgnoreVar, Rec1)
-%%      end;
-%% parse_transform(Other, _What, Args, _, _, _) ->    
-%%     {Other, Args}.
-%% 
-%%     
-%% parse_transform({var, Line, Val}, Var, Val) when is_atom(Var) ->
-%%     {var, Line, Var}.
-%%     
-%%             
-%% parse_transform({var, _Line, Var}, Args) ->
-%%     Var2 = list_to_atom(tl(atom_to_list(Var))),
-%%     binary_string(proplists:get_value(Var2, Args));      
-%% parse_transform(Other, _) ->    
-%%     Other.
-%%         
-%% 
-%% parse_transform({block, _Line , _Name, [nil, T]}) ->
-%%  parse_transform(T); 
-%% parse_transform({var, L, Val}) ->
-%%     erl_syntax:variable(Val);
-%% parse_transform(Other) ->    
-%%     Other.       
-%% 
-%%                  
-%% load_tag(TagName, TagArgs, Acc0, default, Ext) ->
-%%     case parse(filename:join([erlydtl_deps:get_base_dir(), "priv", "tags", atom_to_list(TagName) ++ Ext])) of
-%%         {ok, ParentAst} ->
-%%          [H|T]=ParentAst,
-%%          {_, List, _, _} = build_tree(H, T, [], [], undefined, Ext, [], []),
-%%          lists:foldl(fun(X, Acc) -> 
-%%                  [parse_transform(X, TagArgs) | Acc]                 
-%%              end, 
-%%              Acc0,
-%%              lists:reverse(List));
-%%      {error, Msg} ->
-%%          Acc0
-%%     end.
-%%   
-%%     
-%% binary_string(String) ->
-%%     erl_syntax:binary([erl_syntax:binary_field(erl_syntax:integer(X)) || X <- String]).
-%% 
-%% 
-%% rel_dir(Dir, DocRoot) when Dir =:= DocRoot ->
-%%     DocRoot;
-%% rel_dir(Dir, DocRoot) ->
-%%     RelFile = string:substr(Dir, length(DocRoot)+2),
-%%     filename:join([DocRoot, RelFile]).
-%% 
-%% 
-%% new_var(List, Acc) ->
-%%     Var = list_to_atom(lists:concat(["A", Acc])),
-%%     case lists:member(Var, List) of
-%%         false ->
-%%             Var;
-%%         _ ->
-%%             new_var(List, Acc + 1)
-%%     end.
+    end.