# HG changeset patch # User athomas # Date 1211243210 0 # Node ID c7badaa0be0c428546f88a4a3a8989332e52ee76 # Parent 9e466c16f40b41da1681e089b74fc07b4884aeb5 Fixed overly greedy `substitute` transformation. Reported in #226, thanks to jhammel for the ticket and patch! diff --git a/genshi/filters/transform.py b/genshi/filters/transform.py --- a/genshi/filters/transform.py +++ b/genshi/filters/transform.py @@ -546,13 +546,17 @@ Refer to the documentation for ``re.sub()`` for details. >>> html = HTML('Some text, some more text and ' - ... 'some bold text') - >>> print html | Transformer('body').substitute('(?i)some', 'SOME') - SOME text, some more text and SOME bold text - >>> tags = tag.html(tag.body('Some text, some more text and ', + ... 'some bold text\\n' + ... 'some italicised text') + >>> print html | Transformer('body/b').substitute('(?i)some', 'SOME') + Some text, some more text and SOME bold text + some italicised text + >>> tags = tag.html(tag.body('Some text, some more text and\\n', ... Markup('some bold text'))) - >>> print tags.generate() | Transformer('body').substitute('(?i)some', 'SOME') - SOME text, some more text and SOME bold text + >>> print tags.generate() | Transformer('body').substitute( + ... '(?i)some', 'SOME') + SOME text, some more text and + SOME bold text :param pattern: A regular expression object or string. :param replace: Replacement pattern. @@ -868,7 +872,7 @@ :param stream: The marked event stream to filter """ for mark, (kind, data, pos) in stream: - if kind is TEXT: + if mark is not None and kind is TEXT: new_data = self.pattern.sub(self.replace, data, self.count) if isinstance(data, Markup): data = Markup(new_data)