Skip to content

bwets/bwets.Markdig.Extensions

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

bwets.Markdig.Extensions

build NuGet

Modular Markdig extensions for rendering rich Markdown to HTML — admonitions (incl. GitHub/Obsidian callouts), mermaid diagrams, code syntax highlighting, Obsidian wiki links, hidden comments, and inline tags — where each capability is independently activatable and ships its own self-contained CSS/JS assets.

Targets .NET Standard 2.0.

Install

dotnet add package bwets.Markdig.Extensions

Two ways to use it

1. Pipeline extensions (pure Markdig)

Activate the parsers/renderers on a MarkdownPipelineBuilder:

using Markdig;
using bwets.Markdig.Extensions;

var pipeline = new MarkdownPipelineBuilder()
    .UseAdvancedExtensions()
    .UseAdmonitions()        // Docusaurus :::, MkDocs !!!/???, and GitHub/Obsidian > [!note] callouts
    .UseMermaid()            // ```mermaid blocks -> <pre class="mermaid">
    .UseWikiLinks()          // [[Page]], [[Page|alias]], [[Page#Heading]], ![[image.png]]
    .UseObsidianComments()   // hide %%…%% comments
    .UseObsidianTags()       // #tag -> <span class="tag">
    .Build();

var html = Markdown.ToHtml(markdown, pipeline);

Note: these only affect the produced HTML markup. To actually render mermaid diagrams or highlight code you also need the client-side assets — that's what the HTML feature model below provides.

2. HTML features (config + assets in one place)

MarkdownHtmlFeatures bundles each feature's Markdig configuration and the CSS/JS it needs, and composes them into a page. The host decides how assets are delivered.

using Markdig;
using bwets.Markdig.Extensions.Html;

var features = new MarkdownHtmlFeatures()
    .UseSyntaxHighlighting(extendedLanguages: true)  // base ~38 vs extended ~190 + Razor
    .UseMermaid()
    .UseAdmonitions();

var pipeline = new MarkdownPipelineBuilder().UseAdvancedExtensions();
features.Configure(pipeline);                  // wire up parsers/renderers
var html = Markdown.ToHtml(markdown, pipeline.Build());

// Compose the page. Choose how the assets are delivered:
var delivery = MarkdownAssetDelivery.Inline;   // or External
var page =
    "<!doctype html><html><head>" + features.RenderHead(delivery) + "</head><body>" +
    html + features.RenderBodyEnd(delivery) +
    "</body></html>";

Asset delivery

Delivery What it does Good for
Inline Embeds CSS/JS directly into the page (<style> / <script>) Web pages, anywhere a temp file cache isn't available
External Emits <link> / <script src>; you write features.Assets next to the page Desktop/WebView hosts that want small HTML + cached files

When delivering externally, write the files yourself:

foreach (var asset in features.Assets)
    File.WriteAllText(Path.Combine(outputDir, asset.FileName), asset.Content);

Features

Feature Activation Notes
Admonitions UseAdmonitions() Docusaurus :::type[title]…:::, MkDocs !!! type "title" / collapsible ??? type, and GitHub/Obsidian > [!type] title callouts (collapsible > [!type]-)
Mermaid UseMermaid() ​```mermaid → diagrams; bundles the all-in-one mermaid runtime
Syntax highlighting UseSyntaxHighlighting(extendedLanguages) highlight.js; choose the common ~38 languages or the full ~190 + Razor
Wiki links UseWikiLinks() [[Page]], [[Page|alias]], [[Page#Heading]]; image embeds ![[img.png]], note embeds ![[Note]] → links. Emitted as standard links with a wikilink class
Obsidian comments UseObsidianComments() Hides inline %%…%% and %%-fenced comment blocks
Obsidian tags UseObsidianTags() #tag, #nested/tag<span class="tag">; ignores C# and all-numeric #123

See docs/ for details on each feature.

License

MIT

About

Markdig Extensions

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages