From 255cdafe489a4a036a3d568314e3ad3598741fe9 Mon Sep 17 00:00:00 2001 From: Steven Flanders Date: Sat, 4 May 2019 21:41:10 -0400 Subject: [PATCH] I have changed the ApplySyntaxHighlighting so that Markdig no longer innapropriately does not apply a
 blog to names not known to the
 ColorCode project.  I also made it optional so users can opt out of not
 getting the expected results of a ``` block rendering in a 
 tag"

---
 .../SyntaxHighlightingCodeBlockRenderer.cs    | 48 ++++++++++++++++++-
 1 file changed, 46 insertions(+), 2 deletions(-)

diff --git a/src/Markdig.SyntaxHighlighting/SyntaxHighlightingCodeBlockRenderer.cs b/src/Markdig.SyntaxHighlighting/SyntaxHighlightingCodeBlockRenderer.cs
index f82b3a2..7da2fb0 100644
--- a/src/Markdig.SyntaxHighlighting/SyntaxHighlightingCodeBlockRenderer.cs
+++ b/src/Markdig.SyntaxHighlighting/SyntaxHighlightingCodeBlockRenderer.cs
@@ -52,11 +52,20 @@ protected override void Write(HtmlRenderer renderer, CodeBlock obj) {
         }
 
         private string ApplySyntaxHighlighting(string languageMoniker, string firstLine, string code) {
+            return ApplySyntaxHighlighting(languageMoniker, firstLine, code, true);
+        }
+
+        private string ApplySyntaxHighlighting(string languageMoniker, string firstLine, string code, bool useDefault)
+        {
             var languageTypeAdapter = new LanguageTypeAdapter();
             var language = languageTypeAdapter.Parse(languageMoniker, firstLine);
 
-            if (language == null) { //handle unrecognised language formats, e.g. when using mermaid diagrams
-                return code;
+            if (language == null)
+            { //handle unrecognised language formats, e.g. when using mermaid diagrams
+                if (useDefault)
+                    language = FakeIt();
+                else
+                    return code;
             }
 
             var codeBuilder = new StringBuilder();
@@ -67,6 +76,41 @@ private string ApplySyntaxHighlighting(string languageMoniker, string firstLine,
             return codeBuilder.ToString();
         }
 
+        private ColorCode.ILanguage FakeIt()
+        {
+            return new fakeLan();
+        }
+
+        class fakeLan : ColorCode.ILanguage
+        {
+            public string Id => "default";
+            public string FirstLinePattern => "^.*$";
+            public string Name => "default";
+            public IList Rules
+            {
+                get
+                {
+                    return new List {
+                        new LanguageRule(".?", new Dictionary{ {0,null } })
+                    };
+                }
+            }
+            public string CssClassName => "default";
+            public bool HasAlias(string lang)
+            {
+                switch (lang.ToLower())
+                {
+                    case "text":
+                    case "txt":
+                    case "csv":
+                        return true;
+
+                    default:
+                        return false;
+                }
+            }
+        }
+
         private static string GetCode(LeafBlock obj, out string firstLine) {
             var code = new StringBuilder();
             firstLine = null;