13 November, 2000

# Appendix A: IDL Definitions

This appendix contains the complete OMG IDL [OMGIDL] for the Level 2 Document Object Model Traversal and Range definitions. The definitions are divided into Traversal, and Range.

The IDL files are also available as: http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/idl.zip

## A.1: Document Object Model Traversal

### traversal.idl:

    // File: traversal.idl

    #ifndef _TRAVERSAL_IDL_
    #define _TRAVERSAL_IDL_

    #include "dom.idl"

    #pragma prefix "dom.w3c.org"
    module traversal
    {

      typedef dom::Node Node;

      interface NodeFilter;

      // Introduced in DOM Level 2:
      interface NodeIterator {
        readonly attribute Node             root;
        readonly attribute unsigned long    whatToShow;
        readonly attribute NodeFilter       filter;
        readonly attribute boolean          expandEntityReferences;
        Node               nextNode()
                                            raises(dom::DOMException);
        Node               previousNode()
                                            raises(dom::DOMException);
        void               detach();
      };

      // Introduced in DOM Level 2:
      interface NodeFilter {

        // Constants returned by acceptNode
        const short               FILTER_ACCEPT                  = 1;
        const short               FILTER_REJECT                  = 2;
        const short               FILTER_SKIP                    = 3;

        // Constants for whatToShow
        const unsigned long       SHOW_ALL                       = 0xFFFFFFFF;
        const unsigned long       SHOW_ELEMENT                   = 0x00000001;
        const unsigned long       SHOW_ATTRIBUTE                 = 0x00000002;
        const unsigned long       SHOW_TEXT                      = 0x00000004;
        const unsigned long       SHOW_CDATA_SECTION             = 0x00000008;
        const unsigned long       SHOW_ENTITY_REFERENCE          = 0x00000010;
        const unsigned long       SHOW_ENTITY                    = 0x00000020;
        const unsigned long       SHOW_PROCESSING_INSTRUCTION    = 0x00000040;
        const unsigned long       SHOW_COMMENT                   = 0x00000080;
        const unsigned long       SHOW_DOCUMENT                  = 0x00000100;
        const unsigned long       SHOW_DOCUMENT_TYPE             = 0x00000200;
        const unsigned long       SHOW_DOCUMENT_FRAGMENT         = 0x00000400;
        const unsigned long       SHOW_NOTATION                  = 0x00000800;

        short              acceptNode(in Node n);
      };

      // Introduced in DOM Level 2:
      interface TreeWalker {
        readonly attribute Node             root;
        readonly attribute unsigned long    whatToShow;
        readonly attribute NodeFilter       filter;
        readonly attribute boolean          expandEntityReferences;
                 attribute Node             currentNode;
                                            // raises(dom::DOMException) on setting

        Node               parentNode();
        Node               firstChild();
        Node               lastChild();
        Node               previousSibling();
        Node               nextSibling();
        Node               previousNode();
        Node               nextNode();
      };

      // Introduced in DOM Level 2:
      interface DocumentTraversal {
        NodeIterator       createNodeIterator(in Node root,
                                              in unsigned long whatToShow,
                                              in NodeFilter filter,
                                              in boolean entityReferenceExpansion)
                                            raises(dom::DOMException);
        TreeWalker         createTreeWalker(in Node root,
                                            in unsigned long whatToShow,
                                            in NodeFilter filter,
                                            in boolean entityReferenceExpansion)
                                            raises(dom::DOMException);
      };
    };

    #endif // _TRAVERSAL_IDL_

## A.2: Document Object Model Range

### ranges.idl:

    // File: ranges.idl

    #ifndef _RANGES_IDL_
    #define _RANGES_IDL_

    #include "dom.idl"

    #pragma prefix "dom.w3c.org"
    module ranges
    {

      typedef dom::Node Node;
      typedef dom::DocumentFragment DocumentFragment;
      typedef dom::DOMString DOMString;

      // Introduced in DOM Level 2:
      exception RangeException {
        unsigned short   code;
      };
      // RangeExceptionCode
      const unsigned short      BAD_BOUNDARYPOINTS_ERR         = 1;
      const unsigned short      INVALID_NODE_TYPE_ERR          = 2;

      // Introduced in DOM Level 2:
      interface Range {
        readonly attribute Node             startContainer;
                                            // raises(dom::DOMException) on retrieval

        readonly attribute long             startOffset;
                                            // raises(dom::DOMException) on retrieval

        readonly attribute Node             endContainer;
                                            // raises(dom::DOMException) on retrieval

        readonly attribute long             endOffset;
                                            // raises(dom::DOMException) on retrieval

        readonly attribute boolean          collapsed;
                                            // raises(dom::DOMException) on retrieval

        readonly attribute Node             commonAncestorContainer;
                                            // raises(dom::DOMException) on retrieval

        void               setStart(in Node refNode,
                                    in long offset)
                                            raises(RangeException,
                                                   dom::DOMException);
        void               setEnd(in Node refNode,
                                  in long offset)
                                            raises(RangeException,
                                                   dom::DOMException);
        void               setStartBefore(in Node refNode)
                                            raises(RangeException,
                                                   dom::DOMException);
        void               setStartAfter(in Node refNode)
                                            raises(RangeException,
                                                   dom::DOMException);
        void               setEndBefore(in Node refNode)
                                            raises(RangeException,
                                                   dom::DOMException);
        void               setEndAfter(in Node refNode)
                                            raises(RangeException,
                                                   dom::DOMException);
        void               collapse(in boolean toStart)
                                            raises(dom::DOMException);
        void               selectNode(in Node refNode)
                                            raises(RangeException,
                                                   dom::DOMException);
        void               selectNodeContents(in Node refNode)
                                            raises(RangeException,
                                                   dom::DOMException);

        // CompareHow
        const unsigned short      START_TO_START                 = 0;
        const unsigned short      START_TO_END                   = 1;
        const unsigned short      END_TO_END                     = 2;
        const unsigned short      END_TO_START                   = 3;

        short              compareBoundaryPoints(in unsigned short how,
                                                 in Range sourceRange)
                                            raises(dom::DOMException);
        void               deleteContents()
                                            raises(dom::DOMException);
        DocumentFragment   extractContents()
                                            raises(dom::DOMException);
        DocumentFragment   cloneContents()
                                            raises(dom::DOMException);
        void               insertNode(in Node newNode)
                                            raises(dom::DOMException,
                                                   RangeException);
        void               surroundContents(in Node newParent)
                                            raises(dom::DOMException,
                                                   RangeException);
        Range              cloneRange()
                                            raises(dom::DOMException);
        DOMString          toString()
                                            raises(dom::DOMException);
        void               detach()
                                            raises(dom::DOMException);
      };

      // Introduced in DOM Level 2:
      interface DocumentRange {
        Range              createRange();
      };
    };

    #endif // _RANGES_IDL_