changeset 999:f2d1f04b0959 stable-0.6.x

Merge r1219 from trunk (fix for PIs without data, fixes #368).
author hodgestar
date Sat, 26 Jan 2013 17:37:46 +0000
parents 0d4e1bafad8f
children adc36fb4fae7
files genshi/input.py genshi/tests/input.py
diffstat 2 files changed, 25 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/genshi/input.py
+++ b/genshi/input.py
@@ -394,9 +394,14 @@
         self._enqueue(TEXT, text)
 
     def handle_pi(self, data):
-        target, data = data.split(None, 1)
         if data.endswith('?'):
             data = data[:-1]
+        try:
+            target, data = data.split(None, 1)
+        except ValueError:
+            # PI with no data
+            target = data
+            data = ''
         self._enqueue(PI, (target.strip(), data.strip()))
 
     def handle_comment(self, text):
--- a/genshi/tests/input.py
+++ b/genshi/tests/input.py
@@ -177,6 +177,25 @@
         self.assertEqual('php', target)
         self.assertEqual('echo "Foobar"', data)
 
+    def test_processing_instruction_no_data_1(self):
+        text = u'<?foo ?>'
+        events = list(HTMLParser(StringIO(text)))
+        kind, (target, data), pos = events[0]
+        self.assertEqual(Stream.PI, kind)
+        self.assertEqual('foo', target)
+        self.assertEqual('', data)
+
+    def test_processing_instruction_no_data_2(self):
+        text = u'<?experiment>...<?/experiment>'
+        events = list(HTMLParser(StringIO(text)))
+        kind, (target, data), pos = events[0]
+        self.assertEqual(Stream.PI, kind)
+        self.assertEqual('experiment', target)
+        self.assertEqual('', data)
+        kind, (target, data), pos = events[2]
+        self.assertEqual('/experiment', target)
+        self.assertEqual('', data)
+
     def test_xmldecl(self):
         text = '<?xml version="1.0" ?><root />'
         events = list(XMLParser(StringIO(text)))
Copyright (C) 2012-2017 Edgewall Software