public void Visit(LetterRangeToken token) { Success = false; var read = _Reader.Read(); if (read == -1) { return; } var currentChar = (char)read; if (currentChar >= token.Start && currentChar <= token.End) { if (token.IsNegated) { return; // failed to match } } else { if (!token.IsNegated) { return; // failed to match } } AddMatch(new GlobTokenMatch() { Token = token, Value = currentChar.ToString() }); }
public IGlobTokenEvaluator CreateTokenEvaluator(LetterRangeToken token) { if (_options.CaseInsensitive) { return(new LetterRangeTokenEvaluatorCaseInsensitive(token)); } return(new LetterRangeTokenEvaluator(token)); }
public LetterRangeTokenEvaluatorCaseInsensitive(LetterRangeToken token) { _token = token; _startUpperInvariant = char.ToUpperInvariant(token.Start); _endUpperInvariant = char.ToUpperInvariant(token.End); _startLowerInvariant = char.ToLowerInvariant(token.Start); _endLowerInvariant = char.ToLowerInvariant(token.End); }
void IGlobTokenVisitor.Visit(LetterRangeToken token) { _stringBuilder.Append('['); if (token.IsNegated) { _stringBuilder.Append('^'); } _stringBuilder.Append(Regex.Escape(token.Start.ToString())); _stringBuilder.Append('-'); _stringBuilder.Append(Regex.Escape(token.End.ToString())); _stringBuilder.Append(']'); }
void IGlobTokenVisitor.Visit(LetterRangeToken token) { _stringBuilder.Append('['); if (token.IsNegated) { _stringBuilder.Append('!'); } _stringBuilder.Append(token.Start); _stringBuilder.Append('-'); _stringBuilder.Append(token.End); _stringBuilder.Append(']'); }
void IGlobTokenVisitor.Visit(LetterRangeToken token) { AddMatchGenerator(new LetterRangeTokenMatchGenerator(token, _random)); }
/// <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(LetterRangeToken token) { AddEvaluator(_evaluatorFactory.CreateTokenEvaluator(token)); }
public LetterRangeTokenEvaluator(LetterRangeToken token) { _token = token; }
public LetterRangeTokenMatchGenerator(LetterRangeToken token, Random _random) { this.token = token; this._random = _random; }
public void Visit(LetterRangeToken token) { AddEvaluator(new LetterRangeTokenEvaluator(token)); }