#ifndef DOMNodeFilter_HEADER_GUARD_ #define DOMNodeFilter_HEADER_GUARD_ /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * $Id: DOMNodeFilter.hpp 568078 2007-08-21 11:43:25Z amassari $ */ #include XERCES_CPP_NAMESPACE_BEGIN /** * Filters are objects that know how to "filter out" nodes. If a * DOMNodeIterator or DOMTreeWalker is given a * DOMNodeFilter, it applies the filter before it returns the next * node. If the filter says to accept the node, the traversal logic returns * it; otherwise, traversal looks for the next node and pretends that the * node that was rejected was not there. *

The DOM does not provide any filters. DOMNodeFilter is just an * interface that users can implement to provide their own filters. *

DOMNodeFilters do not need to know how to traverse from node * to node, nor do they need to know anything about the data structure that * is being traversed. This makes it very easy to write filters, since the * only thing they have to know how to do is evaluate a single node. One * filter may be used with a number of different kinds of traversals, * encouraging code reuse. *

See also the Document Object Model (DOM) Level 2 Traversal and Range Specification. * @since DOM Level 2 */ class CDOM_EXPORT DOMNodeFilter { protected: // ----------------------------------------------------------------------- // Hidden constructors // ----------------------------------------------------------------------- /** @name Hidden constructors */ //@{ DOMNodeFilter() {}; //@} private: // ----------------------------------------------------------------------- // Unimplemented constructors and operators // ----------------------------------------------------------------------- /** @name Unimplemented constructors and operators */ //@{ DOMNodeFilter(const DOMNodeFilter &); DOMNodeFilter & operator = (const DOMNodeFilter &); //@} public: // ----------------------------------------------------------------------- // All constructors are hidden, just the destructor is available // ----------------------------------------------------------------------- /** @name Destructor */ //@{ /** * Destructor * */ virtual ~DOMNodeFilter() {}; //@} // ----------------------------------------------------------------------- // Class Types // ----------------------------------------------------------------------- /** @name Public Contants */ //@{ /** * Constants returned by acceptNode. * *

FILTER_ACCEPT: * Accept the node. Navigation methods defined for * DOMNodeIterator or DOMTreeWalker will return this * node.

* *

FILTER_REJECT: * Reject the node. Navigation methods defined for * DOMNodeIterator or DOMTreeWalker will not return * this node. For DOMTreeWalker, the children of this node * will also be rejected. DOMNodeIterators treat this as a * synonym for FILTER_SKIP.

* *

FILTER_SKIP: * Skip this single node. Navigation methods defined for * DOMNodeIterator or DOMTreeWalker will not return * this node. For both DOMNodeIterator and * DOMTreeWalker, the children of this node will still be * considered.

* * @since DOM Level 2 */ enum FilterAction {FILTER_ACCEPT = 1, FILTER_REJECT = 2, FILTER_SKIP = 3}; /** * Constants for whatToShow * *

SHOW_ALL: * Show all DOMNode(s).

* *

SHOW_ELEMENT: * Show DOMElement nodes.

* *

SHOW_ATTRIBUTE: * Show DOMAttr nodes. This is meaningful only when creating an * DOMNodeIterator or DOMTreeWalker with an * attribute node as its root; in this case, it means that * the attribute node will appear in the first position of the iteration * or traversal. Since attributes are never children of other nodes, * they do not appear when traversing over the document tree.

* *

SHOW_TEXT: * Show DOMText nodes.

* *

SHOW_CDATA_SECTION: * Show DOMCDATASection nodes.

* *

SHOW_ENTITY_REFERENCE: * Show DOMEntityReference nodes.

* *

SHOW_ENTITY: * Show DOMEntity nodes. This is meaningful only when creating * an DOMNodeIterator or DOMTreeWalker with an * DOMEntity node as its root; in this case, it * means that the DOMEntity node will appear in the first * position of the traversal. Since entities are not part of the * document tree, they do not appear when traversing over the document * tree.

* *

SHOW_PROCESSING_INSTRUCTION: * Show DOMProcessingInstruction nodes.

* *

SHOW_COMMENT: * Show DOMComment nodes.

* *

SHOW_DOCUMENT: * Show DOMDocument nodes.

* *

SHOW_DOCUMENT_TYPE: * Show DOMDocumentType nodes.

* *

SHOW_DOCUMENT_FRAGMENT: * Show DOMDocumentFragment nodes.

* *

SHOW_NOTATION: * Show DOMNotation nodes. This is meaningful only when creating * an DOMNodeIterator or DOMTreeWalker with a * DOMNotation node as its root; in this case, it * means that the DOMNotation node will appear in the first * position of the traversal. Since notations are not part of the * document tree, they do not appear when traversing over the document * tree.

* * @since DOM Level 2 */ enum ShowType { SHOW_ALL = 0x0000FFFF, SHOW_ELEMENT = 0x00000001, SHOW_ATTRIBUTE = 0x00000002, SHOW_TEXT = 0x00000004, SHOW_CDATA_SECTION = 0x00000008, SHOW_ENTITY_REFERENCE = 0x00000010, SHOW_ENTITY = 0x00000020, SHOW_PROCESSING_INSTRUCTION = 0x00000040, SHOW_COMMENT = 0x00000080, SHOW_DOCUMENT = 0x00000100, SHOW_DOCUMENT_TYPE = 0x00000200, SHOW_DOCUMENT_FRAGMENT = 0x00000400, SHOW_NOTATION = 0x00000800 }; //@} // ----------------------------------------------------------------------- // Virtual DOMNodeFilter interface // ----------------------------------------------------------------------- /** @name Functions introduced in DOM Level 2 */ //@{ /** * Test whether a specified node is visible in the logical view of a * DOMTreeWalker or DOMNodeIterator. This function * will be called by the implementation of DOMTreeWalker and * DOMNodeIterator; it is not normally called directly from * user code. (Though you could do so if you wanted to use the same * filter to guide your own application logic.) * @param node The node to check to see if it passes the filter or not. * @return A constant to determine whether the node is accepted, * rejected, or skipped, as defined above. * @since DOM Level 2 */ virtual short acceptNode (const DOMNode* node) const =0; //@} }; XERCES_CPP_NAMESPACE_END #endif