parseName method

String parseName(
  1. NameScannerMode mode
)

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;
}