# HG changeset patch # User cmlenz # Date 1236111609 0 # Node ID 9fe8fdca279eccff0d609844ce6f59ae705886ed # Parent c690de5abafd1a6c0ff929568e518ad6830beb3f Ported [1000] to stable branch. diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,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 diff --git a/genshi/filters/tests/transform.py b/genshi/filters/tests/transform.py --- 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( + 'x', 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): diff --git a/genshi/filters/transform.py b/genshi/filters/transform.py --- 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):