Mercurial > genshi > mirror
changeset 658:5df08e5195b8 trunk
The `TextSerializer` class no longer strips all markup in text by default, so that it is still possible to use the Genshi `escape` function even with text templates. The old behavior is available via the `strip_markup` option of the serializer. Closes #146.
author | cmlenz |
---|---|
date | Thu, 22 Nov 2007 22:07:15 +0000 |
parents | 54964f7d2253 |
children | c50d2705016e |
files | ChangeLog genshi/output.py |
diffstat | 2 files changed, 24 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -29,10 +29,10 @@ * Text templates now default to rendering as plain text; it is no longer necessary to explicitly specify the "text" method to the `render()` or `serialize()` method of the generated markup stream. - * XInclude elements in markup templates now support the `parse` attribute; when - set to "xml" (the default), the include is processed as before, but when set - to "text", the included template is parsed as a text template using the new - syntax (ticket #101). + * XInclude elements in markup templates now support the `parse` attribute; + when set to "xml" (the default), the include is processed as before, but + when set to "text", the included template is parsed as a text template using + the new syntax (ticket #101). * Python code blocks inside match templates are now executed (ticket #155). * The template engine plugin no longer adds the `default_doctype` when the `fragment` parameter is `True`. @@ -40,6 +40,10 @@ #150). * The `py:replace` directive can now also be used as an element, with an attribute named `value` (ticket #144). + * The `TextSerializer` class no longer strips all markup in text by default, + so that it is still possible to use the Genshi `escape` function even with + text templates. The old behavior is available via the `strip_markup` option + of the serializer (ticket #146). Version 0.4.4
--- a/genshi/output.py +++ b/genshi/output.py @@ -436,20 +436,29 @@ <Hello!> If text events contain literal markup (instances of the `Markup` class), - tags or entities are stripped from the output: + that markup is by default passed through unchanged: - >>> elem = tag.div(Markup('<a href="foo">Hello!</a><br/>')) - >>> print elem - <div><a href="foo">Hello!</a><br/></div> - >>> print ''.join(TextSerializer()(elem.generate())) - Hello! + >>> elem = tag.div(Markup('<a href="foo">Hello & Bye!</a><br/>')) + >>> print elem.generate().render(TextSerializer) + <a href="foo">Hello & Bye!</a><br/> + + You can use the `strip_markup` to change this behavior, so that tags and + entities are stripped from the output (or in the case of entities, + replaced with the equivalent character): + + >>> print elem.generate().render(TextSerializer, strip_markup=True) + Hello & Bye! """ + def __init__(self, strip_markup=False): + self.strip_markup = strip_markup + def __call__(self, stream): + strip_markup = self.strip_markup for event in stream: if event[0] is TEXT: data = event[1] - if type(data) is Markup: + if strip_markup and type(data) is Markup: data = data.striptags().stripentities() yield unicode(data)