# HG changeset patch # User hodgestar # Date 1359221326 0 # Node ID 9e30a7234290b6027056d9ad5ab4d0b4371bd86d # Parent 59a4949b4a39fca0a62af8722dc9af837656f866 Merge r1219 from trunk (fix for PIs without data, fixes #368). diff --git a/genshi/input.py b/genshi/input.py --- a/genshi/input.py +++ b/genshi/input.py @@ -405,9 +405,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): diff --git a/genshi/tests/input.py b/genshi/tests/input.py --- 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'' + 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'...' + 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 = '' events = list(XMLParser(StringIO(text)))