Compare commits

...

3 Commits

Author SHA1 Message Date
Alexandre Mutel
3821bd00fe Bump version to 0.5.6 2016-06-20 12:30:25 +09:00
Alexandre Mutel
62701fd0f1 Improve pragma line output 2016-06-20 12:29:13 +09:00
Alexandre Mutel
1be5e60506 Make to MarkdownPipeline.Setup public. Make Markdown.ToHtml returning a MarkdownDocument 2016-06-20 12:27:50 +09:00
5 changed files with 63 additions and 17 deletions

View File

@@ -2,8 +2,12 @@
// This file is licensed under the BSD-Clause 2 license.
// See the license.txt file in the project root for more information.
using System;
using Markdig.Helpers;
using Markdig.Renderers;
using Markdig.Renderers.Html;
using Markdig.Syntax;
using Markdig.Syntax.Inlines;
namespace Markdig.Extensions.PragmaLines
{
@@ -15,26 +19,61 @@ namespace Markdig.Extensions.PragmaLines
{
public void Setup(MarkdownPipelineBuilder pipeline)
{
pipeline.DocumentProcessed -= PipelineOnDocumentProcessed;
pipeline.DocumentProcessed += PipelineOnDocumentProcessed;
}
public void Setup(IMarkdownRenderer renderer)
{
var htmlRenderer = renderer as HtmlRenderer;
if (htmlRenderer != null)
}
private static void PipelineOnDocumentProcessed(MarkdownDocument document)
{
int index = 0;
AddPragmas(document, ref index);
}
private static void AddPragmas(Block block, ref int index)
{
var attribute = block.GetAttributes();
var pragmaId = GetPragmaId(block);
if ( attribute.Id == null)
{
htmlRenderer.ObjectWriteBefore -= HtmlRendererOnObjectWriteBefore;
htmlRenderer.ObjectWriteBefore += HtmlRendererOnObjectWriteBefore;
attribute.Id = pragmaId;
}
else if (block.Parent != null)
{
var heading = block as HeadingBlock;
// If we have a heading, we will try to add the tag inside it
// otherwise we will add it just before
var tag = $"<a id=\"{pragmaId}\"></a>";
if (heading?.Inline?.FirstChild != null)
{
heading.Inline.FirstChild.InsertBefore(new HtmlInline() { Tag = tag });
}
else
{
block.Parent.Insert(index, new HtmlBlock(null) { Lines = new StringLineGroup(tag) });
index++;
}
}
var container = block as ContainerBlock;
if (container != null)
{
for (int i = 0; i < container.Count; i++)
{
var subBlock = container[i];
AddPragmas(subBlock, ref i);
}
}
}
private static void HtmlRendererOnObjectWriteBefore(IMarkdownRenderer renderer, MarkdownObject markdownObject)
private static string GetPragmaId(Block block)
{
if (markdownObject is Block)
{
var htmlRenderer = (HtmlRenderer) renderer;
htmlRenderer.EnsureLine();
htmlRenderer.WriteLine($"<span id=\"pragma-line-{markdownObject.Line}\"></span>");
}
return $"pragma-line-{block.Line}";
}
}
}

View File

@@ -30,13 +30,14 @@ namespace Markdig
}
/// <summary>
/// Converts a Markdown string to HTML.
/// Converts a Markdown string to HTML and output to the specified writer.
/// </summary>
/// <param name="markdown">A Markdown text.</param>
/// <param name="writer">The destination <see cref="TextWriter"/> that will receive the result of the conversion.</param>
/// <param name="pipeline">The pipeline used for the conversion.</param>
/// <returns>The Markdown document that has been parsed</returns>
/// <exception cref="System.ArgumentNullException">if reader or writer variable are null</exception>
public static void ToHtml(string markdown, TextWriter writer, MarkdownPipeline pipeline = null)
public static MarkdownDocument ToHtml(string markdown, TextWriter writer, MarkdownPipeline pipeline = null)
{
if (markdown == null) throw new ArgumentNullException(nameof(markdown));
if (writer == null) throw new ArgumentNullException(nameof(writer));
@@ -49,6 +50,8 @@ namespace Markdig
var document = Parse(markdown, pipeline);
renderer.Render(document);
writer.Flush();
return document;
}
/// <summary>

View File

@@ -47,7 +47,11 @@ namespace Markdig
internal ProcessDocumentDelegate DocumentProcessed;
internal void Setup(IMarkdownRenderer renderer)
/// <summary>
/// Allows to setup a <see cref="IMarkdownRenderer"/>.
/// </summary>
/// <param name="renderer">The markdown renderer to setup</param>
public void Setup(IMarkdownRenderer renderer)
{
if (renderer == null) throw new ArgumentNullException(nameof(renderer));
foreach (var extension in Extensions)

View File

@@ -25,6 +25,6 @@ namespace Markdig
{
public static partial class Markdown
{
public const string Version = "0.5.5";
public const string Version = "0.5.6";
}
}

View File

@@ -1,6 +1,6 @@
{
"title": "Markdig",
"version": "0.5.5",
"version": "0.5.6",
"authors": [ "Alexandre Mutel" ],
"description": "A fast, powerfull, CommonMark compliant, extensible Markdown processor for .NET",
"copyright": "Alexandre Mutel",
@@ -11,7 +11,7 @@
"projectUrl": "https://github.com/lunet-io/markdig",
"iconUrl": "https://raw.githubusercontent.com/lunet-io/markdig/master/img/markdig.png",
"requireLicenseAcceptance": false,
"releaseNotes": "> 0.5.5\n- Add same github class for task lists\n- Add pragma lines extension\n> 0.5.4:\nFix bug in HTML block parsing which could break parsing of remaining document",
"releaseNotes": ">0.5.6\n- Improve pragma line output\n- Make MarkdownPipeline.Setup(renderer) public.\n> 0.5.5\n- Add same github class for task lists\n- Add pragma lines extension\n> 0.5.4:\nFix bug in HTML block parsing which could break parsing of remaining document",
"tags": [ "Markdown CommonMark md html md2html" ]
},
"configurations": {