int ReadAttValue(int start)
{
int quoteChar = 0;
bool quoted = false;
if (start == '"' || start == '\'') {
quoteChar = start;
quoted = true;
} else {
sb.Append ((char) start);
}
int c;
int last = 0;
bool inServerTag = false;
while ((c = sr.Peek ()) != -1) {
if (c == '%' && last == '<') {
inServerTag = true;
} else if (inServerTag && c == '>' && last == '%') {
inServerTag = false;
} else if (!inServerTag) {
if (!quoted && c == '/') {
read_char ();
c = sr.Peek ();
if (c == -1) {
c = '/';
} else if (c == '>') {
ungetc ('/');
break;
}
} else if (!quoted && (c == '>' || Char.IsWhiteSpace ((char) c))) {
break;
} else if (quoted && c == quoteChar && last != '\\') {
read_char ();
break;
}
}
sb.Append ((char) c);
read_char ();
last = c;
}
return Token.ATTVALUE;
}