/// <summary> /// Fills the placeholders of a code /// </summary> /// <param name="code">Code to fill</param> /// <param name="data">Export Data</param> /// <returns>Filled Code</returns> public async Task <string> FillPlaceholders(string code, ExportObjectData data) { // Check Data if (!data.ExportData.ContainsKey(ExportConstants.ExportDataObject)) { return(code); } KortistoNpc npc = data.ExportData[ExportConstants.ExportDataObject] as KortistoNpc; if (npc != null) { // Replace Dialog Placeholders return(await FillDialogPlaceholders(code, npc)); } ExportDialogFunctionCode dialogFunction = data.ExportData[ExportConstants.ExportDataObject] as ExportDialogFunctionCode; if (dialogFunction != null) { // Replace Dialog Function GoNorthProject project = await _cachedDbAccess.GetUserProject(); return(await RenderDialogFunction(project, dialogFunction)); } return(code); }
/// <summary> /// Constructor /// </summary> /// <param name="dialogFunctionCode">Dialog function code</param> public ScribanExportDialogFunction(ExportDialogFunctionCode dialogFunctionCode) { if (dialogFunctionCode != null) { FunctionName = dialogFunctionCode.FunctionName; Code = dialogFunctionCode.Code; ParentPreviewText = dialogFunctionCode.ParentPreviewText; } }
/// <summary> /// Renders a dialog function /// </summary> /// <param name="project">Current Project</param> /// <param name="functionCode">Function code to use</param> /// <returns>Rendered dialog function</returns> public async Task <string> RenderDialogFunction(GoNorthProject project, ExportDialogFunctionCode functionCode) { string renderedCode = (await _defaultTemplateProvider.GetDefaultTemplateByType(project.Id, TemplateType.TaleDialogFunction)).Code; renderedCode = ExportUtil.BuildPlaceholderRegex(Placeholder_FunctionName).Replace(renderedCode, functionCode.FunctionName); renderedCode = ExportUtil.BuildPlaceholderRegex(Placeholder_Function_ParentPreview).Replace(renderedCode, functionCode.ParentPreviewText); renderedCode = ExportUtil.BuildPlaceholderRegex(Placeholder_FunctionContent, ExportConstants.ListIndentPrefix).Replace(renderedCode, m => { return(ExportUtil.TrimEmptyLines(ExportUtil.IndentListTemplate(functionCode.Code, m.Groups[1].Value))); }); return(renderedCode); }
/// <summary> /// Collects the values for an export /// </summary> /// <param name="templateType">Template type</param> /// <param name="parsedTemplate">Parsed scriban template</param> /// <param name="scriptObject">Scriban script object to fill</param> /// <param name="data">Export Data</param> /// <returns>Task</returns> public override Task CollectValues(TemplateType templateType, Template parsedTemplate, ScriptObject scriptObject, ExportObjectData data) { ExportDialogFunctionCode inputFunction = data.ExportData[ExportConstants.ExportDataObject] as ExportDialogFunctionCode; if (inputFunction == null) { return(Task.CompletedTask); } scriptObject.AddOrUpdate(ExportConstants.ScribanDialogFunctionKey, new ScribanExportDialogFunction(inputFunction)); return(Task.CompletedTask); }
/// <summary> /// Renders a function for a list /// </summary> /// <param name="project">Current Project</param> /// <param name="functionCode">Function code to use</param> /// <returns>Function</returns> public async Task <string> RenderFunctionForList(GoNorthProject project, ExportDialogFunctionCode functionCode) { ExportTemplate functionTemplate = await _defaultTemplateProvider.GetDefaultTemplateByType(project.Id, TemplateType.TaleDialogFunction); ExportObjectData objectData = new ExportObjectData(); objectData.ExportData.Add(ExportConstants.ExportDataObject, functionCode); ExportPlaceholderFillResult fillResult = await _templatePlaceholderResolver.FillPlaceholders(TemplateType.TaleDialogFunction, functionTemplate.Code, objectData, functionTemplate.RenderingEngine); _errorCollection.Merge(fillResult.Errors); return(fillResult.Code); }