HtmlToken ReadScriptDataEscapedEndTagName ()
{
do {
int nc = Read ();
char c;
if (nc == -1) {
TokenizerState = HtmlTokenizerState.EndOfFile;
name.Length = 0;
return EmitScriptDataToken ();
}
c = (char) nc;
// Note: we save the data in case we hit a parse error and have to emit a data token
data.Append (c);
switch (c) {
case '\t': case '\r': case '\n': case '\f': case ' ':
if (NameIs ("script")) {
TokenizerState = HtmlTokenizerState.BeforeAttributeName;
break;
}
goto default;
case '/':
if (NameIs ("script")) {
TokenizerState = HtmlTokenizerState.SelfClosingStartTag;
break;
}
goto default;
case '>':
if (NameIs ("script")) {
var token = CreateTagToken (name.ToString (), true);
TokenizerState = HtmlTokenizerState.Data;
data.Length = 0;
name.Length = 0;
return token;
}
goto default;
default:
if (!IsAsciiLetter (c)) {
TokenizerState = HtmlTokenizerState.ScriptData;
return null;
}
name.Append (c);
break;
}
} while (TokenizerState == HtmlTokenizerState.ScriptDataEscapedEndTagName);
tag = CreateTagToken (name.ToString (), true);
name.Length = 0;
return null;
}