1 :- module(pltables_export_latex, [
2 latex_header/2,
3 latex_footer/2,
4 latex_table_header/2,
5 latex_table_footer/2,
6 latex_table_rows/2
7 ]).
8
9 :- use_module(pltables_export_tools).
10 :- use_module(pltables).
11
12 :- use_module(probsrc(module_information)).
13
14 :- module_info(group,pltables).
15 :- module_info(description,'This module is used to export coverage tables to latex.').
16
17 % ----
18 % table headers
19 % ----
20 latex_header(S, TableName) :-
21 pltable(TableName, Attributes),
22 write(S,'\\documentclass[a4paper,10pt]{article}\n'),
23 write(S,'\\usepackage{a4wide}\n\\usepackage{longtable}\n\\usepackage{xcolor}\n\\begin{document}\n'),
24 ( member(headline(XHU), Attributes) ->
25 latex_escape(XHU,XH),
26 format(S, '\\textbf{~w} \\\\\\\\\n', [XH])
27 ; true
28 ).
29
30 % ----
31 % table footers
32 % ----
33 latex_footer(S, _TableName) :-
34 write(S,'\\end{document}').
35
36 % ----
37 % table header / footer
38 % ----
39 latex_table_header(S, TableName) :-
40 pltable(TableName, TableAttributes),
41 pltables:pltable_header(TableName, Columns, Attributes),
42 (
43 member(description(XDU, DescAttrs), TableAttributes)
44 -> latex_escape(XDU,XD),
45 (member(bold, DescAttrs) -> write(S, '\\textbf{') ; true),
46 format(S, '~w\n', [XD]),
47 (member(bold, DescAttrs) -> write(S, '}') ; true)
48 ; true
49 ),
50 write(S, '\\begin{longtable}'),
51 write(S, '{|'),
52 write_latex_table_header1(S, Attributes),
53 write(S, '}\n\\hline\n'),
54 write_latex_table_header2(S, Columns, Attributes).
55
56 write_latex_table_header1(_S, []).
57 write_latex_table_header1(S, [Attributes|TAttributes]) :-
58 (member(align(left), Attributes) -> write(S, 'l|') ; true),
59 (member(align(right), Attributes) -> write(S, 'r|') ; true),
60 (member(align(center), Attributes) -> write(S, 'c|') ; true),
61 (\+member(align(_), Attributes) -> write(S, 'l|') ; true),
62 write_latex_table_header1(S, TAttributes).
63
64 write_latex_table_header2(S, [Column], _Attributes) :-
65 latex_escape(Column, EscapedColumn),
66 format(S, '~w \\\\\n\\hline\n', [EscapedColumn]).
67 write_latex_table_header2(S, [Column | Columns], Attributes) :-
68 latex_escape(Column, EscapedColumn),
69 format(S, '~w & ', [EscapedColumn]),
70 write_latex_table_header2(S, Columns, Attributes).
71
72 latex_table_footer(S, _TableName) :-
73 write(S,'\\end{longtable}\n').
74
75
76 % ----
77 % table rows
78 % ----
79 latex_table_rows(S, TableName) :-
80 findall(Entries, pltables:pltable_row(TableName, Entries, Attributes), ListOfEntries),
81 findall(Attributes, pltables:pltable_row(TableName, Entries, Attributes), ListOfAttributes),
82 pltables:pltable(TableName, TableAttributes),
83 pltables:pltable_header(TableName, _, ColumnsAttributes),
84 write_latex_table_rows(S, ListOfEntries, ListOfAttributes, TableAttributes, ColumnsAttributes).
85
86 write_latex_table_rows(_S, [], [], _TableAttributes, _ColumnsAttributes).
87 write_latex_table_rows(S, [Entries | MoreEntries], [RowAttributes | MoreAttributes], TableAttributes, ColumnsAttributes) :-
88 write_latex_table_row(S, Entries, RowAttributes, TableAttributes, ColumnsAttributes),
89 write(S, ' \\\\\n\\hline\n'),
90 write_latex_table_rows(S, MoreEntries, MoreAttributes, TableAttributes, ColumnsAttributes).
91
92 write_latex_table_row(S, [Entry], RowAttributes, TableAttributes, [ColumnAttribute]) :-
93 merge_attributes(TableAttributes, ColumnAttribute, TmpAttributes),
94 merge_attributes(TmpAttributes, RowAttributes, MergedAttributes),
95 (member(color(C), MergedAttributes) -> format(S, '\\textcolor[HTML]{~w}{', [C]) ; true),
96 (member(bold, MergedAttributes) -> write(S, '\\textbf{') ; true),
97 latex_escape(Entry, EscapedEntry),
98 format(S, '~w', [EscapedEntry]),
99 (member(bold, MergedAttributes) -> write(S, '}') ; true),
100 (member(color(C), MergedAttributes) -> write(S, '}') ; true).
101 write_latex_table_row(S, [Entry | Entries], RowAttributes, TableAttributes, [ColumnAttribute | ColumnsAttributes]) :-
102 merge_attributes(TableAttributes, ColumnAttribute, TmpAttributes),
103 merge_attributes(TmpAttributes, RowAttributes, MergedAttributes),
104 (member(color(C), MergedAttributes) -> format(S, '\\textcolor[HTML]{~w}{', [C]) ; true),
105 (member(bold, MergedAttributes) -> write(S, '\\textbf{') ; true),
106 latex_escape(Entry, EscapedEntry),
107 format(S, '~w', [EscapedEntry]),
108 (member(bold, MergedAttributes) -> write(S, '}') ; true),
109 (member(color(C), MergedAttributes) -> write(S, '}') ; true),
110 write(S, ' & '),
111 write_latex_table_row(S, Entries, RowAttributes, TableAttributes, ColumnsAttributes).
112
113 % ----
114 % escaping characters
115 % ----
116 latex_escape(ToEscape, Escaped) :-
117 atom(ToEscape), !,
118 atom_codes(ToEscape, CodeList),
119 latex_escape2(CodeList, EscapedCodeList),
120 atom_codes(Escaped, EscapedCodeList).
121 latex_escape(ToEscape, ToEscape).
122
123 latex_escape2([],[]).
124 latex_escape2([95|T], [92,95|EscT]) :- !,
125 latex_escape2(T, EscT).
126 latex_escape2([35|T], [92,35|EscT]) :- !,
127 latex_escape2(T, EscT).
128 latex_escape2([36|T], [92,36|EscT]) :- !,
129 latex_escape2(T, EscT).
130 latex_escape2([37|T], [92,37|EscT]) :- !,
131 latex_escape2(T, EscT).
132 latex_escape2([H|T], [H|EscT]) :-
133 latex_escape2(T, EscT).