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