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); } } }
public void Replace(Span target, LinkSpan withThis) { int indexOf = _spans.IndexOf(target); _spans.Remove(target); _spans.Insert(indexOf, withThis); }