public static Partial ( |
||
partialName | ||
return |
public override Expression GetAccumulatedBlock() { return(HandlebarsExpression.Partial( _startingNode.PartialName, _startingNode.Argument, _body.Count > 1 ? Expression.Block(_body) : _body.First())); }
public override IEnumerable <object> ConvertTokens(IEnumerable <object> sequence) { var enumerator = sequence.GetEnumerator(); while (enumerator.MoveNext()) { var item = enumerator.Current; var partialToken = item as PartialToken; if (partialToken != null) { var partialName = partialToken.Value.Substring(1).Trim('"'); var arguments = AccumulateArguments(enumerator); if (arguments.Count == 0) { yield return(HandlebarsExpression.Partial(partialName)); } else if (arguments.Count == 1) { yield return(HandlebarsExpression.Partial(partialName, arguments[0])); } else { throw new HandlebarsCompilerException(string.Format("Partial {0} can only accept 0 or 1 arguments", partialName)); } yield return(enumerator.Current); } else { yield return(item); } } }
private PartialExpression ConvertToPartialExpression(Expression expression) { if (expression is PathExpression) { var pathExpression = (PathExpression)expression; _blockName = pathExpression.Path.Replace("#>", ""); return(HandlebarsExpression.Partial(Expression.Constant(_blockName))); } else if (expression is HelperExpression) { var helperExpression = (HelperExpression)expression; _blockName = helperExpression.HelperName.Replace("#>", ""); if (helperExpression.Arguments.Count() == 0) { return(HandlebarsExpression.Partial(Expression.Constant(_blockName))); } else if (helperExpression.Arguments.Count() == 1) { return(HandlebarsExpression.Partial( Expression.Constant(_blockName), helperExpression.Arguments.First())); } else { throw new InvalidOperationException("Cannot convert a multi-argument helper expression to a partial expression"); } } else { throw new InvalidOperationException(string.Format("Cannot convert '{0}' to a partial expression", expression)); } }
protected virtual Expression VisitPartialExpression(PartialExpression pex) { Expression partialName = Visit(pex.PartialName); Expression argument = Visit(pex.Argument); // Don't visit Fallback - it will be compiled separately if (partialName != pex.PartialName || argument != pex.Argument) { return(HandlebarsExpression.Partial(partialName, argument, pex.Fallback)); } return(pex); }
public override IEnumerable <object> ConvertTokens(IEnumerable <object> sequence) { var enumerator = sequence.GetEnumerator(); while (enumerator.MoveNext()) { var item = enumerator.Current; if (!(item is PartialToken)) { yield return(item); continue; } var arguments = AccumulateArguments(enumerator); if (arguments.Count == 0) { throw new HandlebarsCompilerException("A partial must have a name"); } var partialName = arguments[0]; if (partialName is PathExpression expression) { partialName = Expression.Constant(expression.Path); } switch (arguments.Count) { case 1: yield return(HandlebarsExpression.Partial(partialName)); break; case 2: yield return(HandlebarsExpression.Partial(partialName, arguments[1])); break; default: throw new HandlebarsCompilerException("A partial can only accept 0 or 1 arguments"); } yield return(enumerator.Current); } }
public override IEnumerable <object> ConvertTokens(IEnumerable <object> sequence) { var enumerator = sequence.GetEnumerator(); while (enumerator.MoveNext()) { var item = enumerator.Current; var partialToken = item as PartialToken; if (partialToken != null) { var arguments = AccumulateArguments(enumerator); if (arguments.Count == 0) { throw new HandlebarsCompilerException("A partial must have a name"); } var partialName = arguments[0]; if (partialName is PathExpression) { partialName = Expression.Constant(((PathExpression)partialName).Path); } if (arguments.Count == 1) { yield return(HandlebarsExpression.Partial(partialName)); } else if (arguments.Count == 2) { yield return(HandlebarsExpression.Partial(partialName, arguments[1])); } else { throw new HandlebarsCompilerException("A partial can only accept 0 or 1 arguments"); } yield return(enumerator.Current); } else { yield return(item); } } }
private PartialExpression ConvertToPartialExpression(Expression expression) { if (expression is PathExpression pathExpression) { BlockName = pathExpression.Path.Replace("#>", ""); return(HandlebarsExpression.Partial(Expression.Constant(BlockName))); } if (!(expression is HelperExpression helperExpression)) { throw new HandlebarsCompilerException($"Cannot convert '{expression}' to a partial expression"); } BlockName = helperExpression.HelperName.Replace("#>", ""); var argumentsCount = helperExpression.Arguments.Count(); if (string.IsNullOrEmpty(BlockName)) { switch (argumentsCount) { case 0: throw new HandlebarsCompilerException("Partial expression misses the name", helperExpression.Context); case 1: BlockName = helperExpression.Arguments.First().As <PathExpression>().Path; return(HandlebarsExpression.Partial(Expression.Constant(BlockName))); case 2: BlockName = helperExpression.Arguments.First().As <PathExpression>().Path; return(HandlebarsExpression.Partial(Expression.Constant(BlockName), helperExpression.Arguments.Last())); default: throw new HandlebarsCompilerException("Cannot convert a multi-argument helper expression to a partial expression", helperExpression.Context); } } return(argumentsCount switch { 0 => HandlebarsExpression.Partial(Expression.Constant(BlockName)), 1 => HandlebarsExpression.Partial(Expression.Constant(BlockName), helperExpression.Arguments.First()), _ => throw new HandlebarsCompilerException("Cannot convert a multi-argument helper expression to a partial expression", helperExpression.Context) });