private Token scanTag () {
		char ch = peek(1);
		String handle = null;
		String suffix = null;
		if (ch == '<') {
			forward(2);
			suffix = scanTagUri("tag");
			if (peek() != '>') throw new TokenizerException("While scanning a tag, expected '>' but found: " + ch(peek()));
			forward();
		} else if (NULL_BL_T_LINEBR.indexOf(ch) != -1) {
			suffix = "!";
			forward();
		} else {
			int length = 1;
			boolean useHandle = false;
			while (NULL_BL_T_LINEBR.indexOf(ch) == -1) {
				if (ch == '!') {
					useHandle = true;
					break;
				}
				length++;
				ch = peek(length);
			}
			handle = "!";
			if (useHandle)
				handle = scanTagHandle("tag");
			else {
				handle = "!";
				forward();
			}
			suffix = scanTagUri("tag");
		}
		if (NULL_BL_LINEBR.indexOf(peek()) == -1)
			throw new TokenizerException("While scanning a tag, expected ' ' but found: " + ch(peek()));
		return new TagToken(handle, suffix);
	}