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():
Copyright (C) 2012-2017 Edgewall Software