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