Issue #567 - add option, messages, and fix node iteration.
Add option TidyStyleTags, --fix-style-tags, Bool, to turn off this action. Add warning messages MOVED_STYLE_TO_HEAD, and FOUND_STYLE_IN_BODY. Fully iterate ALL nodes in the body, in search of style tags... Changes to be committed: modified: include/tidyenum.h modified: src/clean.c modified: src/config.c modified: src/language_en.h modified: src/message.c
This commit is contained in:
parent
d4ca02adfb
commit
50859e8258
|
@ -270,7 +270,9 @@ extern "C" {
|
||||||
FN(COERCE_TO_ENDTAG) \
|
FN(COERCE_TO_ENDTAG) \
|
||||||
FN(ELEMENT_NOT_EMPTY) \
|
FN(ELEMENT_NOT_EMPTY) \
|
||||||
FN(UNEXPECTED_END_OF_FILE) \
|
FN(UNEXPECTED_END_OF_FILE) \
|
||||||
FN(UNEXPECTED_ENDTAG)
|
FN(UNEXPECTED_ENDTAG) \
|
||||||
|
FN(MOVED_STYLE_TO_HEAD) \
|
||||||
|
FN(FOUND_STYLE_IN_BODY)
|
||||||
|
|
||||||
|
|
||||||
/** These are report messages added by Tidy's accessibility module. */
|
/** These are report messages added by Tidy's accessibility module. */
|
||||||
|
@ -648,6 +650,7 @@ typedef enum
|
||||||
TidyXmlPIs, /**< If set to yes PIs must end with ?> */
|
TidyXmlPIs, /**< If set to yes PIs must end with ?> */
|
||||||
TidyXmlSpace, /**< If set to yes adds xml:space attr as needed */
|
TidyXmlSpace, /**< If set to yes adds xml:space attr as needed */
|
||||||
TidyXmlTags, /**< Treat input as XML */
|
TidyXmlTags, /**< Treat input as XML */
|
||||||
|
TidyStyleTags, /**< Move sytle to head */
|
||||||
N_TIDY_OPTIONS /**< Must be last */
|
N_TIDY_OPTIONS /**< Must be last */
|
||||||
} TidyOptionId;
|
} TidyOptionId;
|
||||||
|
|
||||||
|
|
79
src/clean.c
79
src/clean.c
|
@ -2647,57 +2647,56 @@ void TY_(FixAnchors)(TidyDocImpl* doc, Node *node, Bool wantName, Bool wantId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Issue #567 - move style elements from body to head */
|
/* Issue #567 - move style elements from body to head
|
||||||
|
* ==================================================
|
||||||
|
*/
|
||||||
|
static void StyleToHead(TidyDocImpl* doc, Node *head, Node *node, Bool fix, int indent)
|
||||||
|
{
|
||||||
|
Node *next;
|
||||||
|
while (node)
|
||||||
|
{
|
||||||
|
next = node->next; /* get 'next' now , in case the node is moved */
|
||||||
|
/* dbg_show_node(doc, node, 0, indent); */
|
||||||
|
if (nodeIsSTYLE(node))
|
||||||
|
{
|
||||||
|
if (fix)
|
||||||
|
{
|
||||||
|
TY_(RemoveNode)(node); /* unhook style node from body */
|
||||||
|
TY_(InsertNodeAtEnd)(head, node); /* add to end of head */
|
||||||
|
TY_(ReportNotice)(doc, node, head, MOVED_STYLE_TO_HEAD); /* report move */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TY_(ReportNotice)(doc, node, head, FOUND_STYLE_IN_BODY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (node->content)
|
||||||
|
{
|
||||||
|
StyleToHead(doc, head, node->content, fix, indent + 1);
|
||||||
|
}
|
||||||
|
node = next; /* process the 'next', if any */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void TY_(CleanStyle)(TidyDocImpl* doc, Node *html)
|
void TY_(CleanStyle)(TidyDocImpl* doc, Node *html)
|
||||||
{
|
{
|
||||||
Node *node, *next, *head = NULL, *body = NULL;
|
Node *head = NULL, *body = NULL;
|
||||||
Node *child;
|
Bool fix = cfgBool(doc, TidyStyleTags);
|
||||||
|
|
||||||
if (!html)
|
if (!html)
|
||||||
return; /* oops, not given a start node */
|
return; /* oops, not given a start node */
|
||||||
|
|
||||||
#if 0 /* this failed??? */
|
|
||||||
for (node = html->content; node != NULL; node = node->next)
|
|
||||||
{
|
|
||||||
if (nodeIsHEAD(node))
|
|
||||||
head = node;
|
|
||||||
|
|
||||||
if (nodeIsBODY(node))
|
|
||||||
body = node;
|
|
||||||
}
|
|
||||||
#endif /* 0000000000000000000000 */
|
|
||||||
head = TY_(FindHEAD)( doc );
|
head = TY_(FindHEAD)( doc );
|
||||||
body = TY_(FindBody)( doc );
|
body = TY_(FindBody)( doc );
|
||||||
|
|
||||||
if (head != NULL && body != NULL)
|
if ((head != NULL) && (body != NULL))
|
||||||
{
|
{
|
||||||
/* found head and body */
|
StyleToHead(doc, head, body, fix, 0); /* found head and body */
|
||||||
for (node = body->content; node != NULL; node = next)
|
|
||||||
{
|
|
||||||
next = node->next;
|
|
||||||
if (nodeIsSTYLE(node))
|
|
||||||
{
|
|
||||||
TY_(RemoveNode)(node); /* unhool style node from body */
|
|
||||||
TY_(InsertNodeAtEnd)(head, node); /* add to end of head */
|
|
||||||
/* TODO: Add warning */
|
|
||||||
}
|
|
||||||
else if (node->content)
|
|
||||||
{
|
|
||||||
for (child = node->content; child != NULL; child = child->content)
|
|
||||||
{
|
|
||||||
if (nodeIsSTYLE(child))
|
|
||||||
{
|
|
||||||
TY_(RemoveNode)(child); /* unhool style node from body */
|
|
||||||
TY_(InsertNodeAtEnd)(head, child); /* add to end of head */
|
|
||||||
/* TODO: Add warning */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* ==================================================
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* local variables:
|
* local variables:
|
||||||
|
|
|
@ -312,6 +312,7 @@ static const TidyOptionImpl option_defs[] =
|
||||||
{ TidyXmlPIs, MU, "assume-xml-procins", BL, no, ParsePickList, &boolPicks },
|
{ TidyXmlPIs, MU, "assume-xml-procins", BL, no, ParsePickList, &boolPicks },
|
||||||
{ TidyXmlSpace, MU, "add-xml-space", BL, no, ParsePickList, &boolPicks },
|
{ TidyXmlSpace, MU, "add-xml-space", BL, no, ParsePickList, &boolPicks },
|
||||||
{ TidyXmlTags, MU, "input-xml", BL, no, ParsePickList, &boolPicks },
|
{ TidyXmlTags, MU, "input-xml", BL, no, ParsePickList, &boolPicks },
|
||||||
|
{ TidyStyleTags, MU, "fix-style-tags", BL, yes, ParsePickList, &boolPicks },
|
||||||
{ N_TIDY_OPTIONS, XX, NULL, XY, 0, NULL, NULL }
|
{ N_TIDY_OPTIONS, XX, NULL, XY, 0, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1512,6 +1512,18 @@ static languageDefinition language_en = { whichPluralForm_en, {
|
||||||
"This option specifies if Tidy should use the XML parser rather than the "
|
"This option specifies if Tidy should use the XML parser rather than the "
|
||||||
"error correcting HTML parser. "
|
"error correcting HTML parser. "
|
||||||
},
|
},
|
||||||
|
{/* Important notes for translators:
|
||||||
|
- Use only <code></code>, <var></var>, <em></em>, <strong></strong>, and
|
||||||
|
<br/>.
|
||||||
|
- Entities, tags, attributes, etc., should be enclosed in <code></code>.
|
||||||
|
- Option values should be enclosed in <var></var>.
|
||||||
|
- It's very important that <br/> be self-closing!
|
||||||
|
- The strings "Tidy" and "HTML Tidy" are the program name and must not
|
||||||
|
be translated. */
|
||||||
|
TidyStyleTags, 0,
|
||||||
|
"This option specifies if Tidy should move all style tags to the "
|
||||||
|
"head of the document. "
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
/********************************************
|
/********************************************
|
||||||
|
@ -1890,8 +1902,9 @@ static languageDefinition language_en = { whichPluralForm_en, {
|
||||||
{ ELEMENT_NOT_EMPTY, 0, "%s element not empty or not closed" }, /* ReportError, ReportAttrError */
|
{ ELEMENT_NOT_EMPTY, 0, "%s element not empty or not closed" }, /* ReportError, ReportAttrError */
|
||||||
{ UNEXPECTED_END_OF_FILE, 0, "unexpected end of file %s" }, /* ReportError, ReportAttrError */
|
{ UNEXPECTED_END_OF_FILE, 0, "unexpected end of file %s" }, /* ReportError, ReportAttrError */
|
||||||
{ UNEXPECTED_ENDTAG, 0, "unexpected </%s>" }, /* ReportError, ReportFatal */
|
{ UNEXPECTED_ENDTAG, 0, "unexpected </%s>" }, /* ReportError, ReportFatal */
|
||||||
|
{ MOVED_STYLE_TO_HEAD, 0, "moved <style> tag to <head>! fix-style-tags: no to avoid." }, /* ReportWarning */
|
||||||
|
{ FOUND_STYLE_IN_BODY, 0, "found <style> tag in <body>! fix-style-tags: yes to move." }, /* ReportWarning */
|
||||||
|
|
||||||
|
|
||||||
#if SUPPORT_ACCESSIBILITY_CHECKS
|
#if SUPPORT_ACCESSIBILITY_CHECKS
|
||||||
|
|
||||||
/***************************************
|
/***************************************
|
||||||
|
|
|
@ -249,6 +249,11 @@ void TY_(ReportNotice)(TidyDocImpl* doc, Node *element, Node *node, uint code)
|
||||||
}
|
}
|
||||||
message = TY_(tidyMessageCreateWithNode)(doc, element, code, TidyInfo, elemdesc, tagtype );
|
message = TY_(tidyMessageCreateWithNode)(doc, element, code, TidyInfo, elemdesc, tagtype );
|
||||||
break;
|
break;
|
||||||
|
case MOVED_STYLE_TO_HEAD:
|
||||||
|
case FOUND_STYLE_IN_BODY:
|
||||||
|
TagToString(element, elemdesc, sizeof(elemdesc));
|
||||||
|
message = TY_(tidyMessageCreateWithNode)(doc, element, code, TidyWarning, elemdesc);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
messageOut( message );
|
messageOut( message );
|
||||||
|
|
Loading…
Reference in a new issue