12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- -module(mad_dtl).
- -copyright('Sina Samavati').
- -compile(export_all).
- compile(Dir,Config) ->
- case mad_utils:get_value(erlydtl_opts, Config, []) of
- [] -> false;
- X -> compile_erlydtl_files(validate_erlydtl_opts(Dir,X)) end.
- get_kv(K, Opts, Default) ->
- V = mad_utils:get_value(K, Opts, Default),
- KV = {K, V},
- {KV, Opts -- [KV]}.
- file_to_beam(Bin, Filename) -> filename:join(Bin, filename:basename(Filename) ++ ".beam").
- validate_erlydtl_opts(Cwd, Opts) ->
- DefaultDocRoot = filename:join("priv", "templates"),
- {DocRoot, Opts1} = get_kv(doc_root, Opts, DefaultDocRoot),
- {OutDir, Opts2} = get_kv(out_dir, Opts1, "ebin"),
- {CompilerOpts, Opts3} = get_kv(compiler_options, Opts2, []),
- {SourceExt, Opts4} = get_kv(source_ext, Opts3, ".dtl"),
- {ModuleExt, Opts5} = get_kv(module_ext, Opts4, ""),
- {_, DocRootDir} = DocRoot,
- DocRoot1 = {doc_root, filename:join(Cwd, DocRootDir)},
- {_, OutDir1} = OutDir,
- OutDir2 = {out_dir, filename:join(Cwd, OutDir1)},
- [DocRoot1, OutDir2, CompilerOpts, SourceExt, ModuleExt|Opts5].
- module_name(File, Ext, NewExt) ->
- list_to_atom(filename:basename(File, Ext) ++ NewExt).
- compile_erlydtl_files(Opts) ->
- {{_, DocRoot}, Opts1} = get_kv(doc_root, Opts, ""),
- {{_, SourceExt}, Opts2} = get_kv(source_ext, Opts1, ""),
- {{_, ModuleExt}, Opts3} = get_kv(module_ext, Opts2, ""),
- {{_, OutDir}, _} = get_kv(out_dir, Opts3, ""),
- Files = filelib:fold_files(DocRoot, SourceExt, true,
- fun(F, Acc) -> [F|Acc] end, []),
- Compile = fun(F) ->
- ModuleName = module_name(F, SourceExt, ModuleExt),
- BeamFile = file_to_beam(OutDir, atom_to_list(ModuleName)),
- Compiled = mad_compile:is_compiled(BeamFile, F),
- if Compiled =:= false ->
- io:format("DTL Compiling ~s~n\r", [F]),
- erlydtl:compile(F, ModuleName, Opts3);
- true -> ok end
- end,
- lists:any(fun({error,_}) -> true; (ok) -> false end,[Compile(F) || F <- Files]).
|