1
1
% Aleppo: ALternative Erlang Pre-ProcessOr
2
2
-module (aleppo ).
3
- -export ([process_file /1 , process_tokens /1 , process_tokens /2 , scan_file /1 ]).
3
+ -export ([process_file /1 , process_file / 2 , process_tokens /1 , process_tokens /2 , scan_file /1 ]).
4
4
5
5
-record (ale_context , {
6
6
include_trail = [],
9
9
}).
10
10
11
11
process_file (FileName ) ->
12
+ process_file (FileName , []).
13
+
14
+ process_file (FileName , Options ) ->
12
15
ModuleName = list_to_atom (filename :rootname (filename :basename (FileName ))),
13
16
case scan_file (FileName ) of
14
17
{ok , Tokens } ->
15
- process_tokens (Tokens , [{file , FileName }, {module , ModuleName }]);
18
+ process_tokens (Tokens , [{file , FileName }, {module , ModuleName }| Options ]);
16
19
Error ->
17
20
Error
18
21
end .
@@ -23,6 +26,7 @@ process_tokens(Tokens) ->
23
26
% Valid options:
24
27
% - file: The path of the file being processed
25
28
% - include: A list of directories to include in the .hrl search path
29
+ % - return_macros: return the macro dict in result if successful
26
30
process_tokens (Tokens , Options ) ->
27
31
{Tokens1 , Module } = mark_keywords (Tokens ),
28
32
case aleppo_parser :parse (Tokens1 ) of
@@ -63,8 +67,12 @@ process_tree(ParseTree, Options) ->
63
67
macro_dict = Dict2 },
64
68
65
69
try process_tree (ParseTree , TokenAcc , Context ) of
66
- {_MacroDict , RevTokens } when is_list (RevTokens ) ->
67
- {ok , lists :reverse (RevTokens )}
70
+ {MacroDict , RevTokens } when is_list (RevTokens ) ->
71
+ FinalTokens = lists :reverse (RevTokens ),
72
+ case proplists :get_value (return_macros , Options , false ) of
73
+ true -> {ok , FinalTokens , MacroDict };
74
+ _ -> {ok , FinalTokens }
75
+ end
68
76
catch
69
77
_ :Reason ->
70
78
{error , Reason }
0 commit comments