public static Object AtomReader(int c, TextReader textReader)
{
if (((Char)c) == ')')
{
return RPAREN;
}
if (((Char)c) == ']')
{
return RBRACKET;
}
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append((char)c);
bool done = false;
do
{
int nextChar = textReader.Peek();
if ((nextChar == -1) || (IsTerminator((Char)nextChar)))
done = true;
else
{
c = textReader.Read();
stringBuilder.Append((char)c);
}
} while (!done);
string token = stringBuilder.ToString();
Double d;
// Try reading the number as an integer
if (Double.TryParse(token, System.Globalization.NumberStyles.Integer, NumberFormatInfo.InvariantInfo, out d))
{
return (int)d;
}
// Try reading the number as a double
if (Double.TryParse(token, System.Globalization.NumberStyles.Any, NumberFormatInfo.InvariantInfo, out d))
{
return d;
}
else
{
return Symbol.FromName(token);
}
}