# HG changeset patch # User hodgestar # Date 1359221866 0 # Node ID f2d1f04b09590a7017c8e042cdbeeded2606de25 # Parent 0d4e1bafad8fcfc8c78fbb5752b1b7831f7f428a 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 @@ -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): 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)))