Esempio n. 1
0
        /// <summary>
        /// Add a new template and return LG File.
        /// </summary>
        /// <param name="templateName">New template name.</param>
        /// <param name="parameters">New params.</param>
        /// <param name="templateBody">New  template body.</param>
        /// <returns>Updated LG file.</returns>
        public Templates AddTemplate(string templateName, List<string> parameters, string templateBody)
        {
            var template = this.FirstOrDefault(u => u.Name == templateName);
            if (template != null)
            {
                throw new Exception(TemplateErrors.TemplateExist(templateName));
            }

            ClearDiagnostics();

            var templateNameLine = BuildTemplateNameLine(templateName, parameters);
            var newTemplateBody = ConvertTemplateBody(templateBody);
            var content = $"{templateNameLine}{newLine}{newTemplateBody}";

            var originStartLine = GetLinesOfText(this.Content).Length;

            // update content
            this.Content = $"{Content}{newLine}{templateNameLine}{newLine}{newTemplateBody}";

            var newTemplates = new Templates(content: string.Empty, id: Id, importResolver: ImportResolver, expressionParser: ExpressionParser);
            newTemplates = new TemplatesTransformer(newTemplates).Transform(AntlrParseTemplates(content, Id));

            AppendDiagnosticsWithOffset(newTemplates.Diagnostics, originStartLine);

            var newTemplate = newTemplates.FirstOrDefault();
            if (newTemplate != null)
            {
                AdjustRangeForAddTemplate(newTemplate, originStartLine);
                this.Add(newTemplate);
                new StaticChecker(this).Check().ForEach(u => this.Diagnostics.Add(u));
            }

            return this;
        }
        /// <summary>
        /// Add a new template and return LG File.
        /// </summary>
        /// <param name="templateName">New template name.</param>
        /// <param name="parameters">New params.</param>
        /// <param name="templateBody">New  template body.</param>
        /// <returns>Updated LG file.</returns>
        public Templates AddTemplate(string templateName, List <string> parameters, string templateBody)
        {
            var template = this.FirstOrDefault(u => u.Name == templateName);

            if (template != null)
            {
                throw new Exception(TemplateErrors.TemplateExist(templateName));
            }

            var templateNameLine = BuildTemplateNameLine(templateName, parameters);
            var newTemplateBody  = ConvertTemplateBody(templateBody);
            var newContent       = $"{Content}{newLine}{templateNameLine}{newLine}{newTemplateBody}";

            Initialize(ParseText(newContent, Id, ImportResolver));

            return(this);
        }