private List <List <object> > VisitStructureValue(LGTemplateParser.KeyValueStructureLineContext context)
        {
            var values = context.keyValueStructureValue();

            var result = new List <List <object> >();

            foreach (var item in values)
            {
                if (item.IsPureExpression())
                {
                    result.Add(EvalExpression(item.expressionInStructure(0).GetText(), context.GetText()));
                }
                else
                {
                    var itemStringResult = new List <string>()
                    {
                        string.Empty
                    };
                    foreach (var child in item.children)
                    {
                        if (child is LGTemplateParser.ExpressionInStructureContext expression)
                        {
                            var errorPrefix = "Property '" + context.STRUCTURE_IDENTIFIER().GetText() + "':";
                            itemStringResult = StringListConcat(itemStringResult, EvalExpression(expression.GetText(), context.GetText(), errorPrefix));
                        }
                        else
                        {
                            var node = child as ITerminalNode;
                            switch (node.Symbol.Type)
                            {
                            case LGTemplateParser.ESCAPE_CHARACTER_IN_STRUCTURE_BODY:
                                itemStringResult = StringListConcat(itemStringResult, new List <string>()
                                {
                                    node.GetText().Replace(@"\|", "|").Escape()
                                });
                                break;

                            default:
                                itemStringResult = StringListConcat(itemStringResult, new List <string>()
                                {
                                    node.GetText()
                                });
                                break;
                            }
                        }
                    }

                    result.Add(itemStringResult.Cast <object>().ToList());
                }
            }

            return(result.Select(x => x.Select(y => y as object).ToList()).ToList());
        }
Exemple #2
0
        private object VisitStructureValue(LGTemplateParser.KeyValueStructureLineContext context)
        {
            var values = context.keyValueStructureValue();

            var result = new List <object>();

            foreach (var item in values)
            {
                if (item.IsPureExpression())
                {
                    result.Add(EvalExpression(item.expressionInStructure(0).GetText(), context.GetText()));
                }
                else
                {
                    var itemStringResult = new StringBuilder();
                    foreach (var child in item.children)
                    {
                        if (child is LGTemplateParser.ExpressionInStructureContext expression)
                        {
                            var errorPrefix = "Property '" + context.STRUCTURE_IDENTIFIER().GetText() + "':";
                            itemStringResult.Append(EvalExpression(expression.GetText(), context.GetText(), errorPrefix));
                        }
                        else
                        {
                            var node = child as ITerminalNode;
                            switch (node.Symbol.Type)
                            {
                            case LGTemplateParser.ESCAPE_CHARACTER_IN_STRUCTURE_BODY:
                                itemStringResult.Append(node.GetText().Replace(@"\|", "|").Escape());
                                break;

                            default:
                                itemStringResult.Append(node.GetText());
                                break;
                            }
                        }
                    }

                    result.Add(itemStringResult.ToString().Trim());
                }
            }

            return(result.Count == 1 ? result[0] : result);
        }
Exemple #3
0
        private AnalyzerResult VisitStructureValue(LGTemplateParser.KeyValueStructureLineContext context)
        {
            var values = context.keyValueStructureValue();

            var result = new AnalyzerResult();
            foreach (var item in values)
            {
                if (item.IsPureExpression(out var text))
                {
                    result.Union(AnalyzeExpression(text));
                }
                else
                {
                    var expressions = item.EXPRESSION_IN_STRUCTURE_BODY();
                    foreach (var expression in expressions)
                    {
                        result.Union(AnalyzeExpression(expression.GetText()));
                    }
                }
            }

            return result;
        }
Exemple #4
0
        private AnalyzerResult VisitStructureValue(LGTemplateParser.KeyValueStructureLineContext context)
        {
            var values = context.keyValueStructureValue();

            var result = new AnalyzerResult();

            foreach (var item in values)
            {
                if (item.IsPureExpression())
                {
                    result.Union(AnalyzeExpression(item.expressionInStructure(0).GetText()));
                }
                else
                {
                    var expressions = item.expressionInStructure();
                    foreach (var expression in expressions)
                    {
                        result.Union(AnalyzeExpression(expression.GetText()));
                    }
                }
            }

            return(result);
        }
 /// <summary>
 /// Exit a parse tree produced by <see cref="LGTemplateParser.keyValueStructureLine"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitKeyValueStructureLine([NotNull] LGTemplateParser.KeyValueStructureLineContext context)
 {
 }
 /// <summary>
 /// Visit a parse tree produced by <see cref="LGTemplateParser.keyValueStructureLine"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitKeyValueStructureLine([NotNull] LGTemplateParser.KeyValueStructureLineContext context)
 {
     return(VisitChildren(context));
 }