From a24c58bd96a1f2c4b169e541317a45dda0855f9d Mon Sep 17 00:00:00 2001 From: fredck Date: Tue, 25 Feb 2020 17:01:25 +0100 Subject: [PATCH] Fixed multiple ticks/tildes inside code blocks. --- src/commonmark-rules.js | 20 +++++++++++++++--- test/index.html | 45 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 3 deletions(-) diff --git a/src/commonmark-rules.js b/src/commonmark-rules.js index f009aca8..2e73f05d 100644 --- a/src/commonmark-rules.js +++ b/src/commonmark-rules.js @@ -111,11 +111,25 @@ rules.fencedCodeBlock = { replacement: function (content, node, options) { var className = node.firstChild.className || '' var language = (className.match(/language-(\S+)/) || [null, ''])[1] + var code = node.firstChild.textContent + + var fenceChar = options.fence === '~~~' ? '~' : '`' + var fenceSize = 3 + var fenceInCodeRegex = new RegExp('^' + fenceChar + '{3,}', 'gm') + + var match + while ((match = fenceInCodeRegex.exec(code))) { + if (match[ 0 ].length >= fenceSize) { + fenceSize = match[ 0 ].length + 1 + } + } + + var fence = fenceChar.repeat(fenceSize) return ( - '\n\n' + options.fence + language + '\n' + - node.firstChild.textContent + - '\n' + options.fence + '\n\n' + '\n\n' + fence + language + '\n' + + code.replace(/^\n|\n$/g, '') + + '\n' + fence + '\n\n' ) } } diff --git a/test/index.html b/test/index.html index b4d6215e..6f60ecb3 100644 --- a/test/index.html +++ b/test/index.html @@ -902,6 +902,51 @@

This is a header.

Foo Bar
+
+
+

+~~~
+Code
+~~~
+
+
+
~~~~
+~~~
+Code
+~~~
+~~~~
+
+ +
+
+

+```
+Code
+```
+
+
+
````
+```
+Code
+```
+````
+
+ +
+
+

+````
+Code
+````
+
+
+
`````
+````
+Code
+````
+`````
+
+