Mercurial > genshi > genshi-test
changeset 89:d4c7617900e3
Support comments in templates that are not included in the output, in the same way Kid does: if the comment text starts with a `!` character, it is stripped from the output.
author | cmlenz |
---|---|
date | Mon, 17 Jul 2006 23:10:35 +0000 |
parents | 9ecae580dd93 |
children | 242610137d1f |
files | markup/output.py markup/template.py markup/tests/output.py markup/tests/template.py |
diffstat | 4 files changed, 33 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/markup/output.py +++ b/markup/output.py @@ -22,7 +22,7 @@ from itertools import chain from markup.core import escape, Markup, Namespace, QName -from markup.core import DOCTYPE, START, END, START_NS, END_NS, TEXT +from markup.core import DOCTYPE, START, END, START_NS, END_NS, TEXT, COMMENT __all__ = ['Serializer', 'XMLSerializer', 'HTMLSerializer'] @@ -151,6 +151,9 @@ elif kind is TEXT: yield escape(data, quotes=False) + elif kind is COMMENT: + yield Markup('<!--%s-->' % data) + class HTMLSerializer(Serializer): """Produces HTML text from an event stream. @@ -237,6 +240,9 @@ elif kind is TEXT: yield escape(data, quotes=False) + elif kind is COMMENT: + yield Markup('<!--%s-->' % data) + class _PushbackIterator(object): """A simple wrapper for iterators that allows pushing items back on the
--- a/markup/template.py +++ b/markup/template.py @@ -26,7 +26,7 @@ from StringIO import StringIO from markup.core import Attributes, Namespace, Stream, StreamEventKind -from markup.core import START, END, START_NS, END_NS, TEXT +from markup.core import START, END, START_NS, END_NS, TEXT, COMMENT from markup.eval import Expression from markup.input import XMLParser from markup.path import Path @@ -742,6 +742,10 @@ for kind, data, pos in self._interpolate(data, *pos): stream.append((kind, data, pos)) + elif kind is COMMENT: + if not data.lstrip().startswith('!'): + stream.append((kind, data, pos)) + else: stream.append((kind, data, pos))
--- a/markup/tests/output.py +++ b/markup/tests/output.py @@ -68,6 +68,11 @@ '"http://www.w3.org/TR/html4/strict.dtd">\n', output) + def test_comment(self): + stream = Stream([(Stream.COMMENT, 'foo bar', ('?', -1, -1))]) + output = stream.render(XMLSerializer) + self.assertEqual('<!--foo bar-->', output) + def suite(): suite = unittest.TestSuite()
--- a/markup/tests/template.py +++ b/markup/tests/template.py @@ -537,6 +537,22 @@ bar </div>""", str(tmpl.generate(Context(myvar='"foo"')))) + def test_normal_comment(self): + tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/"> + <!-- foo bar --> + </div>""") + self.assertEqual("""<div> + <!-- foo bar --> + </div>""", str(tmpl.generate())) + + def test_template_comment(self): + tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/"> + <!-- !foo --> + <!--!bar--> + </div>""") + self.assertEqual("""<div> + </div>""", str(tmpl.generate())) + def suite(): suite = unittest.TestSuite()