%% %% Demo file for the Syntax Tools package. %% %% The program is self-instructing. Compile `demo' from the shell and %% execute `demo:run()'. -module(demo). -export([run/0, run_1/0, run_2/0, run_3/0, run_4/0, view/1, view/2, view/3]). small_file() -> "test.erl". medium_file() -> "test_comprehensions.erl". big_file() -> "erl_comment_scan.erl". run() -> make:all([load]), io:fwrite("\n\n** Enter `demo:run_1()' to parse and pretty-print\n" "the file \"~s\" with the default field width.\n\n", [small_file()]), ok. run_1() -> view(small_file()), io:fwrite("\n\n\n** Enter `demo:run_2()' to parse and pretty-print\n" "the file \"~s\" with a small field width.\n\n", [small_file()]), ok. run_2() -> view(small_file(), 15), io:fwrite("\n\n\n** Enter `demo:run_3()' to parse and pretty-print\n" "the file \"~s\" with field width 35\n\n", [medium_file()]), ok. run_3() -> view(medium_file(), 35), io:fwrite("\n\n\n** Enter `demo:run_4()' to parse and pretty-print\n" "the file \"~s\" with field width 55 and ribbon width 40.\n\n", [big_file()]), ok. run_4() -> view(big_file(), 55, 40), io:fwrite("\n\n\n** Done! Now you can play around with the function\n" "`demo:view(FileName, PaperWidth, RibbonWidth)' on any\n" "Erlang source files you have around you.\n" "(Include the \".erl\" suffix in the file name.\n" "RibbonWidth and PaperWidth are optional.)\n\n"), ok. view(Name) -> SyntaxTree = read(Name), print(SyntaxTree). view(Name, Paper) -> SyntaxTree = read(Name), print(SyntaxTree, Paper). view(Name, Paper, Ribbon) -> SyntaxTree = read(Name), print(SyntaxTree, Paper, Ribbon). print(SyntaxTree) -> io:put_chars(erl_prettypr:format(SyntaxTree)). print(SyntaxTree, Paper) -> io:put_chars(erl_prettypr:format(SyntaxTree, [{paper, Paper}])). print(SyntaxTree, Paper, Ribbon) -> io:put_chars(erl_prettypr:format(SyntaxTree, [{paper, Paper}, {ribbon, Ribbon}])). read(Name) -> {ok, Forms} = epp:parse_file(Name, [], []), Comments = erl_comment_scan:file(Name), erl_recomment:recomment_forms(Forms, Comments).