private void ResolveReferences(List<Block> blocks)
{
List<LinkDefinition> linkDefinitions = blocks.OfType<LinkDefinitionList>()
.SelectMany(list => list.Definitions).ToList();
foreach (Paragraph paragraph in blocks.OfType<Paragraph>())
{
foreach (ReferenceLinkSpan referenceLink in paragraph.Spans.OfType<ReferenceLinkSpan>().ToList())
{
string key = referenceLink.Key.ToString().ToLower();
LinkDefinition definition =
linkDefinitions.FirstOrDefault(def => def.Key.ToString().ToLower() == key);
if (definition == null)
continue;
// replace the reference with a link
var link = new LinkSpan(
paragraph,
referenceLink.Start,
referenceLink.End,
referenceLink.Title,
definition.Url);
paragraph.Replace(referenceLink, link);
}
}
}
}