From 48dc84641206fae07224cf13df233decdcb94e4f Mon Sep 17 00:00:00 2001
From: jakraft <52800741+jakraft@users.noreply.github.com>
Date: Sun, 16 Jan 2022 22:33:02 -0500
Subject: [PATCH] Optionally enable Markdig extensions that are not included by
default in DocFX (#7833)
---
.../Constants.cs | 18 ++++++++
.../MarkdownExtensions.cs | 22 +++++++++
.../MarkdigMarkdownService.cs | 10 +++-
.../GeneralTest.cs | 46 ++++++++++++++++++-
.../TestUtility.cs | 7 ++-
5 files changed, 98 insertions(+), 5 deletions(-)
diff --git a/src/Microsoft.DocAsCode.MarkdigEngine.Extensions/Constants.cs b/src/Microsoft.DocAsCode.MarkdigEngine.Extensions/Constants.cs
index e85c1eebaaf..b3f194788c6 100644
--- a/src/Microsoft.DocAsCode.MarkdigEngine.Extensions/Constants.cs
+++ b/src/Microsoft.DocAsCode.MarkdigEngine.Extensions/Constants.cs
@@ -11,5 +11,23 @@ public static class WarningCodes
{
public const string InvalidTabGroup = "InvalidTabGroup";
}
+
+ ///
+ /// Names of properties supported in the markdownEngineProperties
+ /// property in the docfx.json
+ ///
+ public static class EngineProperties
+ {
+ ///
+ /// Enables the .
+ ///
+ public const string EnableSourceInfo = "EnableSourceInfo";
+
+ ///
+ /// Contains a list of optional Markdig extensions that are not
+ /// enabled by default by DocFX.
+ ///
+ public const string MarkdigExtensions = "markdigExtensions";
+ }
}
}
diff --git a/src/Microsoft.DocAsCode.MarkdigEngine.Extensions/MarkdownExtensions.cs b/src/Microsoft.DocAsCode.MarkdigEngine.Extensions/MarkdownExtensions.cs
index a9e465ba6ea..132167f64a4 100644
--- a/src/Microsoft.DocAsCode.MarkdigEngine.Extensions/MarkdownExtensions.cs
+++ b/src/Microsoft.DocAsCode.MarkdigEngine.Extensions/MarkdownExtensions.cs
@@ -4,6 +4,8 @@
namespace Microsoft.DocAsCode.MarkdigEngine.Extensions
{
using System;
+ using System.Collections.Generic;
+ using System.Linq;
using Markdig;
using Markdig.Extensions.AutoIdentifiers;
using Markdig.Extensions.CustomContainers;
@@ -39,6 +41,26 @@ public static MarkdownPipelineBuilder UseDocfxExtensions(this MarkdownPipelineBu
.RemoveUnusedExtensions();
}
+ ///
+ /// Enables optional Markdig extensions that are not added by default with DocFX
+ ///
+ /// The markdown pipeline builder
+ /// The list of optional extensions
+ /// The pipeline with optional extensions enabled
+ public static MarkdownPipelineBuilder UseOptionalExtensions(
+ this MarkdownPipelineBuilder pipeline,
+ IEnumerable optionalExtensions)
+ {
+ if (!optionalExtensions.Any())
+ {
+ return pipeline;
+ }
+
+ pipeline.Configure(string.Join("+", optionalExtensions));
+
+ return pipeline;
+ }
+
private static MarkdownPipelineBuilder RemoveUnusedExtensions(this MarkdownPipelineBuilder pipeline)
{
pipeline.Extensions.RemoveAll(extension => extension is CustomContainerExtension);
diff --git a/src/Microsoft.DocAsCode.MarkdigEngine/MarkdigMarkdownService.cs b/src/Microsoft.DocAsCode.MarkdigEngine/MarkdigMarkdownService.cs
index 7650917d5d4..1385c43a2c4 100644
--- a/src/Microsoft.DocAsCode.MarkdigEngine/MarkdigMarkdownService.cs
+++ b/src/Microsoft.DocAsCode.MarkdigEngine/MarkdigMarkdownService.cs
@@ -15,6 +15,7 @@ namespace Microsoft.DocAsCode.MarkdigEngine
using Markdig.Syntax;
using Microsoft.DocAsCode.Plugins;
using Microsoft.DocAsCode.Common;
+ using System.Collections.Generic;
public class MarkdigMarkdownService : IMarkdownService
{
@@ -136,7 +137,7 @@ public MarkupResult Render(MarkdownDocument document, bool isInline)
private MarkdownPipeline CreateMarkdownPipeline(bool isInline, bool enableValidation)
{
object enableSourceInfoObj = null;
- _parameters?.Extensions?.TryGetValue("EnableSourceInfo", out enableSourceInfoObj);
+ _parameters?.Extensions?.TryGetValue(Constants.EngineProperties.EnableSourceInfo, out enableSourceInfoObj);
var enableSourceInfo = !(enableSourceInfoObj is bool enabled) || enabled;
@@ -160,6 +161,13 @@ private MarkdownPipeline CreateMarkdownPipeline(bool isInline, bool enableValida
builder.UseInlineOnly();
}
+ object optionalExtensionsObj = null;
+ if ((_parameters?.Extensions?.TryGetValue(Constants.EngineProperties.MarkdigExtensions, out optionalExtensionsObj) ?? false)
+ && optionalExtensionsObj is IEnumerable