Mercurial > genshi > mirror
changeset 94:0f8800c46e21 trunk
Some bugfixes and minor performance improvements for the builder module.
author | cmlenz |
---|---|
date | Fri, 21 Jul 2006 09:32:56 +0000 |
parents | 08d77c7725e2 |
children | 2fe86a99947f |
files | markup/builder.py markup/tests/builder.py |
diffstat | 2 files changed, 23 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/markup/builder.py +++ b/markup/builder.py @@ -59,21 +59,22 @@ except TypeError: self.children.append(node) else: - for child in node: - self.append(children) + for child in children: + self.append(child) + + def _generate(self): + for child in self.children: + if isinstance(child, Fragment): + for event in child._generate(): + yield event + else: + if not isinstance(child, basestring): + child = unicode(child) + yield Stream.TEXT, child, (None, -1, -1) def generate(self): """Return a markup event stream for the fragment.""" - def _generate(): - for child in self.children: - if isinstance(child, Fragment): - for event in child.generate(): - yield event - else: - if not isinstance(child, basestring): - child = unicode(child) - yield Stream.TEXT, child, (-1, -1) - return Stream(_generate()) + return Stream(self._generate()) class Element(Fragment): @@ -174,14 +175,15 @@ def __repr__(self): return '<%s "%s">' % (self.__class__.__name__, self.tag) + def _generate(self): + yield Stream.START, (self.tag, self.attrib), (None, -1, -1) + for kind, data, pos in Fragment._generate(self): + yield kind, data, pos + yield Stream.END, self.tag, (None, -1, -1) + def generate(self): """Return a markup event stream for the fragment.""" - def _generate(): - yield Stream.START, (self.tag, self.attrib), (-1, -1) - for kind, data, pos in Fragment.generate(self): - yield kind, data, pos - yield Stream.END, self.tag, (-1, -1) - return Stream(_generate()) + return Stream(self._generate()) class ElementFactory(object):
--- a/markup/tests/builder.py +++ b/markup/tests/builder.py @@ -25,9 +25,9 @@ link = tag.a(href='#', title='Foo', accesskey=None)('Bar') bits = iter(link.generate()) self.assertEqual((Stream.START, ('a', [('href', "#"), ('title', "Foo")]), - (-1, -1)), bits.next()) - self.assertEqual((Stream.TEXT, u'Bar', (-1, -1)), bits.next()) - self.assertEqual((Stream.END, 'a', (-1, -1)), bits.next()) + (None, -1, -1)), bits.next()) + self.assertEqual((Stream.TEXT, u'Bar', (None, -1, -1)), bits.next()) + self.assertEqual((Stream.END, 'a', (None, -1, -1)), bits.next()) def suite():