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()); }
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); } } }