Exemple #1
0
        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()));
        }
Exemple #2
0
        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);
        }
Exemple #3
0
 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()));
 }