Initial take on issue 365. This is based off of the simplification of the

parser and picklist system. Console application needs to be updated to fix
the description, as it shows autobool, and for some reason on the current
system I'm not getting assertion failures.
This commit is contained in:
Jim Derry 2017-05-11 18:12:56 -04:00
parent 1ba4bcb753
commit 29766afcfd
6 changed files with 133 additions and 108 deletions

View file

@ -786,6 +786,16 @@ typedef enum
TidySortAttrAlpha /**< Sort attributes alphabetically */
} TidyAttrSortStrategy;
/** Mode controlling capitalization of things, such as attributes.
** @remark This enum's starting value is guaranteed to remain stable.
*/
typedef enum
{
TidyUppercaseNo = 0, /**< Don't uppercase. */
TidyUppercaseYes, /**< Do uppercase. */
TidyUppercasePreserve /**< Preserve case. */
} TidyUppercase;
/** @}
** @name Document Tree

View file

@ -138,6 +138,14 @@ static PickListItems customTagsPicks = {
{ NULL }
};
static PickListItems attributeCasePicks = {
{ "no", TidyUppercaseNo, { "0", "n", "f", "no", "false", NULL } },
{ "yes", TidyUppercaseYes, { "1", "y", "t", "yes", "true", NULL } },
{ "preserve", TidyUppercasePreserve, { "preserve", NULL } },
{ NULL }
};
#define MU TidyMarkup
#define DG TidyDiagnostics
@ -284,7 +292,7 @@ static const TidyOptionImpl option_defs[] =
{ TidySortAttributes, PP, "sort-attributes", IN, TidySortAttrNone,ParsePickList, &sorterPicks },
{ TidyStrictTagsAttr, MU, "strict-tags-attributes", BL, no, ParsePickList, &boolPicks }, /* 20160209 - Issue #350 */
{ TidyTabSize, PP, "tab-size", IN, 8, ParseInt, NULL },
{ TidyUpperCaseAttrs, MU, "uppercase-attributes", BL, no, ParsePickList, &boolPicks },
{ TidyUpperCaseAttrs, MU, "uppercase-attributes", IN, no, ParsePickList, &attributeCasePicks },
{ TidyUpperCaseTags, MU, "uppercase-tags", BL, no, ParsePickList, &boolPicks },
{ TidyUseCustomTags, MU, "custom-tags", IN, TidyCustomNo, ParsePickList, &customTagsPicks }, /* 20170309 - Issue #119 */
{ TidyVertSpace, PP, "vertical-space", IN, no, ParsePickList, &autoBoolPicks }, /* #228 - tri option */

View file

@ -1202,8 +1202,12 @@ static languageDefinition language_en = { whichPluralForm_en, {
"This option specifies if Tidy should output attribute names in upper "
"case. "
"<br/>"
"The default is <var>no</var>, which results in lower case attribute "
"names, except for XML input, where the original case is preserved. "
"When set to <var>no</var>, attribute names will be written in lower "
"case. Specifying <var>yes</var> will output attribute names in upper "
"case, and <var>preserve</var> can used to leave attribute names "
"untouched. "
"<br/>"
"When using XML input, the original case is always preserved. "
},
{/* Important notes for translators:
- Use only <code></code>, <var></var>, <em></em>, <strong></strong>, and

View file

@ -3726,8 +3726,11 @@ static tmbstr ParseAttribute( TidyDocImpl* doc, Bool *isempty,
/* what should be done about non-namechar characters? */
/* currently these are incorporated into the attr name */
if ( cfg(doc, TidyUpperCaseAttrs) != TidyUppercasePreserve )
{
if ( !cfgBool(doc, TidyXmlTags) && TY_(IsUpper)(c) )
c = TY_(ToLower)(c);
}
TY_(AddCharToLexer)( lexer, c );
lastc = c;

View file

@ -4832,8 +4832,8 @@ void TY_(ParseDocument)(TidyDocImpl* doc)
/* adjust other config options, just as in config.c */
if ( !htmlOut )
{
TY_(SetOptionBool)( doc, TidyUpperCaseTags, no );
TY_(SetOptionBool)( doc, TidyUpperCaseAttrs, no );
TY_(SetOptionInt)( doc, TidyUpperCaseTags, no );
TY_(SetOptionInt)( doc, TidyUpperCaseAttrs, no );
}
}
}

View file

@ -1238,7 +1238,7 @@ static void PPrintAttribute( TidyDocImpl* doc, uint indent,
Bool xmlOut = cfgBool( doc, TidyXmlOut );
Bool xhtmlOut = cfgBool( doc, TidyXhtmlOut );
Bool wrapAttrs = cfgBool( doc, TidyWrapAttVals );
Bool ucAttrs = cfgBool( doc, TidyUpperCaseAttrs );
uint ucAttrs = cfgBool( doc, TidyUpperCaseAttrs );
Bool indAttrs = cfgBool( doc, TidyIndentAttributes );
uint xtra = AttrIndent( doc, node, attr );
Bool first = AttrNoIndentFirst( /*doc,*/ node, attr );
@ -1287,7 +1287,7 @@ static void PPrintAttribute( TidyDocImpl* doc, uint indent,
if (c > 0x7F)
name += TY_(GetUTF8)(name, &c);
else if (ucAttrs)
else if (ucAttrs == TidyUppercaseYes)
c = TY_(ToUpper)(c);
AddChar(pprint, c);
@ -1734,8 +1734,8 @@ static void PPrintXmlDecl( TidyDocImpl* doc, uint indent, Node *node )
saveWrap = WrapOff( doc );
/* no case translation for XML declaration pseudo attributes */
ucAttrs = cfgBool(doc, TidyUpperCaseAttrs);
TY_(SetOptionBool)(doc, TidyUpperCaseAttrs, no);
ucAttrs = cfg(doc, TidyUpperCaseAttrs);
TY_(SetOptionInt)(doc, TidyUpperCaseAttrs, no);
AddString( pprint, "<?xml" );
@ -1749,7 +1749,7 @@ static void PPrintXmlDecl( TidyDocImpl* doc, uint indent, Node *node )
PPrintAttribute( doc, indent, node, att );
/* restore old config value */
TY_(SetOptionBool)(doc, TidyUpperCaseAttrs, ucAttrs);
TY_(SetOptionInt)(doc, TidyUpperCaseAttrs, ucAttrs);
if ( node->end <= 0 || doc->lexer->lexbuf[node->end - 1] != '?' )
AddChar( pprint, '?' );