internal Match(ParseStep parseStep, IEnumerator<ParseStep> stepEnumerator, IEnumerable<IList<ParenCapture>> captureSet)
: base(0, parseStep.InitialStateIndex, parseStep.MatchedText.Length, parseStep.MatchedText, true)
{
_stepEnumerator = stepEnumerator;
Groups = new GroupCollection();
Groups.Append(this);
Captures.Prepend(this);
foreach (var parenCaptures in captureSet)
{
var parenCapture = parenCaptures[0];
var group = new Group(parenCapture.Number,
parenCapture.Index,
parenCapture.Value.Length,
parenCapture.Value,
parenCapture.Success);
Groups.Append(group);
if (parenCapture.Success)
{
group.Captures.Prepend(group);
}
if (parenCaptures.Skip(1).All(c => c.Success))
{
for (int i = 1; i < parenCaptures.Count; i++)
{
group.Captures.Prepend(new Capture(parenCaptures[i].Index,
parenCaptures[i].Value.Length,
parenCaptures[i].Value));
}
}
}
}