changeset 89:80386d62814f trunk

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 628ba9ed39ef
children c835e81c50af
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()
Copyright (C) 2012-2017 Edgewall Software