Skip to content

Commit

Permalink
Integrate new filters and tests from dgulino
Browse files Browse the repository at this point in the history
Restructured the file layout somewhat.
  • Loading branch information
evanmiller committed Mar 18, 2011
1 parent 3aa6967 commit ae6bf4b
Show file tree
Hide file tree
Showing 66 changed files with 921 additions and 396 deletions.
10 changes: 4 additions & 6 deletions Emakefile
@@ -1,6 +1,4 @@
{"src/erlydtl/*", [debug_info, {outdir, "ebin"}]}.
{"src/erlydtl/i18n/*", [debug_info, {outdir, "ebin"}]}.
{"src/erlydtl/filter_lib/*", [debug_info, {outdir, "ebin"}]}.
{"src/tests/*", [debug_info, {outdir, "ebintest"}]}.
{"src/tests/i18n/*", [debug_info, {outdir, "ebintest"}]}.
{"src/demo/*", [debug_info, {outdir, "ebintest"}]}.
{"src/*", [debug_info, {outdir, "ebin"}]}.
{"src/i18n/*", [debug_info, {outdir, "ebin"}]}.
{"src/filter_lib/*", [debug_info, {outdir, "ebin"}]}.
{"tests/src/*", [debug_info, {outdir, "ebintest"}]}.
6 changes: 3 additions & 3 deletions Makefile
@@ -1,7 +1,7 @@
ERL=erl
ERLC=erlc

PARSER=src/erlydtl/erlydtl_parser
PARSER=src/erlydtl_parser


all: compile
Expand All @@ -11,7 +11,7 @@ compile: $(PARSER).erl
$(ERL) -make

$(PARSER).erl: $(PARSER).yrl
$(ERLC) -o src/erlydtl src/erlydtl/erlydtl_parser.yrl
$(ERLC) -o src src/erlydtl_parser.yrl

run: compile
$(ERL) -pa ebin
Expand All @@ -29,4 +29,4 @@ clean:
rm -fv ebin/*.beam
rm -fv ebintest/*
rm -fv erl_crash.dump $(PARSER).erl
rm -fv examples/rendered_output/*
rm -fv tests/output/*
2 changes: 1 addition & 1 deletion README.markdown
Expand Up @@ -125,4 +125,4 @@ From a Unix shell, run:

make test

Note that the tests will create some output in examples/rendered_output.
Note that the tests will create some output in tests/output.
6 changes: 1 addition & 5 deletions ebin/erlydtl.app
@@ -1,21 +1,17 @@
%% -*- mode: erlang -*-
{application, erlydtl,
[{description, "ErlyDTL implements most but not all of the Django Template Language"},
{vsn, "0.6.1"},
{vsn, "0.7.0"},
{modules, [
erlydtl,
erlydtl_compiler,
erlydtl_dateformat,
erlydtl_dateformat_tests,
erlydtl_deps,
erlydtl_example_variable_storage,
erlydtl_filters,
erlydtl_functional_tests,
erlydtl_parser,
erlydtl_runtime,
erlydtl_scanner,
erlydtl_slice,
erlydtl_unittests,
erlydtl_i18n,
i18n_manager,
po_generator,
Expand Down
File renamed without changes.
37 changes: 17 additions & 20 deletions src/erlydtl/erlydtl_compiler.erl → src/erlydtl_compiler.erl
Expand Up @@ -677,20 +677,23 @@ filter_ast(Variable, Filter, Context, TreeWalker) ->
filter_ast_noescape(Variable, [{identifier, _, 'escape'}], Context, TreeWalker) ->
value_ast(Variable, true, Context, TreeWalker);
filter_ast_noescape(Variable, Filter, Context, TreeWalker) ->
{{VariableAst, Info}, TreeWalker2} = value_ast(Variable, true, Context, TreeWalker),
VarValue = filter_ast1(Filter, VariableAst),
{{VarValue, Info}, TreeWalker2}.

filter_ast1([{identifier, _, Name}, {string_literal, _, ArgName}], VariableAst) ->
filter_ast2(Name, VariableAst, [erl_syntax:string(unescape_string_literal(ArgName))]);
filter_ast1([{identifier, _, Name}, {number_literal, _, ArgName}], VariableAst) ->
filter_ast2(Name, VariableAst, [erl_syntax:integer(list_to_integer(ArgName))]);
filter_ast1([{identifier, _, Name}|_], VariableAst) ->
filter_ast2(Name, VariableAst, []).

filter_ast2(Name, VariableAst, AdditionalArgs) ->
erl_syntax:application(erl_syntax:atom(erlydtl_filters), erl_syntax:atom(Name),
[VariableAst | AdditionalArgs]).
{{VariableAst, Info1}, TreeWalker2} = value_ast(Variable, true, Context, TreeWalker),
{VarValue, Info2} = filter_ast1(Filter, VariableAst, Context),
{{VarValue, merge_info(Info1, Info2)}, TreeWalker2}.

filter_ast1([{identifier, _, Name}, {string_literal, _, ArgName}], VariableAst, _Context) ->
filter_ast2(Name, VariableAst, [erl_syntax:string(unescape_string_literal(ArgName))], []);
filter_ast1([{identifier, _, Name}, {number_literal, _, ArgName}], VariableAst, _Context) ->
filter_ast2(Name, VariableAst, [erl_syntax:integer(list_to_integer(ArgName))], []);
filter_ast1([{identifier, _, Name}, ArgVariable], VariableAst, Context) ->
{ArgAst, ArgVarName} = resolve_variable_ast(ArgVariable, Context),
filter_ast2(Name, VariableAst, [ArgAst], [ArgVarName]);
filter_ast1([{identifier, _, Name}], VariableAst, _Context) ->
filter_ast2(Name, VariableAst, [], []).

filter_ast2(Name, VariableAst, AdditionalArgs, VarNames) ->
{erl_syntax:application(erl_syntax:atom(erlydtl_filters), erl_syntax:atom(Name),
[VariableAst | AdditionalArgs]), #ast_info{var_names = VarNames}}.

search_for_escape_filter(_, _, #dtl_context{auto_escape = on}) ->
on;
Expand All @@ -707,7 +710,6 @@ search_for_escape_filter(_Variable, _Filter) ->
off.



resolve_variable_ast(VarTuple, Context) ->
resolve_variable_ast(VarTuple, Context, 'find_value').

Expand All @@ -726,11 +728,6 @@ resolve_variable_ast({variable, {identifier, _, VarName}}, Context, FinderFuncti
end,
{VarValue, VarName};

resolve_variable_ast({apply_filter, Variable, Filter}, Context, FinderFunction) ->
{VarAst, VarName} = resolve_variable_ast(Variable, Context, FinderFunction),
VarValue = filter_ast1(Filter, erl_syntax:list([VarAst])),
{VarValue, VarName};

resolve_variable_ast(What, _Context, _FinderFunction) ->
error_logger:error_msg("~p:resolve_variable_ast unhandled: ~p~n", [?MODULE, What]).

Expand Down
File renamed without changes.

0 comments on commit ae6bf4b

Please sign in to comment.