in lib/src/tokenizer.dart [1288:1338]
bool markupDeclarationOpenState() {
final charStack = [stream.char()];
if (charStack.last == '-') {
charStack.add(stream.char());
if (charStack.last == '-') {
currentToken = CommentToken();
state = commentStartState;
return true;
}
} else if (charStack.last == 'd' || charStack.last == 'D') {
var matched = true;
for (var expected in const ['oO', 'cC', 'tT', 'yY', 'pP', 'eE']) {
final char = stream.char();
charStack.add(char);
if (char == eof || !expected.contains(char!)) {
matched = false;
break;
}
}
if (matched) {
currentToken = DoctypeToken(correct: true);
state = doctypeState;
return true;
}
} else if (charStack.last == '[' &&
parser != null &&
parser!.tree.openElements.isNotEmpty &&
parser!.tree.openElements.last.namespaceUri !=
parser!.tree.defaultNamespace) {
var matched = true;
for (var expected in const ['C', 'D', 'A', 'T', 'A', '[']) {
charStack.add(stream.char());
if (charStack.last != expected) {
matched = false;
break;
}
}
if (matched) {
state = cdataSectionState;
return true;
}
}
_addToken(ParseErrorToken('expected-dashes-or-doctype'));
while (charStack.isNotEmpty) {
stream.unget(charStack.removeLast());
}
state = bogusCommentState;
return true;
}