From 9559147c091551c389a42fc4c2d2efbc9057e784 Mon Sep 17 00:00:00 2001 From: Simon Krajnik Date: Fri, 4 Feb 2022 10:45:41 +0100 Subject: [PATCH 1/2] support for mermaid containers --- README.md | 13 +++++++++++++ extension.js | 42 ++++++++++++++++++++++++++++++++++++++++++ test/suite/mermaid.md | 9 +++++++++ 3 files changed, 64 insertions(+) diff --git a/README.md b/README.md index 1fc5fc2..f23e882 100644 --- a/README.md +++ b/README.md @@ -113,6 +113,19 @@ stateDiagram ``` +or + +
+::: mermaid
+stateDiagram
+    [*] --> First
+    state First {
+        [*] --> second
+        second --> [*]
+    }
+:::
+
+ OUTPUT ![mermaid](images/mermaid.png) diff --git a/extension.js b/extension.js index 23978ef..45578ec 100644 --- a/extension.js +++ b/extension.js @@ -253,6 +253,48 @@ function convertMarkdownToHtml(filename, type, text) { // markdown-it-container // https://github.com/markdown-it/markdown-it-container + + const pluginKeyword = 'mermaid'; + const tokenTypeInline = 'inline'; + const ttContainerOpen = 'container_' + pluginKeyword + '_open'; + const ttContainerClose = 'container_' + pluginKeyword + '_close'; + const empty = []; + + md.use(require('markdown-it-container'), pluginKeyword, { + validate: (info) => { + return info.trim() === pluginKeyword; + }, + + render: (tokens, idx) => { + var token = tokens[idx]; + + var src = ''; + if (token.type === ttContainerOpen) { + for (var i = idx + 1; i < tokens.length; i++) { + var value = tokens[i] + if (value === undefined || value.type === ttContainerClose) { + break; + } + src += value.content; + if (value.block && value.nesting <= 0) { + src += '\n'; + } + // Clear these out so markdown-it doesn't try to render them + value.tag = ''; + value.type = tokenTypeInline; + value.content = ''; + value.children = empty; + } + } + + if (token.nesting === 1) { + return `
${md.utils.escapeHtml(src)}`; + } else { + return '
\n'; + } + } + }); + md.use(require('markdown-it-container'), '', { validate: function (name) { return name.trim().length; diff --git a/test/suite/mermaid.md b/test/suite/mermaid.md index 04924dd..f9cd935 100644 --- a/test/suite/mermaid.md +++ b/test/suite/mermaid.md @@ -8,3 +8,12 @@ graph TD C -->|Two| E[iPhone] C -->|Three| F[Car] ``` + +::: mermaid +graph TD + A[Christmas] -->|Get money| B(Go shopping) + B --> C{Let me think} + C -->|One| D[Laptop] + C -->|Two| E[iPhone] + C -->|Three| F[Car] +::: From 3337ab72c8fbf43d55b63412c03bbd8e10993752 Mon Sep 17 00:00:00 2001 From: Simon Krajnik Date: Fri, 4 Feb 2022 10:46:39 +0100 Subject: [PATCH 2/2] updated mermaid.png --- images/mermaid.png | Bin 6911 -> 6955 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/mermaid.png b/images/mermaid.png index c9f1cd8e711c5e38d2bb0597aefd8729b16890e1..f07441982bea1efaeaa1257825d528141d6d2539 100644 GIT binary patch literal 6955 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 Iz5nb#0K9lTI{*Lx