Esempio n. 1
0
        public static Maybe <T[]> List <T>(this TextParser p, ReadOnlySpan <char> separator, Func <TextParser, Maybe <T> > itemParser)
        {
            List <T> items = new List <T>();

            if (p.Match("none"))
            {
                return(new Maybe <T[]>(new T[0]));
            }

            while (!p.EOF)
            {
                Maybe <TextParser> span = p.Before(separator);
                if (span)
                {
                    p.Seek(separator.Length);
                }

                var item = itemParser(span ? span : p);
                if (!item)
                {
                    return(item.Convert <T[]>());
                }

                items.Add(item.Value);
                if (!span)
                {
                    break;
                }
            }

            return(new Maybe <T[]>(items.ToArray()));
        }