[py-svn] r34814 - in py/dist/py: apigen apigen/rest rest rest/testing

guido at codespeak.net guido at codespeak.net
Mon Nov 20 22:30:17 CET 2006


Author: guido
Date: Mon Nov 20 22:30:15 2006
New Revision: 34814

Modified:
   py/dist/py/apigen/rest/htmlhandlers.py
   py/dist/py/apigen/style.css
   py/dist/py/rest/testing/test_transform.py
   py/dist/py/rest/transform.py
Log:
Small style updates for apigen output, changed rest/transform.py so it uses
py.xml.html instead of generating strings.


Modified: py/dist/py/apigen/rest/htmlhandlers.py
==============================================================================
--- py/dist/py/apigen/rest/htmlhandlers.py	(original)
+++ py/dist/py/apigen/rest/htmlhandlers.py	Mon Nov 20 22:30:15 2006
@@ -1,39 +1,35 @@
 from py.__.rest.transform import HTMLHandler, entitize
+from py.xml import html
 
 class PageHandler(HTMLHandler):
     def startDocument(self):
-        self._data += ['<html>\n', '<head>\n',
-                       '<title>api reference</title>\n',
-                       ('<link type="text/css" rel="stylesheet" '
-                        'href="style.css" />'),
-                       '</head>\n', '<body>\n']
+        self.title = 'api reference'
+        super(PageHandler, self).startDocument()
+        self.head.append(html.link(type='text/css', rel='stylesheet',
+                                   href='style.css'))
 
     def handleLink(self, text, target):
-        self._data.append('<a href="%s" onclick="parent.set_breadcrumb(this)" '
-                            'target="content">%s</a>' % (
-                            entitize(target), entitize(text)))
+        self.tagstack[-1].append(html.a(text, href=target,
+                                        onclick='parent.set_breadcrumb(this)',
+                                        target='content'))
+
 
 class IndexHandler(PageHandler):
     ignore_text = False
 
     def startDocument(self):
-        self._data += ['<html>\n', '<head>\n',
-                       '<title>api reference</title>\n',
-                       ('<link type="text/css" rel="stylesheet" '
-                        'href="style.css" />'),
-                       '<script type="text/javascript" src="apigen.js">',
-                       '</script>',
-                       '</head>\n',
-                       ('<body onload="set_breadcrumb('
-                        'document.getElementsByTagName(\'a\')[0])">\n'),
-                       '<div id="sidebar">']
+        super(IndexHandler, self).startDocument()
+        self.head.append(html.script(type='text/javascript', src='apigen.js'))
+        self.body.attr.onload = ('set_breadcrumb('
+                                    'document.getElementsByTagName("a")[0])')
+        self._push(html.div(id='sidebar'))
 
     def endDocument(self):
-        self._data += ['</div>', '<div id="main">',
-                        '<div id="breadcrumb">', '</div>',
-                       ('<iframe name="content" id="content" width="100%" '
-                        'src="module_py.html">'),
-                        '</iframe>', '</div>']
+        maindiv = html.div(id="main")
+        maindiv.append(html.div(id="breadcrumb"))
+        maindiv.append(html.iframe(name='content', id='content',
+                                   src='module_py.html'))
+        self.body.append(maindiv)
     
     def startTitle(self, depth):
         self.ignore_text = True
@@ -47,7 +43,7 @@
         super(IndexHandler, self).handleText(text)
 
     def handleLink(self, text, target):
-        self._data.append('<a href="%s" onclick="set_breadcrumb(this)" '
-                            'target="content">%s</a>' % (
-                            entitize(target), entitize(text)))
+        self.tagstack[-1].append(html.a(text, href=target,
+                                        onclick='set_breadcrumb(this)',
+                                        target='content'))
 

Modified: py/dist/py/apigen/style.css
==============================================================================
--- py/dist/py/apigen/style.css	(original)
+++ py/dist/py/apigen/style.css	Mon Nov 20 22:30:15 2006
@@ -12,6 +12,7 @@
 #content {
   border: 0px;
   height: 95%;
+  width: 100%;
 }
 
 #breadcrumb {

Modified: py/dist/py/rest/testing/test_transform.py
==============================================================================
--- py/dist/py/rest/testing/test_transform.py	(original)
+++ py/dist/py/rest/testing/test_transform.py	Mon Nov 20 22:30:15 2006
@@ -14,26 +14,27 @@
     endDocument = startDocument
 
 def test_transform_basic_html():
-    for rest, expected in ((Rest(Title('foo')), '<h1>foo</h1>\n'),
-                           (Rest(Paragraph('foo')), '<p>foo</p>\n'),
+    for rest, expected in ((Rest(Title('foo')), '<h1>foo</h1>'),
+                           (Rest(Paragraph('foo')), '<p>foo</p>'),
                            (Rest(SubParagraph('foo')),
-                            '<p class="sub">foo</p>\n'),
-                           (Rest(LiteralBlock('foo\nbar')),
-                            '<pre>foo\nbar</pre>\n'),
+                            '<p class="sub">foo</p>'),
+                           (Rest(LiteralBlock('foo\tbar')),
+                            '<pre>foo\tbar</pre>'),
                            (Rest(Paragraph(Link('foo',
                                                 'http://www.foo.com/'))),
-                            '<p><a href="http://www.foo.com/">foo</a></p>\n')):
+                            ('<p>\n  <a href="http://www.foo.com/">foo</a>'
+                             '</p>'))):
         html = convert_to_html(rest)
         assert html == expected
 
 def test_transform_list_simple():
     rest = Rest(ListItem('foo'), ListItem('bar'))
     html = convert_to_html(rest)
-    assert html == '<ul><li>foo</li>\n<li>bar</li>\n</ul>\n'
+    assert html == '<ul>\n  <li>foo</li>\n  <li>bar</li></ul>'
 
 def test_transform_list_nested():
     rest = Rest(ListItem('foo'), ListItem('bar', ListItem('baz')))
     html = convert_to_html(rest)
-    assert html == ('<ul><li>foo</li>\n<li>bar<ul><li>baz</li>\n</ul>\n'
-                    '</li>\n</ul>\n')
+    assert html == ('<ul>\n  <li>foo</li>\n  <li>bar\n    <ul>'
+                    '\n      <li>baz</li></ul></li></ul>')
 

Modified: py/dist/py/rest/transform.py
==============================================================================
--- py/dist/py/rest/transform.py	(original)
+++ py/dist/py/rest/transform.py	Mon Nov 20 22:30:15 2006
@@ -1,5 +1,6 @@
 import py
 from py.__.rest import rst
+from py.xml import html
 
 class RestTransformer(object):
     def __init__(self, tree):
@@ -18,6 +19,7 @@
             if name == 'Rest':
                 continue
             getattr(self, 'handle_%s' % (name,))(node, handler)
+
     def handle_Title(self, node, handler):
         depthkey = (node.abovechar, node.belowchar)
         if depthkey not in self._titledepths:
@@ -99,61 +101,77 @@
 class HTMLHandler(object):
     def __init__(self, title='untitled rest document'):
         self.title = title
-        self._data = []
-        self._listdepth = 0
+        self.root = None
+        self.tagstack = []
+        self._currlist = None
 
     def startDocument(self):
-        self._data += ['<html>\n', '<head>\n',
-                       '<title>%s</title>\n' % (self.title,),
-                       '</head>\n', '<body>\n']
+        h = html.html()
+        self.head = head = html.head()
+        self.title = title = html.title(self.title)
+        self._push(h)
+        h.append(head)
+        h.append(title)
+        self.body = body = html.body()
+        self._push(body)
 
     def endDocument(self):
-        self._data += ['</body>\n', '</html>\n']
-
-    def startTitle(self, depth):
-        self._data.append('<h%s>' % (depth,))
+        self._pop() # body
+        self._pop() # html
     
+    def startTitle(self, depth):
+        h = getattr(html, 'h%s' % (depth,))()
+        self._push(h)
+
     def endTitle(self, depth):
-        self._data.append('</h%s>\n' % (depth,))
+        self._pop()
 
     def startParagraph(self):
-        self._data.append('<p>')
+        self._push(html.p())
 
     def endParagraph(self):
-        self._data.append('</p>\n')
+        self._pop()
 
     def startSubParagraph(self):
-        self._data.append('<p class="sub">')
+        self._push(html.p(**{'class': 'sub'}))
 
     def endSubParagraph(self):
-        self._data.append('</p>\n')
+        self._pop()
 
     def handleLiteralBlock(self, text):
-        self._data.append('<pre>%s</pre>\n' % (entitize(text),))
+        self.tagstack[-1].append(html.pre(text))
 
     def handleText(self, text):
-        self._data.append(entitize(text))
+        self.tagstack[-1].append(text)
 
     def handleEm(self, text):
-        self._data.append('<em>%s</em>' % (entitize(text),))
+        self.tagstack[-1].append(html.em(text))
 
     def startListItem(self, type, startlist):
         if startlist:
             nodename = type == 'o' and 'ol' or 'ul'
-            self._data.append('<%s>' % (nodename,))
-        self._data.append('<li>')
+            self._push(getattr(html, nodename)())
+        self._push(html.li())
 
     def endListItem(self, type, closelist):
-        self._data.append('</li>\n')
+        self._pop()
         if closelist:
-            nodename = type == 'o' and 'ol' or 'ul'
-            self._data.append('</%s>\n' % (nodename,))
+            self._pop()
 
     def handleLink(self, text, target):
-        self._data.append('<a href="%s">%s</a>' % (entitize(target),
-                                                   entitize(text)))
+        self.tagstack[-1].append(html.a(text, href=target))
+
+    def _push(self, el):
+        if self.tagstack:
+            self.tagstack[-1].append(el)
+        else:
+            self.root = el
+        self.tagstack.append(el)
+
+    def _pop(self):
+        self.tagstack.pop()
 
     def _html(self):
-        return ''.join(self._data)
+        return self.root.unicode()
     html = property(_html)
 



More information about the pytest-commit mailing list