/* TidyNodeIter (c) 1998-2003 (W3C) MIT, ERCIM, Keio University See tidy.h for the copyright notice. These files contain utility routines to perform in-order traversals of the Tidy document tree, beginning at an arbitrary node. A traversal of the tree can be performed in a manner similar to the following: Node *testNode; TidyNodeIter *iter = newTidyNodeIter( FindBody( tdoc )); for (testNode = nextTidyNode( &iter ); NULL != testNode; testNode = nextTidyNode( &iter )) { } TODO: Add a prevTidyNode() function. */ #include "lexer.h" typedef struct _TidyNodeIter { Node *pTop, *pCurrent; } TidyNodeIter; TidyNodeIter *newTidyNodeIter( Node *pStart ); /* nextTidyNode( TidyNodeIter *pIter ) if pCurrent is NULL, this function initializes it to match pTop, and returns that value, otherwise it advances to the next node in order, and returns that value. When pTop == pCurrent, the function returns NULL to indicate that the entire tree has been visited. */ Node *nextTidyNode( TidyNodeIter *pIter ); /* setCurrentNode( TidyNodeIter *pThis, Node *newCurr ) Resets pCurrent to match the passed value; useful if you need to back up to an unaltered point in the tree, or to skip a section. The next call to nextTidyNode() will return the node which follows newCurr in order. Minimal error checking is performed; unexpected results _will_ occur if newCurr is not a descendant node of pTop. */ void setCurrentNode( TidyNodeIter *pThis, Node *newCurr );