/* * Called by Go() to capture a subexpression. Note that the * capnum used here has already been mapped to a non-sparse * index (by the code generator RegexWriter). */ protected void TransferCapture(int capnum, int uncapnum, int start, int end) { int start2; int end2; // these are the two intervals that are cancelling each other if (end < start) { int T; T = end; end = start; start = T; } start2 = MatchIndex(uncapnum); end2 = start2 + MatchLength(uncapnum); // The new capture gets the innermost defined interval if (start >= end2) { end = start; start = end2; } else if (end <= start2) { start = start2; } else { if (end > end2) { end = end2; } if (start2 > start) { start = start2; } } Crawl(uncapnum); _runmatch.BalanceMatch(uncapnum); if (capnum != -1) { Crawl(capnum); _runmatch.AddMatch(capnum, start, end - start); } }
/// <summary> /// Transfers a Capture to a Match /// </summary> /// <param name="match"></param> /// <param name="capnum"></param> /// <param name="uncapnum"></param> /// <param name="start"></param> /// <param name="end"></param> internal void TransferCapture(Match match, int capnum, int uncapnum, int start, int end) { if (end < start) { int numx = end; end = start; start = numx; } int num = match.MatchIndex(uncapnum); int num2 = match.MatchLength(uncapnum); if (start >= num2) { end = start; start = num2; } else if (end <= num) { start = num; } else { if (end > num2) { end = num2; } if (num > start) { start = num; } } //this.Crawl(uncapnum); match.BalanceMatch(uncapnum); if (capnum != -1) { //this.Crawl(capnum); match.AddMatch(capnum, start, end - start); } }