Exemplo n.º 1
0
        public T ParseSingleSegment <T>(string pattern) where T : Segment
        {
            if (pattern == "")
            {
                throw new ArgumentException("Pattern is empty.", nameof(pattern));
            }

            var context  = new ParseContext(pattern);
            var tokens   = new GlobPathTokeniser().Tokenise(context).ToArray();
            var segments = new GlobPathParser(Variables.ToArray()).Parse(context, tokens).ToArray();

            if (segments.Length != 1)
            {
                throw new ArgumentException($"Pattern parsed as {segments.Length} segments.", nameof(pattern));
            }
            return(segments.Single() as T ?? throw new ArgumentException($"Pattern parsed as a segment of type {segments.Single().GetType()} segments.", nameof(pattern)));
        }
Exemplo n.º 2
0
        public Glob Parse(string pattern)
        {
            if (pattern.TrimStart() != pattern)
            {
                throw new ArgumentException("Leading whitespace is not permitted.", nameof(pattern));
            }

            var rootContext = new ParseContext(pattern);
            var root        = TryParseRoot(rootContext, out var offset);

            var pathPattern = pattern.Substring(offset);

            if (pathPattern == "")
            {
                return(new Glob(root, new Segment[0]));
            }

            var context  = new ParseContext(pathPattern);
            var tokens   = new GlobPathTokeniser().Tokenise(context).ToArray();
            var segments = new GlobPathParser(Variables.ToArray()).Parse(context, tokens).ToArray();

            return(new Glob(root, segments));
        }