diff --git a/include/tidy.h b/include/tidy.h
index 7d734ea..b1de486 100644
--- a/include/tidy.h
+++ b/include/tidy.h
@@ -1248,7 +1248,16 @@ TIDY_EXPORT int TIDY_CALL tidyGetMessageColumn( TidyMessage tmessage );
** message.
*/
TIDY_EXPORT TidyReportLevel TIDY_CALL tidyGetMessageLevel( TidyMessage tmessage );
-
+
+
+/** Get the muted status of the message, that is, whether or not the
+ ** current configuration indicated that this message should be muted.
+ ** @param tmessage Specify the message that you are querying.
+ ** @result Returns a Bool indicating that the config indicates muting this
+ ** message.
+ */
+TIDY_EXPORT Bool TIDY_CALL tidyGetMessageIsMuted( TidyMessage tmessage );
+
/** Get the default format string, which is the format string for the message
** in Tidy's default localization (en_us).
** @param tmessage Specify the message that you are querying.
diff --git a/include/tidyenum.h b/include/tidyenum.h
index 44f730b..90d7352 100644
--- a/include/tidyenum.h
+++ b/include/tidyenum.h
@@ -157,12 +157,9 @@ extern "C" {
** than the short report.
*/
#define FOREACH_DIALOG_MSG(FN) \
-/* TidyInfo */ FN(STRING_CONTENT_LOOKS) \
-/* TidyInfo */ FN(STRING_DOCTYPE_GIVEN) \
/* TidyDialogueSummary */ FN(STRING_ERROR_COUNT) \
/* TidyDialogueSummary */ FN(STRING_NEEDS_INTERVENTION) \
/* TidyDialogueSummary */ FN(STRING_NO_ERRORS) \
-/* TidyInfo */ FN(STRING_NO_SYSID) \
/* TidyDialogueSummary */ FN(STRING_NOT_ALL_SHOWN) \
/* TidyDialogueInfo */ FN(TEXT_GENERAL_INFO_PLEA) \
/* TidyDialogueInfo */ FN(TEXT_GENERAL_INFO)
@@ -255,7 +252,12 @@ extern "C" {
FN(REPLACING_ELEMENT) \
FN(REPLACING_UNEX_ELEMENT) \
FN(SPACE_PRECEDING_XMLDECL) \
+ FN(STRING_CONTENT_LOOKS) \
+ FN(STRING_ARGUMENT_BAD) \
+ FN(STRING_DOCTYPE_GIVEN) \
FN(STRING_MISSING_MALFORMED) \
+ FN(STRING_MUTING_TYPE) \
+ FN(STRING_NO_SYSID) \
FN(STRING_UNKNOWN_OPTION) \
FN(SUSPECTED_MISSING_QUOTE) \
FN(TAG_NOT_ALLOWED_IN) \
@@ -636,6 +638,8 @@ typedef enum
TidyShowWarnings, /**< However errors are always shown */
TidySkipNested, /**< Skip nested tags in script and style CDATA */
TidySortAttributes, /**< Sort attributes */
+ TidyMuteReports, /**< Filter these messages from output. */
+ TidyMuteShow, /**< Show message ID's in the error table */
TidyStrictTagsAttr, /**< Ensure tags and attributes match output HTML version */
TidyStyleTags, /**< Move sytle to head */
TidyTabSize, /**< Expand tabs to n spaces */
@@ -1414,7 +1418,9 @@ typedef enum
FOREACH_MSG_MISC(MAKE_ENUM)
FOREACH_FOOTNOTE_MSG(MAKE_ENUM)
FOREACH_DIALOG_MSG(MAKE_ENUM)
+ REPORT_MESSAGE_FIRST,
FOREACH_REPORT_MSG(MAKE_ENUM)
+ REPORT_MESSAGE_LAST,
FOREACH_ACCESS_MSG(MAKE_ENUM)
#if SUPPORT_CONSOLE_APP
diff --git a/localize/translations/language_en_gb.po b/localize/translations/language_en_gb.po
index 1774021..78f3eaf 100644
--- a/localize/translations/language_en_gb.po
+++ b/localize/translations/language_en_gb.po
@@ -5,7 +5,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: HTML Tidy poconvert.rb\n"
"Project-Id-Version: \n"
-"PO-Revision-Date: 2017-10-07 16:24:04\n"
+"PO-Revision-Date: 2017-10-10 08:20:36\n"
"Last-Translator: jderry\n"
"Language-Team: \n"
@@ -1297,6 +1297,41 @@ msgid ""
"been output. "
msgstr ""
+#. Important notes for translators:
+#. - Use only
, , , , and
+#.
.
+#. - Entities, tags, attributes, etc., should be enclosed in
.
+#. - Option values should be enclosed in .
+#. - It's very important that
be self-closing!
+#. - The strings "Tidy" and "HTML Tidy" are the program name and must not
+#. be translated.
+msgctxt "TidyMuteReports"
+msgid ""
+"Use this option to prevent Tidy from displaying certain types of "
+"report output,for example, for conditions that you wish to ignore."
+"
"
+"This option takes a list of one or more keys indicating the message "
+"type to mute. You can discover these message keys by using the "
+"mute-id
configuration option and examining Tidy's "
+"output. "
+msgstr ""
+
+#. Important notes for translators:
+#. - Use only
, , , , and
+#.
.
+#. - Entities, tags, attributes, etc., should be enclosed in
.
+#. - Option values should be enclosed in .
+#. - It's very important that
be self-closing!
+#. - The strings "Tidy" and "HTML Tidy" are the program name and must not
+#. be translated.
+msgctxt "TidyMuteShow"
+msgid ""
+"This option indicates whether or not Tidy should display message ID's "
+"with each of its error reports. This could be useful if you wanted to "
+"use the mute
configuration option in order to filter "
+"out certain report messages. "
+msgstr ""
+
#. Important notes for translators:
#. - Use only
, , , , and
#.
.
@@ -2535,11 +2570,21 @@ msgctxt "SPACE_PRECEDING_XMLDECL"
msgid "removing whitespace preceding XML Declaration"
msgstr ""
+#, c-format
+msgctxt "STRING_ARGUMENT_BAD"
+msgid "option \"%s\" given bad argument \"%s\""
+msgstr ""
+
#, c-format
msgctxt "STRING_MISSING_MALFORMED"
msgid "missing or malformed argument for option: %s"
msgstr ""
+#, c-format
+msgctxt "STRING_MUTING_TYPE"
+msgid "messages of type \"%s\" will not be output"
+msgstr ""
+
#, c-format
msgctxt "STRING_UNKNOWN_OPTION"
msgid "unknown option: %s"
diff --git a/localize/translations/language_es.po b/localize/translations/language_es.po
index a72cb5a..02ab42d 100644
--- a/localize/translations/language_es.po
+++ b/localize/translations/language_es.po
@@ -5,7 +5,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: HTML Tidy poconvert.rb\n"
"Project-Id-Version: \n"
-"PO-Revision-Date: 2017-10-07 16:24:04\n"
+"PO-Revision-Date: 2017-10-10 08:20:36\n"
"Last-Translator: jderry\n"
"Language-Team: \n"
@@ -1260,6 +1260,41 @@ msgid ""
"been output. "
msgstr ""
+#. Important notes for translators:
+#. - Use only
, , , , and
+#.
.
+#. - Entities, tags, attributes, etc., should be enclosed in
.
+#. - Option values should be enclosed in .
+#. - It's very important that
be self-closing!
+#. - The strings "Tidy" and "HTML Tidy" are the program name and must not
+#. be translated.
+msgctxt "TidyMuteReports"
+msgid ""
+"Use this option to prevent Tidy from displaying certain types of "
+"report output,for example, for conditions that you wish to ignore."
+"
"
+"This option takes a list of one or more keys indicating the message "
+"type to mute. You can discover these message keys by using the "
+"mute-id
configuration option and examining Tidy's "
+"output. "
+msgstr ""
+
+#. Important notes for translators:
+#. - Use only
, , , , and
+#.
.
+#. - Entities, tags, attributes, etc., should be enclosed in
.
+#. - Option values should be enclosed in .
+#. - It's very important that
be self-closing!
+#. - The strings "Tidy" and "HTML Tidy" are the program name and must not
+#. be translated.
+msgctxt "TidyMuteShow"
+msgid ""
+"This option indicates whether or not Tidy should display message ID's "
+"with each of its error reports. This could be useful if you wanted to "
+"use the mute
configuration option in order to filter "
+"out certain report messages. "
+msgstr ""
+
#. Important notes for translators:
#. - Use only
, , , , and
#.
.
@@ -2479,11 +2514,21 @@ msgctxt "SPACE_PRECEDING_XMLDECL"
msgid "removing whitespace preceding XML Declaration"
msgstr ""
+#, c-format
+msgctxt "STRING_ARGUMENT_BAD"
+msgid "option \"%s\" given bad argument \"%s\""
+msgstr ""
+
#, c-format
msgctxt "STRING_MISSING_MALFORMED"
msgid "missing or malformed argument for option: %s"
msgstr ""
+#, c-format
+msgctxt "STRING_MUTING_TYPE"
+msgid "messages of type \"%s\" will not be output"
+msgstr ""
+
#, c-format
msgctxt "STRING_UNKNOWN_OPTION"
msgid "unknown option: %s"
diff --git a/localize/translations/language_es_mx.po b/localize/translations/language_es_mx.po
index 4f2ff13..309e528 100644
--- a/localize/translations/language_es_mx.po
+++ b/localize/translations/language_es_mx.po
@@ -5,7 +5,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: HTML Tidy poconvert.rb\n"
"Project-Id-Version: \n"
-"PO-Revision-Date: 2017-10-07 16:24:04\n"
+"PO-Revision-Date: 2017-10-10 08:20:36\n"
"Last-Translator: jderry\n"
"Language-Team: \n"
@@ -1255,6 +1255,41 @@ msgid ""
"been output. "
msgstr ""
+#. Important notes for translators:
+#. - Use only
, , , , and
+#.
.
+#. - Entities, tags, attributes, etc., should be enclosed in
.
+#. - Option values should be enclosed in .
+#. - It's very important that
be self-closing!
+#. - The strings "Tidy" and "HTML Tidy" are the program name and must not
+#. be translated.
+msgctxt "TidyMuteReports"
+msgid ""
+"Use this option to prevent Tidy from displaying certain types of "
+"report output,for example, for conditions that you wish to ignore."
+"
"
+"This option takes a list of one or more keys indicating the message "
+"type to mute. You can discover these message keys by using the "
+"mute-id
configuration option and examining Tidy's "
+"output. "
+msgstr ""
+
+#. Important notes for translators:
+#. - Use only
, , , , and
+#.
.
+#. - Entities, tags, attributes, etc., should be enclosed in
.
+#. - Option values should be enclosed in .
+#. - It's very important that
be self-closing!
+#. - The strings "Tidy" and "HTML Tidy" are the program name and must not
+#. be translated.
+msgctxt "TidyMuteShow"
+msgid ""
+"This option indicates whether or not Tidy should display message ID's "
+"with each of its error reports. This could be useful if you wanted to "
+"use the mute
configuration option in order to filter "
+"out certain report messages. "
+msgstr ""
+
#. Important notes for translators:
#. - Use only
, , , , and
#.
.
@@ -2474,11 +2509,21 @@ msgctxt "SPACE_PRECEDING_XMLDECL"
msgid "removing whitespace preceding XML Declaration"
msgstr ""
+#, c-format
+msgctxt "STRING_ARGUMENT_BAD"
+msgid "option \"%s\" given bad argument \"%s\""
+msgstr ""
+
#, c-format
msgctxt "STRING_MISSING_MALFORMED"
msgid "missing or malformed argument for option: %s"
msgstr ""
+#, c-format
+msgctxt "STRING_MUTING_TYPE"
+msgid "messages of type \"%s\" will not be output"
+msgstr ""
+
#, c-format
msgctxt "STRING_UNKNOWN_OPTION"
msgid "unknown option: %s"
diff --git a/localize/translations/language_fr.po b/localize/translations/language_fr.po
index 9ba9986..c871841 100644
--- a/localize/translations/language_fr.po
+++ b/localize/translations/language_fr.po
@@ -5,7 +5,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: HTML Tidy poconvert.rb\n"
"Project-Id-Version: \n"
-"PO-Revision-Date: 2017-10-07 16:24:04\n"
+"PO-Revision-Date: 2017-10-10 08:20:36\n"
"Last-Translator: jderry\n"
"Language-Team: \n"
@@ -1490,6 +1490,41 @@ msgstr ""
"classement. Si la valeur est alpha, l'algorithme est un classement alphabétique "
"ascendant. "
+#. Important notes for translators:
+#. - Use only
, , , , and
+#.
.
+#. - Entities, tags, attributes, etc., should be enclosed in
.
+#. - Option values should be enclosed in .
+#. - It's very important that
be self-closing!
+#. - The strings "Tidy" and "HTML Tidy" are the program name and must not
+#. be translated.
+msgctxt "TidyMuteReports"
+msgid ""
+"Use this option to prevent Tidy from displaying certain types of "
+"report output,for example, for conditions that you wish to ignore."
+"
"
+"This option takes a list of one or more keys indicating the message "
+"type to mute. You can discover these message keys by using the "
+"mute-id
configuration option and examining Tidy's "
+"output. "
+msgstr ""
+
+#. Important notes for translators:
+#. - Use only
, , , , and
+#.
.
+#. - Entities, tags, attributes, etc., should be enclosed in
.
+#. - Option values should be enclosed in .
+#. - It's very important that
be self-closing!
+#. - The strings "Tidy" and "HTML Tidy" are the program name and must not
+#. be translated.
+msgctxt "TidyMuteShow"
+msgid ""
+"This option indicates whether or not Tidy should display message ID's "
+"with each of its error reports. This could be useful if you wanted to "
+"use the mute
configuration option in order to filter "
+"out certain report messages. "
+msgstr ""
+
#. Important notes for translators:
#. - Use only
, , , , and
#.
.
@@ -2919,11 +2954,21 @@ msgctxt "SPACE_PRECEDING_XMLDECL"
msgid "removing whitespace preceding XML Declaration"
msgstr "suppression de l'espace précédant la déclaration XML"
+#, c-format
+msgctxt "STRING_ARGUMENT_BAD"
+msgid "option \"%s\" given bad argument \"%s\""
+msgstr ""
+
#, c-format
msgctxt "STRING_MISSING_MALFORMED"
msgid "missing or malformed argument for option: %s"
msgstr "argument manquant ou incorrect pour l'option: %s"
+#, c-format
+msgctxt "STRING_MUTING_TYPE"
+msgid "messages of type \"%s\" will not be output"
+msgstr ""
+
#, c-format
msgctxt "STRING_UNKNOWN_OPTION"
msgid "unknown option: %s"
diff --git a/localize/translations/language_pt_br.po b/localize/translations/language_pt_br.po
index e42bda3..3f02fb7 100644
--- a/localize/translations/language_pt_br.po
+++ b/localize/translations/language_pt_br.po
@@ -5,7 +5,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: HTML Tidy poconvert.rb\n"
"Project-Id-Version: \n"
-"PO-Revision-Date: 2017-10-07 16:24:04\n"
+"PO-Revision-Date: 2017-10-10 08:20:36\n"
"Last-Translator: jderry\n"
"Language-Team: \n"
@@ -1544,6 +1544,41 @@ msgstr ""
"elemento usando o algoritmo de ordenação especificado. Se configurado para "
"alpha, o algoritmo é uma ordenação alfabética ascendente. "
+#. Important notes for translators:
+#. - Use only
, , , , and
+#.
.
+#. - Entities, tags, attributes, etc., should be enclosed in
.
+#. - Option values should be enclosed in .
+#. - It's very important that
be self-closing!
+#. - The strings "Tidy" and "HTML Tidy" are the program name and must not
+#. be translated.
+msgctxt "TidyMuteReports"
+msgid ""
+"Use this option to prevent Tidy from displaying certain types of "
+"report output,for example, for conditions that you wish to ignore."
+"
"
+"This option takes a list of one or more keys indicating the message "
+"type to mute. You can discover these message keys by using the "
+"mute-id
configuration option and examining Tidy's "
+"output. "
+msgstr ""
+
+#. Important notes for translators:
+#. - Use only
, , , , and
+#.
.
+#. - Entities, tags, attributes, etc., should be enclosed in
.
+#. - Option values should be enclosed in .
+#. - It's very important that
be self-closing!
+#. - The strings "Tidy" and "HTML Tidy" are the program name and must not
+#. be translated.
+msgctxt "TidyMuteShow"
+msgid ""
+"This option indicates whether or not Tidy should display message ID's "
+"with each of its error reports. This could be useful if you wanted to "
+"use the mute
configuration option in order to filter "
+"out certain report messages. "
+msgstr ""
+
#. Important notes for translators:
#. - Use only
, , , , and
#.
.
@@ -3007,11 +3042,21 @@ msgctxt "SPACE_PRECEDING_XMLDECL"
msgid "removing whitespace preceding XML Declaration"
msgstr "removendo espaço em branco precedendo a declaração XML"
+#, c-format
+msgctxt "STRING_ARGUMENT_BAD"
+msgid "option \"%s\" given bad argument \"%s\""
+msgstr ""
+
#, c-format
msgctxt "STRING_MISSING_MALFORMED"
msgid "missing or malformed argument for option: %s"
msgstr "argumento faltando ou malformado para opção: %s"
+#, c-format
+msgctxt "STRING_MUTING_TYPE"
+msgid "messages of type \"%s\" will not be output"
+msgstr ""
+
#, c-format
msgctxt "STRING_UNKNOWN_OPTION"
msgid "unknown option: %s"
diff --git a/localize/translations/language_zh_cn.po b/localize/translations/language_zh_cn.po
index 435364e..4280129 100644
--- a/localize/translations/language_zh_cn.po
+++ b/localize/translations/language_zh_cn.po
@@ -5,7 +5,7 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: HTML Tidy poconvert.rb\n"
"Project-Id-Version: \n"
-"PO-Revision-Date: 2017-10-07 16:24:04\n"
+"PO-Revision-Date: 2017-10-10 08:20:36\n"
"Last-Translator: jderry\n"
"Language-Team: \n"
@@ -1255,6 +1255,41 @@ msgid ""
"been output. "
msgstr ""
+#. Important notes for translators:
+#. - Use only
, , , , and
+#.
.
+#. - Entities, tags, attributes, etc., should be enclosed in
.
+#. - Option values should be enclosed in .
+#. - It's very important that
be self-closing!
+#. - The strings "Tidy" and "HTML Tidy" are the program name and must not
+#. be translated.
+msgctxt "TidyMuteReports"
+msgid ""
+"Use this option to prevent Tidy from displaying certain types of "
+"report output,for example, for conditions that you wish to ignore."
+"
"
+"This option takes a list of one or more keys indicating the message "
+"type to mute. You can discover these message keys by using the "
+"mute-id
configuration option and examining Tidy's "
+"output. "
+msgstr ""
+
+#. Important notes for translators:
+#. - Use only
, , , , and
+#.
.
+#. - Entities, tags, attributes, etc., should be enclosed in
.
+#. - Option values should be enclosed in .
+#. - It's very important that
be self-closing!
+#. - The strings "Tidy" and "HTML Tidy" are the program name and must not
+#. be translated.
+msgctxt "TidyMuteShow"
+msgid ""
+"This option indicates whether or not Tidy should display message ID's "
+"with each of its error reports. This could be useful if you wanted to "
+"use the mute
configuration option in order to filter "
+"out certain report messages. "
+msgstr ""
+
#. Important notes for translators:
#. - Use only
, , , , and
#.
.
@@ -2468,11 +2503,21 @@ msgctxt "SPACE_PRECEDING_XMLDECL"
msgid "removing whitespace preceding XML Declaration"
msgstr ""
+#, c-format
+msgctxt "STRING_ARGUMENT_BAD"
+msgid "option \"%s\" given bad argument \"%s\""
+msgstr ""
+
#, c-format
msgctxt "STRING_MISSING_MALFORMED"
msgid "missing or malformed argument for option: %s"
msgstr ""
+#, c-format
+msgctxt "STRING_MUTING_TYPE"
+msgid "messages of type \"%s\" will not be output"
+msgstr ""
+
#, c-format
msgctxt "STRING_UNKNOWN_OPTION"
msgid "unknown option: %s"
diff --git a/localize/translations/tidy.pot b/localize/translations/tidy.pot
index b85084b..0cf1d0a 100644
--- a/localize/translations/tidy.pot
+++ b/localize/translations/tidy.pot
@@ -5,7 +5,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: HTML Tidy poconvert.rb\n"
"Project-Id-Version: \n"
-"POT-Creation-Date: 2017-10-07 16:24:04\n"
+"POT-Creation-Date: 2017-10-10 08:20:36\n"
"Last-Translator: jderry\n"
"Language-Team: \n"
@@ -1255,6 +1255,41 @@ msgid ""
"been output. "
msgstr ""
+#. Important notes for translators:
+#. - Use only
, , , , and
+#.
.
+#. - Entities, tags, attributes, etc., should be enclosed in
.
+#. - Option values should be enclosed in .
+#. - It's very important that
be self-closing!
+#. - The strings "Tidy" and "HTML Tidy" are the program name and must not
+#. be translated.
+msgctxt "TidyMuteReports"
+msgid ""
+"Use this option to prevent Tidy from displaying certain types of "
+"report output,for example, for conditions that you wish to ignore."
+"
"
+"This option takes a list of one or more keys indicating the message "
+"type to mute. You can discover these message keys by using the "
+"mute-id
configuration option and examining Tidy's "
+"output. "
+msgstr ""
+
+#. Important notes for translators:
+#. - Use only
, , , , and
+#.
.
+#. - Entities, tags, attributes, etc., should be enclosed in
.
+#. - Option values should be enclosed in .
+#. - It's very important that
be self-closing!
+#. - The strings "Tidy" and "HTML Tidy" are the program name and must not
+#. be translated.
+msgctxt "TidyMuteShow"
+msgid ""
+"This option indicates whether or not Tidy should display message ID's "
+"with each of its error reports. This could be useful if you wanted to "
+"use the mute
configuration option in order to filter "
+"out certain report messages. "
+msgstr ""
+
#. Important notes for translators:
#. - Use only
, , , , and
#.
.
@@ -2470,11 +2505,21 @@ msgctxt "SPACE_PRECEDING_XMLDECL"
msgid "removing whitespace preceding XML Declaration"
msgstr ""
+#, c-format
+msgctxt "STRING_ARGUMENT_BAD"
+msgid "option \"%s\" given bad argument \"%s\""
+msgstr ""
+
#, c-format
msgctxt "STRING_MISSING_MALFORMED"
msgid "missing or malformed argument for option: %s"
msgstr ""
+#, c-format
+msgctxt "STRING_MUTING_TYPE"
+msgid "messages of type \"%s\" will not be output"
+msgstr ""
+
#, c-format
msgctxt "STRING_UNKNOWN_OPTION"
msgid "unknown option: %s"
diff --git a/src/attrs.c b/src/attrs.c
index c7a8add..909faa8 100644
--- a/src/attrs.c
+++ b/src/attrs.c
@@ -781,6 +781,7 @@ void TY_(FreeAttrPriorityList)( TidyDocImpl* doc )
}
}
+
void TY_(DefinePriorityAttribute)(TidyDocImpl* doc, ctmbstr name)
{
enum { capacity = 10 };
diff --git a/src/config.c b/src/config.c
index df3b558..b9ecbba 100644
--- a/src/config.c
+++ b/src/config.c
@@ -249,6 +249,8 @@ static const TidyOptionImpl option_defs[] =
{ TidyShowWarnings, DD, "show-warnings", BL, yes, ParsePickList, &boolPicks },
{ TidySkipNested, MR, "skip-nested", BL, yes, ParsePickList, &boolPicks }, /* 1642186 - Issue #65 */
{ TidySortAttributes, PP, "sort-attributes", IN, TidySortAttrNone,ParsePickList, &sorterPicks },
+ { TidyMuteReports, DD, "mute", ST, 0, ParseList, NULL },
+ { TidyMuteShow, DD, "mute-id", BL, no, ParsePickList, &boolPicks },
{ TidyStrictTagsAttr, MR, "strict-tags-attributes", BL, no, ParsePickList, &boolPicks }, /* 20160209 - Issue #350 */
{ TidyStyleTags, MR, "fix-style-tags", BL, yes, ParsePickList, &boolPicks },
{ TidyTabSize, PP, "tab-size", IN, 8, ParseInt, NULL },
@@ -302,7 +304,7 @@ static const struct {
/* forward declarations */
static void AdjustConfig( TidyDocImpl* doc );
-static Bool GetPickListValue();
+static Bool GetPickListValue( ctmbstr value, PickListItems* pickList, uint *result );
void TY_(InitConfig)( TidyDocImpl* doc )
@@ -334,6 +336,7 @@ const TidyOptionImpl* TY_(lookupOption)( ctmbstr s )
return NULL;
}
+
const TidyOptionImpl* TY_(getOption)( TidyOptionId optId )
{
if ( optId < N_TIDY_OPTIONS )
@@ -348,6 +351,7 @@ static void FreeOptionValue( TidyDocImpl* doc, const TidyOptionImpl* option, Tid
TidyDocFree( doc, value->p );
}
+
static void CopyOptionValue( TidyDocImpl* doc, const TidyOptionImpl* option,
TidyOptionValue* oldval, const TidyOptionValue* newval )
{
@@ -406,6 +410,7 @@ Bool TY_(SetOptionBool)( TidyDocImpl* doc, TidyOptionId optId, Bool val )
return status;
}
+
static void GetOptionDefault( const TidyOptionImpl* option,
TidyOptionValue* dflt )
{
@@ -415,6 +420,7 @@ static void GetOptionDefault( const TidyOptionImpl* option,
dflt->v = option->dflt;
}
+
static Bool OptionValueEqDefault( const TidyOptionImpl* option,
const TidyOptionValue* val )
{
@@ -543,7 +549,7 @@ static Bool isOptionDeprecated( ctmbstr optName )
}
-/* Aubstitute the new option for the deprecated one. */
+/* Substitute the new option for the deprecated one. */
static Bool subDeprecatedOption( TidyDocImpl* doc, ctmbstr oldName, ctmbstr oldValue)
{
TidyOptionId newOptId = getOptionReplacement( oldName );
@@ -566,7 +572,7 @@ static Bool subDeprecatedOption( TidyDocImpl* doc, ctmbstr oldName, ctmbstr oldV
uint value;
/* `show-body-only` used to use the autoBoolPicks */
- if ( GetPickListValue( oldValue, autoBoolPicks, &value ) )
+ if ( GetPickListValue( oldValue, &autoBoolPicks, &value ) )
{
if ( value == TidyNoState )
{
@@ -1165,12 +1171,14 @@ void AdjustConfig( TidyDocImpl* doc )
}
-/* Coordinates Config update and Attributes data for priority attributes, as
- a service to ParseList().
+/* A service to ParseList(), keeps option values nicely formatted and
+ coordinates additions to the internal lists. Within Tidy, this function
+ might be used to programmatically add individual values to items that use
+ this service.
*/
-void TY_(DeclarePriorityAttrib)( TidyDocImpl* doc, TidyOptionId optId, ctmbstr name )
+void TY_(DeclareListItem)( TidyDocImpl* doc, const TidyOptionImpl* opt, ctmbstr name )
{
- ctmbstr prvval = cfgStr( doc, optId );
+ ctmbstr prvval = cfgStr( doc, opt->id );
tmbstr catval = NULL;
ctmbstr theval = name;
if ( prvval )
@@ -1182,14 +1190,27 @@ void TY_(DeclarePriorityAttrib)( TidyDocImpl* doc, TidyOptionId optId, ctmbstr n
theval = catval;
}
- TY_(DefinePriorityAttribute)( doc, name );
- SetOptionValue( doc, optId, theval );
+ switch ( opt->id )
+ {
+ case TidyPriorityAttributes:
+ TY_(DefinePriorityAttribute)( doc, name );
+ break;
+
+ case TidyMuteReports:
+ TY_(DefineMutedMessage)( doc, opt, name );
+ break;
+
+ default:
+ break;
+ }
+
+ SetOptionValue( doc, opt->id, theval );
if ( catval )
TidyDocFree( doc, catval );
- }
+}
-/* a space or comma separated list of attribute names */
+/* a space or comma separated list of items */
Bool ParseList( TidyDocImpl* doc, const TidyOptionImpl* option )
{
TidyConfigImpl* cfg = &doc->config;
@@ -1235,15 +1256,7 @@ Bool ParseList( TidyDocImpl* doc, const TidyOptionImpl* option )
continue; /* there is a trailing space on the line. */
/* add attribute to array */
- switch ( option->id )
- {
- case TidyPriorityAttributes:
- TY_(DeclarePriorityAttrib)( doc, option->id, buf );
- break;
-
- default:
- break;
- }
+ TY_(DeclareListItem)( doc, option, buf );
i = 0;
++nItems;
@@ -1251,15 +1264,7 @@ Bool ParseList( TidyDocImpl* doc, const TidyOptionImpl* option )
while ( c != EndOfStream );
if ( i > 0 )
- switch ( option->id )
- {
- case TidyPriorityAttributes:
- TY_(DeclarePriorityAttrib)( doc, option->id, buf );
- break;
-
- default:
- break;
- }
+ TY_(DeclareListItem)( doc, option, buf );
return ( nItems > 0 );
}
diff --git a/src/config.h b/src/config.h
index eff020d..a1f62ca 100644
--- a/src/config.h
+++ b/src/config.h
@@ -369,6 +369,12 @@ ctmbstr TY_(CharEncodingOptName)( int encoding );
void TY_(DeclareUserTag)( TidyDocImpl* doc, TidyOptionId optId,
uint tagType, ctmbstr name );
+/** Coordinates Config update and list data.
+ ** @param doc The Tidy document.
+ ** @param opt The option the list item is intended for.
+ ** @param name The name of the new list item.
+ */
+void TY_(DeclareListItem)( TidyDocImpl* doc, const TidyOptionImpl* opt, ctmbstr name );
#ifdef _DEBUG
diff --git a/src/language_en.h b/src/language_en.h
index 7a6c3ae..b9e3d5b 100644
--- a/src/language_en.h
+++ b/src/language_en.h
@@ -1176,6 +1176,37 @@ static languageDefinition language_en = { whichPluralForm_en, {
"attribute sorting will take place after the priority attributes have "
"been output. "
},
+ {/* Important notes for translators:
+ - Use only
, , , , and
+
.
+ - Entities, tags, attributes, etc., should be enclosed in
.
+ - Option values should be enclosed in .
+ - It's very important that
be self-closing!
+ - The strings "Tidy" and "HTML Tidy" are the program name and must not
+ be translated. */
+ TidyMuteReports, 0,
+ "Use this option to prevent Tidy from displaying certain types of "
+ "report output,for example, for conditions that you wish to ignore."
+ "
"
+ "This option takes a list of one or more keys indicating the message "
+ "type to mute. You can discover these message keys by using the "
+ "mute-id
configuration option and examining Tidy's "
+ "output. "
+ },
+ {/* Important notes for translators:
+ - Use only
, , , , and
+
.
+ - Entities, tags, attributes, etc., should be enclosed in
.
+ - Option values should be enclosed in .
+ - It's very important that
be self-closing!
+ - The strings "Tidy" and "HTML Tidy" are the program name and must not
+ be translated. */
+ TidyMuteShow, 0,
+ "This option indicates whether or not Tidy should display message ID's "
+ "with each of its error reports. This could be useful if you wanted to "
+ "use the mute
configuration option in order to filter "
+ "out certain report messages. "
+ },
{/* Important notes for translators:
- Use only
, , , , and
.
@@ -1918,7 +1949,9 @@ static languageDefinition language_en = { whichPluralForm_en, {
{ REPLACING_ELEMENT, 0, "replacing %s with %s" },
{ REPLACING_UNEX_ELEMENT, 0, "replacing unexpected %s with %s" },
{ SPACE_PRECEDING_XMLDECL, 0, "removing whitespace preceding XML Declaration" },
+ { STRING_ARGUMENT_BAD, 0, "option \"%s\" given bad argument \"%s\"" },
{ STRING_MISSING_MALFORMED, 0, "missing or malformed argument for option: %s" },
+ { STRING_MUTING_TYPE, 0, "messages of type \"%s\" will not be output" },
{ STRING_UNKNOWN_OPTION, 0, "unknown option: %s" },
{ SUSPECTED_MISSING_QUOTE, 0, "suspected missing quote mark for attribute value" },
{ TAG_NOT_ALLOWED_IN, 0, "%s isn't allowed in <%s> elements" },
diff --git a/src/message.c b/src/message.c
index 43fd510..9d8ca0f 100644
--- a/src/message.c
+++ b/src/message.c
@@ -153,6 +153,9 @@ static void messageOut( TidyMessageImpl *message )
break;
}
+ /* Suppress report messages if they've been muted. */
+ go = go & !message->muted;
+
/* Suppress report messages if we've already reached the reporting limit. */
if ( message->level <= TidyFatal )
{
@@ -357,9 +360,11 @@ static struct _dispatchTable {
{ REPLACING_ELEMENT, TidyWarning, formatStandard },
{ REPLACING_UNEX_ELEMENT, TidyWarning, formatStandard },
{ SPACE_PRECEDING_XMLDECL, TidyWarning, formatStandard },
+ { STRING_ARGUMENT_BAD, TidyConfig, formatStandard },
{ STRING_CONTENT_LOOKS, TidyInfo, formatStandard }, /* reportMarkupVersion() */
{ STRING_DOCTYPE_GIVEN, TidyInfo, formatStandard }, /* reportMarkupVersion() */
{ STRING_MISSING_MALFORMED, TidyConfig, formatStandard },
+ { STRING_MUTING_TYPE, TidyConfig, formatStandard },
{ STRING_NO_SYSID, TidyInfo, formatStandard }, /* reportMarkupVersion() */
{ STRING_UNKNOWN_OPTION, TidyConfig, formatStandard },
{ SUSPECTED_MISSING_QUOTE, TidyWarning, formatStandard },
@@ -723,6 +728,7 @@ TidyMessageImpl *formatStandard(TidyDocImpl* doc, Node *element, Node *node, uin
case STRING_CONTENT_LOOKS:
case STRING_DOCTYPE_GIVEN:
case STRING_MISSING_MALFORMED:
+ case STRING_MUTING_TYPE:
{
ctmbstr str;
if ( (str = va_arg( args, ctmbstr)) )
@@ -760,6 +766,7 @@ TidyMessageImpl *formatStandard(TidyDocImpl* doc, Node *element, Node *node, uin
} break;
case OPTION_REMOVED_UNAPPLIED:
+ case STRING_ARGUMENT_BAD:
{
ctmbstr s1 = va_arg( args, ctmbstr );
ctmbstr s2 = va_arg( args, ctmbstr );
@@ -1322,6 +1329,55 @@ void TY_(ReportNumWarnings)( TidyDocImpl* doc )
}
+/*********************************************************************
+ * Message Muting
+ *********************************************************************/
+
+
+void TY_(FreeMutedMessageList)( TidyDocImpl* doc )
+{
+ TidyMutedMessages *list = &(doc->muted);
+
+ if ( list->list )
+ TidyFree( doc->allocator, list->list );
+}
+
+
+void TY_(DefineMutedMessage)(TidyDocImpl* doc, const TidyOptionImpl* opt, ctmbstr name)
+{
+ enum { capacity = 10 };
+ TidyMutedMessages *list = &(doc->muted);
+ tidyStrings message = TY_(tidyErrorCodeFromKey)( name );
+
+ if ( message <= REPORT_MESSAGE_FIRST || message >= REPORT_MESSAGE_LAST)
+ {
+ TY_(Report)( doc, NULL, NULL, STRING_ARGUMENT_BAD, opt->name, name );
+ return;
+ }
+
+ if ( !list->list )
+ {
+ list->list = TidyAlloc(doc->allocator, sizeof(tidyStrings) * capacity );
+ list->list[0] = 0;
+ list->capacity = capacity;
+ list->count = 0;
+ }
+
+ if ( list->count >= list->capacity )
+ {
+ list->capacity = list->capacity * 2;
+ list->list = realloc( list->list, sizeof(tidyStrings) * list->capacity + 1 );
+ }
+
+ list->list[list->count] = message;
+ list->count++;
+ list->list[list->count] = 0;
+
+ /* Must come *after* adding to the list, in case it's muted, too. */
+ TY_(Report)( doc, NULL, NULL, STRING_MUTING_TYPE, name );
+}
+
+
/*********************************************************************
* Key Discovery
*********************************************************************/
@@ -1462,6 +1518,8 @@ static const TidyOptionId TidyIndentSpacesLinks[] = { TidyIndentContent, Tidy
static const TidyOptionId TidyInlineTagsLinks[] = { TidyBlockTags, TidyEmptyTags, TidyPreTags, TidyUseCustomTags, TidyUnknownOption };
static const TidyOptionId TidyMergeDivsLinks[] = { TidyMakeClean, TidyMergeSpans, TidyUnknownOption };
static const TidyOptionId TidyMergeSpansLinks[] = { TidyMakeClean, TidyMergeDivs, TidyUnknownOption };
+static const TidyOptionId TidyMuteLinks[] = { TidyMuteShow };
+static const TidyOptionId TidyMuteShowLinks[] = { TidyMuteReports };
static const TidyOptionId TidyNumEntitiesLinks[] = { TidyDoctype, TidyPreserveEntities, TidyUnknownOption };
static const TidyOptionId TidyOutCharEncodingLinks[] = { TidyCharEncoding, TidyUnknownOption };
static const TidyOptionId TidyOutFileLinks[] = { TidyErrFile, TidyUnknownOption };
@@ -1490,11 +1548,13 @@ static const TidyOptionDoc docs_xrefs[] =
{ TidyInlineTags, TidyInlineTagsLinks },
{ TidyMergeDivs, TidyMergeDivsLinks },
{ TidyMergeSpans, TidyMergeSpansLinks },
+ { TidyMuteShow, TidyMuteShowLinks },
{ TidyNumEntities, TidyNumEntitiesLinks },
{ TidyOutCharEncoding, TidyOutCharEncodingLinks },
{ TidyOutFile, TidyOutFileLinks },
{ TidyPreTags, TidyPreTagsLinks },
{ TidySortAttributes, TidySortAttributesLinks },
+ { TidyMuteReports, TidyMuteLinks },
{ TidyUseCustomTags, TidyUseCustomTagsLinks },
{ TidyWrapAttVals, TidyWrapAttValsLinks },
{ TidyWrapScriptlets, TidyWrapScriptletsLinks },
diff --git a/src/message.h b/src/message.h
index 4871e10..c5191cf 100644
--- a/src/message.h
+++ b/src/message.h
@@ -46,6 +46,7 @@
******************************************************************************/
#include "forward.h"
+#include "config.h"
/** @addtogroup internal_api */
/** @{ */
@@ -180,6 +181,39 @@ void TY_(ReportNumWarnings)( TidyDocImpl* doc );
/** @} message_reporting group */
+/***************************************************************************//**
+ ** @defgroup message_mutinging Message Muting
+ **
+ ** Message types included in the `mute` option will be be printed in
+ ** messageOut().
+ **
+ ** @{
+ ******************************************************************************/
+
+/** Maintains a list of messages not to display. */
+typedef struct _mutedMessages {
+ tidyStrings* list; /**< A list of messages that won't be output. */
+ uint count; /**< Current count of the list. */
+ uint capacity; /**< Current capacity of the list. */
+} TidyMutedMessages;
+
+
+/** Frees the list of muted messages.
+ ** @param doc The Tidy document.
+ */
+void TY_(FreeMutedMessageList)( TidyDocImpl* doc );
+
+/** Adds a new message ID to the list of muted messages.
+ ** @param doc The Tidy document.
+ ** @param name The message code as a string.
+ */
+void TY_(DefineMutedMessage)( TidyDocImpl* doc, const TidyOptionImpl* opt, ctmbstr name );
+
+
+/** @} */
+/** @} message_muting group */
+
+
/***************************************************************************//**
** @defgroup message_keydiscovery Key Discovery
**
diff --git a/src/messageobj.c b/src/messageobj.c
index ffdb916..9da8e79 100644
--- a/src/messageobj.c
+++ b/src/messageobj.c
@@ -85,6 +85,8 @@ static TidyMessageImpl *tidyMessageCreateInitV( TidyDocImpl *doc,
va_list args_copy;
enum { sizeMessageBuf=2048 };
ctmbstr pattern;
+ uint i = 0;
+
/* Things we know... */
@@ -137,7 +139,7 @@ static TidyMessageImpl *tidyMessageCreateInitV( TidyDocImpl *doc,
result->messagePrefix = tidyLocalizedString(level);
if ( line > 0 && column > 0 )
- pattern = "%s%s%s"; /* pattern in there's location information */
+ pattern = "%s%s%s"; /* pattern if there's location information */
else
pattern = "%.0s%s%s"; /* otherwise if there isn't */
@@ -154,6 +156,11 @@ static TidyMessageImpl *tidyMessageCreateInitV( TidyDocImpl *doc,
result->messagePos, result->messagePrefix,
result->message);
+ if ( ( cfgBool(doc, TidyMuteShow) == yes ) && level <= TidyFatal )
+ {
+ TY_(tmbsnprintf)(result->messageOutputDefault, sizeMessageBuf, "%s (%s)", result->messageOutputDefault, TY_(tidyErrorCodeAsKey)(code) );
+ TY_(tmbsnprintf)(result->messageOutput, sizeMessageBuf, "%s (%s)", result->messageOutput, TY_(tidyErrorCodeAsKey)(code) );
+ }
result->allowMessage = yes;
@@ -184,6 +191,19 @@ static TidyMessageImpl *tidyMessageCreateInitV( TidyDocImpl *doc,
result->allowMessage = result->allowMessage & doc->messageCallback( tidyImplToMessage(result) );
}
+ /* finally, check the document's configuration to determine whether
+ this message is muted. */
+ result->muted = no;
+ while ( ( doc->muted.list ) && ( doc->muted.list[i] != 0 ) )
+ {
+ if ( doc->muted.list[i] == code )
+ {
+ result->muted = yes;
+ break;
+ }
+ i++;
+ }
+
return result;
}
@@ -292,6 +312,11 @@ TidyReportLevel TY_(getMessageLevel)( TidyMessageImpl message )
return message.level;
}
+Bool TY_(getMessageIsMuted)( TidyMessageImpl message )
+{
+ return message.muted;
+}
+
ctmbstr TY_(getMessageFormatDefault)( TidyMessageImpl message )
{
return message.messageFormatDefault;
diff --git a/src/messageobj.h b/src/messageobj.h
index b12505d..0ee1666 100644
--- a/src/messageobj.h
+++ b/src/messageobj.h
@@ -80,6 +80,9 @@ int TY_(getMessageColumn)( TidyMessageImpl message );
/** get the TidyReportLevel of the message. */
TidyReportLevel TY_(getMessageLevel)( TidyMessageImpl message );
+/** get whether or not the message was muted by the configuration. */
+Bool TY_(getMessageIsMuted)( TidyMessageImpl message );
+
/** the built-in format string */
ctmbstr TY_(getMessageFormatDefault)( TidyMessageImpl message );
diff --git a/src/tidy-int.h b/src/tidy-int.h
index 65cfe03..9732dae 100644
--- a/src/tidy-int.h
+++ b/src/tidy-int.h
@@ -15,6 +15,7 @@
#include "attrs.h"
#include "pprint.h"
#include "access.h"
+#include "message.h"
#ifndef MAX
#define MAX(a,b) (((a) > (b))?(a):(b))
@@ -40,10 +41,11 @@ struct _TidyDocImpl
Lexer* lexer;
/* Config + Markup Declarations */
- TidyConfigImpl config;
- TidyTagImpl tags;
- TidyAttribImpl attribs;
- TidyAccessImpl access;
+ TidyConfigImpl config;
+ TidyTagImpl tags;
+ TidyAttribImpl attribs;
+ TidyAccessImpl access;
+ TidyMutedMessages muted;
/* The Pretty Print buffer */
TidyPrintImpl pprint;
@@ -104,6 +106,7 @@ struct _TidyMessageImpl
int column; /* the column the message applies to */
TidyReportLevel level; /* the severity level of the message */
Bool allowMessage; /* indicates whether or not a filter rejected a message */
+ Bool muted; /* indicates whether or not a configuration mutes this message */
int argcount; /* the number of arguments */
struct printfArg* arguments; /* the arguments' values and types */
diff --git a/src/tidylib.c b/src/tidylib.c
index 3bf22e2..ade57ae 100644
--- a/src/tidylib.c
+++ b/src/tidylib.c
@@ -139,6 +139,7 @@ void tidyDocRelease( TidyDocImpl* doc )
TY_(FreeConfig)( doc );
TY_(FreeAttrTable)( doc );
TY_(FreeAttrPriorityList)( doc );
+ TY_(FreeMutedMessageList( doc ));
TY_(FreeTags)( doc );
/*\
* Issue #186 - Now FreeNode depend on the doctype, so the lexer is needed
@@ -723,7 +724,11 @@ TidyReportLevel TIDY_CALL tidyGetMessageLevel( TidyMessage tmessage )
return TY_(getMessageLevel)(*message);
}
-
+Bool TIDY_CALL tidyGetMessageIsMuted( TidyMessage tmessage )
+{
+ TidyMessageImpl *message = tidyMessageToImpl(tmessage);
+ return TY_(getMessageIsMuted)(*message);
+}
ctmbstr TIDY_CALL tidyGetMessageFormatDefault( TidyMessage tmessage )
{