1 """HTML formatting drivers for ureports.
2
3 :copyright:
4 2004-2008 `LOGILAB S.A. <http://www.logilab.fr>`_ (Paris, FRANCE),
5 all rights reserved.
6
7 :contact:
8 http://www.logilab.org/project/logilab-common --
9 mailto:python-projects@logilab.org
10
11 :license:
12 `General Public License version 2
13 <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>`_
14 """
15 from __future__ import generators
16 __docformat__ = "restructuredtext en"
17
18 from logilab.common.ureports import HTMLWriter
19
21 """format layouts as HTML"""
22
32
37
39 """display a section (using <chapter> (level 0) or <section>)"""
40 if self.section == 0:
41 tag = "chapter"
42 else:
43 tag = "section"
44 self.section += 1
45 self.writeln(self._indent('<%s%s>' % (tag, self.handle_attrs(layout))))
46 self.format_children(layout)
47 self.writeln(self._indent('</%s>'% tag))
48 self.section -= 1
49
55
57 """display a table as html"""
58 self.writeln(self._indent(' <table%s><title>%s</title>' \
59 % (self.handle_attrs(layout), layout.title)))
60 self.writeln(self._indent(' <tgroup cols="%s">'% layout.cols))
61 for i in range(layout.cols):
62 self.writeln(self._indent(' <colspec colname="c%s" colwidth="1*"/>' % i))
63
64 table_content = self.get_table_content(layout)
65
66 if layout.cheaders:
67 self.writeln(self._indent(' <thead>'))
68 self._write_row(table_content[0])
69 self.writeln(self._indent(' </thead>'))
70 table_content = table_content[1:]
71 elif layout.rcheaders:
72 self.writeln(self._indent(' <thead>'))
73 self._write_row(table_content[-1])
74 self.writeln(self._indent(' </thead>'))
75 table_content = table_content[:-1]
76
77 self.writeln(self._indent(' <tbody>'))
78 for i in range(len(table_content)):
79 row = table_content[i]
80 self.writeln(self._indent(' <row>'))
81 for j in range(len(row)):
82 cell = row[j] or ' '
83 self.writeln(self._indent(' <entry>%s</entry>' % cell))
84 self.writeln(self._indent(' </row>'))
85 self.writeln(self._indent(' </tbody>'))
86 self.writeln(self._indent(' </tgroup>'))
87 self.writeln(self._indent(' </table>'))
88
90 """write content of row (using <row> <entry>)"""
91 self.writeln(' <row>')
92 for j in range(len(row)):
93 cell = row[j] or ' '
94 self.writeln(' <entry>%s</entry>' % cell)
95 self.writeln(self._indent(' </row>'))
96
98 """display a list (using <itemizedlist>)"""
99 self.writeln(self._indent(' <itemizedlist%s>' % self.handle_attrs(layout)))
100 for row in list(self.compute_content(layout)):
101 self.writeln(' <listitem><para>%s</para></listitem>' % row)
102 self.writeln(self._indent(' </itemizedlist>'))
103
105 """display links (using <para>)"""
106 self.write(self._indent(' <para>'))
107 self.format_children(layout)
108 self.writeln('</para>')
109
116
118 """display links (using <ulink>)"""
119 self.write('<ulink url="%s"%s>%s</ulink>' % (layout.url,
120 self.handle_attrs(layout),
121 layout.label))
122
123 - def visit_verbatimtext(self, layout):
124 """display verbatim text (using <programlisting>)"""
125 self.writeln(self._indent(' <programlisting>'))
126 self.write(layout.data.replace('&', '&').replace('<', '<'))
127 self.writeln(self._indent(' </programlisting>'))
128
129 - def visit_text(self, layout):
130 """add some text"""
131 self.write(layout.data.replace('&', '&').replace('<', '<'))
132
134 """correctly indent string according to section"""
135 return ' ' * 2*(self.section) + string
136