Ticket #253: genshi-default-namespaces.patch
| File genshi-default-namespaces.patch, 3.6 KB (added by llasram@…, 15 years ago) |
|---|
-
genshi/output.py
569 569 def __call__(self, stream): 570 570 prefixes = dict([(v, [k]) for k, v in self.prefixes.items()]) 571 571 namespaces = {XML_NAMESPACE.uri: ['xml']} 572 default = [''] 572 573 def _push_ns(prefix, uri): 573 574 namespaces.setdefault(uri, []).append(prefix) 574 575 prefixes.setdefault(prefix, []).append(uri) … … 592 593 593 594 tagname = tag.localname 594 595 tagns = tag.namespace 595 if tagns :596 if tagns and tagns != default[-1]: 596 597 if tagns in namespaces: 597 598 prefix = namespaces[tagns][-1] 598 599 if prefix: 599 600 tagname = u'%s:%s' % (prefix, tagname) 600 601 else: 601 602 _push_ns_attr((u'xmlns', tagns)) 602 _push_ns('',tagns)603 default.append(tagns) 603 604 604 605 new_attrs = [] 605 606 for attr, value in attrs: … … 622 623 elif kind is END: 623 624 tagname = data.localname 624 625 tagns = data.namespace 625 if tagns :626 if tagns and tagns != default[-1]: 626 627 prefix = namespaces[tagns][-1] 627 628 if prefix: 628 629 tagname = u'%s:%s' % (prefix, tagname) … … 630 631 631 632 elif kind is START_NS: 632 633 prefix, uri = data 633 if uri not in namespaces: 634 if prefix is '': 635 if uri != default[-1]: 636 _push_ns_attr(_make_ns_attr(prefix, uri)) 637 default.append(uri) 638 elif uri not in namespaces: 634 639 prefix = prefixes.get(uri, [prefix])[-1] 635 640 _push_ns_attr(_make_ns_attr(prefix, uri)) 636 _push_ns(prefix, uri) 641 if prefix is not '': 642 _push_ns(prefix, uri) 637 643 638 644 elif kind is END_NS: 639 if data in prefixes: 645 uri = None 646 if data is '': 647 uri = default.pop() 648 elif data in prefixes: 640 649 uris = prefixes.get(data) 641 650 uri = uris.pop() 642 651 if not uris: … … 646 655 uri_prefixes.pop() 647 656 if not uri_prefixes: 648 657 del namespaces[uri] 649 ifns_attrs:650 attr = _make_ns_attr(data, uri)651 if attr in ns_attrs:652 ns_attrs.remove(attr)658 if uri and ns_attrs: 659 attr = _make_ns_attr(data, uri) 660 if attr in ns_attrs: 661 ns_attrs.remove(attr) 653 662 654 663 else: 655 664 yield kind, data, pos -
genshi/template/tests/directives.py
847 847 # FIXME: there should be a way to strip out unwanted/unused namespaces, 848 848 # such as the "x" in this example 849 849 self.assertEqual("""<html xmlns:x="http://www.example.org/"> 850 <div >Foo</div>850 <div xmlns="http://www.example.org/">Foo</div> 851 851 </html>""", str(tmpl.generate())) 852 852 853 853 def test_match_with_position_predicate(self):
