2016-06-16 06:40:22 +09:00
2016-06-13 22:44:04 +09:00
2016-06-16 06:40:22 +09:00
2016-02-10 00:12:40 +09:00
2016-02-10 00:12:40 +09:00

Markdig Build status NuGet

Markdig is a fast, powerfull, CommonMark compliant, extensible Markdown processor for .NET.

NOTE: The repository is under construction. There will be a dedicated website and proper documentation at some point!

You can try Markdig online and compare it to other implementations on babelmark3

Features

Download

Markdig is available as a NuGet package: NuGet

Usage

The main entry point for the API is the Markdig.Markdown class:

By default, without any options, Markdig is using the plain CommonMark parser:

var result = Markdown.ToHtml("This is a text with some *emphasis*");
Console.WriteLine(result);   // prints: <p>This is a text with some <em>emphasis</em></p>

In order to activate most of all advanced extensions (except Emoji, SoftLine as HarLine and SmartyPants)

// Configure the pipeline with all advanced extensions active
var pipeline = new MarkdownPipelineBuilder().UseAdvancedExtensions().Build();
var result = Markdown.ToHtml("This is a text with some *emphasis*", pipeline);

You can have a look at the MarkdownExtensions that describes all actionable extensions (by modifying the MarkdownPipeline)

License

This software is released under the BSD-Clause 2 license.

Benchmarking

This is an early preview of the benchmarking against various implementations:

  • Markdig: itself
  • CommonMarkCpp: cmark, Reference C implementation of CommonMark, no support for extensions
  • CommonMark.NET: CommonMark implementation for .NET, no support for extensions, port of cmark
  • MarkdownDeep another .NET implementation
  • MarkdownSharp: Open source C# implementation of Markdown processor, as featured on Stack Overflow, regexp based.
  • Moonshine: popular C Markdown processor

Analysis of the results:

  • Markdig is roughly x100 times faster than MarkdownSharp
  • Among the best in CPU, Extremelly competitive and often faster than other implementations (not feature wise equivalent)
  • 15% to 30% less allocations and GC pressure

Performance in x86:

BenchmarkDotNet-Dev=v0.9.6.0+
OS=Microsoft Windows NT 6.2.9200.0
Processor=Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz, ProcessorCount=8
Frequency=3319351 ticks, Resolution=301.2637 ns, Timer=TSC
HostCLR=MS.NET 4.0.30319.42000, Arch=32-bit RELEASE
JitModules=clrjit-v4.6.1080.0

Type=Program  Mode=SingleRun  LaunchCount=2
WarmupCount=2  TargetCount=10

               Method |    Median |    StdDev |  Gen 0 | Gen 1 |  Gen 2 | Bytes Allocated/Op |
--------------------- |---------- |---------- |------- |------ |------- |------------------- |
          TestMarkdig | 5.4332 ms | 0.0809 ms |  96.00 | 36.00 |  84.00 |       1,218,643.59 |
    TestCommonMarkCpp | 4.0150 ms | 0.1208 ms |      - |     - | 180.00 |         454,859.74 |
    TestCommonMarkNet | 4.5448 ms | 0.0323 ms | 193.00 | 12.00 |  84.00 |       1,406,367.27 |
 TestCommonMarkNetNew | 5.4811 ms | 0.0327 ms | 193.00 | 96.00 |  84.00 |       1,738,465.42 |
     TestMarkdownDeep | 7.5881 ms | 0.0554 ms | 205.00 | 96.00 |  84.00 |       1,758,383.79 |
        TestMoonshine | 5.8586 ms | 0.0764 ms |      - |     - | 215.00 |         565,000.72 |

Performance for x64:

BenchmarkDotNet-Dev=v0.9.6.0+
OS=Microsoft Windows NT 6.2.9200.0
Processor=Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz, ProcessorCount=8
Frequency=3319351 ticks, Resolution=301.2637 ns, Timer=TSC
HostCLR=MS.NET 4.0.30319.42000, Arch=64-bit RELEASE [RyuJIT]
JitModules=clrjit-v4.6.1080.0

Type=Program  Mode=SingleRun  LaunchCount=2
WarmupCount=2  TargetCount=10

               Method |    Median |    StdDev |  Gen 0 |  Gen 1 | Gen 2 | Bytes Allocated/Op |
--------------------- |---------- |---------- |------- |------- |------ |------------------- |
          TestMarkdig | 5.5276 ms | 0.0402 ms | 109.00 |  96.00 | 84.00 |       1,537,027.66 |
    TestCommonMarkNet | 4.4661 ms | 0.1190 ms | 157.00 |  96.00 | 84.00 |       1,747,432.06 |
 TestCommonMarkNetNew | 5.3151 ms | 0.0815 ms | 229.00 | 168.00 | 84.00 |       2,323,922.97 |
     TestMarkdownDeep | 7.4076 ms | 0.0617 ms | 318.00 | 186.00 | 84.00 |       2,576,728.69 |

Credits

Thanks to the fantastic work done by John Mac Farlane for the CommonMark specs and all the people involved in making Markdown a better standard!

This project would not have been possible without this huge foundation.

Thanks also to the project BenchmarkDotNet that makes benchmarking so easy to setup!

Some decoding part (e.g HTML EntityHelper.cs) have been re-used from CommonMark.NET

Author

Alexandre MUTEL aka xoofx

Description
No description provided
Readme 8.3 MiB
Latest
2026-02-10 06:11:01 +00:00
Languages
C# 99.9%