/// <summary> /// Parses the snippets of a template /// </summary> /// <param name="template">Template to parse</param> /// <returns>List of found snippets</returns> private List <ExportTemplateSnippet> ParseSnippets(ExportTemplate template) { string snippetRegexFormat = string.Format("(\\s|^){0}\\.{1}\\.(.*?)\\.({2}|{3}|{4})", ExportConstants.ScribanExportSnippetsObjectKey, StandardMemberRenamer.Rename(nameof(ScribanExportSnippetsData.Snippets)), StandardMemberRenamer.Rename(nameof(ScribanExportSnippet.InitialFunction)), StandardMemberRenamer.Rename(nameof(ScribanExportSnippet.AdditionalFunctions)), StandardMemberRenamer.Rename(nameof(ScribanExportSnippet.AllFunctions))); Regex exportSnippetRegex = new Regex(snippetRegexFormat, RegexOptions.Multiline); Template parsedTemplate = Template.Parse(template.Code); List <ExportTemplateSnippet> snippets = new List <ExportTemplateSnippet>(); List <ScriptStatement> statementsToCheck = ScribanStatementExtractor.ExtractPlainNonTextStatements(parsedTemplate); foreach (ScriptStatement curStatement in statementsToCheck) { if (curStatement is ScriptRawStatement) { continue; } string statement = curStatement.ToString(); MatchCollection snippetMatches = exportSnippetRegex.Matches(statement); if (!snippetMatches.Any()) { continue; } AddNewSnippets(snippets, snippetMatches); } return(snippets); }
/// <summary> /// Parses the referenced include templates from a template /// </summary> /// <param name="template">Template to parse</param> /// <returns>List of referenced include</returns> private async Task <List <IncludeExportTemplateReference> > ParseIncludeTemplates(ExportTemplate template) { Template parsedTemplate = Template.Parse(template.Code); List <IncludeExportTemplateReference> includeTemplateRefs = new List <IncludeExportTemplateReference>(); List <ScriptStatement> statementsToCheck = ScribanStatementExtractor.ExtractPlainNonTextStatements(parsedTemplate); foreach (ScriptStatement curStatement in statementsToCheck) { if (!(curStatement is ScriptExpressionStatement)) { continue; } ScriptExpressionStatement expressionStatement = (ScriptExpressionStatement)curStatement; if (expressionStatement.Expression == null || !(expressionStatement.Expression is ScriptFunctionCall)) { continue; } ScriptFunctionCall functionCall = (ScriptFunctionCall)expressionStatement.Expression; if (functionCall.Target == null || functionCall.Target.ToString() != "include") { continue; } if (functionCall.Arguments.Count < 1) { continue; } string templateName = functionCall.Arguments[0].ToString().Trim('\"').Trim('\''); IncludeExportTemplate existingTemplate = await _cachedDbAccess.GetIncludeTemplateByName(template.ProjectId, templateName); if (existingTemplate != null && !includeTemplateRefs.Any(e => e.IncludeTemplateId == existingTemplate.Id)) { includeTemplateRefs.Add(new IncludeExportTemplateReference { IncludeTemplateId = existingTemplate.Id, Name = existingTemplate.Name }); } } return(includeTemplateRefs); }