Support conditional template instructions

This commit is contained in:
Evax Software 2013-09-19 07:11:37 +02:00
parent 620c4b01c6
commit 2970fab4b7

View file

@ -347,6 +347,10 @@ write_file(Output, Data, Force) ->
{error, exists} {error, exists}
end. end.
prepend_instructions(Instructions, Rest) when is_list(Instructions) ->
Instructions ++ Rest;
prepend_instructions(Instruction, Rest) ->
[Instruction|Rest].
%% %%
%% Execute each instruction in a template definition file. %% Execute each instruction in a template definition file.
@ -364,6 +368,23 @@ execute_template(_Files, [], _TemplateType, _TemplateName,
?ERROR("One or more files already exist on disk and " ?ERROR("One or more files already exist on disk and "
"were not generated:~n~s~s", [Msg , Help]) "were not generated:~n~s~s", [Msg , Help])
end; end;
execute_template(Files, [{'if', Cond, True} | Rest], TemplateType,
TemplateName, Context, Force, ExistingFiles) ->
execute_template(Files, [{'if', Cond, True, []}|Rest], TemplateType,
TemplateName, Context, Force, ExistingFiles);
execute_template(Files, [{'if', Cond, True, False} | Rest], TemplateType,
TemplateName, Context, Force, ExistingFiles) ->
Instructions = case dict:find(Cond, Context) of
{ok, true} ->
True;
{ok, "true"} ->
True;
_ ->
False
end,
execute_template(Files, prepend_instructions(Instructions, Rest),
TemplateType, TemplateName, Context, Force,
ExistingFiles);
execute_template(Files, [{template, Input, Output} | Rest], TemplateType, execute_template(Files, [{template, Input, Output} | Rest], TemplateType,
TemplateName, Context, Force, ExistingFiles) -> TemplateName, Context, Force, ExistingFiles) ->
InputName = filename:join(filename:dirname(TemplateName), Input), InputName = filename:join(filename:dirname(TemplateName), Input),