예제 #1
0
        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);
                }
            }
        }
예제 #3
0
        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);
                }
            }
        }
예제 #4
0
 protected override System.Linq.Expressions.Expression VisitHelperExpression(HelperExpression hex)
 {
     return(HandlebarsExpression.Helper(
                hex.HelperName,
                hex.Arguments.Select(Visit)));
 }