mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Fix Genshi default namespace bug
This commit is contained in:
parent
4e6c1be0e4
commit
5f7e9f8982
@ -573,6 +573,7 @@ class NamespaceFlattener(object):
|
|||||||
def __call__(self, stream):
|
def __call__(self, stream):
|
||||||
prefixes = dict([(v, [k]) for k, v in self.prefixes.items()])
|
prefixes = dict([(v, [k]) for k, v in self.prefixes.items()])
|
||||||
namespaces = {XML_NAMESPACE.uri: ['xml']}
|
namespaces = {XML_NAMESPACE.uri: ['xml']}
|
||||||
|
default = prefixes.get('', [''])
|
||||||
def _push_ns(prefix, uri):
|
def _push_ns(prefix, uri):
|
||||||
namespaces.setdefault(uri, []).append(prefix)
|
namespaces.setdefault(uri, []).append(prefix)
|
||||||
prefixes.setdefault(prefix, []).append(uri)
|
prefixes.setdefault(prefix, []).append(uri)
|
||||||
@ -596,14 +597,14 @@ class NamespaceFlattener(object):
|
|||||||
|
|
||||||
tagname = tag.localname
|
tagname = tag.localname
|
||||||
tagns = tag.namespace
|
tagns = tag.namespace
|
||||||
if tagns:
|
if tagns and tagns != default[-1]:
|
||||||
if tagns in namespaces:
|
if tagns in namespaces:
|
||||||
prefix = namespaces[tagns][-1]
|
prefix = namespaces[tagns][-1]
|
||||||
if prefix:
|
if prefix:
|
||||||
tagname = u'%s:%s' % (prefix, tagname)
|
tagname = u'%s:%s' % (prefix, tagname)
|
||||||
else:
|
else:
|
||||||
_push_ns_attr((u'xmlns', tagns))
|
_push_ns_attr((u'xmlns', tagns))
|
||||||
_push_ns('', tagns)
|
default.push(tagns)
|
||||||
|
|
||||||
new_attrs = []
|
new_attrs = []
|
||||||
for attr, value in attrs:
|
for attr, value in attrs:
|
||||||
@ -626,7 +627,7 @@ class NamespaceFlattener(object):
|
|||||||
elif kind is END:
|
elif kind is END:
|
||||||
tagname = data.localname
|
tagname = data.localname
|
||||||
tagns = data.namespace
|
tagns = data.namespace
|
||||||
if tagns:
|
if tagns and tagns != default[-1]:
|
||||||
prefix = namespaces[tagns][-1]
|
prefix = namespaces[tagns][-1]
|
||||||
if prefix:
|
if prefix:
|
||||||
tagname = u'%s:%s' % (prefix, tagname)
|
tagname = u'%s:%s' % (prefix, tagname)
|
||||||
@ -634,12 +635,19 @@ class NamespaceFlattener(object):
|
|||||||
|
|
||||||
elif kind is START_NS:
|
elif kind is START_NS:
|
||||||
prefix, uri = data
|
prefix, uri = data
|
||||||
if uri not in namespaces:
|
push_attr = False
|
||||||
prefix = prefixes.get(uri, [prefix])[-1]
|
if prefix is '' and default[-1] != uri:
|
||||||
|
default.append(uri)
|
||||||
_push_ns_attr(_make_ns_attr(prefix, uri))
|
_push_ns_attr(_make_ns_attr(prefix, uri))
|
||||||
|
elif uri not in namespaces:
|
||||||
|
prefix = namespaces.get(uri, [prefix])[-1]
|
||||||
|
_push_ns_attr(_make_ns_attr(prefix, uri))
|
||||||
|
if prefix is not '':
|
||||||
_push_ns(prefix, uri)
|
_push_ns(prefix, uri)
|
||||||
|
|
||||||
elif kind is END_NS:
|
elif kind is END_NS:
|
||||||
|
if data is '':
|
||||||
|
default.pop()
|
||||||
if data in prefixes:
|
if data in prefixes:
|
||||||
uris = prefixes.get(data)
|
uris = prefixes.get(data)
|
||||||
uri = uris.pop()
|
uri = uris.pop()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user