public void Visit(CharacterListToken token) { Success = false; var read = _Reader.Read(); if (read == -1) { return; } var currentChar = (char)read; var contains = token.Characters.Contains(currentChar); if (token.IsNegated) { if (contains) { return; } } else { if (!contains) { return; } } AddMatch(new GlobTokenMatch() { Token = token, Value = currentChar.ToString() }); }
public IGlobTokenEvaluator CreateTokenEvaluator(CharacterListToken token) { if (_options.CaseInsensitive) { return(new CharacterListTokenEvaluatorCaseInsensitive(token)); } return(new CharacterListTokenEvaluator(token)); }
void IGlobTokenVisitor.Visit(CharacterListToken token) { _stringBuilder.Append('['); if (token.IsNegated) { _stringBuilder.Append('^'); } _stringBuilder.Append(Regex.Escape(new string(token.Characters.ToArray()))); _stringBuilder.Append(']'); }
public CharacterListTokenEvaluatorCaseInsensitive(CharacterListToken token) { _token = token; _charactersAsUpperInvariant = new char[token.Characters.Length]; for (int i = 0; i < token.Characters.Length; i++) { var tokenChar = token.Characters[i]; _charactersAsUpperInvariant[i] = Char.ToUpperInvariant(tokenChar); } }
void IGlobTokenVisitor.Visit(CharacterListToken token) { _stringBuilder.Append('['); if (token.IsNegated) { _stringBuilder.Append('!'); } foreach (var tokenChar in token.Characters) { _stringBuilder.Append(tokenChar); } _stringBuilder.Append(']'); }
void IGlobTokenVisitor.Visit(CharacterListToken token) { AddMatchGenerator(new CharacterListTokenMatchGenerator(token, _random)); }
public CharacterListTokenMatchGenerator(CharacterListToken token, Random random) { _token = token; _random = random; PopulateNonMatchingCharList(); }
/// <summary> /// Parses a token for a range or list globbing expression. /// </summary> private IGlobToken ReadRangeOrListToken(GlobStringReader reader) { bool isNegated = false; bool isNumberRange = false; bool isLetterRange = false; bool isCharList = false; if (reader.PeekChar() == GlobStringReader.ExclamationMarkChar) { isNegated = true; reader.Read(); } var nextChar = reader.PeekChar(); if (Char.IsLetterOrDigit(nextChar)) { reader.Read(); nextChar = reader.PeekChar(); if (nextChar == GlobStringReader.DashChar) { if (Char.IsLetter(reader.CurrentChar)) { isLetterRange = true; } else { isNumberRange = true; } // throw new ArgumentOutOfRangeException("Range expressions must either be a letter range, i.e [a-z] or a number range i.e [0-9]"); } else { isCharList = true; } AcceptCurrentChar(reader); } else { isCharList = true; reader.Read(); AcceptCurrentChar(reader); } if (isLetterRange || isNumberRange) { // skip over the dash char reader.ReadChar(); } while (reader.ReadChar()) { // ReadCharacter(CharacterType.BracketedText, CurrentChar); if (reader.IsEndOfRangeOrList) { var peekChar = reader.PeekChar(); // Close brackets within brackets are escaped with another // Close bracket. e.g. [a]] matches a[ if (peekChar == GlobStringReader.CloseBracketChar) { AcceptCurrentChar(reader); // Read(); //ReadCharacter(CharacterType.BracketedText, CurrentChar); } else { break; } } else { AcceptCurrentChar(reader); } } // construct token IGlobToken result = null; var value = GetBufferAndReset(); if (isCharList) { result = new CharacterListToken(value.ToCharArray(), isNegated); } else if (isLetterRange) { var start = value[0]; var end = value[1]; result = new LetterRangeToken(start, end, isNegated); } else if (isNumberRange) { var start = value[0]; // int.Parse(value[0].ToString()); var end = value[1]; // int.Parse(value[1].ToString()); result = new NumberRangeToken(start, end, isNegated); } return(result); }
public void Visit(CharacterListToken token) { AddEvaluator(_evaluatorFactory.CreateTokenEvaluator(token)); }
public CharacterListTokenEvaluator(CharacterListToken token) { _token = token; }
public void Visit(CharacterListToken token) { AddEvaluator(new CharacterListTokenEvaluator(token)); }