MCPcopy Index your code
hub / github.com/ronreiter/interactive-tutorials / _namespaces

Function _namespaces

markdown/html4.py:200–265  ·  view source on GitHub ↗
(elem, encoding, default_namespace=None)

Source from the content-addressed store, hash-verified

198# serialization support
199
200def _namespaces(elem, encoding, default_namespace=None):
201 # identify namespaces used in this tree
202
203 # maps qnames to *encoded* prefix:local names
204 qnames = {None: None}
205
206 # maps uri:s to prefixes
207 namespaces = {}
208 if default_namespace:
209 namespaces[default_namespace] = ""
210
211 def encode(text):
212 return text.encode(encoding)
213
214 def add_qname(qname):
215 # calculate serialized qname representation
216 try:
217 if qname[:1] == "{":
218 uri, tag = qname[1:].split("}", 1)
219 prefix = namespaces.get(uri)
220 if prefix is None:
221 prefix = _namespace_map.get(uri)
222 if prefix is None:
223 prefix = "ns%d" % len(namespaces)
224 if prefix != "xml":
225 namespaces[uri] = prefix
226 if prefix:
227 qnames[qname] = encode("%s:%s" % (prefix, tag))
228 else:
229 qnames[qname] = encode(tag) # default element
230 else:
231 if default_namespace:
232 # FIXME: can this be handled in XML 1.0?
233 raise ValueError(
234 "cannot use non-qualified names with "
235 "default_namespace option"
236 )
237 qnames[qname] = encode(qname)
238 except TypeError:
239 _raise_serialization_error(qname)
240
241 # populate qname and namespaces table
242 try:
243 iterate = elem.iter
244 except AttributeError:
245 iterate = elem.getiterator # cET compatibility
246 for elem in iterate():
247 tag = elem.tag
248 if isinstance(tag, QName) and tag.text not in qnames:
249 add_qname(tag.text)
250 elif isinstance(tag, str):
251 if tag not in qnames:
252 add_qname(tag)
253 elif tag is not None and tag is not Comment and tag is not PI:
254 _raise_serialization_error(tag)
255 for key, value in list(elem.items()):
256 if isinstance(key, QName):
257 key = key.text

Callers 1

write_htmlFunction · 0.85

Calls 3

add_qnameFunction · 0.85
itemsMethod · 0.45

Tested by

no test coverage detected