static object matchSymbol(string token, string mask)
{
Match m = symbolPat.Match(mask);
if (m.Success)
{
string maskNS = m.Groups[1].Value;
string maskName = m.Groups[2].Value;
if (maskNS != null && maskNS.EndsWith(":/") ||
maskName.EndsWith(":") ||
mask.IndexOf("::", 1) != -1)
{
return(null);
}
if (mask.StartsWith("::"))
{
return(null);
}
bool isKeyword = mask[0] == ':';
if (isKeyword)
{
Match m2 = symbolPat.Match(mask.Substring(1));
if (!m2.Success)
{
return(null);
}
string ns;
string name;
ExtractNamesUsingMask(token.Substring(1), m2.Groups[1].Value, m2.Groups[2].Value, out ns, out name);
return(Keyword.intern(ns, name));
}
else
{
string ns;
string name;
ExtractNamesUsingMask(token, maskNS, maskName, out ns, out name);
return(Symbol.intern(ns, name));
}
}
return(null);
}