Partial() public static method

public static Partial ( Expression partialName ) : PartialExpression
partialName System.Linq.Expressions.Expression
return PartialExpression
 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);
                }
            }
        }
Beispiel #3
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));
     }
 }
        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)
            });