示例#1
0
        /// <inheritdoc />
        public void Render(ToParsableStringDocumentVisitor visitor)
        {
            visitor.StringBuilder.Append("{{");
            if (Children.Any())
            {
                visitor.StringBuilder.Append(MorestachioLocalizationBlockProvider.OpenTag);
            }
            else
            {
                visitor.StringBuilder.Append(MorestachioLocalizationTagProvider.OpenTag);
            }

            visitor.StringBuilder.Append(visitor.ReparseExpression(MorestachioExpression));
            if (ExplicitCulture != null)
            {
                visitor.StringBuilder.Append(" #CULTURE ");
                visitor.StringBuilder.Append(visitor.ReparseExpression(ExplicitCulture));
            }
            visitor.StringBuilder.Append("}}");

            if (!Children.Any())
            {
                return;
            }

            visitor.VisitChildren(this);
            visitor.StringBuilder.Append("{{");
            visitor.StringBuilder.Append(MorestachioLocalizationBlockProvider.CloseTag);
            visitor.StringBuilder.Append("}}");
        }
        /// <summary>
        ///		Renders the current <see cref="FluentApiContext.CurrentNode"/> and all its children using the <see cref="ToParsableStringDocumentVisitor"/>
        /// </summary>
        /// <param name="template"></param>
        /// <returns></returns>
        public MorestachioDocumentFluentApi RenderTree(Action <string> template)
        {
            var visitor = new ToParsableStringDocumentVisitor();

            Context.CurrentNode.Item.Accept(visitor);
            template(visitor.StringBuilder.ToString());
            return(this);
        }
示例#3
0
 /// <inheritdoc />
 public void Render(ToParsableStringDocumentVisitor visitor)
 {
     visitor.StringBuilder.Append("{{");
     visitor.CheckForInlineTagLineBreakAtStart(this);
     visitor.StringBuilder.Append(TagKeyword);
     if (!string.IsNullOrWhiteSpace(Value))
     {
         visitor.StringBuilder.Append(" ");
         visitor.StringBuilder.Append(Value);
     }
     visitor.CheckForInlineTagLineBreakAtEnd(this);
     visitor.StringBuilder.Append("}}");
 }
 /// <inheritdoc />
 public void Render(ToParsableStringDocumentVisitor visitor)
 {
     if (!Children.Any())
     {
         visitor.StringBuilder.Append("{{" + MorestachioLocalizationTagProvider.OpenTag + visitor.ReparseExpression(MorestachioExpression) + "}}");
     }
     else
     {
         visitor.StringBuilder.Append("{{" + MorestachioLocalizationBlockProvider.OpenTag + visitor.ReparseExpression(MorestachioExpression) + "}}");
         visitor.VisitChildren(this);
         visitor.StringBuilder.Append("{{" + MorestachioLocalizationBlockProvider.CloseTag + "}}");
     }
 }
示例#5
0
        public static void AssertDocumentItemIsSameAsTemplate(string text, IDocumentItem documentItem)
        {
            var visitor = new ToParsableStringDocumentVisitor();

            visitor.Visit(documentItem as MorestachioDocument);

            var format = visitor.StringBuilder.ToString();

            StringAssert.AreEqualIgnoringCase(text, format);
            if (!format.Equals(text))
            {
                if (!format.Equals(text, StringComparison.InvariantCultureIgnoreCase))
                {
                    Assert.That(format, Is.EqualTo(text));
                }

                Console.WriteLine("The two string are only the same of not checked for casing");
            }
        }
示例#6
0
        private static IEnumerable <NewFolding> CreateNewFoldings(TextDocument document,
                                                                  IDocumentItem morestachioDocument)
        {
            var morestachioDocumentChildren = morestachioDocument
                                              .Children
                                              .ToArray();

            for (var index = 0; index < morestachioDocumentChildren.Length; index++)
            {
                var morestachioDocumentChild = morestachioDocumentChildren[index];
                var start = document.GetOffset(
                    morestachioDocumentChild.ExpressionStart.Line,
                    morestachioDocumentChild.ExpressionStart.Character - 2);

                var end = document.Text.Length;
                if (index + 1 < morestachioDocumentChildren.Length)
                {
                    var documentChild = morestachioDocumentChildren[index + 1];
                    end = document.GetOffset(documentChild.ExpressionStart.Line,
                                             documentChild.ExpressionStart.Character);
                }

                var builder = new ToParsableStringDocumentVisitor();

                if (morestachioDocumentChild.Children.Any())
                {
                    if (morestachioDocumentChild is ExpressionScopeDocumentItem expScope)
                    {
                        builder.Visit(expScope);
                    }
                    else if (morestachioDocumentChild is EachDocumentItem eachScope)
                    {
                        builder.Visit(eachScope);
                    }
                    else if (morestachioDocumentChild is DoLoopDocumentItem doScope)
                    {
                        builder.Visit(doScope);
                    }
                    else if (morestachioDocumentChild is IfExpressionScopeDocumentItem ifScope)
                    {
                        builder.Visit(ifScope);
                    }
                    else if (morestachioDocumentChild is IfNotExpressionScopeDocumentItem ifNotScope)
                    {
                        builder.Visit(ifNotScope);
                    }
                    else if (morestachioDocumentChild is InvertedExpressionScopeDocumentItem invertScope)
                    {
                        builder.Visit(invertScope);
                    }
                    else if (morestachioDocumentChild is PartialDocumentItem partial)
                    {
                        builder.Visit(partial);
                    }
                    else if (morestachioDocumentChild is WhileLoopDocumentItem whileScope)
                    {
                        builder.Visit(whileScope);
                    }

                    yield return(new NewFolding(start, end)
                    {
                        Name = builder.StringBuilder.ToString(),
                    });
                }

                foreach (var newFolding in CreateNewFoldings(document, morestachioDocumentChild))
                {
                    yield return(newFolding);
                }
            }
        }
示例#7
0
 /// <inheritdoc />
 public void Render(ToParsableStringDocumentVisitor visitor)
 {
     visitor.StringBuilder.Append("{{" + MorestachioLocalizationParamTagProvider.OpenTag + visitor.ReparseExpression(MorestachioExpression) + "}}");
 }
示例#8
0
 /// <inheritdoc />
 public void Render(ToParsableStringDocumentVisitor visitor)
 {
     visitor.StringBuilder.Append("{{#LESS}}");
     visitor.VisitChildren(this);
     visitor.StringBuilder.Append("{{/LESS}}");
 }