using System; 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(); } string IGenerator.GetText(IFormatProvider provider, KeyScope scope) { object value = scope.Find(_key); return String.Format(provider, _format, value); } } }