Browse Source

bugfixes, now test_for_preset also works

Roberto Saccon 17 years ago
parent
commit
282daadb57
2 changed files with 49 additions and 18 deletions
  1. 13 0
      demo/out/test_for_preset.html
  2. 36 18
      src/erlydtl/erlydtl_base.erl

+ 13 - 0
demo/out/test_for_preset.html

@@ -0,0 +1,13 @@
+before
+
+<ul>
+
+	<li>preset-apple</li>
+
+	<li>preset-banana</li>
+
+	<li>preset-coconut</li>
+
+</ul>
+
+after

+ 36 - 18
src/erlydtl/erlydtl_base.erl

@@ -155,14 +155,12 @@ build_tree2(nil, [{extends, Line, Name}], Dtl) ->
 		     {error, {extends, Line, "file not found"}}		
 		     {error, {extends, Line, "file not found"}}		
     end;
     end;
     
     
-build_tree2(nil, [{var, _, Var}], #dtl{var = Var} = Dtl) ->     
-    #dtl{buffer = Buffer, args = Args, props = Props, preset = _Preset} = Dtl,  
+build_tree2(nil, [{var, _, Var}], #dtl{var = Var} = Dtl) ->    
+    #dtl{buffer = Buffer, args = Args, props = Props} = Dtl,  
     {regular, [erl_syntax:variable(Var) | Buffer], Args, Props};
     {regular, [erl_syntax:variable(Var) | Buffer], Args, Props};
-    %Out = subst_var(Var, Preset),
-    %{regular, [Out | Buffer], Args, Props};
 
 
 build_tree2(nil, [{var, _, Ns, Var}], #dtl{var = Ns} = Dtl) ->
 build_tree2(nil, [{var, _, Ns, Var}], #dtl{var = Ns} = Dtl) ->
-    #dtl{buffer = Buffer, args = Args, props = Props,  preset = _Preset} = Dtl,     
+    #dtl{buffer = Buffer, args = Args, props = Props} = Dtl,     
     Var1 = lists:concat([Ns, ".", Var]),
     Var1 = lists:concat([Ns, ".", Var]),
     Props1 = [list_to_atom(Var1) | Props],
     Props1 = [list_to_atom(Var1) | Props],
     {regular, [erl_syntax:variable(Var1) | Buffer], Args, Props1};
     {regular, [erl_syntax:variable(Var1) | Buffer], Args, Props1};
@@ -253,11 +251,31 @@ handle_for(It, Var, HFor, TFor, Dtl) ->
     #dtl{args = Args, ext = Ext, preset = Preset} = Dtl,
     #dtl{args = Args, ext = Ext, preset = Preset} = Dtl,
     {_, List1, Args1, Props1} = build_tree(HFor, TFor, Args, Ext, It, Preset),    
     {_, List1, Args1, Props1} = build_tree(HFor, TFor, Args, Ext, It, Preset),    
 	ItAST = erl_syntax:variable(It),
 	ItAST = erl_syntax:variable(It),
-    Buffer1 = case Props1 of
+    case Props1 of
         [] ->
         [] ->
-            BodyAST = erl_syntax:generator(ItAST, erl_syntax:variable(Var)),  
-            erl_syntax:list_comp(erl_syntax:list(List1), [BodyAST]);
-        _ ->                                 
+            Key = list_to_atom(tl(atom_to_list(Var))),
+            case proplists:get_value(Key, Preset) of
+                undefined ->
+                    BodyAST = erl_syntax:generator(ItAST, erl_syntax:variable(Var)),  
+                    List2 = erl_syntax:list_comp(erl_syntax:list(List1), [BodyAST]),
+                    case lists:member(Var, Args1) of
+                        true ->
+                            {List2, Args1};
+                        _ ->
+                            {List2, [Var | Args1]}
+                	end;                   
+                Vals ->
+                    List2 = lists:map(fun (X) -> 
+                            lists:map(fun ({tree, variable, _, It2}) when It2 =:= It ->
+                                    binary_string(X);
+                                (Other) ->
+                                    Other
+                                end, List1)
+                        end, Vals),
+                    {lists:flatten(List2), Args1}
+            end;
+        _ -> 
+            io:format("TRACE ~p:~p ~p~n",[?MODULE, ?LINE, Props1]),
             FunBodyAST = lists:foldl(fun(X, Acc) -> 
             FunBodyAST = lists:foldl(fun(X, Acc) -> 
                     [_,Prop] = string:tokens(tl(atom_to_list(X)), "."),
                     [_,Prop] = string:tokens(tl(atom_to_list(X)), "."),
                     A = erl_syntax:variable(X),
                     A = erl_syntax:variable(X),
@@ -268,16 +286,16 @@ handle_for(It, Var, HFor, TFor, Dtl) ->
                  [erl_syntax:list(List1)],
                  [erl_syntax:list(List1)],
                  Props1),
                  Props1),
             FunClauseAST = erl_syntax:clause([ItAST], none, FunBodyAST),
             FunClauseAST = erl_syntax:clause([ItAST], none, FunBodyAST),
-            erl_syntax:application(erl_syntax:atom(lists), 
+            List2 = erl_syntax:application(erl_syntax:atom(lists), 
                 erl_syntax:atom(map),
                 erl_syntax:atom(map),
-                [erl_syntax:fun_expr([FunClauseAST]), erl_syntax:variable(Var)])
-    end,   
-    case lists:member(Var, Args1) of
-        true ->
-            {Buffer1, Args1};
-        _ ->
-            {Buffer1, [Var | Args1]}
-	end.
+                [erl_syntax:fun_expr([FunClauseAST]), erl_syntax:variable(Var)]),
+            case lists:member(Var, Args1) of
+                true ->
+                    {List2, Args1};
+                _ ->
+                    {List2, [Var | Args1]}
+            end
+    end.
     
     
            	        	
            	        	
 handle_tag(TagName, Line, TagArgs, Acc0, Ext, Preset) ->
 handle_tag(TagName, Line, TagArgs, Acc0, Ext, Preset) ->