Example #1
0
        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);
        }
Example #2
0
        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
                   ));
        }
Example #3
0
        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());
        }