HTML-Valid
view release on metacpan or search on metacpan
tidy-html5.c view on Meta::CPAN
if ( wrappable && pprint->wraphere > 0 &&
GetSpaces(pprint) + pprint->linelen >= wraplen )
WrapAttrVal( doc );
if ( c == delim )
{
ctmbstr entity = (c == '"' ? """ : "'");
AddString( pprint, entity );
++value;
continue;
}
else if (c == '"')
{
if ( cfgBool(doc, TidyQuoteMarks) )
AddString( pprint, """ );
else
AddChar( pprint, c );
if ( delim == '\'' && scriptAttr && scriptlets )
strStart = ToggleInString( pprint );
++value;
continue;
}
else if ( c == '\'' )
{
if ( cfgBool(doc, TidyQuoteMarks) )
AddString( pprint, "'" );
else
AddChar( pprint, c );
if ( delim == '"' && scriptAttr && scriptlets )
strStart = ToggleInString( pprint );
++value;
continue;
}
/* look for UTF-8 multibyte character */
if ( c > 0x7F )
value += TY_(GetUTF8)( value, &c );
++value;
if ( c == '\n' )
{
/* No indent inside Javascript literals */
TY_(PFlushLine)( doc, (strStart < 0
&& !cfgBool(doc, TidyLiteralAttribs) ?
indent : 0) );
continue;
}
PPrintChar( doc, c, mode );
}
ClearInAttrVal( pprint );
ClearInString( pprint );
}
AddChar( pprint, delim );
}
static unsigned int AttrIndent( TidyDocImpl* doc, Node* node, AttVal* ARG_UNUSED(attr) )
{
unsigned int spaces = cfg( doc, TidyIndentSpaces );
unsigned int xtra = 2; /* 1 for the '<', another for the ' ' */
if ( node->element == NULL )
return spaces;
if ( !TY_(nodeHasCM)(node, CM_INLINE) ||
!ShouldIndent(doc, node->parent ? node->parent: node) )
return xtra + TY_(tmbstrlen)( node->element );
if ( NULL != (node = TY_(FindContainer)(node)) )
return xtra + TY_(tmbstrlen)( node->element );
return spaces;
}
static Bool AttrNoIndentFirst( /*TidyDocImpl* doc,*/ Node* node, AttVal* attr )
{
return ( attr==node->attributes );
/*&&
( InsideHead(doc, node) ||
!TY_(nodeHasCM)(node, CM_INLINE) ) );
*/
}
static void PPrintAttribute( TidyDocImpl* doc, unsigned int indent,
Node *node, AttVal *attr )
{
TidyPrintImpl* pprint = &doc->pprint;
Bool xmlOut = cfgBool( doc, TidyXmlOut );
Bool xhtmlOut = cfgBool( doc, TidyXhtmlOut );
Bool wrapAttrs = cfgBool( doc, TidyWrapAttVals );
unsigned int ucAttrs = cfg( doc, TidyUpperCaseAttrs );
Bool indAttrs = cfgBool( doc, TidyIndentAttributes );
unsigned int xtra = AttrIndent( doc, node, attr );
Bool first = AttrNoIndentFirst( /*doc,*/ node, attr );
tmbstr name = attr->attribute;
Bool wrappable = no;
tchar c;
/* fix for odd attribute indentation bug triggered by long values */
if (!indAttrs)
xtra = 0;
if ( indAttrs )
{
if ( TY_(nodeIsElement)(node) && !first )
{
indent += xtra;
PCondFlushLineSmart( doc, indent );
}
else
indAttrs = no;
}
CheckWrapIndent( doc, indent );
if ( !xmlOut && !xhtmlOut && attr->dict )
{
if ( TY_(IsScript)(doc, name) )
wrappable = cfgBool( doc, TidyWrapScriptlets );
else if (!(attrIsCONTENT(attr) || attrIsVALUE(attr) || attrIsALT(attr) || attrIsTITLE(attr)) && wrapAttrs )
wrappable = yes;
}
if ( !first && !SetWrap(doc, indent) )
{
TY_(PFlushLine)( doc, indent+xtra ); /* Put it on next line */
}
else if ( pprint->linelen > 0 )
{
AddChar( pprint, ' ' );
}
/* Attribute name */
while (*name)
{
c = (unsigned char)*name;
if (c > 0x7F)
name += TY_(GetUTF8)(name, &c);
else if (ucAttrs == TidyUppercaseYes)
c = TY_(ToUpper)(c);
AddChar(pprint, c);
++name;
}
CheckWrapIndent( doc, indent );
if ( attr->value == NULL )
{
Bool isB = TY_(IsBoolAttribute)(attr);
Bool scriptAttr = TY_(attrIsEvent)(attr);
( run in 2.014 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )