Remove more recursion.

This commit is contained in:
Jim Derry 2021-07-30 17:15:58 -04:00
parent c21deae8c0
commit a34b0f07b5
2 changed files with 42 additions and 10 deletions

View File

@ -1629,6 +1629,7 @@ void TY_(BQ2Div)( TidyDocImpl* doc, Node *node )
node = next ? next : TY_(pop)(stack);
}
TY_(freeStack)(stack);
}
@ -2591,6 +2592,7 @@ void TY_(ConvertCDATANodes)(TidyDocImpl* doc, Node* node)
*/
void TY_(FixLanguageInformation)(TidyDocImpl* doc, Node* node, Bool wantXmlLang, Bool wantLang)
{
Stack *stack = TY_(newStack)(doc, 16);
Node* next;
while (node)
@ -2634,10 +2636,15 @@ void TY_(FixLanguageInformation)(TidyDocImpl* doc, Node* node, Bool wantXmlLang,
}
if (node->content)
TY_(FixLanguageInformation)(doc, node->content, wantXmlLang, wantLang);
{
TY_(push)(stack, next);
node = node->content;
continue;
}
node = next;
node = next ? next : TY_(pop)(stack);
}
TY_(freeStack)(stack);
}
/*
@ -2669,6 +2676,7 @@ void TY_(FixXhtmlNamespace)(TidyDocImpl* doc, Bool wantXmlns)
*/
void TY_(FixAnchors)(TidyDocImpl* doc, Node *node, Bool wantName, Bool wantId)
{
Stack *stack = TY_(newStack)(doc, 16);
Node* next;
while (node)
@ -2738,10 +2746,15 @@ void TY_(FixAnchors)(TidyDocImpl* doc, Node *node, Bool wantName, Bool wantId)
}
if (node->content)
TY_(FixAnchors)(doc, node->content, wantName, wantId);
{
TY_(push)(stack, next);
node = node->content;
continue;
}
node = next;
node = next ? next : TY_(pop)(stack);
}
TY_(freeStack)(stack);
}
/* Issue #567 - move style elements from body to head
@ -2785,6 +2798,7 @@ static void StyleToHead(TidyDocImpl* doc, Node *head, Node *node, Bool fix, int
indent--;
}
}
TY_(freeStack)(stack);
}

View File

@ -1630,15 +1630,19 @@ static Bool nodeHasAlignAttr( Node *node )
*/
static void TY_(CheckHTML5)( TidyDocImpl* doc, Node* node )
{
Stack *stack = TY_(newStack)(doc, 16);
Bool clean = cfgBool( doc, TidyMakeClean );
Bool already_strict = cfgBool( doc, TidyStrictTagsAttr );
Node* body = TY_(FindBody)( doc );
Node* next;
Bool warn = yes; /* should this be a warning, error, or report??? */
AttVal* attr = NULL;
int i = 0;
while (node)
{
next = node->next;
if ( nodeHasAlignAttr( node ) ) {
/* @todo: Is this for ALL elements that accept an 'align' attribute,
* or should this be a sub-set test?
@ -1792,10 +1796,15 @@ static void TY_(CheckHTML5)( TidyDocImpl* doc, Node* node )
}
if (node->content)
TY_(CheckHTML5)( doc, node->content );
node = node->next;
{
TY_(push)(stack, next);
node = node->content;
continue;
}
node = next ? next : TY_(pop)(stack);
}
TY_(freeStack)(stack);
}
/*****************************************************************************
* END HTML5 STUFF
@ -1816,6 +1825,8 @@ static void TY_(CheckHTML5)( TidyDocImpl* doc, Node* node )
*/
static void TY_(CheckHTMLTagsAttribsVersions)( TidyDocImpl* doc, Node* node )
{
Stack *stack = TY_(newStack)(doc, 16);
Node *next;
uint versionEmitted = doc->lexer->versionEmitted;
uint declared = doc->lexer->doctype;
uint version = versionEmitted == 0 ? declared : versionEmitted;
@ -1830,6 +1841,8 @@ static void TY_(CheckHTMLTagsAttribsVersions)( TidyDocImpl* doc, Node* node )
while (node)
{
next = node->next;
/* This bit here handles our HTML tags */
if ( TY_(nodeIsElement)(node) && node->tag ) {
@ -1914,10 +1927,15 @@ static void TY_(CheckHTMLTagsAttribsVersions)( TidyDocImpl* doc, Node* node )
}
if (node->content)
TY_(CheckHTMLTagsAttribsVersions)( doc, node->content );
node = node->next;
{
TY_(push)(stack, next);
node = node->content;
continue;
}
node = next ? next : TY_(pop)(stack);
}
TY_(freeStack)(stack);
}