ITemplateFormat
ITemplateFormat parses and assembles formulation strings.
/// <summary>String format description</summary>
public interface ITemplateFormat
{
/// <summary>Format name</summary>
string Name { get; set; }
/// <summary>Provides <see cref="ITemplateText"/> for format string</summary>
IProvider<string, ITemplateText> Text { get; set; }
/// <summary>Provides <see cref="ITemplateText"/> for format string and caches into a weak-keyed map.</summary>
IProvider<string, ITemplateText> TextCached { get; set; }
/// <summary>Provides breakdown of format string</summary>
IProvider<string, ITemplateBreakdown> Breakdown { get; set; }
/// <summary>Provides breakdown of format string and caches in a weak-keyed map.</summary>
IProvider<string, ITemplateBreakdown> BreakdownCached { get; set; }
/// <summary>Assembles breakdown into string</summary>
IProvider<ITemplateBreakdown, string> Assemble { get; set; }
/// <summary>Assembles breakdown into string and caches in a weak-keyed map.</summary>
IProvider<ITemplateBreakdown, string> AssembleCached { get; set; }
/// <summary>Policy whether format uses numeric parameters and assumes parameter order by numeric value.</summary>
bool NumberAssignedOrder { get; set; }
/// <summary>Text escaper</summary>
IEscaper? Escaper { get; set; }
}
ITemplateFormat.Text[string] wraps strings into template text, without parsing if possible.
ITemplateText text = TemplateFormat.Parameterless.Text["Welcome!"];
ITemplateFormat.TextCached[string] wraps strings into template text and caches into weak-keyed map. Mapping is GCed when key is.
ITemplateText text = TemplateFormat.Parameterless.TextCached["Welcome!"];
ITemplateFormat.Breakdown[string] is IProvider that parses strings into breakdown representation of parts.
ITemplateBreakdown breakdown1 = TemplateFormat.BraceNumeric.Breakdown["Welcome, {0}"];
ITemplateBreakdown breakdown2 = TemplateFormat.BraceAlphaNumeric.Breakdown["Welcome, {user}"];
ITemplateBreakdown breakdown3 = TemplateFormat.Brace.Breakdown["Welcome, {0}"];
ITemplateFormat.BreakdownCached[string] parses string into parts and caches into weak-keyed map. Mapping is GCed when key is.
ITemplateBreakdown breakdown1 = TemplateFormat.BraceNumeric.BreakdownCached["Welcome, {0}"];
ITemplateBreakdown breakdown2 = TemplateFormat.BraceAlphaNumeric.BreakdownCached["Welcome, {user}"];
ITemplateBreakdown breakdown3 = TemplateFormat.Brace.BreakdownCached["Welcome, {0}"];
ITemplateFormat.Assemble[formatString] assembles breakdown back into string.
ITemplateFormat templateFormat = TemplateFormat.BraceAlphaNumeric;
ITemplateBreakdown breakdown = templateFormat.Breakdown["Welcome, {user}"];
WriteLine(templateFormat.Assemble[breakdown]); // "Welcome, {user}"
ITemplateFormat.AssembleCached[formatString] assembles breakdown and caches into weak-keyed map. Mapping is GCed when key is.
ITemplateBreakdown breakdown = TemplateFormat.BraceAlphaNumeric.Breakdown["Welcome, {user}"];
WriteLine(TemplateFormat.BraceAlphaNumeric.AssembleCached[breakdown]); // "Welcome, {user}"
Breakdown of one format and re-assembly to another format is essentially a conversion of template formulation.
ITemplateBreakdown breakdown = TemplateFormat.Percent.Breakdown["Today is {%2}. Welcome, %1"];
WriteLine(TemplateFormat.BraceNumeric.Assemble[breakdown]); // "Today is {{{1}}}. Welcome, {0}"
Full Example
Full example
using System.Globalization;
using Avalanche.Template;
using static System.Console;
public class templateformat
{
public static void Run()
{
{
// <02>
ITemplateText text = TemplateFormat.Parameterless.Text["Welcome!"];
// </02>
}
{
// <03>
ITemplateText text = TemplateFormat.Parameterless.TextCached["Welcome!"];
// </03>
}
{
// <04>
ITemplateBreakdown breakdown1 = TemplateFormat.BraceNumeric.Breakdown["Welcome, {0}"];
ITemplateBreakdown breakdown2 = TemplateFormat.BraceAlphaNumeric.Breakdown["Welcome, {user}"];
ITemplateBreakdown breakdown3 = TemplateFormat.Brace.Breakdown["Welcome, {0}"];
// </04>
}
{
// <05>
ITemplateBreakdown breakdown1 = TemplateFormat.BraceNumeric.BreakdownCached["Welcome, {0}"];
ITemplateBreakdown breakdown2 = TemplateFormat.BraceAlphaNumeric.BreakdownCached["Welcome, {user}"];
ITemplateBreakdown breakdown3 = TemplateFormat.Brace.BreakdownCached["Welcome, {0}"];
// </05>
}
{
// <06>
ITemplateFormat templateFormat = TemplateFormat.BraceAlphaNumeric;
ITemplateBreakdown breakdown = templateFormat.Breakdown["Welcome, {user}"];
WriteLine(templateFormat.Assemble[breakdown]); // "Welcome, {user}"
// </06>
WriteLine(breakdown.Print(CultureInfo.InvariantCulture, new object?[] { "Donald" }));
}
{
// <07>
ITemplateBreakdown breakdown = TemplateFormat.BraceAlphaNumeric.Breakdown["Welcome, {user}"];
WriteLine(TemplateFormat.BraceAlphaNumeric.AssembleCached[breakdown]); // "Welcome, {user}"
// </07>
WriteLine(breakdown.Print(CultureInfo.InvariantCulture, new object?[] { "Donald" }));
}
{
// <08>
ITemplateBreakdown breakdown = TemplateFormat.Percent.Breakdown["Today is {%2}. Welcome, %1"];
WriteLine(TemplateFormat.BraceNumeric.Assemble[breakdown]); // "Today is {{{1}}}. Welcome, {0}"
// </08>
}
}
}