public void ShouldSetTheItemsWhenCreatingATokenLineStream() { var lines = new[] { new TokenLine(new StringToken[] { }) }; var tokenStream = new TokenLineStream(lines); CollectionAssert.AreEqual(lines, tokenStream.GetAll()); }
/// <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(); } } }
/// <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()); }