if ("*".equals (token))
ret = new YesFilter ();
else if (ret == null)
ret = new TagNameFilter (unescape (token));
else
ret = new AndFilter (ret, new TagNameFilter (
unescape (token)));
nextToken ();
break;
case DELIM:
switch (token.charAt (0))
{
case '.':
nextToken ();
if (tokentype != NAME)
throw new IllegalArgumentException (
"Syntax error at " + token);
if (ret == null)
ret = new HasAttributeFilter ("class",
unescape (token));
else
ret = new AndFilter (ret, new HasAttributeFilter (
"class", unescape (token)));
break;
case '#':
nextToken ();
if (tokentype != NAME)
throw new IllegalArgumentException (
"Syntax error at " + token);
if (ret == null)
ret = new HasAttributeFilter ("id", unescape (token));
else
ret = new AndFilter (ret, new HasAttributeFilter (
"id", unescape (token)));
break;
case ':':
nextToken ();
if (ret == null)
ret = parsePseudoClass ();
else
ret = new AndFilter (ret, parsePseudoClass ());
break;
case '[':
nextToken ();
if (ret == null)
ret = parseAttributeExp ();
else
ret = new AndFilter (ret, parseAttributeExp ());
break;
}
nextToken ();
break;
default: