public override Expression GetAccumulatedBlock() { return(HandlebarsExpression.BlockHelper( _startingNode.HelperName, _startingNode.Arguments, Expression.Block(_body))); }
public override IEnumerable <object> ConvertTokens(IEnumerable <object> sequence) { var enumerator = sequence.GetEnumerator(); while (enumerator.MoveNext()) { var item = enumerator.Current; if (item is PartialToken) { var partialName = GetNext(enumerator) as WordExpressionToken; if (partialName == null) { throw new HandlebarsParserException("Partial indicator not followed by a parseable partial name"); } var endExpression = GetNext(enumerator) as EndExpressionToken; if (endExpression == null) { throw new HandlebarsParserException("Partial reference followed by unexpected token"); } yield return(HandlebarsExpression.Partial(partialName.Value)); yield return(endExpression); } else { yield return(item); } } }
protected override Expression VisitBlockHelperExpression(BlockHelperExpression bhex) { return(HandlebarsExpression.BlockHelper( bhex.HelperName, bhex.Arguments.Select(arg => Visit(arg)), Visit(bhex.Body))); }
public override IEnumerable <object> ConvertTokens(IEnumerable <object> sequence) { var enumerator = sequence.GetEnumerator(); while (enumerator.MoveNext()) { var item = enumerator.Current; if (item is StartExpressionToken) { item = GetNext(enumerator); if ((item is Expression) == false) { throw new HandlebarsCompilerException( string.Format("Token '{0}' could not be converted to an expression", item)); } yield return(HandlebarsExpression.Statement((Expression)item)); item = GetNext(enumerator); if ((item is EndExpressionToken) == false) { throw new HandlebarsCompilerException("Handlebars statement was not reduced to a single expression"); } } else { yield return(item); } } }
public override IEnumerable <object> ConvertTokens(IEnumerable <object> sequence) { var enumerator = sequence.GetEnumerator(); while (enumerator.MoveNext()) { var item = enumerator.Current; if (item is HelperExpression) { var helper = item as HelperExpression; item = GetNext(enumerator); List <Expression> helperArguments = new List <Expression>(); while ((item is EndExpressionToken) == false) { if ((item is Expression) == false) { throw new HandlebarsCompilerException( string.Format("Token '{0}' could not be converted to an expression", item)); } helperArguments.Add((Expression)item); item = GetNext(enumerator); } yield return(HandlebarsExpression.Helper( helper.HelperName, helperArguments)); yield return(item); } else { yield return(item); } } }
public override void HandleElement(Expression item) { if (IsElseBlock(item)) { _accumulatedExpression = HandlebarsExpression.Iterator( _startingNode.Arguments.Single(), Expression.Block(_body)); _body = new List <Expression>(); } else { _body.Add((Expression)item); } }
public override IEnumerable <object> ConvertTokens(IEnumerable <object> sequence) { foreach (var item in sequence) { if (item is WordExpressionToken) { yield return(HandlebarsExpression.Path(((WordExpressionToken)item).Value)); } else { yield return(item); } } }
public override bool IsClosingElement(Expression item) { if (IsClosingNode(item)) { var evalMode = _startingNode.Path.StartsWith("#") ? SectionEvaluationMode.NonEmpty : SectionEvaluationMode.Empty; _accumulatedExpression = HandlebarsExpression.DeferredSection( _startingNode, _body, evalMode); return(true); } else { return(false); } }
private static Expression CreateIfBlock(HelperExpression startingNode, IEnumerable <Expression> body) { var condition = HandlebarsExpression.Boolish(startingNode.Arguments.Single()); if (startingNode.HelperName == "#if") { return(Expression.IfThen(condition, Expression.Block(body))); } else if (startingNode.HelperName == "#unless") { return(Expression.IfThen(Expression.Not(condition), Expression.Block(body))); } else { throw new HandlebarsCompilerException(string.Format( "Tried to create a conditional expression for '{0}'", startingNode.HelperName)); } }
public override IEnumerable <object> ConvertTokens(IEnumerable <object> sequence) { foreach (var item in sequence) { if (item is StaticToken) { if (((StaticToken)item).Value != string.Empty) { yield return(HandlebarsExpression.Static(((StaticToken)item).Value)); } else { continue; } } else { yield return(item); } } }
protected override Expression VisitDeferredSectionExpression(DeferredSectionExpression dsex) { Action <object, BindingContext, Action <TextWriter, object> > method; if (dsex.Path.Path.StartsWith("#")) { method = RenderSection; } else if (dsex.Path.Path.StartsWith("^")) { method = RenderEmptySection; } else { throw new HandlebarsCompilerException("Tried to compile a section expression that did not begin with # or ^"); } return(Expression.Call( method.Method, HandlebarsExpression.Path(dsex.Path.Path.Substring(1)), _context.BindingContext, new FunctionBuilder(_context.Configuration).Compile(dsex.Body, _context.BindingContext))); }
public override IEnumerable <object> ConvertTokens(IEnumerable <object> sequence) { var enumerator = sequence.GetEnumerator(); while (enumerator.MoveNext()) { var item = enumerator.Current; if (item is StartExpressionToken) { yield return(item); item = GetNext(enumerator); if (item is Expression) { yield return(item); continue; } if ((item is WordExpressionToken) == false) { throw new HandlebarsCompilerException("Encountered a non-word symbol at the beginning of the handlebars expression."); } var word = item as WordExpressionToken; if (IsRegisteredHelperName(word.Value)) { yield return(HandlebarsExpression.Helper(word.Value)); } else { yield return(word); } } else { yield return(item); } } }
public override bool IsClosingElement(Expression item) { if (IsClosingNode(item)) { if (_accumulatedExpression == null) { _accumulatedExpression = HandlebarsExpression.Iterator( _startingNode.Arguments.Single(), Expression.Block(_body)); } else { _accumulatedExpression = HandlebarsExpression.Iterator( ((IteratorExpression)_accumulatedExpression).Sequence, ((IteratorExpression)_accumulatedExpression).Template, Expression.Block(_body)); } return(true); } else { return(false); } }
protected override Expression VisitHelperExpression(HelperExpression hex) { return(HandlebarsExpression.Helper( hex.HelperName, hex.Arguments.Select(arg => Visit(arg)))); }