Example #1
0
        private static IEnumerable <RuleMatch> GetMatches(
            IRule rule,
            ExplorerContext context)
        {
            var leftMatches = context.InvokeRule(rule);

            foreach (var m in leftMatches)
            {
                var newContext       = context.MoveForward(m);
                var interleaveLength = newContext.MatchInterleave();
                var fullMatch        = m.AddInterleaveLength(interleaveLength);

                yield return(fullMatch);
            }
        }
Example #2
0
        private int MatchInterleave(ExplorerContext interleaveContext)
        {
            if (_interleaveRule == null)
            {
                return(0);
            }
            else
            {
                var interleaveMatch = _interleaveRule.Match(interleaveContext).FirstOrDefault();

                if (interleaveMatch == null || interleaveMatch.Text.Length == 0)
                {
                    return(0);
                }
                else
                {
                    var newInterleaveContext = interleaveContext.MoveForward(interleaveMatch);
                    //  Recursion
                    var remainingLength = MatchInterleave(newInterleaveContext);

                    return(interleaveMatch.Text.Length + remainingLength);
                }
            }
        }