将蛇形大小写转换为 pascal/camel 大小写的 Scriban 函数
Scriban function to convert snake case to pascal/camel case
我正在尝试使用 Scriban 模板生成一些 C# 代码。我使用的数据库是 postgresql,所以我的表和属性都在 snake_case 中。我设法制作了一个将蛇形大小写转换为帕斯卡大小写的函数:
{{ for word in EntityName | string.split "_" -}} {{~word | string.capitalize}} {{-end}}
这会将 entity_name 转换为所需的 EntityName.
驼峰式:
{{func split(en)
ret en | string.split "_"
end}}
{{for index in 0..@split(EntityName).size -}}
{{-if index == 0}} {{~@split(EntityName)[index]-}} {{-else-}} {{-@split(EntityName)[index] | string.capitalize-}} {{-end-}}
{{-end}}
但是,我需要在我的模板中多次使用这个函数,因此我想制作一个我可以在整个模板中使用的函数,就像我用于驼峰式大小写转换的 split(en) 函数一样。所以我可以在任何需要的地方做这样的事情:
{{ @convert(EntityName) }}
这可能吗?如果可以,怎么做?
如有任何帮助,我们将不胜感激!
我找到了解决问题的另一种方法。我没有在模板本身中创建函数,而是创建了一个 ScriptObject。
public class ScribanHelper : ScriptObject
{
public static string ConvertToPascalCase(string word)
{
if (string.IsNullOrEmpty(word))
return string.Empty;
return string.Join("", word.Split('_')
.Select(w => w.Trim())
.Where(w => w.Length > 0)
.Select(w => w.Substring(0, 1).ToUpper() + w.Substring(1).ToLower()));
}
}
然后我将其推送到 scriban 上下文以在模板中使用它。
var context = new TemplateContext { MemberRenamer = member => member.Name };
var scriptObject = new ScribanHelper();
context.PushGlobal(scriptObject);
var templateString = File.ReadAllText(templateSetting.Name);
var template = Template.Parse(templateString);
var entityScriptObject = new ScriptObject();
entityScriptObject.Import(entity, renamer: member => member.Name);
context.PushGlobal(entityScriptObject);
var result = template.Render(context);
然后我可以很容易地在模板中使用它。
{{-func pc(name)
ret convert_to_pascal_case name
end}}
{{@pc(EntityName)}}
我正在尝试使用 Scriban 模板生成一些 C# 代码。我使用的数据库是 postgresql,所以我的表和属性都在 snake_case 中。我设法制作了一个将蛇形大小写转换为帕斯卡大小写的函数:
{{ for word in EntityName | string.split "_" -}} {{~word | string.capitalize}} {{-end}}
这会将 entity_name 转换为所需的 EntityName.
驼峰式:
{{func split(en)
ret en | string.split "_"
end}}
{{for index in 0..@split(EntityName).size -}}
{{-if index == 0}} {{~@split(EntityName)[index]-}} {{-else-}} {{-@split(EntityName)[index] | string.capitalize-}} {{-end-}}
{{-end}}
但是,我需要在我的模板中多次使用这个函数,因此我想制作一个我可以在整个模板中使用的函数,就像我用于驼峰式大小写转换的 split(en) 函数一样。所以我可以在任何需要的地方做这样的事情:
{{ @convert(EntityName) }}
这可能吗?如果可以,怎么做?
如有任何帮助,我们将不胜感激!
我找到了解决问题的另一种方法。我没有在模板本身中创建函数,而是创建了一个 ScriptObject。
public class ScribanHelper : ScriptObject
{
public static string ConvertToPascalCase(string word)
{
if (string.IsNullOrEmpty(word))
return string.Empty;
return string.Join("", word.Split('_')
.Select(w => w.Trim())
.Where(w => w.Length > 0)
.Select(w => w.Substring(0, 1).ToUpper() + w.Substring(1).ToLower()));
}
}
然后我将其推送到 scriban 上下文以在模板中使用它。
var context = new TemplateContext { MemberRenamer = member => member.Name };
var scriptObject = new ScribanHelper();
context.PushGlobal(scriptObject);
var templateString = File.ReadAllText(templateSetting.Name);
var template = Template.Parse(templateString);
var entityScriptObject = new ScriptObject();
entityScriptObject.Import(entity, renamer: member => member.Name);
context.PushGlobal(entityScriptObject);
var result = template.Render(context);
然后我可以很容易地在模板中使用它。
{{-func pc(name)
ret convert_to_pascal_case name
end}}
{{@pc(EntityName)}}