Closed richard-edwards closed 10 years ago
Sorry, missed the docs on this one. Created my own this way.
public class LowerTagDefinition : InlineTagDefinition
{
public LowerTagDefinition()
: base("lower")
{
}
protected override IEnumerable<TagParameter> GetParameters()
{
return new[] { new TagParameter("param") { IsRequired = true } };
}
public override void GetText(TextWriter writer, Dictionary<string, object> arguments, Scope context)
{
writer.Write(arguments["param"].ToString().ToLower());
}
}
Usage is : {{#lower MyVar}}
There are two options, create a custom tag or override the KeyFound
event.
Option 1:
public class LowerCaseTagDefinition : InlineTagDefinition
{
private const string keyParameterName = "key";
public LowerCaseTagDefinition()
: base("lowercase")
{
}
protected override IEnumerable<TagParameter> GetParameters()
{
return new TagParameter[] { new TagParameter(keyParameterName) };
}
public override void GetText(TextWriter writer, Dictionary<string, object> arguments, Scope context)
{
object value;
if (arguments.TryGetValue(keyParameterName, out value) && value != null)
{
writer.Write(value.ToString().ToLowerInvariant());
}
}
}
// ...
FormatCompiler compiler = new FormatCompiler();
compiler.RegisterTag(new LowerCaseTagDefinition(), true);
Generator generator = compiler.Compile("{{#lowercase name}}");
string value = generator.Render(new { name = "Bob Smith" });
Option 2:
FormatCompiler compiler = new FormatCompiler();
Generator generator = compiler.Compile("{{name}}");
generator.KeyFound += (sender, e) => {
e.Substitute = e.Substitute == null ? null : Convert.ToString(e.Substitute).ToLowerInvariant();
};
string value = generator.Render(new { name = "Bob Smith" });
The first approach has the benefit of giving more control over which tags are made lowercase. The second option is a lot less code. Although, if you want to control which keys are made lowercase, it becomes a bit of a pain. The second approach is also the only way to apply formatting via {{key:format}}
.
Is there a way to lowercase a token? I'm looking for something like {{Entity:lowercase}}. If Entity value is 'Ticket', then I want 'ticket'