Esempio n. 1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Template"/> class.
 /// </summary>
 /// <param name="templateName">Template name without parameters.</param>
 /// <param name="parameters">Parameter list.</param>
 /// <param name="templateBody">Template content.</param>
 /// <param name="sourceRange">Source range of template.</param>
 internal Template(
     string templateName,
     List <string> parameters,
     string templateBody,
     SourceRange sourceRange)
 {
     this.Name        = templateName ?? string.Empty;
     this.Parameters  = parameters ?? new List <string>();
     this.Body        = templateBody ?? string.Empty;
     this.SourceRange = sourceRange;
 }
Esempio n. 2
0
        private (object value, string error) EvalByAdaptiveExpression(string exp, object scope, ParserRuleContext expressionContext)
        {
            var currentTemplate = CurrentTemplate();

            if (currentTemplate != null)
            {
                var source = currentTemplate.SourceRange.Source;
                if (expressionContext != null && _lgOptions.OnEvent != null)
                {
                    var lineOffset    = currentTemplate.SourceRange.Range.Start.Line;
                    var sourceRange   = new SourceRange(expressionContext, source, lineOffset);
                    var expressionRef = new ExpressionRef(exp, sourceRange);

                    var expression = currentTemplate.Expressions.FirstOrDefault(u => u.GetId() == expressionRef.GetId());
                    if (expression != null)
                    {
                        _lgOptions.OnEvent(expression, new BeginExpressionEvaluationArgs {
                            Source = source, Expression = exp
                        });
                    }
                }
            }

            var parse = this.ExpressionParser.Parse(exp);
            var opt   = new Options
            {
                Locale           = _lgOptions.Locale,
                NullSubstitution = _lgOptions.NullSubstitution
            };
            var result = parse.TryEvaluate(scope, opt);

            if (currentTemplate != null && _lgOptions.OnEvent != null)
            {
                string text;
                if (string.IsNullOrEmpty(result.error))
                {
                    text = $"Evaluate expression '{exp}' get result: {result.value}";
                }
                else
                {
                    text = $"Evaluate expression '{exp}' get error: {result.error}";
                }

                _lgOptions.OnEvent(currentTemplate, new MessageArgs {
                    Source = currentTemplate.SourceRange.Source, Text = text
                });
            }

            return(result);
        }
Esempio n. 3
0
            private void FillInExpression(ParserRuleContext expressionContext)
            {
                if (expressionContext == null)
                {
                    return;
                }

                var exp = expressionContext.GetText().TrimExpression();

                var lineOffset    = this._template.SourceRange.Range.Start.Line;
                var sourceRange   = new SourceRange(expressionContext, _template.SourceRange.Source, lineOffset);
                var expressionRef = new ExpressionRef(exp, sourceRange);

                _template.Expressions.Add(expressionRef);
            }
            /// <inheritdoc/>
            public override object VisitImportDefinition([NotNull] LGFileParser.ImportDefinitionContext context)
            {
                var importStr = context.IMPORT().GetText();

                var matchResult = ImportRegex.Match(importStr);

                if (matchResult.Success && matchResult.Groups.Count == 3)
                {
                    var description = matchResult.Groups[1].Value?.Trim();
                    var id          = matchResult.Groups[2].Value?.Trim();

                    var sourceRange = new SourceRange(context, _templates.Source);
                    var import      = new TemplateImport(description, id, sourceRange);
                    _templates.Imports.Add(import);
                }

                return(null);
            }
Esempio n. 5
0
            /// <inheritdoc/>
            public override object VisitImportDefinition([NotNull] LGFileParser.ImportDefinitionContext context)
            {
                var importStr = context.IMPORT().GetText();

                var matchResult = ImportRegex.Match(importStr);

                if (!matchResult.Success || (matchResult.Groups.Count != 3 && matchResult.Groups.Count != 4))
                {
                    _templates.Diagnostics.Add(BuildTemplatesDiagnostic(TemplateErrors.ImportFormatError, context));
                    return(null);
                }

                var description = matchResult.Groups[1].Value?.Trim();
                var id          = matchResult.Groups[2].Value?.Trim();

                var sourceRange = new SourceRange(context, _templates.Source);
                var import      = new TemplateImport(description, id, sourceRange);

                if (matchResult.Groups.Count == 4)
                {
                    var asAlias = matchResult.Groups[3].Value?.Trim();
                    if (!string.IsNullOrWhiteSpace(asAlias))
                    {
                        var asAliasArray = Regex.Split(asAlias, @"\s+");
                        if (asAliasArray.Length != 2 || asAliasArray[0] != "as")
                        {
                            _templates.Diagnostics.Add(BuildTemplatesDiagnostic(TemplateErrors.ImportFormatError, context));
                            return(null);
                        }
                        else
                        {
                            import.Alias = asAliasArray[1].Trim();
                        }
                    }
                }

                _templates.Imports.Add(import);

                return(null);
            }
Esempio n. 6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ExpressionRef"/> class.
 /// </summary>
 /// <param name="expression">Expression string.</param>
 /// <param name="sourceRange">Expression source range.</param>
 public ExpressionRef(string expression, SourceRange sourceRange)
 {
     this.Expression  = expression;
     this.SourceRange = sourceRange;
 }