"""W3C Document Object Model implementation for Python.



The Python mapping of the Document Object Model is documented in the

Python Library Reference in the section on the xml.dom package.



This package contains the following modules:



minidom -- A simple implementation of the Level 1 DOM with namespace

           support added (based on the Level 2 specification) and other

           minor Level 2 functionality.



pulldom -- DOM builder supporting on-demand tree-building for selected

           subtrees of the document.



"""





class Node:

    """Class giving the NodeType constants."""



    # DOM implementations may use this as a base class for their own

    # Node implementations.  If they don't, the constants defined here

    # should still be used as the canonical definitions as they match

    # the values given in the W3C recommendation.  Client code can

    # safely refer to these values in all tests of Node.nodeType

    # values.



    ELEMENT_NODE                = 1

    ATTRIBUTE_NODE              = 2

    TEXT_NODE                   = 3

    CDATA_SECTION_NODE          = 4

    ENTITY_REFERENCE_NODE       = 5

    ENTITY_NODE                 = 6

    PROCESSING_INSTRUCTION_NODE = 7

    COMMENT_NODE                = 8

    DOCUMENT_NODE               = 9

    DOCUMENT_TYPE_NODE          = 10

    DOCUMENT_FRAGMENT_NODE      = 11

    NOTATION_NODE               = 12





#ExceptionCode

INDEX_SIZE_ERR                 = 1

DOMSTRING_SIZE_ERR             = 2

HIERARCHY_REQUEST_ERR          = 3

WRONG_DOCUMENT_ERR             = 4

INVALID_CHARACTER_ERR          = 5

NO_DATA_ALLOWED_ERR            = 6

NO_MODIFICATION_ALLOWED_ERR    = 7

NOT_FOUND_ERR                  = 8

NOT_SUPPORTED_ERR              = 9

INUSE_ATTRIBUTE_ERR            = 10

INVALID_STATE_ERR              = 11

SYNTAX_ERR                     = 12

INVALID_MODIFICATION_ERR       = 13

NAMESPACE_ERR                  = 14

INVALID_ACCESS_ERR             = 15

VALIDATION_ERR                 = 16





class DOMException(Exception):

    """Abstract base class for DOM exceptions.

    Exceptions with specific codes are specializations of this class."""



    def __init__(self, *args, **kw):

        if self.__class__ is DOMException:

            raise RuntimeError(

                "DOMException should not be instantiated directly")

        Exception.__init__(self, *args, **kw)



    def _get_code(self):

        return self.code





class IndexSizeErr(DOMException):

    code = INDEX_SIZE_ERR



class DomstringSizeErr(DOMException):

    code = DOMSTRING_SIZE_ERR



class HierarchyRequestErr(DOMException):

    code = HIERARCHY_REQUEST_ERR



class WrongDocumentErr(DOMException):

    code = WRONG_DOCUMENT_ERR



class InvalidCharacterErr(DOMException):

    code = INVALID_CHARACTER_ERR



class NoDataAllowedErr(DOMException):

    code = NO_DATA_ALLOWED_ERR



class NoModificationAllowedErr(DOMException):

    code = NO_MODIFICATION_ALLOWED_ERR



class NotFoundErr(DOMException):

    code = NOT_FOUND_ERR



class NotSupportedErr(DOMException):

    code = NOT_SUPPORTED_ERR



class InuseAttributeErr(DOMException):

    code = INUSE_ATTRIBUTE_ERR



class InvalidStateErr(DOMException):

    code = INVALID_STATE_ERR



class SyntaxErr(DOMException):

    code = SYNTAX_ERR



class InvalidModificationErr(DOMException):

    code = INVALID_MODIFICATION_ERR



class NamespaceErr(DOMException):

    code = NAMESPACE_ERR



class InvalidAccessErr(DOMException):

    code = INVALID_ACCESS_ERR



class ValidationErr(DOMException):

    code = VALIDATION_ERR



class UserDataHandler:

    """Class giving the operation constants for UserDataHandler.handle()."""



    # Based on DOM Level 3 (WD 9 April 2002)



    NODE_CLONED   = 1

    NODE_IMPORTED = 2

    NODE_DELETED  = 3

    NODE_RENAMED  = 4



XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace"

XMLNS_NAMESPACE = "http://www.w3.org/2000/xmlns/"

XHTML_NAMESPACE = "http://www.w3.org/1999/xhtml"

EMPTY_NAMESPACE = None

EMPTY_PREFIX = None



from domreg import getDOMImplementation,registerDOMImplementation

