| 1 | // | 
| 2 | // NodeFilter.h | 
| 3 | // | 
| 4 | // Library: XML | 
| 5 | // Package: DOM | 
| 6 | // Module:  NodeFilter | 
| 7 | // | 
| 8 | // Definition of the DOM NodeFilter interface. | 
| 9 | // | 
| 10 | // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | 
| 11 | // and Contributors. | 
| 12 | // | 
| 13 | // SPDX-License-Identifier:	BSL-1.0 | 
| 14 | // | 
| 15 |  | 
| 16 |  | 
| 17 | #ifndef DOM_NodeFilter_INCLUDED | 
| 18 | #define DOM_NodeFilter_INCLUDED | 
| 19 |  | 
| 20 |  | 
| 21 | #include "Poco/XML/XML.h" | 
| 22 | #include "Poco/XML/XMLString.h" | 
| 23 |  | 
| 24 |  | 
| 25 | namespace Poco { | 
| 26 | namespace XML { | 
| 27 |  | 
| 28 |  | 
| 29 | class Node; | 
| 30 |  | 
| 31 |  | 
| 32 | class XML_API NodeFilter | 
| 33 | 	/// Filters are objects that know how to "filter out" nodes. If a NodeIterator | 
| 34 | 	/// or TreeWalker is given a NodeFilter, it applies the filter before it returns | 
| 35 | 	/// the next node. If the filter says to accept the node, the traversal logic | 
| 36 | 	/// returns it; otherwise, traversal looks for the next node and pretends that | 
| 37 | 	/// the node that was rejected was not there. | 
| 38 | 	/// | 
| 39 | 	/// The DOM does not provide any filters. NodeFilter is just an interface that | 
| 40 | 	/// users can implement to provide their own filters. | 
| 41 | 	/// | 
| 42 | 	/// NodeFilters do not need to know how to traverse from node to node, nor do | 
| 43 | 	/// they need to know anything about the data structure that is being traversed. | 
| 44 | 	/// This makes it very easy to write filters, since the only thing they have | 
| 45 | 	/// to know how to do is evaluate a single node. One filter may be used with | 
| 46 | 	/// a number of different kinds of traversals, encouraging code reuse. | 
| 47 | { | 
| 48 | public: | 
| 49 | 	enum | 
| 50 | 	{ | 
| 51 | 		FILTER_ACCEPT = 1, | 
| 52 | 			/// Accept the node. Navigation methods defined for NodeIterator or TreeWalker will return this node. | 
| 53 |  | 
| 54 | 		FILTER_REJECT = 2, | 
| 55 | 			/// Reject the node. Navigation methods defined for NodeIterator or TreeWalker | 
| 56 | 			/// will not return this node. For TreeWalker, the children of this node will | 
| 57 | 			/// also be rejected. NodeIterators treat this as a synonym for FILTER_SKIP. | 
| 58 |  | 
| 59 | 		FILTER_SKIP   = 3 | 
| 60 | 			/// Skip this single node. Navigation methods defined for NodeIterator or TreeWalker | 
| 61 | 			/// will not return this node. For both NodeIterator and TreeWalker, the children | 
| 62 | 			/// of this node will still be considered. | 
| 63 | 	}; | 
| 64 | 	 | 
| 65 | 	enum WhatToShow | 
| 66 | 		/// These are the available values for the whatToShow parameter used in TreeWalkers | 
| 67 | 		/// and NodeIterators. They are the same as the set of possible types for Node, | 
| 68 | 		/// and their values are derived by using a bit position corresponding to the | 
| 69 | 		/// value of nodeType for the equivalent node type. If a bit in whatToShow is | 
| 70 | 		/// set false, that will be taken as a request to skip over this type of node; | 
| 71 | 		/// the behavior in that case is similar to that of FILTER_SKIP. | 
| 72 | 		/// | 
| 73 | 		/// Note that if node types greater than 32 are ever introduced, they may not | 
| 74 | 		/// be individually testable via whatToShow. If that need should arise, it can | 
| 75 | 		/// be handled by selecting SHOW_ALL together with an appropriate NodeFilter. | 
| 76 | 	{ | 
| 77 | 		SHOW_ALL                    = 0xFFFFFFFF, | 
| 78 | 			/// Show all Nodes. | 
| 79 | 	 | 
| 80 | 		SHOW_ELEMENT                = 0x00000001, | 
| 81 | 			/// Show Element nodes. | 
| 82 |  | 
| 83 | 		SHOW_ATTRIBUTE              = 0x00000002, | 
| 84 | 			/// Show Attr nodes. This is meaningful only when creating an iterator or tree-walker | 
| 85 | 			/// with an attribute node as its root; in this case, it means that the attribute | 
| 86 | 			/// node will appear in the first position of the iteration or traversal. Since | 
| 87 | 			/// attributes are never children of other nodes, they do not appear when traversing | 
| 88 | 			/// over the document tree. | 
| 89 |  | 
| 90 | 		SHOW_TEXT                   = 0x00000004, | 
| 91 | 			/// Show Text nodes. | 
| 92 |  | 
| 93 | 		SHOW_CDATA_SECTION          = 0x00000008, | 
| 94 | 			/// Show CDATASection nodes. | 
| 95 |  | 
| 96 | 		SHOW_ENTITY_REFERENCE       = 0x00000010, | 
| 97 | 			/// Show EntityReference nodes. | 
| 98 |  | 
| 99 | 		SHOW_ENTITY                 = 0x00000020, | 
| 100 | 			/// Show Entity nodes. This is meaningful only when creating an iterator or | 
| 101 | 			/// tree-walker with an Entity node as its root; in this case, it means that | 
| 102 | 			/// the Entity node will appear in the first position of the traversal. Since | 
| 103 | 			/// entities are not part of the document tree, they do not appear when traversing | 
| 104 | 			/// over the document tree. | 
| 105 |  | 
| 106 | 		SHOW_PROCESSING_INSTRUCTION = 0x00000040, | 
| 107 | 			/// Show ProcessingInstruction nodes. | 
| 108 |  | 
| 109 | 		                = 0x00000080, | 
| 110 | 			/// Show Comment nodes. | 
| 111 |  | 
| 112 | 		SHOW_DOCUMENT               = 0x00000100, | 
| 113 | 			/// Show Document nodes. | 
| 114 |  | 
| 115 | 		SHOW_DOCUMENT_TYPE          = 0x00000200, | 
| 116 | 			/// Show DocumentType nodes. | 
| 117 |  | 
| 118 | 		SHOW_DOCUMENT_FRAGMENT      = 0x00000400, | 
| 119 | 			/// Show DocumentFragment nodes. | 
| 120 |  | 
| 121 | 		SHOW_NOTATION               = 0x00000800 | 
| 122 | 			/// Show Notation nodes. This is meaningful only when creating an iterator or | 
| 123 | 			/// tree-walker with a Notation node as its root; in this case, it means that | 
| 124 | 			/// the Notation node will appear in the first position of the traversal. Since | 
| 125 | 			/// notations are not part of the document tree, they do not appear when traversing | 
| 126 | 			/// over the document tree. | 
| 127 | 	}; | 
| 128 | 	 | 
| 129 | 	virtual short acceptNode(Node* node) = 0; | 
| 130 | 		/// Test whether a specified node is visible in the logical view of a TreeWalker | 
| 131 | 		/// or NodeIterator. This function will be called by the implementation of TreeWalker | 
| 132 | 		/// and NodeIterator; it is not normally called directly from user code. (Though | 
| 133 | 		/// you could do so if you wanted to use the same filter to guide your own application | 
| 134 | 		/// logic.) | 
| 135 | 		/// | 
| 136 | 		/// Returns FILTER_ACCEPT, FILTER_REJECT or FILTER_SKIP. | 
| 137 | 		 | 
| 138 | protected: | 
| 139 | 	virtual ~NodeFilter(); | 
| 140 | }; | 
| 141 |  | 
| 142 |  | 
| 143 | } } // namespace Poco::XML | 
| 144 |  | 
| 145 |  | 
| 146 | #endif // DOM_NodeFilter_INCLUDED | 
| 147 |  |