private IGlobToken ReadLiteralToken(GlobStringReader reader, bool allowAnyChracter) { bool isValid = allowAnyChracter; if (!allowAnyChracter) { isValid = GlobStringReader.IsValidLiteralCharacter(reader.CurrentChar); if (!isValid) { throw new NotSupportedException($"{reader.CurrentChar} is not a supported character for a pattern."); } } //else //{ // // dont need to check this because if this was start of token, token would havebeen parsed already, as parsing literal always called last. // // isValid = GlobStringReader.IsNotStartOfToken(reader.CurrentChar); //} //if (isValid) //{ AcceptCurrentChar(reader); while (!reader.HasReachedEnd) { var peekChar = reader.PeekChar(); if (!allowAnyChracter) { isValid = GlobStringReader.IsValidLiteralCharacter(peekChar); } else { isValid = GlobStringReader.IsNotStartOfToken(peekChar); } if (isValid) { if (reader.ReadChar()) { AcceptCurrentChar(reader); } else { // potentially hit end of string. break; } } else { // we have hit a character that may not be a valid literal (could be unsupported, or start of a token for instance). break; } } return(new LiteralToken(GetBufferAndReset())); }
public IList <IGlobToken> Tokenise(string globText) { var tokens = new List <IGlobToken>(); string starstartpeak; using (var reader = new GlobStringReader(globText)) { while (reader.ReadChar()) { if (reader.IsBeginningOfRangeOrList) { tokens.Add(ReadRangeOrListToken(reader)); } else if (reader.IsSingleCharacterMatch) { tokens.Add(ReadSingleCharacterMatchToken()); } else if (reader.IsWildcardCharacterMatch) { tokens.Add(ReadWildcardToken()); } else if (reader.IsPathSeperator()) { tokens.Add(ReadPathSeperatorToken(reader)); } else if (reader.IsBeginningOfDirectoryWildcard) { tokens.Add(ReadDirectoryWildcardToken(reader)); } else if (reader.IsValidLiteralCharacter()) { // literal tokens.Add(ReadLiteralToken(reader)); } } } _currentBufferText.Clear(); return(tokens); }
private IGlobToken ReadLiteralToken(GlobStringReader reader) { AcceptCurrentChar(reader); while (!reader.HasReachedEnd) { if (GlobStringReader.IsValidLiteralCharacter(reader.PeekChar())) { if (reader.ReadChar()) { AcceptCurrentChar(reader); } else { break; } } else { break; } } return(new LiteralToken(GetBufferAndReset())); }