public static bool isName(string name)
{
int len = name.Length;
// must be at least one character long
if (len == 0) return false;
// check for "." and ".."
if (name[0] == '.' && len <= 2)
{
if (len == 1) return false;
if (name[1] == '.') return false;
}
// check that each char is unreserved
for (int i=0; i<len; ++i)
{
int c = name[i];
if (c < 128 && nameMap[c]) continue;
return false;
}
return true;
}