Просмотр исходного кода

fixed parser grammar (custom tags still broken)

Roberto Saccon 17 лет назад
Родитель
Сommit
0f964f6901

+ 1 - 1
demo/templates/test_htmltags.html

@@ -6,7 +6,7 @@
   </head>
   <body>
 	before
-	{% flashvideo myvideo 800 600 /static /static/myvideo.mp4 /static/mypreview.jpg  %}
+	{% flashvideo dom_id="myvideo" width="800" height="600" static="/static" path_to_video="/myvid.mp4" path_to_preview_image="/mypic.jpg" %}
 	after
   </body>
 </html>

+ 0 - 4
priv/tags/flashvideo.html

@@ -1,7 +1,3 @@
-{# Embedding flash video
-                                              
-   flashvideo(width, height, static, path_to_video, path_to_preview_image) 
-#}
 <object id="{{ dom_id }}" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="{{ width }}" height="{{ height }}">
 	<param name="movie" value="{{ static }}/mediaplayer.swf">
     <param name="allowfullscreen" value="true">

+ 0 - 4
priv/tags/menu.css

@@ -1,7 +1,3 @@
-{# Pure CSS menu
-                                              
-   menu() 
-#}
  /*================= STYLES FOR THE GRC MASTHEAD & CONTROLS ==================*/
 
 .menuminwidth0 {             /* for all browsers (non-IE) that obey min-width */

+ 19 - 4
src/erlydtl/erlydtl_parser.erl

@@ -13,8 +13,23 @@ extends({_, Line, [Name]}) ->
 block({_, Line, [Name]}, Content) ->
     {block, Line, list_to_atom(Name), Content}.
 
-tag({_, Line, Args}) ->
-    {tag, Line, Args}.
+tag({_, Line, [TagName | Args]}) ->
+    %% TODO: check if string (enclosed with  "") or variable. 
+    %% for now we handle it (even not enclosed with "") as string
+	Args2 = lists:foldl(fun(X, Acc) ->
+	        case string:chr(X, $=) of
+				0 ->
+				    Acc;
+				Pos ->
+			        Var = list_to_atom(string:sub_string(X, 1, Pos-1)),
+			        Val = string:sub_string(X, Pos+1),
+			        Val2 = string:strip(Val, both, $"),
+					[{Var, Val2}| Acc]
+			end
+		end,
+    	[],
+    	Args),
+    {tag, Line, TagName, Args2}.
 
 for({_, Line, [Iterator, _, Var]}, Content) ->
     {for, Line, list_to_atom(Iterator), list_to_atom(Var), Content}.
@@ -111,7 +126,7 @@ yecctoken2string(Other) ->
 
 
 
--file("src/erlydtl/erlydtl_parser.erl", 114).
+-file("src/erlydtl/erlydtl_parser.erl", 129).
 
 yeccpars2(0, __Cat, __Ss, __Stack, __T, __Ts, __Tzr) ->
  __NewStack = yeccpars2_0_(__Stack),
@@ -275,4 +290,4 @@ yeccpars2_12_([__3,__2,__1 | __Stack]) ->
   end | __Stack].
 
 
--file("src/erlydtl/erlydtl_parser.yrl", 85).
+-file("src/erlydtl/erlydtl_parser.yrl", 100).

+ 17 - 2
src/erlydtl/erlydtl_parser.yrl

@@ -78,8 +78,23 @@ extends({_, Line, [Name]}) ->
 block({_, Line, [Name]}, Content) ->
     {block, Line, list_to_atom(Name), Content}.
 
-tag({_, Line, Args}) ->
-    {tag, Line, Args}.
+tag({_, Line, [TagName | Args]}) ->
+    %% TODO: check if string (enclosed with  "") or variable. 
+    %% for now we handle it (even not enclosed with "") as string
+	Args2 = lists:foldl(fun(X, Acc) ->
+	        case string:chr(X, $=) of
+				0 ->
+				    Acc;
+				Pos ->
+			        Var = list_to_atom(string:sub_string(X, 1, Pos-1)),
+			        Val = string:sub_string(X, Pos+1),
+			        Val2 = string:strip(Val, both, $"),
+					[{Var, Val2}| Acc]
+			end
+		end,
+    	[],
+    	Args),
+    {tag, Line, TagName, Args2}.
 
 for({_, Line, [Iterator, _, Var]}, Content) ->
     {for, Line, list_to_atom(Iterator), list_to_atom(Var), Content}.

+ 6 - 3
src/erlydtl/erlydtl_server.erl

@@ -255,7 +255,7 @@ build_tree(nil, [{var, Line, Var}], Out, Args, _, _, IgnoreVar)  ->
             {regular, [{var, Line, Var} | Out], [Var | Args]} 
     end;    
     
-build_tree(nil, [{tag, _Line, [TagName | TagArgs]}], Out, Args, _, Ext, IgnoreVar) ->
+build_tree(nil, [{tag, _Line, TagName, TagArgs}], Out, Args, _, Ext, IgnoreVar) ->
     Out2 = load_tag(TagName, TagArgs, Out, default, Ext, IgnoreVar),    
     {regular, Out2, Args};
     
@@ -288,7 +288,7 @@ build_tree([H | T], [{var, Line, Var}], Out, Args, DocRoot, Ext, IgnoreVar) ->
             build_tree(H, T, [{var, Line, Var} | Out], [Var | Args], DocRoot, Ext, IgnoreVar)
     end;    
 	
-build_tree([H | T], [{tag, _Line, [TagName | TagArgs]}], Out, Args, DocRoot, Ext, IgnoreVar) ->
+build_tree([H | T], [{tag, _Line, TagName, TagArgs}], Out, Args, DocRoot, Ext, IgnoreVar) ->
     Out2 = load_tag(TagName, TagArgs, Out, default, Ext, IgnoreVar),
     build_tree(H, T, Out2, Args, DocRoot, Ext, IgnoreVar);
  
@@ -347,11 +347,14 @@ parse_transform(Other) ->
 
    	        	
 load_tag(TagName, TagArgs, Acc0, default, Ext, IgnoreVar) ->
+io:format("TRACE ~p:~p TagArgs ~p~n",[?MODULE, ?LINE, TagArgs]),
     case parse(filename:join([erlydtl_deps:get_base_dir(), "priv", "tags", atom_to_list(TagName) ++ Ext])) of
         {ok, ParentAst} ->
 		    [H|T]=ParentAst,
 			{_, List, Args1} = build_tree(H, T, [], [], undefined, Ext, IgnoreVar),
-			Args2 = [{Var, Val} || {{Var, _}, Val} <- lists:zip(Args1, TagArgs)], 			
+io:format("TRACE ~p:~p Args1 ~p~n",[?MODULE, ?LINE, Args1]),
+			Args2 = [{Var, Val} || {{Var, _}, Val} <- lists:zip(Args1, TagArgs)], 	
+io:format("TRACE ~p:~p Args2 ~p~n",[?MODULE, ?LINE, Args2]),		
 			lists:foldl(fun(X, Acc) -> 
 			        [parse_transform(X, Args2) | Acc]			        
 			    end,