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;