13 |
return default, spec |
return default, spec |
14 |
|
|
15 |
class _parse_in_progress(object): |
class _parse_in_progress(object): |
16 |
def __init__(self, parser): |
def __init__(self, parser, module): |
17 |
|
self._module = module |
18 |
self.stack = [] |
self.stack = [] |
19 |
self.namespaces = [] |
self.namespaces = [] |
20 |
self.ns_pushed = False |
self.ns_pushed = False |
43 |
nsdecls = self.namespaces[0] |
nsdecls = self.namespaces[0] |
44 |
else: |
else: |
45 |
nsdecls = {} |
nsdecls = {} |
46 |
self.stack.append(core.Element(ns, name, attributes, nsdecls, self.__raw())) |
self.stack.append(self._module.Element(ns, name, attributes, nsdecls, self.__raw())) |
47 |
self.ns_pushed = False |
self.ns_pushed = False |
48 |
|
|
49 |
def end_element(self, name): |
def end_element(self, name): |
55 |
self.ns_popped = False |
self.ns_popped = False |
56 |
|
|
57 |
def processing_instruction(self, *a): |
def processing_instruction(self, *a): |
58 |
self.stack[-1].append(core.Declaration(self.__raw()[2:-1])) |
self.stack[-1].append(self._module.Declaration(self.__raw()[2:-1])) |
59 |
|
|
60 |
def text(self, data): |
def text(self, data): |
61 |
self.stack[-1].append(data) |
self.stack[-1].append(data) |
75 |
self.ns_popped = True |
self.ns_popped = True |
76 |
|
|
77 |
def comment(self, data): |
def comment(self, data): |
78 |
self.stack[-1].append(core.Comment(data)) |
self.stack[-1].append(self._module.Comment(data)) |
79 |
|
|
80 |
|
|
81 |
import xml.parsers.expat |
import xml.parsers.expat |
82 |
|
|
83 |
def parse(data, builtin_namespaces=None, encoding=None): |
def parse(data, builtin_namespaces=None, encoding=None, module=core): |
84 |
parser = xml.parsers.expat.ParserCreate(namespace_separator=' ') |
parser = xml.parsers.expat.ParserCreate(namespace_separator=' ') |
85 |
handler = _parse_in_progress(parser) |
handler = _parse_in_progress(parser, module) |
86 |
if builtin_namespaces is not None: |
if builtin_namespaces is not None: |
87 |
handler.namespaces.append(builtin_namespaces) |
handler.namespaces.append(builtin_namespaces) |
88 |
parser.Parse(data, 1) |
parser.Parse(data, 1) |