private CharacterSet/*!*/ ParseCharacterGroup(bool nested) {
Debug.Assert(_rubyPattern[_index - 1] == '[');
bool positive = !Read('^');
// [:alnum:]
// [^:alnum:]
if (nested) {
var posixClass = ParsePosixCharacterClass(positive);
if (posixClass != null) {
return posixClass;
}
}
var result = ParseCharacterGroupIntersections();
if (!positive) {
result = result.Complement();
}
Debug.Assert(Peek() == -1 || Peek() == ']');
Read(']');
return result;
}