duckscraper/lib/tidy/experimental/TidyNodeIter.h

51 lines
1.5 KiB
C

/* 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 );