diff --git a/src/Markdig.Tests/Markdig.Tests.csproj b/src/Markdig.Tests/Markdig.Tests.csproj
index bbb6f935d..953102aac 100644
--- a/src/Markdig.Tests/Markdig.Tests.csproj
+++ b/src/Markdig.Tests/Markdig.Tests.csproj
@@ -65,6 +65,7 @@
+
diff --git a/src/Markdig.Tests/Markdig.Tests.nuget.props b/src/Markdig.Tests/Markdig.Tests.nuget.props
new file mode 100644
index 000000000..476495381
--- /dev/null
+++ b/src/Markdig.Tests/Markdig.Tests.nuget.props
@@ -0,0 +1,18 @@
+
+
+
+ True
+ NuGet
+ C:\code\github\markdig\src\Markdig.Tests\project.lock.json
+ $(UserProfile)\.nuget\packages\
+ C:\Users\mheath\.nuget\packages\
+ ProjectJson
+ 4.5.0
+
+
+ $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Markdig.Tests/TestLinkRewriter.cs b/src/Markdig.Tests/TestLinkRewriter.cs
new file mode 100644
index 000000000..be1a84829
--- /dev/null
+++ b/src/Markdig.Tests/TestLinkRewriter.cs
@@ -0,0 +1,44 @@
+using System;
+using System.IO;
+using Markdig.Parsers;
+using Markdig.Renderers;
+using NUnit.Framework;
+
+namespace Markdig.Tests
+{
+ public class TestLinkRewriter
+ {
+ [Test]
+ public void ReplacesRelativeLinks()
+ {
+ TestSpec(s => "abc" + s, "Link: [hello](/relative.jpg)", "abc/relative.jpg");
+ TestSpec(s => s + "xyz", "Link: [hello](relative.jpg)", "relative.jpgxyz");
+ TestSpec(null, "Link: [hello](relative.jpg)", "relative.jpg");
+ TestSpec(null, "Link: [hello](/relative.jpg)", "/relative.jpg");
+ }
+
+ [Test]
+ public void ReplacesRelativeImageSources()
+ {
+ TestSpec(s => "abc" + s, "Image: ", "abc/image.jpg");
+ TestSpec(s => "abc" + s, "Image: ", "abcimage.jpg");
+ TestSpec(null, "Image: ", "/image.jpg");
+ }
+
+ public static void TestSpec(Func linkRewriter, string markdown, string expectedLink)
+ {
+ var pipeline = new MarkdownPipelineBuilder().Build();
+
+ var writer = new StringWriter();
+ var renderer = new HtmlRenderer(writer);
+ renderer.LinkRewriter = linkRewriter;
+ pipeline.Setup(renderer);
+
+ var document = MarkdownParser.Parse(markdown, pipeline);
+ renderer.Render(document);
+ writer.Flush();
+
+ Assert.That(writer.ToString(), Contains.Substring("=\"" + expectedLink + "\""));
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Markdig/Renderers/HtmlRenderer.cs b/src/Markdig/Renderers/HtmlRenderer.cs
index f529a17e2..8373e93f9 100644
--- a/src/Markdig/Renderers/HtmlRenderer.cs
+++ b/src/Markdig/Renderers/HtmlRenderer.cs
@@ -80,6 +80,11 @@ public HtmlRenderer(TextWriter writer) : base(writer)
///
public Uri BaseUrl { get; set; }
+ ///
+ /// Allows links to be rewritten
+ ///
+ public Func LinkRewriter { get; set; }
+
///
/// Writes the content escaped for HTML.
///
@@ -202,6 +207,11 @@ public HtmlRenderer WriteEscapeUrl(string content)
content = new Uri(BaseUrl, content).AbsoluteUri;
}
+ if (LinkRewriter != null)
+ {
+ content = LinkRewriter(content);
+ }
+
int previousPosition = 0;
int length = content.Length;