Beispiel #1
0
 public override Expression GetAccumulatedBlock()
 {
     return(HandlebarsExpression.Partial(
                _startingNode.PartialName,
                _startingNode.Argument,
                _body.Count > 1 ? Expression.Block(_body) : _body.First()));
 }
Beispiel #2
0
 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));
     }
 }
Beispiel #3
0
        public override IEnumerable <object> ConvertTokens(IEnumerable <object> sequence)
        {
            var enumerator = sequence.GetEnumerator();

            while (enumerator.MoveNext())
            {
                var item = enumerator.Current;
                if (item is PartialToken)
                {
                    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);
                }
            }
        }