public virtual string ParseAttribute(MutableBoolean isempty, MutableObject asp, MutableObject php)
{
int start;
// int len = 0; Removed by BUGFIX for 126265
short map;
int c;
asp.Object = null; /* clear asp pointer */
php.Object = null; /* clear php pointer */
/* skip white space before the attribute */
for (;;)
{
c = Input.ReadChar();
if (c == '/')
{
c = Input.ReadChar();
if (c == '>')
{
isempty.Val = true;
return null;
}
Input.UngetChar(c);
c = '/';
break;
}
if (c == '>')
{
return null;
}
if (c == '<')
{
c = Input.ReadChar();
if (c == '%')
{
asp.Object = ParseAsp();
return null;
}
if (c == '?')
{
php.Object = ParsePhp();
return null;
}
Input.UngetChar(c);
Report.AttrError(this, Token, null, Report.UNEXPECTED_GT);
return null;
}
if (c == '"' || c == '\'')
{
Report.AttrError(this, Token, null, Report.UNEXPECTED_QUOTEMARK);
continue;
}
if (c == StreamIn.END_OF_STREAM)
{
Report.AttrError(this, Token, null, Report.UNEXPECTED_END_OF_FILE);
Input.UngetChar(c);
return null;
}
map = Map((char) c);
if ((map & WHITE) == 0)
{
break;
}
}
start = Lexsize;
for (;;)
{
/* but push back '=' for parseValue() */
if (c == '=' || c == '>')
{
Input.UngetChar(c);
break;
}
if (c == '<' || c == StreamIn.END_OF_STREAM)
{
Input.UngetChar(c);
break;
}
map = Map((char) c);
if ((map & WHITE) != 0)
break;
/* what should be done about non-namechar characters? */
/* currently these are incorporated into the attr name */
if (!Options.XmlTags && (map & UPPERCASE) != 0)
{
c += ('a' - 'A');
}
// ++len; Removed by BUGFIX for 126265
AddCharToLexer(c);
c = Input.ReadChar();
}
// Following line added by GLP to fix BUG 126265. This is a temporary comment
// and should be removed when Tidy is fixed.
int len = Lexsize - start;
string attr = (len > 0 ? GetString(Lexbuf, start, len) : null);
Lexsize = start;
return attr;
}