private static Match NextMatchWordOnly(string line, string pattern, int start, SearchTypes search, int shiftFactor, CodeStub StopAt, CodeStub NextStart, string pushSymbols, string popSymbols, RegexOptions orientation, string seqdelim = STRINGQUOTE) { Match match = Fail(); int tracker = start; int len; while (!match.Success && tracker >= 0 && tracker < line.Length) { if (seqdelim.Contains(line[tracker])) { tracker += shiftFactor * NextLiteralSequenceLength(line, tracker, StopAt(tracker, line.Length), shiftFactor, seqdelim); continue; } if (pushSymbols.Contains(line[tracker])) { tracker += shiftFactor * NextGroupLength(line, tracker, StopAt(tracker, line.Length), shiftFactor, pushSymbols, popSymbols); continue; } len = NextWordLength(line, tracker, StopAt(tracker, line.Length), shiftFactor, pushSymbols + popSymbols + seqdelim); match = MatchGroup(line, pattern, ref tracker, ref len, search, shiftFactor, NextStart, orientation); } return(match); }
private static Match NextOuterGroup(string line, int start, int shiftFactor, string pushSymbols, string popSymbols, CodeStub StopAt, CodeStub NextStart, string seqdelim = STRINGQUOTE) { if (String.IsNullOrEmpty(line)) { return(Fail()); } int len; if (seqdelim.Contains(line[start])) { len = NextLiteralSequenceLength(line, start, StopAt(start, line.Length), shiftFactor, seqdelim); } else if (pushSymbols.Contains(line[start])) { len = NextGroupLength(line, start, StopAt(start, line.Length), shiftFactor, pushSymbols, popSymbols); } else { len = NextWordLength(line, start, StopAt(start, line.Length), shiftFactor); } return(new Match ( line.Substring(NextStart(start, len), len), NextStart(start, len), len )); }
private static Match MatchGroup(string line, string pattern, ref int tracker, ref int len, SearchTypes search, int shiftFactor, CodeStub NextStart, RegexOptions orientation) { int index = -1; string value = ""; GroupCollection groups = null; switch (search) { case SearchTypes.STRING: { index = line.Substring(NextStart(tracker, len), len).IndexOf(pattern, StringComparison.Ordinal); if (index >= 0) { value = pattern; } break; } case SearchTypes.REGEX: { System.Text.RegularExpressions.Match match = Regex.Match(line.Substring(NextStart(tracker, len), len), pattern, orientation | RegexOptions.Multiline); if (match.Success) { value = match.Value; index = match.Index; groups = match.Groups; } break; } default: { throw new ArgumentException(); } } if (index >= 0) { return(new Match(value, NextStart(tracker, len) + index, value.Length, groups)); } tracker += shiftFactor * len; return(Fail()); }