private static bool IsIdentifierChar(int c)
{
UnicodeCategory cat = char.GetUnicodeCategory((char)c);
return c == '$' || c == '\\' ||
cat == UnicodeCategory.UppercaseLetter ||
cat == UnicodeCategory.LowercaseLetter ||
cat == UnicodeCategory.TitlecaseLetter ||
cat == UnicodeCategory.ModifierLetter ||
cat == UnicodeCategory.OtherLetter ||
cat == UnicodeCategory.LetterNumber ||
cat == UnicodeCategory.NonSpacingMark ||
cat == UnicodeCategory.SpacingCombiningMark ||
cat == UnicodeCategory.DecimalDigitNumber ||
cat == UnicodeCategory.ConnectorPunctuation ||
c == 0x200C || // Zero-width non-joiner.
c == 0x200D; // Zero-width joiner.
}