Prolog "report"

Admin User, erstellt 12. Apr. 2024
         
/**
* Modern Albufeira Prolog Interpreter
*
* Warranty & Liability
* To the extent permitted by applicable law and unless explicitly
* otherwise agreed upon, XLOG Technologies AG makes no warranties
* regarding the provided information. XLOG Technologies AG assumes
* no liability that any problems might be solved with the information
* provided by XLOG Technologies AG.
*
* Rights & License
* All industrial property rights regarding the information - copyright
* and patent rights in particular - are the sole property of XLOG
* Technologies AG. If the company was not the originator of some
* excerpts, XLOG Technologies AG has at least obtained the right to
* reproduce, change and translate the information.
*
* Reproduction is restricted to the whole unaltered document. Reproduction
* of the information is only allowed for non-commercial uses. Selling,
* giving away or letting of the execution of the library is prohibited.
* The library can be distributed as part of your applications and libraries
* for execution provided this comment remains unchanged.
*
* Restrictions
* Only to be distributed with programs that add significant and primary
* functionality to the library. Not to be distributed with additional
* software intended to replace any components of the library.
*
* Trademarks
* Jekejeke is a registered trademark of XLOG Technologies AG.
*/
:-(ensure_loaded(library(sequence))).
:-(ensure_loaded(library(/(util, format)))).
:-(ensure_loaded(library(/(tester, runner)))).
:-(ensure_loaded(library(/(util, files)))).
:-(ensure_loaded(library(/(misc, markup)))).
:-(multifile(/(runner_folder, 2))).
:-(multifile(/(runner_file, 3))).
:-(multifile(/(runner_pred, 5))).
:-(multifile(/(runner_case, 5))).
:-(dynamic(/(runner_case, 5))).
:-(multifile(/(legend_table, 1))).
:-(dynamic(/(legend_table, 1))).
:-(multifile(/(legend_column, 2))).
:-(dynamic(/(legend_column, 2))).
:-(multifile(/(result_summary, 2))).
:-(dynamic(/(result_summary, 2))).
:-(multifile(/(result_suite, 3))).
:-(dynamic(/(result_suite, 3))).
:-(multifile(/(result_tests, 4))).
:-(dynamic(/(result_tests, 4))).
:-(multifile(/(result_pred, 6))).
:-(dynamic(/(result_pred, 6))).
:-(multifile(/(result, 7))).
:-(dynamic(/(result, 7))).
:-(report_batch(Dir, Tags, Opts), ','(report_begin(Dir, Tags, Opts), ','(report_add(Dir, Tags, Opts), report_end(Dir, Tags, Opts)))).
:-(report_begin(Dir, _, Opts), ','(sys_report_default(Date0), ','(decode_report_opts(Opts, v('', '', Date0, 'result/', '', 0), v(_, Title, Date, _, _, _)), sys_main_begin(Dir, Title, Date)))).
:-(report_add(Dir, Tags, Opts), ','(sys_report_default(Date0), ','(decode_report_opts(Opts, v('', '', Date0, 'result/', '', 0), v(Base, _, Date, Root, Subtitle, Flags)), ','(sys_main_add(Dir, Tags, Root, Subtitle, Flags), ','(atom_concat(Dir, Root, Dir2), ','(sys_result_batch(Dir2, Tags, Date, Subtitle), ','(sys_folders_batch(Dir2, Tags, Date), sys_files_batch(Dir2, Tags, Base, Date)))))))).
:-(report_end(Dir, _, Opts), ','(sys_report_default(Date0), ','(decode_report_opts(Opts, v('', '', Date0, 'result/', '', 0), v(_, _, _, _, _, _)), sys_main_end(Dir)))).
:-(sys_report_default(Date), ','(statistics(wall, Time), sys_time_atom('%Y-%m-%d %H:%M:%S', Time, Date))).
:-(sys_main_begin(Dir, Title, Date), ','(format_atom('~w', '.'(Dir, []), Dst), ','(ensure_directory(Dst), ','(format_atom('~wpackage.html', '.'(Dir, []), Name), ','(open(Name, write, S), ','(dom_output_new(S, T), ','(sys_begin_html2(Title, '../../../styles.css', T), ','(tag_format(T, '<h1 date=\"~a\">', '.'(Date, [])), ','(put_atom(T, 'Summary '), ','(put_atom(T, Title), ','(tag(T, '</h1>'), ','(close(T), fail)))))))))))).
sys_main_begin(_, _, _).
:-(sys_main_add(Dir, Tags, Root, Subtitle, Flags), ','(format_atom('~wpackage.html', '.'(Dir, []), Name), ','(open(Name, append, S), ','(dom_output_new(S, T), ','(ir_indent_set(S, 6), ','(sys_main_list2(Tags, Root, Subtitle, T), ','(;(->(=:=(/\(Flags, 1), 0), sys_legend2(Tags, T)), true), ','(close(T), fail)))))))).
sys_main_add(_, _, _, _, _).
:-(sys_main_end(Dir), ','(format_atom('~wpackage.html', '.'(Dir, []), Name), ','(open(Name, append, S), ','(dom_output_new(S, T), ','(ir_indent_set(S, 6), ','(sys_end_html2(T), ','(close(T), fail))))))).
sys_main_end(_).
:-(sys_main_list2(Tags, Root, Subtitle, T), ','(tag(T, '<h3>'), ','(put_atom(T, 'Results '), ','(put_atom(T, Subtitle), ','(tag(T, '</h3>'), ','(tag(T, '<table class=\"rowtable\">'), ','(tag(T, '<tr class=\"headrow\">'), ','(tag(T, '<th style=\"width: 16em\">'), ','(put_atom(T, 'Folder'), ','(tag(T, '</th>'), ','(;(','(member(Tag, Tags), ','(tag(T, '<th style=\"width: 4em\">'), ','(put_atom(T, Tag), ','(tag(T, '</th>'), fail)))), true), ','(tag(T, '</tr>'), ','(sys_main_member2(Tags, Root, T), ','(tag(T, '<tr class=\"headrow\">'), ','(tag(T, '<td>'), ','(put_atom(T, 'Total'), ','(tag(T, '</td>'), ','(;(','(member(Tag, Tags), ','(result_summary(Tag, Z), ','(sys_data_cell2(Z, T), fail))), true), ','(tag(T, '</tr>'), ','(tag(T, '</table>'), fail)))))))))))))))))))).
sys_main_list2(_, _, _, _).
:-(sys_main_member2(Tags, Root, T), ','(call_nth(runner_folder(E, _), I), ','(sys_zebra_row2(I, T), ','(format_atom('~wpackage.html#~c', '.'(Root, '.'(E, [])), H), ','(tag(T, '<td>'), ','(tag_format(T, '<a href=\"~a\">', '.'(H, [])), ','(put_atom(T, E), ','(tag(T, '</a>'), ','(tag(T, '</td>'), ','(;(','(member(Tag, Tags), ','(result_suite(E, Tag, Z), ','(sys_data_cell2(Z, T), fail))), true), ','(tag(T, '</tr>'), fail))))))))))).
sys_main_member2(_, _, _).
:-(sys_result_batch(Dir, Tags, Date, Subtitle), ','(format_atom('~w', '.'(Dir, []), Dst), ','(ensure_directory(Dst), ','(format_atom('~wpackage.html', '.'(Dir, []), Name), ','(open(Name, write, S), ','(dom_output_new(S, T), ','(sys_begin_html2(Subtitle, '../../../styles.css', T), ','(tag_format(T, '<h1 date=\"~a\">', '.'(Date, [])), ','(put_atom(T, 'Results '), ','(put_atom(T, Subtitle), ','(tag(T, '</h1>'), ','(sys_result_list2(Tags, T), ','(sys_legend2(Tags, T), ','(sys_end_html2(T), ','(close(T), fail))))))))))))))).
sys_result_batch(_, _, _, _).
:-(sys_result_list2(Tags, T), ','(call_nth(runner_folder(E, _), J), ','(tag(T, '<h3>'), ','(tag_format(T, '<a name=\"~a\">', '.'(E, [])), ','(tag(T, '</a>'), ','(put_atom(T, 'Folder '), ','(put_atom(T, E), ','(tag(T, '</h3>'), ','(tag(T, '<table class=\"rowtable\">'), ','(tag(T, '<tr class=\"headrow\">'), ','(tag(T, '<th style=\"width: 16em\">'), ','(put_atom(T, 'File'), ','(tag(T, '</th>'), ','(;(','(member(Tag, Tags), ','(tag(T, '<th style=\"width: 4em\">'), ','(put_atom(T, Tag), ','(tag(T, '</th>'), fail)))), true), ','(tag(T, '</tr>'), ','(sys_result_member2(E, J, Tags, T), ','(tag(T, '<tr class=\"headrow\">'), ','(tag(T, '<td>'), ','(put_atom(T, 'Total'), ','(tag(T, '</td>'), ','(;(','(member(Tag, Tags), ','(result_suite(E, Tag, Z), ','(sys_data_cell2(Z, T), fail))), true), ','(tag(T, '</tr>'), ','(tag(T, '</table>'), fail))))))))))))))))))))))).
sys_result_list2(_, _).
:-(sys_result_member2(E, J, Tags, T), ','(call_nth(runner_file(E, D, Title), I), ','(sys_zebra_row2(I, T), ','(format_atom('0~d_~c/package.html#~c', '.'(J, '.'(E, '.'(D, []))), H), ','(tag(T, '<td>'), ','(tag_format(T, '<a href=\"~a\">', '.'(H, [])), ','(put_atom(T, Title), ','(tag(T, '</a>'), ','(tag(T, '</td>'), ','(;(','(member(Tag, Tags), ','(result_tests(E, D, Tag, Z), ','(sys_data_cell2(Z, T), fail))), true), ','(tag(T, '</tr>'), fail))))))))))).
sys_result_member2(_, _, _, _).
:-(sys_folders_batch(Dir, Tags, Date), ','(call_nth(runner_folder(E, _), J), ','(format_atom('~w0~d_~w', '.'(Dir, '.'(J, '.'(E, []))), Dst), ','(ensure_directory(Dst), ','(format_atom('~w0~d_~w/package.html', '.'(Dir, '.'(J, '.'(E, []))), Name), ','(open(Name, write, S), ','(dom_output_new(S, T), ','(sys_begin_html2(E, '../../../../styles.css', T), ','(flush_output(T), ','(tag_format(T, '<h1 date=\"~a\">', '.'(Date, [])), ','(put_atom(T, 'Folder '), ','(put_atom(T, E), ','(tag(T, '</h1>'), ','(sys_folder_list2(E, Tags, T), ','(sys_legend2(Tags, T), ','(sys_end_html2(T), ','(close(T), fail))))))))))))))))).
sys_folders_batch(_, _, _).
:-(sys_folder_list2(E, Tags, T), ','(call_nth(runner_file(E, D, Title), L), ','(tag(T, '<h3>'), ','(tag_format(T, '<a name=\"~a\">', '.'(D, [])), ','(tag(T, '</a>'), ','(put_atom(T, 'File '), ','(put_atom(T, Title), ','(tag(T, '</h3>'), ','(tag(T, '<table class=\"rowtable\">'), ','(tag(T, '<tr class=\"headrow\">'), ','(tag(T, '<th style=\"width: 16em\">'), ','(put_atom(T, 'Predicate'), ','(tag(T, '</th>'), ','(;(','(member(Tag, Tags), ','(tag(T, '<th style=\"width: 4em\">'), ','(put_atom(T, Tag), ','(tag(T, '</th>'), fail)))), true), ','(tag(T, '</tr>'), ','(sys_folder_member2(E, D, L, Tags, T), ','(tag(T, '<tr class=\"headrow\">'), ','(tag(T, '<td>'), ','(put_atom(T, 'Total'), ','(tag(T, '</td>'), ','(;(','(member(Tag, Tags), ','(result_tests(E, D, Tag, Z), ','(sys_data_cell2(Z, T), fail))), true), ','(tag(T, '</tr>'), ','(tag(T, '</table>'), fail))))))))))))))))))))))).
sys_folder_list2(_, _, _).
:-(sys_folder_member2(E, D, L, Tags, T), ','(call_nth(runner_pred(F, N, E, D, _), I), ','(sys_zebra_row2(I, T), ','(format_atom('0~d_~c.html#~c/~d', '.'(L, '.'(D, '.'(F, '.'(N, [])))), H), ','(tag(T, '<td>'), ','(tag_format(T, '<a href=\"~a\">', '.'(H, [])), ','(write(T, /(F, N)), ','(tag(T, '</a>'), ','(tag(T, '</td>'), ','(;(','(member(Tag, Tags), ','(result_pred(F, N, E, D, Tag, Z), ','(sys_data_cell2(Z, T), fail))), true), ','(tag(T, '</tr>'), fail))))))))))).
sys_folder_member2(_, _, _, _, _).
:-(sys_files_batch(Dir, Tags, Base, Date), ','(call_nth(runner_folder(E, _), J), ','(call_nth(runner_file(E, D, Title), L), ','(format_atom('~w0~d_~w/0~d_~w.html', '.'(Dir, '.'(J, '.'(E, '.'(L, '.'(D, []))))), Name), ','(open(Name, write, S), ','(dom_output_new(S, T), ','(sys_begin_html2(D, '../../../../styles.css', T), ','(tag_format(T, '<h1 date=\"~a\">', '.'(Date, [])), ','(put_atom(T, 'File '), ','(put_atom(T, Title), ','(tag(T, '</h1>'), ','(sys_file_list2(E, D, Tags, Base, T), ','(sys_legend2(Tags, T), ','(sys_end_html2(T), ','(close(T), fail))))))))))))))).
sys_files_batch(_, _, _, _).
:-(sys_file_list2(E, D, Tags, Base, T), ','(runner_pred(F, N, E, D, _), ','(tag(T, '<h3>'), ','(tag_format(T, '<a name=\"~a/~d\">', '.'(F, '.'(N, []))), ','(tag(T, '</a>'), ','(put_atom(T, 'Predicate '), ','(write(T, /(F, N)), ','(tag(T, '</h3>'), ','(tag(T, '<table class=\"rowtable\">'), ','(tag(T, '<tr class=\"headrow\">'), ','(tag(T, '<th style=\"width: 16em\">'), ','(put_atom(T, 'Case'), ','(tag(T, '</th>'), ','(;(','(member(Tag, Tags), ','(tag(T, '<th style=\"width: 4em\">'), ','(put_atom(T, Tag), ','(tag(T, '</th>'), fail)))), true), ','(tag(T, '</tr>'), ','(sys_file_member2(F, N, E, D, Tags, Base, T), ','(tag(T, '<tr class=\"headrow\">'), ','(tag(T, '<td>'), ','(put_atom(T, 'Total'), ','(tag(T, '</td>'), ','(;(','(member(Tag, Tags), ','(result_pred(F, N, E, D, Tag, Z), ','(sys_data_cell2(Z, T), fail))), true), ','(tag(T, '</tr>'), ','(tag(T, '</table>'), fail))))))))))))))))))))))).
sys_file_list2(_, _, _, _, _).
:-(sys_file_member2(F, N, E, D, Tags, Base, T), ','(call_nth(clause(runner_case(F, N, E, D, C), _), I), ','(sys_zebra_row2(I, T), ','(format_atom('~c~c/~c.html#~c', '.'(Base, '.'(E, '.'(D, '.'(C, [])))), H), ','(tag(T, '<td>'), ','(tag_format(T, '<a href=\"~a\">', '.'(H, [])), ','(put_atom(T, C), ','(tag(T, '</a>'), ','(tag(T, '</td>'), ','(;(','(member(Tag, Tags), ','(result(F, N, E, D, C, Tag, Z), ','(sys_data_cell2(Z, T), fail))), true), ','(tag(T, '</tr>'), fail))))))))))).
sys_file_member2(_, _, _, _, _, _, _).
:-(sys_begin_html2(Title, C, T), ','(format_atom('~c', '.'(C, []), H), ','(tag(T, '<html author=\"7\">'), ','(tag(T, '<head>'), ','(tag(T, '<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>'), ','(tag(T, '<title editable=\"nocomment\">'), ','(put_atom(T, Title), ','(tag(T, '</title>'), ','(tag_format(T, '<link rel=\"stylesheet\" href=\"~a\"/>', '.'(H, [])), ','(tag(T, '</head>'), tag(T, '<body class=\"showbody\">'))))))))))).
:-(sys_end_html2(T), ','(tag(T, '</body>'), tag(T, '</html>'))).
:-(sys_legend2(Tags, T), ','(tag(T, '<h3>'), ','(put_atom(T, 'Legend'), ','(tag(T, '</h3>'), ','(legend_table(Legend), ','(tag(T, '<p>'), ','(put_atom(T, Legend), ','(tag(T, '</p>'), sys_legend_column2(Tags, T))))))))).
:-(sys_legend_column2(Tags, T), ','(tag(T, '<table>'), ','(member(Tag, Tags), ','(legend_column(Tag, Legend), ','(tag(T, '<tr>'), ','(tag(T, '<td style=\"width: 4em\">'), ','(put_atom(T, Tag), ','(tag(T, '</td>'), ','(tag(T, '<td style=\"width: 32em\">'), ','(put_atom(T, Legend), ','(tag(T, '</td>'), ','(tag(T, '</tr>'), fail)))))))))))).
:-(sys_legend_column2(_, T), tag(T, '</table>')).
:-(sys_zebra_row2(N, T), ','(=:=(1, mod(N, 2)), ','(!, tag(T, '<tr class=\"normrow\">')))).
:-(sys_zebra_row2(_, T), tag(T, '<tr class=\"oddrow\">')).
:-(sys_data_cell2(V, _), ','(var(V), throw(error(instantiation_error, _)))).
:-(sys_data_cell2(-(A, B), T), ','(integer(A), ','(integer(B), ','(!, ','(tag(T, '<td style=\"text-align: right\">'), ','(write(T, A), ','(write(T, ' '), ','(write(T, B), tag(T, '</td>'))))))))).
:-(sys_data_cell2(A, T), ','(integer(A), ','(!, ','(tag(T, '<td style=\"text-align: right\">'), ','(write(T, A), tag(T, '</td>')))))).
:-(sys_data_cell2(V, _), throw(error(type_error(data_cell, V), _))).
:-(decode_report_opts(V, _, _), ','(var(V), throw(error(instantiation_error, _)))).
:-(decode_report_opts('.'(X, L), I, O), ','(!, ','(decode_report_opt(X, I, H), decode_report_opts(L, H, O)))).
:-(decode_report_opts([], H, H), !).
:-(decode_report_opts(L, _, _), throw(error(type_error(list, L), _))).
:-(decode_report_opt(V, _, _), ','(var(V), throw(error(instantiation_error, _)))).
:-(decode_report_opt(tests(A), v(_, Y, Z, T, V, W), v(A, Y, Z, T, V, W)), ','(!, sys_check_atom(A))).
:-(decode_report_opt(title(A), v(X, _, Z, T, V, W), v(X, A, Z, T, V, W)), ','(!, sys_check_atom(A))).
:-(decode_report_opt(date(A), v(X, Y, _, T, V, W), v(X, Y, A, T, V, W)), ','(!, sys_check_atom(A))).
:-(decode_report_opt(root(A), v(X, Y, Z, _, V, W), v(X, Y, Z, A, V, W)), ','(!, sys_check_atom(A))).
:-(decode_report_opt(subtitle(A), v(X, Y, Z, T, _, W), v(X, Y, Z, T, A, W)), ','(!, sys_check_atom(A))).
:-(decode_report_opt(multi(B), v(X, Y, Z, T, V, F), v(X, Y, Z, T, V, G)), ','(!, sys_opt_boolean(B, 1, F, G))).
:-(decode_report_opt(O, _, _), throw(error(type_error(report_option, O), _))).