private IGlobToken ReadLiteralToken(GlobStringReader reader) { AcceptCurrentChar(reader); while (!reader.HasReachedEnd) { var peekChar = reader.PeekChar(); var isValid = GlobStringReader.IsNotStartOfToken(peekChar) && !GlobStringReader.IsPathSeperator(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())); }
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())); }