[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