Ticket #111: xmldecl-r557.diff
| File xmldecl-r557.diff, 5.9 KB (added by Alec Thomas <alec@…>, 16 years ago) |
|---|
-
genshi/core.py
62 62 START_CDATA = StreamEventKind('START_CDATA') #: start CDATA section 63 63 END_CDATA = StreamEventKind('END_CDATA') #: end CDATA section 64 64 PI = StreamEventKind('PI') #: processing instruction 65 XML_DECL = StreamEventKind('XML_DECL') #: XML declaration PI 65 66 COMMENT = StreamEventKind('COMMENT') #: comment 66 67 67 68 def __init__(self, events): … … 214 215 START_CDATA = Stream.START_CDATA 215 216 END_CDATA = Stream.END_CDATA 216 217 PI = Stream.PI 218 XML_DECL = Stream.XML_DECL 217 219 COMMENT = Stream.COMMENT 218 220 219 221 def _ensure(stream): -
genshi/tests/input.py
71 71 <div>\xf6</div> 72 72 """.encode('iso-8859-1') 73 73 events = list(XMLParser(StringIO(text))) 74 kind, data, pos = events[ 1]74 kind, data, pos = events[2] 75 75 self.assertEqual(Stream.TEXT, kind) 76 76 self.assertEqual(u'\xf6', data) 77 77 … … 181 181 self.assertEqual(u'php', target) 182 182 self.assertEqual(u'echo "Foobar"', data) 183 183 184 def test_xmldecl(self): 185 text = '<?xml version="1.0" ?><root />' 186 events = list(XMLParser(StringIO(text))) 187 kind, (version, encoding, standalone), pos = events[0] 188 self.assertEqual(Stream.XML_DECL, kind) 189 self.assertEqual(u'1.0', version) 190 self.assertEqual(None, encoding) 191 self.assertEqual(-1, standalone) 192 193 def test_xmldecl_encoding(self): 194 text = '<?xml version="1.0" encoding="utf-8" ?><root />' 195 events = list(XMLParser(StringIO(text))) 196 kind, (version, encoding, standalone), pos = events[0] 197 self.assertEqual(Stream.XML_DECL, kind) 198 self.assertEqual(u'1.0', version) 199 self.assertEqual(u'utf-8', encoding) 200 self.assertEqual(-1, standalone) 201 202 def test_xmldecl_standalone(self): 203 text = '<?xml version="1.0" standalone="yes" ?><root />' 204 events = list(XMLParser(StringIO(text))) 205 kind, (version, encoding, standalone), pos = events[0] 206 self.assertEqual(Stream.XML_DECL, kind) 207 self.assertEqual(u'1.0', version) 208 self.assertEqual(None, encoding) 209 self.assertEqual(1, standalone) 210 184 211 def test_processing_instruction_trailing_qmark(self): 185 212 text = '<?php echo "Foobar" ??>' 186 213 events = list(HTMLParser(StringIO(text))) -
genshi/input.py
27 27 28 28 from genshi.core import Attrs, QName, Stream, stripentities 29 29 from genshi.core import DOCTYPE, START, END, START_NS, END_NS, TEXT, \ 30 START_CDATA, END_CDATA, PI, COMMENT30 START_CDATA, END_CDATA, PI, XML_DECL, COMMENT 31 31 32 32 __all__ = ['ET', 'ParseError', 'XMLParser', 'XML', 'HTMLParser', 'HTML'] 33 33 __docformat__ = 'restructuredtext en' … … 123 123 parser.StartCdataSectionHandler = self._handle_start_cdata 124 124 parser.EndCdataSectionHandler = self._handle_end_cdata 125 125 parser.ProcessingInstructionHandler = self._handle_pi 126 parser.XmlDeclHandler = self._handle_xml_decl 126 127 parser.CommentHandler = self._handle_comment 127 128 128 129 # Tell Expat that we'll handle non-XML entities ourselves … … 234 235 def _handle_pi(self, target, data): 235 236 self._enqueue(PI, (target, data)) 236 237 238 def _handle_xml_decl(self, version, encoding, standalone): 239 self._enqueue(XML_DECL, (version, encoding, standalone)) 240 237 241 def _handle_comment(self, text): 238 242 self._enqueue(COMMENT, text) 239 243 -
genshi/output.py
24 24 25 25 from genshi.core import escape, Attrs, Markup, Namespace, QName, StreamEventKind 26 26 from genshi.core import DOCTYPE, START, END, START_NS, END_NS, TEXT, \ 27 START_CDATA, END_CDATA, PI, COMMENT, XML_NAMESPACE 27 START_CDATA, END_CDATA, PI, XML_DECL, COMMENT, \ 28 XML_NAMESPACE 28 29 29 30 __all__ = ['DocType', 'XMLSerializer', 'XHTMLSerializer', 'HTMLSerializer', 30 31 'TextSerializer'] … … 139 140 elif kind is PI: 140 141 yield Markup('<?%s %s?>' % data) 141 142 143 elif kind is XML_DECL: 144 version, encoding, standalone = data 145 buf = ['<?xml version="%s"' % version] 146 if encoding: 147 buf.append(' encoding="%s"' % encoding) 148 if standalone != -1: 149 standalone = standalone and 'yes' or 'no' 150 buf.append(' standalone="%s"' % standalone) 151 buf.append('?>\n') 152 yield Markup(u''.join(buf)) 153 142 154 143 155 class XHTMLSerializer(XMLSerializer): 144 156 """Produces XHTML text from an event stream. -
genshi/template/tests/markup.py
183 183 <div xmlns:py="http://genshi.edgewall.org/"> 184 184 \xf6 185 185 </div>""".encode('iso-8859-1'), encoding='iso-8859-1') 186 self.assertEqual(u"""< div>186 self.assertEqual(u"""<?xml version="1.0" encoding="iso-8859-1"?>\n<div> 187 187 \xf6 188 188 </div>""", unicode(tmpl.generate())) 189 189 … … 228 228 <Size py:if="0" xmlns:t="test">Size</Size> 229 229 <Item/> 230 230 </Test>""") 231 self.assertEqual("""< Test>231 self.assertEqual("""<?xml version="1.0"?>\n<Test> 232 232 233 233 <Item/> 234 234 </Test>""", str(tmpl.generate()))
