private static SubExpressionExpression BuildSubExpression(IEnumerator <object> enumerator) { object item = GetNext(enumerator); var path = item as PathExpression; if (path == null) { throw new HandlebarsCompilerException("Found a sub-expression that does not contain a path expression"); } var helperArguments = AccumulateSubExpression(enumerator); return(HandlebarsExpression.SubExpression( HandlebarsExpression.Helper( path.Path, helperArguments))); }
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 word) { if (IsRegisteredHelperName(word.Value)) { yield return(HandlebarsExpression.Helper(word.Value)); } else if (IsRegisteredBlockHelperName(word.Value)) { yield return(HandlebarsExpression.Helper(word.Value)); } else { yield return(item); } } else { yield return(item); } } 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; var helperArguments = AccumulateArguments(enumerator); yield return(HandlebarsExpression.Helper( helper.HelperName, helperArguments)); yield return(enumerator.Current); } else if (item is PathExpression) { var helperArguments = AccumulateArguments(enumerator); if (helperArguments.Count > 0) { var path = item as PathExpression; yield return(HandlebarsExpression.Helper( path.Path, helperArguments)); yield return(enumerator.Current); } else { yield return(item); yield return(enumerator.Current); } } else { yield return(item); } } }
protected override System.Linq.Expressions.Expression VisitHelperExpression(HelperExpression hex) { return(HandlebarsExpression.Helper( hex.HelperName, hex.Arguments.Select(Visit))); }