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);
}
}
}