private string FormatPattern(string pattern, NameValueCollection parameters, params string[] visitedFormats)
{
List<string> visited = new List<string>(visitedFormats);
return linkPlaceholder.Replace(pattern, delegate(Match match)
{
string key = match.Groups[1].Value;
if (this.Formats.ContainsKey(key))
{
if (visited.Contains(key))
{
log.ErrorFormat("Skipping processing link format '{0}' the second time because it would cause recursion.", key);
return string.Empty;
}
visited.Add(key);
return this.FormatPattern(this.Formats[key].Value, parameters, visited.ToArray());
}
if (parameters[key] != null)
{
string value = parameters[key];
parameters.Remove(key);
return value;
}
return string.Empty;
});
}