Beispiel #1
0
        private IGlobToken ReadDirectoryWildcardToken(GlobStringReader reader, PathSeparatorToken leadingPathSeparatorToken)
        {
            reader.ReadChar();

            if (GlobStringReader.IsPathSeparator(reader.PeekChar()))
            {
                reader.ReadChar();
                var trailingSeparator = ReadPathSeparatorToken(reader);
                return(new WildcardDirectoryToken(leadingPathSeparatorToken, trailingSeparator));
            }

            return(new WildcardDirectoryToken(leadingPathSeparatorToken, null)); // this shouldn't happen unless a pattern ends with ** which is weird. **sometext is not legal.
        }
Beispiel #2
0
        public IList <IGlobToken> Tokenise(string globText)
        {
            var tokens = new List <IGlobToken>();

            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.IsPathSeparator())
                    {
                        var sepToken = ReadPathSeparatorToken(reader);
                        tokens.Add(sepToken);
                    }
                    else if (reader.IsBeginningOfDirectoryWildcard)
                    {
                        if (tokens.Count > 0)
                        {
                            if (tokens[tokens.Count - 1] is PathSeparatorToken lastToken)
                            {
                                tokens.Remove(lastToken);
                                tokens.Add(ReadDirectoryWildcardToken(reader, lastToken));
                                continue;
                            }
                        }

                        tokens.Add(ReadDirectoryWildcardToken(reader, null));
                    }
                    else
                    {
                        tokens.Add(ReadLiteralToken(reader));
                    }
                }
            }

            _currentBufferText.Clear();

            return(tokens);
        }