in lib/src/scanner.dart [1069:1097]
String _scanTagUri({String? head, bool flowSeparators = true}) {
var length = head == null ? 0 : head.length;
var buffer = StringBuffer();
// Copy the head if needed.
//
// Note that we don't copy the leading '!' character.
if (length > 1) buffer.write(head!.substring(1));
// The set of characters that may appear in URI is as follows:
//
// '0'-'9', 'A'-'Z', 'a'-'z', '_', '-', ';', '/', '?', ':', '@', '&',
// '=', '+', '$', ',', '.', '!', '~', '*', '\'', '(', ')', '[', ']',
// '%'.
//
// In a shorthand tag annotation, the flow separators ',', '[', and ']' are
// disallowed.
var start = _scanner.position;
var char = _scanner.peekChar();
while (_isTagChar ||
(flowSeparators &&
(char == COMMA || char == LEFT_SQUARE || char == RIGHT_SQUARE))) {
_scanner.readChar();
char = _scanner.peekChar();
}
// libyaml manually decodes the URL, but we don't have to do that.
return Uri.decodeFull(_scanner.substring(start));
}