Browse Source

add extension_module option, and pass the dtl context to the parse function.

Andreas Stenius 12 years ago
parent
commit
c019a574ea
1 changed files with 20 additions and 15 deletions
  1. 20 15
      src/erlydtl_compiler.erl

+ 20 - 15
src/erlydtl_compiler.erl

@@ -59,7 +59,9 @@
 	  force_recompile = false,
 	  force_recompile = false,
 	  locale = none,
 	  locale = none,
 	  verbose = false,
 	  verbose = false,
-	  is_compiling_dir = false}).
+	  is_compiling_dir = false,
+	  extension_module = undefined
+	 }).
 
 
 -record(ast_info, {
 -record(ast_info, {
 	  dependencies = [],
 	  dependencies = [],
@@ -83,10 +85,10 @@ compile(File, Module) ->
 compile(Binary, Module, Options) when is_binary(Binary) ->
 compile(Binary, Module, Options) when is_binary(Binary) ->
     File = "",
     File = "",
     CheckSum = "",
     CheckSum = "",
-    case parse(Binary) of
+    Context = init_dtl_context(File, Module, Options),
+    case parse(Binary, Context) of
         {ok, DjangoParseTree} ->
         {ok, DjangoParseTree} ->
-            case compile_to_binary(File, DjangoParseTree, 
-				   init_dtl_context(File, Module, Options), CheckSum) of
+            case compile_to_binary(File, DjangoParseTree, Context, CheckSum) of
                 {ok, Module1, _, _} ->
                 {ok, Module1, _, _} ->
                     {ok, Module1};
                     {ok, Module1};
                 Err ->
                 Err ->
@@ -253,7 +255,9 @@ init_context(IsCompilingDir, ParseTrail, DefDir, Module, Options) ->
 		  force_recompile = proplists:get_value(force_recompile, Options, Ctx#dtl_context.force_recompile),
 		  force_recompile = proplists:get_value(force_recompile, Options, Ctx#dtl_context.force_recompile),
 		  locale = proplists:get_value(locale, Options, Ctx#dtl_context.locale),
 		  locale = proplists:get_value(locale, Options, Ctx#dtl_context.locale),
 		  verbose = proplists:get_value(verbose, Options, Ctx#dtl_context.verbose),
 		  verbose = proplists:get_value(verbose, Options, Ctx#dtl_context.verbose),
-		  is_compiling_dir = IsCompilingDir}.
+		  is_compiling_dir = IsCompilingDir,
+		  extension_module = proplists:get_value(extension_module, Options, Ctx#dtl_context.extension_module)
+		}.
 
 
 init_dtl_context(File, Module, Options) when is_list(Module) ->
 init_dtl_context(File, Module, Options) when is_list(Module) ->
     init_dtl_context(File, list_to_atom(Module), Options);
     init_dtl_context(File, list_to_atom(Module), Options);
@@ -299,7 +303,16 @@ is_up_to_date(CheckSum, Context) ->
             false
             false
     end.
     end.
 
 
+parse(Data) ->
+    parse(Data, #dtl_context{}).
 
 
+parse(Data, _Context) when is_binary(Data) ->
+    case erlydtl_scanner:scan(binary_to_list(Data)) of
+        {ok, Tokens} ->
+            erlydtl_parser:parse(Tokens);
+        Err ->
+            Err
+    end;
 parse(File, Context) ->  
 parse(File, Context) ->  
     {M, F} = Context#dtl_context.reader,
     {M, F} = Context#dtl_context.reader,
     case catch M:F(File) of
     case catch M:F(File) of
@@ -322,7 +335,7 @@ parse(CheckSum, Data, Context) ->
         true ->
         true ->
             ok;
             ok;
         _ ->
         _ ->
-            case parse(Data) of
+            case parse(Data, Context) of
                 {ok, Val} ->
                 {ok, Val} ->
                     {ok, Val, CheckSum};
                     {ok, Val, CheckSum};
                 Err ->
                 Err ->
@@ -330,14 +343,6 @@ parse(CheckSum, Data, Context) ->
             end
             end
     end.
     end.
 
 
-parse(Data) ->
-    case erlydtl_scanner:scan(binary_to_list(Data)) of
-        {ok, Tokens} ->
-            erlydtl_parser:parse(Tokens);
-        Err ->
-            Err
-    end.        
-
 custom_tags_ast(CustomTags, Context, TreeWalker) ->
 custom_tags_ast(CustomTags, Context, TreeWalker) ->
     {{CustomTagsClauses, CustomTagsInfo}, TreeWalker1} = custom_tags_clauses_ast(CustomTags, Context, TreeWalker),
     {{CustomTagsClauses, CustomTagsInfo}, TreeWalker1} = custom_tags_clauses_ast(CustomTags, Context, TreeWalker),
     {{erl_syntax:function(erl_syntax:atom(render_tag), CustomTagsClauses), CustomTagsInfo}, TreeWalker1}.
     {{erl_syntax:function(erl_syntax:atom(render_tag), CustomTagsClauses), CustomTagsInfo}, TreeWalker1}.
@@ -768,7 +773,7 @@ blocktrans_ast(ArgList, Contents, Context, TreeWalker) ->
 									       default ->
 									       default ->
 										   {AstInfoAcc, ThisTreeWalker, ClauseAcc};
 										   {AstInfoAcc, ThisTreeWalker, ClauseAcc};
 									       Body ->
 									       Body ->
-										   {ok, DjangoParseTree} = parse(Body),
+										   {ok, DjangoParseTree} = parse(Body, Context),
 										   {{ThisAst, ThisAstInfo}, TreeWalker3} = body_ast(DjangoParseTree, NewContext, ThisTreeWalker),
 										   {{ThisAst, ThisAstInfo}, TreeWalker3} = body_ast(DjangoParseTree, NewContext, ThisTreeWalker),
 										   {merge_info(ThisAstInfo, AstInfoAcc), TreeWalker3, 
 										   {merge_info(ThisAstInfo, AstInfoAcc), TreeWalker3, 
 										    [erl_syntax:clause([erl_syntax:string(Locale)], none, [ThisAst])|ClauseAcc]}
 										    [erl_syntax:clause([erl_syntax:string(Locale)], none, [ThisAst])|ClauseAcc]}