using System; using System.IO; using System.Text; namespace Mustache { /// /// Substitutes a key placeholder with the textual representation of the associated object. /// internal sealed class KeyGenerator : IGenerator { private readonly string _key; private readonly string _format; /// /// Initializes a new instance of a KeyGenerator. /// /// The key to substitute with its value. /// The alignment specifier. /// The format specifier. public KeyGenerator(string key, string alignment, string formatting) { _key = key; _format = getFormat(alignment, formatting); } private static string getFormat(string alignment, string formatting) { StringBuilder formatBuilder = new StringBuilder(); formatBuilder.Append("{0"); if (!String.IsNullOrWhiteSpace(alignment)) { formatBuilder.Append(","); formatBuilder.Append(alignment.TrimStart('+')); } if (!String.IsNullOrWhiteSpace(formatting)) { formatBuilder.Append(":"); formatBuilder.Append(formatting); } formatBuilder.Append("}"); return formatBuilder.ToString(); } void IGenerator.GetText(KeyScope scope, TextWriter writer, object contextData) { object value = scope.Find(_key); writer.Write(_format, value); } } }