private static RegexCharClass ParseRecursive(string charClass, int start) {
int mySetLength = charClass[start+SETLENGTH];
int myCategoryLength = charClass[start+CATEGORYLENGTH];
int myEndPosition = start + SETSTART + mySetLength + myCategoryLength;
ArrayList ranges = new ArrayList(mySetLength);
int i=start+SETSTART;
int end = i + mySetLength;
while (i<end) {
char first = charClass[i];
i++;
char last;
if (i < end)
last = (char) (charClass[i] - 1);
else
last = Lastchar;
i++;
ranges.Add(new SingleRange(first, last));
}
RegexCharClass sub = null;
if (charClass.Length > myEndPosition)
sub = ParseRecursive(charClass, myEndPosition);
return new RegexCharClass(charClass[start+FLAGS] == 1, ranges, new StringBuilder(charClass.Substring(end, myCategoryLength)), sub);
}