Esempio n. 1
0
        public void ShouldSetTheItemsWhenCreatingATokenLineStream()
        {
            var lines       = new[] { new TokenLine(new StringToken[] { }) };
            var tokenStream = new TokenLineStream(lines);

            CollectionAssert.AreEqual(lines, tokenStream.GetAll());
        }
Esempio n. 2
0
        /// <summary>
        /// Parses the next element.
        /// </summary>
        /// <param name="lines">The lines.</param>
        /// <returns>An element if one is found; otherwise, null.</returns>
        public JElement ParseNextElement(TokenLineStream lines)
        {
            lines.CheckNull("lines");
            lines.Check(
                l => !l.IsAtEnd(),
                l => new InvalidOperationException("Next element cannot be parsed when there are no lines available."));

            var tokens = lines.Current;

            lines.Consume();
            tokens.ConsumeAny(TokenType.WhiteSpace);

            try
            {
                return(this.parsers.FirstOrDefault(parser => parser.CanParse(tokens)).With(p => p.Parse(tokens)));
            }
            finally
            {
                tokens.ConsumeAny(JadeTokenType.NewLine);
                if (!tokens.IsAtEnd())
                {
                    tokens.RaiseUnexpectedToken();
                }
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Gets the hierarchy.
        /// </summary>
        /// <param name="tokenLines">The token lines.</param>
        /// <returns>The line hierarchy.</returns>
        public static LineHierarchy[] GetHierarchy(this TokenLineStream tokenLines)
        {
            var lines = new List <LineHierarchy>();

            while (!tokenLines.IsAtEnd())
            {
                lines.Add(new LineHierarchy()
                {
                    Children = tokenLines.Current.Children.GetHierarchy()
                });
                tokenLines.Consume();
            }

            return(lines.ToArray());
        }