Beispiel #1
0
        private MatchPart[] createParts(string pattern)
        {
            var patternTokens = tokenize(pattern);

            var       result      = new List <MatchPart>();
            MatchPart currentPart = null;

            for (var i = 0; i < patternTokens.Length; ++i)
            {
                var token = patternTokens[i];
                if (currentPart != null && !currentPart.CanAccept(token))
                {
                    result.Add(currentPart);
                    currentPart = null;
                }

                if (currentPart == null)
                {
                    currentPart = new MatchPart();
                }

                currentPart.Add(token);
            }

            if (currentPart != null)
            {
                result.Add(currentPart);
            }

            return(result.ToArray());
        }
Beispiel #2
0
        internal void Initialize(string[] inputTokens, MatchPart previous, MatchPart following)
        {
            _previous  = previous;
            _following = following;

            _input = inputTokens;
            if (containsVariables())
            {
                _variableLenghts = new int[_tokens.Count - 1];
                return;
            }

            for (var i = 0; i < _input.Length; ++i)
            {
                var isMatch = true;
                for (var j = 0; j < _tokens.Count; ++j)
                {
                    if (i + j >= _input.Length)
                    {
                        return;
                    }

                    var currentToken = _input[i + j];
                    if (!currentToken.Equals(_tokens[j]))
                    {
                        isMatch = false;
                        break;
                    }
                }
                if (isMatch)
                {
                    _availableFixedPositions.Add(i);
                }
            }
        }