annotate Lib/xml/dom/xmlbuilder.py @ 27998:e27f58a50737 legacy-trunk

SF bug #690377: Dud footnote reference in distutils docs
author Raymond Hettinger <python@rcn.com>
date Fri, 21 Feb 2003 02:47:09 +0000
parents b7256496c9b0
children 71a294bd7950
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27372
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1 """Implementation of the DOM Level 3 'LS-Load' feature."""
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
2
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
3 import copy
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
4 import xml.dom
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
5
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
6 from xml.dom.minicompat import *
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
7
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
8 from xml.dom.NodeFilter import NodeFilter
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
9
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
10
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
11 __all__ = ["DOMBuilder", "DOMEntityResolver", "DOMInputSource"]
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
12
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
13
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
14 class Options:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
15 """Features object that has variables set for each DOMBuilder feature.
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
16
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
17 The DOMBuilder class uses an instance of this class to pass settings to
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
18 the ExpatBuilder class.
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
19 """
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
20
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
21 # Note that the DOMBuilder class in LoadSave constrains which of these
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
22 # values can be set using the DOM Level 3 LoadSave feature.
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
23
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
24 namespaces = 1
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
25 namespace_declarations = True
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
26 validation = False
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
27 external_parameter_entities = True
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
28 external_general_entities = True
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
29 external_dtd_subset = True
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
30 validate_if_schema = False
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
31 validate = False
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
32 datatype_normalization = False
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
33 create_entity_ref_nodes = True
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
34 entities = True
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
35 whitespace_in_element_content = True
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
36 cdata_sections = True
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
37 comments = True
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
38 charset_overrides_xml_encoding = True
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
39 infoset = False
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
40 supported_mediatypes_only = False
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
41
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
42 errorHandler = None
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
43 filter = None
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
44
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
45
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
46 class DOMBuilder:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
47 entityResolver = None
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
48 errorHandler = None
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
49 filter = None
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
50
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
51 ACTION_REPLACE = 1
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
52 ACTION_APPEND_AS_CHILDREN = 2
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
53 ACTION_INSERT_AFTER = 3
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
54 ACTION_INSERT_BEFORE = 4
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
55
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
56 _legal_actions = (ACTION_REPLACE, ACTION_APPEND_AS_CHILDREN,
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
57 ACTION_INSERT_AFTER, ACTION_INSERT_BEFORE)
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
58
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
59 def __init__(self):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
60 self._options = Options()
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
61
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
62 def _get_entityResolver(self):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
63 return self.entityResolver
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
64 def _set_entityResolver(self, entityResolver):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
65 self.entityResolver = entityResolver
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
66
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
67 def _get_errorHandler(self):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
68 return self.errorHandler
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
69 def _set_errorHandler(self, errorHandler):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
70 self.errorHandler = errorHandler
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
71
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
72 def _get_filter(self):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
73 return self.filter
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
74 def _set_filter(self, filter):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
75 self.filter = filter
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
76
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
77 def setFeature(self, name, state):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
78 if self.supportsFeature(name):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
79 state = state and 1 or 0
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
80 try:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
81 settings = self._settings[(_name_xform(name), state)]
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
82 except KeyError:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
83 raise xml.dom.NotSupportedErr(
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
84 "unsupported feature: " + `name`)
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
85 else:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
86 for name, value in settings:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
87 setattr(self._options, name, value)
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
88 else:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
89 raise xml.dom.NotFoundErr("unknown feature: " + repr(name))
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
90
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
91 def supportsFeature(self, name):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
92 return hasattr(self._options, _name_xform(name))
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
93
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
94 def canSetFeature(self, name, state):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
95 key = (_name_xform(name), state and 1 or 0)
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
96 return self._settings.has_key(key)
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
97
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
98 # This dictionary maps from (feature,value) to a list of
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
99 # (option,value) pairs that should be set on the Options object.
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
100 # If a (feature,value) setting is not in this dictionary, it is
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
101 # not supported by the DOMBuilder.
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
102 #
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
103 _settings = {
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
104 ("namespace_declarations", 0): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
105 ("namespace_declarations", 0)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
106 ("namespace_declarations", 1): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
107 ("namespace_declarations", 1)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
108 ("validation", 0): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
109 ("validation", 0)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
110 ("external_general_entities", 0): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
111 ("external_general_entities", 0)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
112 ("external_general_entities", 1): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
113 ("external_general_entities", 1)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
114 ("external_parameter_entities", 0): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
115 ("external_parameter_entities", 0)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
116 ("external_parameter_entities", 1): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
117 ("external_parameter_entities", 1)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
118 ("validate_if_schema", 0): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
119 ("validate_if_schema", 0)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
120 ("create_entity_ref_nodes", 0): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
121 ("create_entity_ref_nodes", 0)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
122 ("create_entity_ref_nodes", 1): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
123 ("create_entity_ref_nodes", 1)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
124 ("entities", 0): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
125 ("create_entity_ref_nodes", 0),
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
126 ("entities", 0)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
127 ("entities", 1): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
128 ("entities", 1)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
129 ("whitespace_in_element_content", 0): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
130 ("whitespace_in_element_content", 0)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
131 ("whitespace_in_element_content", 1): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
132 ("whitespace_in_element_content", 1)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
133 ("cdata_sections", 0): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
134 ("cdata_sections", 0)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
135 ("cdata_sections", 1): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
136 ("cdata_sections", 1)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
137 ("comments", 0): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
138 ("comments", 0)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
139 ("comments", 1): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
140 ("comments", 1)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
141 ("charset_overrides_xml_encoding", 0): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
142 ("charset_overrides_xml_encoding", 0)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
143 ("charset_overrides_xml_encoding", 1): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
144 ("charset_overrides_xml_encoding", 1)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
145 ("infoset", 0): [],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
146 ("infoset", 1): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
147 ("namespace_declarations", 0),
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
148 ("validate_if_schema", 0),
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
149 ("create_entity_ref_nodes", 0),
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
150 ("entities", 0),
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
151 ("cdata_sections", 0),
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
152 ("datatype_normalization", 1),
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
153 ("whitespace_in_element_content", 1),
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
154 ("comments", 1),
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
155 ("charset_overrides_xml_encoding", 1)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
156 ("supported_mediatypes_only", 0): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
157 ("supported_mediatypes_only", 0)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
158 ("namespaces", 0): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
159 ("namespaces", 0)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
160 ("namespaces", 1): [
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
161 ("namespaces", 1)],
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
162 }
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
163
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
164 def getFeature(self, name):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
165 xname = _name_xform(name)
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
166 try:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
167 return getattr(self._options, xname)
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
168 except AttributeError:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
169 if name == "infoset":
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
170 options = self._options
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
171 return (options.datatype_normalization
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
172 and options.whitespace_in_element_content
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
173 and options.comments
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
174 and options.charset_overrides_xml_encoding
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
175 and not (options.namespace_declarations
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
176 or options.validate_if_schema
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
177 or options.create_entity_ref_nodes
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
178 or options.entities
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
179 or options.cdata_sections))
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
180 raise xml.dom.NotFoundErr("feature %s not known" % repr(name))
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
181
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
182 def parseURI(self, uri):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
183 if self.entityResolver:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
184 input = self.entityResolver.resolveEntity(None, uri)
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
185 else:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
186 input = DOMEntityResolver().resolveEntity(None, uri)
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
187 return self.parse(input)
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
188
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
189 def parse(self, input):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
190 options = copy.copy(self._options)
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
191 options.filter = self.filter
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
192 options.errorHandler = self.errorHandler
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
193 fp = input.byteStream
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
194 if fp is None and options.systemId:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
195 import urllib2
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
196 fp = urllib2.urlopen(input.systemId)
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
197 return self._parse_bytestream(fp, options)
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
198
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
199 def parseWithContext(self, input, cnode, action):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
200 if action not in self._legal_actions:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
201 raise ValueError("not a legal action")
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
202 raise NotImplementedError("Haven't written this yet...")
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
203
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
204 def _parse_bytestream(self, stream, options):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
205 import xml.dom.expatbuilder
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
206 builder = xml.dom.expatbuilder.makeBuilder(options)
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
207 return builder.parseFile(stream)
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
208
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
209
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
210 def _name_xform(name):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
211 return name.lower().replace('-', '_')
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
212
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
213
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
214 class DOMEntityResolver(NewStyle):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
215 __slots__ = '_opener',
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
216
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
217 def resolveEntity(self, publicId, systemId):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
218 assert systemId is not None
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
219 source = DOMInputSource()
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
220 source.publicId = publicId
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
221 source.systemId = systemId
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
222 source.byteStream = self._get_opener().open(systemId)
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
223
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
224 # determine the encoding if the transport provided it
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
225 source.encoding = self._guess_media_encoding(source)
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
226
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
227 # determine the base URI is we can
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
228 import posixpath, urlparse
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
229 parts = urlparse.urlparse(systemId)
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
230 scheme, netloc, path, params, query, fragment = parts
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
231 # XXX should we check the scheme here as well?
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
232 if path and not path.endswith("/"):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
233 path = posixpath.dirname(path) + "/"
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
234 parts = scheme, netloc, path, params, query, fragment
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
235 source.baseURI = urlparse.urlunparse(parts)
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
236
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
237 return source
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
238
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
239 def _get_opener(self):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
240 try:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
241 return self._opener
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
242 except AttributeError:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
243 self._opener = self._create_opener()
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
244 return self._opener
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
245
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
246 def _create_opener(self):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
247 import urllib2
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
248 return urllib2.build_opener()
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
249
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
250 def _guess_media_encoding(self, source):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
251 info = source.byteStream.info()
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
252 if info.has_key("Content-Type"):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
253 for param in info.getplist():
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
254 if param.startswith("charset="):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
255 return param.split("=", 1)[1].lower()
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
256
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
257
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
258 class DOMInputSource(NewStyle):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
259 __slots__ = ('byteStream', 'characterStream', 'stringData',
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
260 'encoding', 'publicId', 'systemId', 'baseURI')
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
261
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
262 def __init__(self):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
263 self.byteStream = None
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
264 self.characterStream = None
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
265 self.stringData = None
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
266 self.encoding = None
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
267 self.publicId = None
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
268 self.systemId = None
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
269 self.baseURI = None
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
270
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
271 def _get_byteStream(self):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
272 return self.byteStream
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
273 def _set_byteStream(self, byteStream):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
274 self.byteStream = byteStream
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
275
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
276 def _get_characterStream(self):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
277 return self.characterStream
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
278 def _set_characterStream(self, characterStream):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
279 self.characterStream = characterStream
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
280
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
281 def _get_stringData(self):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
282 return self.stringData
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
283 def _set_stringData(self, data):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
284 self.stringData = data
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
285
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
286 def _get_encoding(self):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
287 return self.encoding
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
288 def _set_encoding(self, encoding):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
289 self.encoding = encoding
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
290
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
291 def _get_publicId(self):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
292 return self.publicId
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
293 def _set_publicId(self, publicId):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
294 self.publicId = publicId
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
295
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
296 def _get_systemId(self):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
297 return self.systemId
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
298 def _set_systemId(self, systemId):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
299 self.systemId = systemId
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
300
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
301 def _get_baseURI(self):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
302 return self.baseURI
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
303 def _set_baseURI(self, uri):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
304 self.baseURI = uri
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
305
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
306
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
307 class DOMBuilderFilter:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
308 """Element filter which can be used to tailor construction of
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
309 a DOM instance.
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
310 """
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
311
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
312 # There's really no need for this class; concrete implementations
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
313 # should just implement the endElement() and startElement()
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
314 # methods as appropriate. Using this makes it easy to only
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
315 # implement one of them.
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
316
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
317 FILTER_ACCEPT = 1
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
318 FILTER_REJECT = 2
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
319 FILTER_SKIP = 3
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
320 FILTER_INTERRUPT = 4
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
321
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
322 whatToShow = NodeFilter.SHOW_ALL
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
323
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
324 def _get_whatToShow(self):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
325 return self.whatToShow
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
326
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
327 def acceptNode(self, element):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
328 return self.FILTER_ACCEPT
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
329
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
330 def startContainer(self, element):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
331 return self.FILTER_ACCEPT
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
332
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
333 del NodeFilter
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
334
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
335
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
336 class DocumentLS:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
337 """Mixin to create documents that conform to the load/save spec."""
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
338
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
339 async = False
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
340
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
341 def _get_async(self):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
342 return False
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
343 def _set_async(self, async):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
344 if async:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
345 raise xml.dom.NotSupportedErr(
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
346 "asynchronous document loading is not supported")
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
347
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
348 def abort(self):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
349 # What does it mean to "clear" a document? Does the
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
350 # documentElement disappear?
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
351 raise NotImplementedError(
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
352 "haven't figured out what this means yet")
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
353
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
354 def load(self, uri):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
355 raise NotImplementedError("haven't written this yet")
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
356
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
357 def loadXML(self, source):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
358 raise NotImplementedError("haven't written this yet")
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
359
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
360 def saveXML(self, snode):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
361 if snode is None:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
362 snode = self
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
363 elif snode.ownerDocument is not self:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
364 raise xml.dom.WrongDocumentErr()
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
365 return snode.toxml()
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
366
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
367
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
368 class DOMImplementationLS:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
369 MODE_SYNCHRONOUS = 1
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
370 MODE_ASYNCHRONOUS = 2
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
371
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
372 def createDOMBuilder(self, mode, schemaType):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
373 if schemaType is not None:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
374 raise xml.dom.NotSupportedErr(
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
375 "schemaType not yet supported")
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
376 if mode == self.MODE_SYNCHRONOUS:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
377 return DOMBuilder()
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
378 if mode == self.MODE_ASYNCHRONOUS:
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
379 raise xml.dom.NotSupportedErr(
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
380 "asynchronous builders are not supported")
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
381 raise ValueError("unknown value for mode")
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
382
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
383 def createDOMWriter(self):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
384 raise NotImplementedError(
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
385 "the writer interface hasn't been written yet!")
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
386
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
387 def createDOMInputSource(self):
b7256496c9b0 Import from PyXML 1.10.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
388 return DOMInputSource()