c# - 如何将多个参数传递给StringTemplate4上的子模板
问题描述
我正在尝试调用一个子模板,在该子模板中我需要将两个表达式作为参数传递并使用 CustomRenderer 处理这些参数。
当使用一个参数调用子模板 + CustomRenderer 时,它是通过从模板上下文调用方法来完成的,如下代码所示。
我的问题是:例如,我该如何打电话
$concat2values(context.Value, "Literal")$
给定的 context.Value 是一个字符串“somevalue”,因此接收
somevalueLiteral
obs。:我担心的是CustomRenderer 只是reveice 一个对象参数,我没有尝试以这种方式构建模板。我的目标是在处理它的“引擎”上从脚本中拦截一些处理过的代码。
模板组.stg
group mygroup;
delimiters "$","$"
main(context) ::= <<
$formatSomething(context.Value)$
>>
formatSomething(value) ::= <<
$value; format = "_formatSomething_"$
>>
我的格式化程序
using Antlr4.StringTemplate;
using System;
using System.Globalization;
using System.Linq;
namespace Engine.Components.Engine.Formatters
{
public class SomeFormatter: StringRenderer
{
public override string ToString(object o, string formatString, CultureInfo culture)
{
if ("_formatSomething_".Equals(formatString))
return FormatSomething(o);
return base.ToString(o, formatString, culture);
}
private string FormatSomething(object o)
{
** DO STUFF **
string result = do_stuff_and_return_it_formatted();
return result;
}
}
}
我的模板引擎.cs
private string ProcessTemplate<T>(string fullPathTemplateFileName, T context)
{
try
{
var templateSource = File.ReadAllText(fullPathTemplateFileName);
var groupTemplate = CreateTemplateGroup(templateSource);
var templates = new TemplateGroupString(groupTemplate);
// vvvvvvv----- SHOULD I USE OBJECT OR ANOTHER SPECIFIC TYPE TO THE TASK?
templates.RegisterRenderer(typeof(object), new SomeFormatter());
var engine = templates.GetInstanceOf("main");
if (engine == null)
throw new Exception($"Failed to get template {fullPathTemplateFileName}");
engine.Add("context", context);
return engine.Render();
}
catch (Exception ex)
{
Errors.Add($"{ex.Message}{ex.StackTrace}");
return $"{ex.Message}{ex.StackTrace}";
}
}
解决方案
推荐阅读
- amazon-web-services - 使用无服务器部署多个功能,创建包含所有文件的每个功能
- ms-office - ms web 插件 - 导航到同一插件容器中的另一个 html
- python - 从 cartopy.feature 中提取数据
- javascript - Postman 如果一个或多个测试失败,则执行部分代码
- delete-file - 复制到新文件夹后删除所有文件
- php - Laravel - errno:150 外键约束的格式不正确
- java - Maven 编译器源和目标
- php - URL 查询字符串
- sas - SAS proc 报告 RTF 表列宽度未与指定宽度对齐
- ada - 处理表达式时如何检查 Ada 中的潜在溢出?