Skip to content

Latest commit

 

History

History
126 lines (89 loc) · 4.4 KB

File metadata and controls

126 lines (89 loc) · 4.4 KB

OfficeIMO.MarkdownRenderer - WebView-friendly Markdown rendering

nuget version nuget downloads

OfficeIMO.MarkdownRenderer is the host-oriented rendering package for OfficeIMO.Markdown. It builds full HTML shells, renders body fragments, parses renderer-owned Markdown documents, and produces update scripts for WebView2 and browser-based document/chat surfaces.

Install

dotnet add package OfficeIMO.MarkdownRenderer

For the first-party IntelligenceX preset pack:

dotnet add package OfficeIMO.MarkdownRenderer.IntelligenceX

Quick start

using OfficeIMO.MarkdownRenderer;

var options = MarkdownRendererPresets.CreateStrict();

string shellHtml = MarkdownRenderer.BuildShellHtml("Markdown", options);
string bodyHtml = MarkdownRenderer.RenderBodyHtml("""
# Hello

This is rendered through OfficeIMO.MarkdownRenderer.
""", options);

WebView update flow

using OfficeIMO.MarkdownRenderer;

var options = MarkdownRendererPresets.CreateStrict();

webView.NavigateToString(MarkdownRenderer.BuildShellHtml("Markdown", options));
await webView.ExecuteScriptAsync(MarkdownRenderer.RenderUpdateScript(markdownText, options));

Examples

Parse with renderer preprocessing and diagnostics

using OfficeIMO.Markdown;
using OfficeIMO.MarkdownRenderer;

var options = MarkdownRendererPresets.CreateRelaxed();
MarkdownRendererParseResult result = MarkdownRenderer.ParseDocumentResult(markdownText, options);

foreach (var diagnostic in result.PreProcessorDiagnostics) {
    Console.WriteLine($"{diagnostic.Stage}: {diagnostic.ProcessorName} changed={diagnostic.Changed}");
}

MarkdownDoc document = result.Document;
foreach (var heading in document.GetHeadingInfos()) {
    Console.WriteLine($"{heading.Text} -> {heading.Anchor}");
}

Render bounded HTML for a host-owned shell

using OfficeIMO.Markdown;
using OfficeIMO.MarkdownRenderer;

var options = MarkdownRendererPresets.CreateStrict();
options.MaxBodyHtmlBytes = 512 * 1024;
options.BodyHtmlOverflowHandling = OverflowHandling.RenderError;

string bodyHtml = MarkdownRenderer.RenderBodyHtml(markdownText, options);

Enable visual fences in a shell

using OfficeIMO.Markdown;
using OfficeIMO.MarkdownRenderer;

var options = MarkdownRendererPresets.CreateStrict();
options.Mermaid.Enabled = true;
options.HtmlOptions.Prism ??= new PrismOptions();
options.HtmlOptions.Prism.Enabled = true;
options.EnableCodeCopyButtons = true;
options.EnableTableCopyButtons = true;

string shellHtml = MarkdownRenderer.BuildShellHtml("Investigation", options);
string updateScript = MarkdownRenderer.RenderUpdateScript(markdownText, options);

What it does

  • Builds a complete HTML shell for Markdown surfaces.
  • Renders HTML body fragments for hosts that own their own shell.
  • Produces incremental update scripts and streaming-friendly body output.
  • Exposes strict, portable, minimal, relaxed, and transcript-oriented presets.
  • Supports AST document transforms, pre-parse normalization, HTML post-processing, and plug-in/feature-pack registration.
  • Keeps optional client-side features such as Mermaid, charts, math, Prism, and copy buttons in shell assets rather than managed runtime dependencies.

Boundaries

  • OfficeIMO.MarkdownRenderer hosts and renders Markdown output.
  • The Markdown model and parser belong in OfficeIMO.Markdown.
  • WPF/WebView2 control integration belongs in OfficeIMO.MarkdownRenderer.Wpf.
  • IntelligenceX-specific presets and aliases belong in OfficeIMO.MarkdownRenderer.IntelligenceX.
  • PDF output belongs in OfficeIMO.Markdown.Pdf.

Related packages

Targets and license