+################################################################################
+# probably xml.sax.saxutils would work as well
+
+def escape_if_needed(s):
+ if use_html:
+ return re_html_escaping.sub(lambda x: html_escaping.get(x.group(0)), s)
+ else:
+ return s
+
+def headline(s, level=2, bodyelement=None):
+ if use_html:
+ if bodyelement:
+ print """<thead>
+ <tr><th colspan="2" class="title" onclick="toggle('%(bodyelement)s', 'table-row-group', 'table-row-group')">%(title)s <span class="toggle-msg">(click to toggle)</span></th></tr>
+ </thead>"""%{"bodyelement":bodyelement,"title":utils.html_escape(s)}
+ else:
+ print "<h%d>%s</h%d>" % (level, utils.html_escape(s), level)
+ else:
+ print "---- %s ----" % (s)
+
+# Colour definitions, 'end' isn't really for use
+
+ansi_colours = {
+ 'main': "\033[36m",
+ 'contrib': "\033[33m",
+ 'nonfree': "\033[31m",
+ 'arch': "\033[32m",
+ 'end': "\033[0m",
+ 'bold': "\033[1m",
+ 'maintainer': "\033[32m"}
+
+html_colours = {
+ 'main': ('<span style="color: aqua">',"</span>"),
+ 'contrib': ('<span style="color: yellow">',"</span>"),
+ 'nonfree': ('<span style="color: red">',"</span>"),
+ 'arch': ('<span style="color: green">',"</span>"),
+ 'bold': ('<span style="font-weight: bold">',"</span>"),
+ 'maintainer': ('<span style="color: green">',"</span>")}
+
+def colour_output(s, colour):
+ if use_html:
+ return ("%s%s%s" % (html_colours[colour][0], utils.html_escape(s), html_colours[colour][1]))
+ else:
+ return ("%s%s%s" % (ansi_colours[colour], s, ansi_colours['end']))
+
+def escaped_text(s, strip=False):
+ if use_html:
+ if strip:
+ s = s.strip()
+ return "<pre>%s</pre>" % (s)
+ else:
+ return s
+
+def formatted_text(s, strip=False):
+ if use_html:
+ if strip:
+ s = s.strip()
+ return "<pre>%s</pre>" % (utils.html_escape(s))
+ else:
+ return s
+
+def output_row(s):
+ if use_html:
+ return """<tr><td>"""+s+"""</td></tr>"""
+ else:
+ return s
+
+def format_field(k,v):
+ if use_html:
+ return """<tr><td class="key">%s:</td><td class="val">%s</td></tr>"""%(k,v)
+ else:
+ return "%s: %s"%(k,v)
+
+def foldable_output(title, elementnameprefix, content, norow=False):
+ d = {'elementnameprefix':elementnameprefix}
+ if use_html:
+ print """<div id="%(elementnameprefix)s-wrap"><a name="%(elementnameprefix)s" />
+ <table class="infobox rfc822">"""%d
+ headline(title, bodyelement="%(elementnameprefix)s-body"%d)
+ if use_html:
+ print """ <tbody id="%(elementnameprefix)s-body" class="infobody">"""%d
+ if norow:
+ print content
+ else:
+ print output_row(content)
+ if use_html:
+ print """</tbody></table></div>"""
+