示例#1
0
        /// <summary>
        /// Produces the specified tokens.
        /// </summary>
        /// <param name="tokens">The tokens.</param>
        /// <param name="indent">The indent.</param>
        /// <returns>
        /// A new if element.
        /// </returns>
        public static JElement Produce(TokenStream tokens, int indent)
        {
            tokens.GetAny(JadeTokenType.If);
            tokens.GetAny(TokenType.WhiteSpace);
            var expression    = new JExpression(tokens.GetLine().AsString());
            var trueElements  = tokens.GetItems(indent).ToList();
            var falseElements = Enumerable.Empty <JElement>();

            tokens.TakeSnapshot();
            if (tokens.Is(TokenType.WhiteSpace) && tokens.Get().Length == indent && tokens.Is(JadeTokenType.Else))
            {
                tokens.CommitSnapshot();
                tokens.GetLine();
                falseElements = tokens.GetItems(indent);
            }
            else
            {
                tokens.RollbackSnapshot();
            }

            return(new JConditional(expression, trueElements, falseElements));
        }
示例#2
0
 /// <summary>
 /// Prevents a default instance of the <see cref="JConditional"/> class from being created.
 /// </summary>
 /// <param name="expression">The expression.</param>
 /// <param name="trueElements">The true elements.</param>
 /// <param name="falseElements">The false elements.</param>
 private JConditional(JExpression expression, IEnumerable <JElement> trueElements, IEnumerable <JElement> falseElements)
 {
     this.Expression    = expression;
     this.TrueElements  = trueElements;
     this.FalseElements = falseElements;
 }