52 lines
1.5 KiB
C
52 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 );
|