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 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); } } }
protected override Expression VisitHelperExpression(HelperExpression hex) { return(HandlebarsExpression.Helper( hex.HelperName, hex.Arguments.Select(arg => Visit(arg)))); }