changeset 800:1d7b582b09a4

Fix for filter transformation, closing #290. Thanks to Stephen Compall for reporting the problem and providing a patch.
author cmlenz
date Tue, 03 Mar 2009 20:17:46 +0000
parents b12cc3737768
children aa274188b77a
files ChangeLog genshi/filters/tests/transform.py genshi/filters/transform.py
diffstat 3 files changed, 13 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -11,6 +11,8 @@
 
  * Fix problem with I18n filter that would get confused by expressions in
    attribute values when inside an `i18n:msg` block (ticket #250).
+ * Fix problem with the transformation filter dropping events after the
+   selection (ticket #290).
 
 
 Version 0.5.1
--- a/genshi/filters/tests/transform.py
+++ b/genshi/filters/tests/transform.py
@@ -522,6 +522,15 @@
             self._filter('.', 'foo'),
             [[(None, TEXT, u'foo')]])
 
+    def test_filter_after_outside(self):
+        stream = _transform(
+            '<root>x</root>', Transformer('//root/text()').filter(lambda x: x))
+        self.assertEqual(
+            list(stream),
+            [(None, START, u'root'),
+             (OUTSIDE, TEXT, u'x'),
+             (None, END, u'root')])
+
 
 class MapTest(unittest.TestCase):
     def _map(self, select, kind=None):
--- a/genshi/filters/transform.py
+++ b/genshi/filters/transform.py
@@ -912,7 +912,7 @@
                 for queue_event in flush(queue):
                     yield queue_event
             elif mark is OUTSIDE:
-                stopped = True
+                stopped = False
                 queue.append(event)
                 for mark, event in stream:
                     if mark is not OUTSIDE:
@@ -923,7 +923,7 @@
                 for queue_event in flush(queue):
                     yield queue_event
                 if not stopped:
-                    yield None, event
+                    yield mark, event
             else:
                 yield mark, event
         for queue_event in flush(queue):
Copyright (C) 2012-2017 Edgewall Software