Matthew Wilson wrote: > I wrote a function that converts a tuple of tuples into html. For > example: > > In [9]: x > Out[9]: > ('html', > ('head', ('title', 'this is the title!')), > ('body', > ('h1', 'this is the header!'), > ('p', 'paragraph one is boring.'), > ('p', > 'but paragraph 2 ', > ('a', {'href': 'http://example.com'}, 'has a link'), > '!'))) > > > In [10]: as_html(x, sys.stdout) > <html> > > <head> > > <title>this is the title!</title> > > </head> > > <body> > > <h1>this is the header!</h1> > > <p>paragraph one is boring.</p> > > <p>but paragraph 2 <a href="http://example.com">has a link</a>!</p> > > </body> > > </html> > > > I'd like to know ways to make it better (more efficient, able to deal > with enormous-size arguments, etc). How would I write this as a > generator? > > Here's the definition for as_html: > > def as_html(l, s): > "Convert a list or tuple into html and write it to stream s." > if isinstance(l, (tuple, list)): > tagname = l[0] > if isinstance(l[1], dict): > attributes = ' '.join(['%s="%s"' % (k, l[1][k]) for k in l[1]]) > s.write('<%s %s>' % (tagname, attributes)) > else: > s.write('<%s>' % tagname) > if tagname in ('html', 'head', 'body'): > s.write('\n\n') > for ll in l[1:]: > as_html(ll, s) > s.write('</%s>' % tagname) > if tagname not in ('a', 'b', 'ul'): > s.write('\n\n') > elif isinstance(l, str): > s.write(l) > > > All comments welcome. TIA > Before you put too much work into this you might want to take a look at HTMLgen: http://www.python.net/crew/friedrich/HTMLgen/html/main.html
-Larry -- http://mail.python.org/mailman/listinfo/python-list