parseName method
Read a Dingo-compliant name.
Implementation
String parseName(NameScannerMode mode) {
var result = "";
while (inBounds) {
var ch = peek();
// handle invalid characters
if (invalidChars.contains(ch)) {
// > and /> break tag names and values
if ((ch == ">" || matches("/>")) && mode != NameScannerMode.tagClose) {
break;
}
// > breaks tag close names
else if (ch == ">" && mode == NameScannerMode.tagClose) {
seek();
break;
}
// equals signs ([...]=) break attribute names
else if (ch == "=" && mode == NameScannerMode.attribute) {
break;
}
// everything else is entirely invalid
else {
throw unexpectedSymbol();
}
}
seek();
// whitespace
if (whitespaceChars.contains(ch)) {
break;
}
// handle everything else
else {
result += ch;
}
}
skipWhitespace();
return result;
}