private Token ReadTokenInternal()
{
string tokenValue = "";
if (Peek() == -1)
{
return Token.EOF;
};
if (Probe("\x9") || Probe("\xA") || Probe("\xC") || Probe("\xD") || Probe(" "))
{
_tokenValue = "";
return Token.S;
}
else if (Probe("/*"))
{
int ch = Peek();
while (ch != -1)
{
ReadChar();
if (ch == '*' && Peek() == '/')
{
ReadChar();
break;
}
ch = Peek();
}
return Token.S;
}
else if (Probe("<!--"))
{
return Token.CDO;
}
else if (Probe("-->"))
{
return Token.CDC;
}
else if (Probe("~="))
{
return Token.INCLUDES;
}
else if (Probe("|="))
{
return Token.DASHMATCH;
}
else if (ProbeString(ref tokenValue))
{
_tokenValue = tokenValue;
return Token.STRING;
}
else if (ProbeIdent(ref tokenValue))
{
_tokenValue = tokenValue;
if (Probe("("))
{
return Token.FUNCTION;
}
else
{
return Token.IDENT;
};
}
else if (Probe("#") && ProbeName(ref tokenValue))
{
_tokenValue = tokenValue;
return Token.HASH;
}
else if (Probe("@import"))
{
return Token.IMPORT_SYM;
}
else if (Probe("@page"))
{
return Token.PAGE_SYM;
}
else if (Probe("@media"))
{
return Token.MEDIA_SYM;
}
else if (Probe("@font-face"))
{
return Token.FONT_FACE_SYM;
}
else if (Probe("@charset"))
{
return Token.CHARSET_SYM;
}
else if (Probe("@") && ProbeIdent(ref tokenValue))
{
_tokenValue = tokenValue;
return Token.ATKEYWORD;
}
else if (Probe("!") && SkipSpaces() && Probe("important"))
{
return Token.IMPORTANT_SYM;
}
else if (ProbeNumber(ref tokenValue))
{
_tokenValue = tokenValue;
if (Probe("em"))
{
_tokenValue = _tokenValue + "em";
return Token.EMS;
}
else if (Probe("ex"))
{
_tokenValue = _tokenValue + "ex";
return Token.EXS;
}
else if (Probe("px"))
{
_tokenValue = _tokenValue + "px";
return Token.LENGTH;
}
else if (Probe("cm"))
{
_tokenValue = _tokenValue + "cm";
return Token.LENGTH;
}
else if (Probe("mm"))
{
_tokenValue = _tokenValue + "mm";
return Token.LENGTH;
}
else if (Probe("in"))
{
_tokenValue = _tokenValue + "in";
return Token.LENGTH;
}
else if (Probe("pt"))
{
_tokenValue = _tokenValue + "pt";
return Token.LENGTH;
}
else if (Probe("pc"))
{
_tokenValue = _tokenValue + "pc";
return Token.LENGTH;
}
else if (Probe("deg"))
{
_tokenValue = _tokenValue + "deg";
return Token.ANGLE;
}
else if (Probe("rad"))
{
_tokenValue = _tokenValue + "rad";
return Token.ANGLE;
}
else if (Probe("grad"))
{
_tokenValue = _tokenValue + "grad";
return Token.ANGLE;
}
else if (Probe("ms"))
{
_tokenValue = _tokenValue + "ms";
return Token.TIME;
}
else if (Probe("s"))
{
_tokenValue = _tokenValue + "s";
return Token.TIME;
}
else if (Probe("hz"))
{
_tokenValue = _tokenValue + "hz";
return Token.FREQ;
}
else if (Probe("khz"))
{
_tokenValue = _tokenValue + "khz";
return Token.FREQ;
}
else if (Probe("%"))
{
_tokenValue = _tokenValue + "%";
return Token.PERCENTAGE;
}
else if (ProbeIdent(ref tokenValue))
{
_tokenValue = _tokenValue + tokenValue;
return Token.DIMEN;
}
else
{
return Token.NUMBER;
}
}
else if (Probe("url("))
{
SkipSpaces();
if (ProbeString(ref tokenValue))
{
_tokenValue = tokenValue;
return Token.URI;
}
else if (ProbeURL(ref tokenValue))
{
_tokenValue = tokenValue;
return Token.URI;
}
else
{
_tokenValue = ((char)ReadChar()).ToString();
return Token.unrecognized;
}
}
else
{
_tokenValue = ((char)ReadChar()).ToString();
return Token.SYMBOL;
}
}
}