public string Transform(Topic current, string before)
{
var tokens = Token.FindTokens(before).ToArray();
if (!tokens.Any())
{
return(before);
}
var builder = new StringBuilder();
var position = 0;
tokens.Each(token =>
{
if (token.FirstIndex > position)
{
builder.Append(before.Substring(position, token.FirstIndex - position));
}
var handler = _handlers[token.Key];
builder.Append(handler.Transform(current, token.Data));
position = token.LastIndex + 1;
});
if (position < before.Length)
{
builder.Append(before.Substring(position));
}
return(builder.ToString());
}