Skip to content

Commit 0b5d4d5

Browse files
authoredMar 5, 2020
Merge pull request #302 from fredck/t/domchristie/turndown/300
Fixed multiple ticks/tildes inside code blocks
2 parents cae7098 + e5bd9f8 commit 0b5d4d5

File tree

2 files changed

+73
-3
lines changed

2 files changed

+73
-3
lines changed
 

‎src/commonmark-rules.js

+17-3
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,25 @@ rules.fencedCodeBlock = {
111111
replacement: function (content, node, options) {
112112
var className = node.firstChild.className || ''
113113
var language = (className.match(/language-(\S+)/) || [null, ''])[1]
114+
var code = node.firstChild.textContent
115+
116+
var fenceChar = options.fence.charAt(0)
117+
var fenceSize = 3
118+
var fenceInCodeRegex = new RegExp('^' + fenceChar + '{3,}', 'gm')
119+
120+
var match
121+
while ((match = fenceInCodeRegex.exec(code))) {
122+
if (match[0].length >= fenceSize) {
123+
fenceSize = match[0].length + 1
124+
}
125+
}
126+
127+
var fence = repeat(fenceChar, fenceSize)
114128

115129
return (
116-
'\n\n' + options.fence + language + '\n' +
117-
node.firstChild.textContent +
118-
'\n' + options.fence + '\n\n'
130+
'\n\n' + fence + language + '\n' +
131+
code.replace(/\n$/, '') +
132+
'\n' + fence + '\n\n'
119133
)
120134
}
121135
}

‎test/index.html

+56
Original file line numberDiff line numberDiff line change
@@ -902,6 +902,62 @@ <h2>This is a header.</h2>
902902
<pre class="expected">Foo Bar</pre>
903903
</div>
904904

905+
<div class="case" data-name="triple tildes inside code" data-options='{"codeBlockStyle": "fenced", "fence": "~~~"}'>
906+
<div class="input">
907+
<pre><code>~~~
908+
Code
909+
~~~
910+
</code></pre>
911+
</div>
912+
<pre class="expected">~~~~
913+
~~~
914+
Code
915+
~~~
916+
~~~~</pre>
917+
</div>
918+
919+
<div class="case" data-name="triple ticks inside code" data-options='{"codeBlockStyle": "fenced", "fence": "```"}'>
920+
<div class="input">
921+
<pre><code>```
922+
Code
923+
```
924+
</code></pre>
925+
</div>
926+
<pre class="expected">````
927+
```
928+
Code
929+
```
930+
````</pre>
931+
</div>
932+
933+
<div class="case" data-name="four ticks inside code" data-options='{"codeBlockStyle": "fenced", "fence": "```"}'>
934+
<div class="input">
935+
<pre><code>````
936+
Code
937+
````
938+
</code></pre>
939+
</div>
940+
<pre class="expected">`````
941+
````
942+
Code
943+
````
944+
`````</pre>
945+
</div>
946+
947+
<div class="case" data-name="empty line in start/end of code block" data-options='{"codeBlockStyle": "fenced", "fence": "```"}'>
948+
<div class="input">
949+
<pre><code>
950+
Code
951+
952+
</code></pre>
953+
</div>
954+
<pre class="expected">```
955+
956+
Code
957+
958+
```</pre>
959+
</div>
960+
905961
<!-- /TEST CASES -->
906962

907963
<script src="turndown-test.browser.js"></script>

0 commit comments

Comments
 (0)
Please sign in to comment.