1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 """HTML formatting drivers for ureports"""
19
20 __docformat__ = "restructuredtext en"
21
22 from logilab.common.ureports import HTMLWriter
23
25 """format layouts as HTML"""
26
36
41
43 """display a section (using <chapter> (level 0) or <section>)"""
44 if self.section == 0:
45 tag = "chapter"
46 else:
47 tag = "section"
48 self.section += 1
49 self.writeln(self._indent('<%s%s>' % (tag, self.handle_attrs(layout))))
50 self.format_children(layout)
51 self.writeln(self._indent('</%s>'% tag))
52 self.section -= 1
53
59
61 """display a table as html"""
62 self.writeln(self._indent(' <table%s><title>%s</title>' \
63 % (self.handle_attrs(layout), layout.title)))
64 self.writeln(self._indent(' <tgroup cols="%s">'% layout.cols))
65 for i in range(layout.cols):
66 self.writeln(self._indent(' <colspec colname="c%s" colwidth="1*"/>' % i))
67
68 table_content = self.get_table_content(layout)
69
70 if layout.cheaders:
71 self.writeln(self._indent(' <thead>'))
72 self._write_row(table_content[0])
73 self.writeln(self._indent(' </thead>'))
74 table_content = table_content[1:]
75 elif layout.rcheaders:
76 self.writeln(self._indent(' <thead>'))
77 self._write_row(table_content[-1])
78 self.writeln(self._indent(' </thead>'))
79 table_content = table_content[:-1]
80
81 self.writeln(self._indent(' <tbody>'))
82 for i in range(len(table_content)):
83 row = table_content[i]
84 self.writeln(self._indent(' <row>'))
85 for j in range(len(row)):
86 cell = row[j] or ' '
87 self.writeln(self._indent(' <entry>%s</entry>' % cell))
88 self.writeln(self._indent(' </row>'))
89 self.writeln(self._indent(' </tbody>'))
90 self.writeln(self._indent(' </tgroup>'))
91 self.writeln(self._indent(' </table>'))
92
94 """write content of row (using <row> <entry>)"""
95 self.writeln(' <row>')
96 for j in range(len(row)):
97 cell = row[j] or ' '
98 self.writeln(' <entry>%s</entry>' % cell)
99 self.writeln(self._indent(' </row>'))
100
102 """display a list (using <itemizedlist>)"""
103 self.writeln(self._indent(' <itemizedlist%s>' % self.handle_attrs(layout)))
104 for row in list(self.compute_content(layout)):
105 self.writeln(' <listitem><para>%s</para></listitem>' % row)
106 self.writeln(self._indent(' </itemizedlist>'))
107
109 """display links (using <para>)"""
110 self.write(self._indent(' <para>'))
111 self.format_children(layout)
112 self.writeln('</para>')
113
120
122 """display links (using <ulink>)"""
123 self.write('<ulink url="%s"%s>%s</ulink>' % (layout.url,
124 self.handle_attrs(layout),
125 layout.label))
126
127 - def visit_verbatimtext(self, layout):
128 """display verbatim text (using <programlisting>)"""
129 self.writeln(self._indent(' <programlisting>'))
130 self.write(layout.data.replace('&', '&').replace('<', '<'))
131 self.writeln(self._indent(' </programlisting>'))
132
133 - def visit_text(self, layout):
134 """add some text"""
135 self.write(layout.data.replace('&', '&').replace('<', '<'))
136
138 """correctly indent string according to section"""
139 return ' ' * 2*(self.section) + string
140