1"""W3C Document Object Model implementation for Python.
2
3The Python mapping of the Document Object Model is documented in the
4Python Library Reference in the section on the xml.dom package.
5
6This package contains the following modules:
7
8minidom -- A simple implementation of the Level 1 DOM with namespace
9           support added (based on the Level 2 specification) and other
10           minor Level 2 functionality.
11
12pulldom -- DOM builder supporting on-demand tree-building for selected
13           subtrees of the document.
14
15"""
16
17
18class Node:
19    """Class giving the NodeType constants."""
20
21    # DOM implementations may use this as a base class for their own
22    # Node implementations.  If they don't, the constants defined here
23    # should still be used as the canonical definitions as they match
24    # the values given in the W3C recommendation.  Client code can
25    # safely refer to these values in all tests of Node.nodeType
26    # values.
27
28    ELEMENT_NODE                = 1
29    ATTRIBUTE_NODE              = 2
30    TEXT_NODE                   = 3
31    CDATA_SECTION_NODE          = 4
32    ENTITY_REFERENCE_NODE       = 5
33    ENTITY_NODE                 = 6
34    PROCESSING_INSTRUCTION_NODE = 7
35    COMMENT_NODE                = 8
36    DOCUMENT_NODE               = 9
37    DOCUMENT_TYPE_NODE          = 10
38    DOCUMENT_FRAGMENT_NODE      = 11
39    NOTATION_NODE               = 12
40
41
42#ExceptionCode
43INDEX_SIZE_ERR                 = 1
44DOMSTRING_SIZE_ERR             = 2
45HIERARCHY_REQUEST_ERR          = 3
46WRONG_DOCUMENT_ERR             = 4
47INVALID_CHARACTER_ERR          = 5
48NO_DATA_ALLOWED_ERR            = 6
49NO_MODIFICATION_ALLOWED_ERR    = 7
50NOT_FOUND_ERR                  = 8
51NOT_SUPPORTED_ERR              = 9
52INUSE_ATTRIBUTE_ERR            = 10
53INVALID_STATE_ERR              = 11
54SYNTAX_ERR                     = 12
55INVALID_MODIFICATION_ERR       = 13
56NAMESPACE_ERR                  = 14
57INVALID_ACCESS_ERR             = 15
58VALIDATION_ERR                 = 16
59
60
61class DOMException(Exception):
62    """Abstract base class for DOM exceptions.
63    Exceptions with specific codes are specializations of this class."""
64
65    def __init__(self, *args, **kw):
66        if self.__class__ is DOMException:
67            raise RuntimeError(
68                "DOMException should not be instantiated directly")
69        Exception.__init__(self, *args, **kw)
70
71    def _get_code(self):
72        return self.code
73
74
75class IndexSizeErr(DOMException):
76    code = INDEX_SIZE_ERR
77
78class DomstringSizeErr(DOMException):
79    code = DOMSTRING_SIZE_ERR
80
81class HierarchyRequestErr(DOMException):
82    code = HIERARCHY_REQUEST_ERR
83
84class WrongDocumentErr(DOMException):
85    code = WRONG_DOCUMENT_ERR
86
87class InvalidCharacterErr(DOMException):
88    code = INVALID_CHARACTER_ERR
89
90class NoDataAllowedErr(DOMException):
91    code = NO_DATA_ALLOWED_ERR
92
93class NoModificationAllowedErr(DOMException):
94    code = NO_MODIFICATION_ALLOWED_ERR
95
96class NotFoundErr(DOMException):
97    code = NOT_FOUND_ERR
98
99class NotSupportedErr(DOMException):
100    code = NOT_SUPPORTED_ERR
101
102class InuseAttributeErr(DOMException):
103    code = INUSE_ATTRIBUTE_ERR
104
105class InvalidStateErr(DOMException):
106    code = INVALID_STATE_ERR
107
108class SyntaxErr(DOMException):
109    code = SYNTAX_ERR
110
111class InvalidModificationErr(DOMException):
112    code = INVALID_MODIFICATION_ERR
113
114class NamespaceErr(DOMException):
115    code = NAMESPACE_ERR
116
117class InvalidAccessErr(DOMException):
118    code = INVALID_ACCESS_ERR
119
120class ValidationErr(DOMException):
121    code = VALIDATION_ERR
122
123class UserDataHandler:
124    """Class giving the operation constants for UserDataHandler.handle()."""
125
126    # Based on DOM Level 3 (WD 9 April 2002)
127
128    NODE_CLONED   = 1
129    NODE_IMPORTED = 2
130    NODE_DELETED  = 3
131    NODE_RENAMED  = 4
132
133XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace"
134XMLNS_NAMESPACE = "http://www.w3.org/2000/xmlns/"
135XHTML_NAMESPACE = "http://www.w3.org/1999/xhtml"
136EMPTY_NAMESPACE = None
137EMPTY_PREFIX = None
138
139from domreg import getDOMImplementation,registerDOMImplementation
140