File tree 2 files changed +62
-3
lines changed
2 files changed +62
-3
lines changed Original file line number Diff line number Diff line change @@ -111,11 +111,25 @@ rules.fencedCodeBlock = {
111
111
replacement : function ( content , node , options ) {
112
112
var className = node . firstChild . className || ''
113
113
var language = ( className . match ( / l a n g u a g e - ( \S + ) / ) || [ null , '' ] ) [ 1 ]
114
+ var code = node . firstChild . textContent
115
+
116
+ var fenceChar = options . fence === '~~~' ? '~' : '`'
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 = fenceChar . repeat ( fenceSize )
114
128
115
129
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 | \n $ / g , '' ) +
132
+ '\n' + fence + '\n\n'
119
133
)
120
134
}
121
135
}
Original file line number Diff line number Diff line change @@ -902,6 +902,51 @@ <h2>This is a header.</h2>
902
902
< pre class ="expected "> Foo Bar</ pre >
903
903
</ div >
904
904
905
+ < div class ="case " data-name ="triple tildes inside code " data-options ='{"codeBlockStyle": "fenced", "fence": "~~~"} '>
906
+ < div class ="input ">
907
+ < pre > < code >
908
+ ~~~
909
+ Code
910
+ ~~~
911
+ </ code > </ pre >
912
+ </ div >
913
+ < pre class ="expected "> ~~~~
914
+ ~~~
915
+ Code
916
+ ~~~
917
+ ~~~~</ pre >
918
+ </ div >
919
+
920
+ < div class ="case " data-name ="triple ticks inside code " data-options ='{"codeBlockStyle": "fenced", "fence": "```"} '>
921
+ < div class ="input ">
922
+ < pre > < code >
923
+ ```
924
+ Code
925
+ ```
926
+ </ code > </ pre >
927
+ </ div >
928
+ < pre class ="expected "> ````
929
+ ```
930
+ Code
931
+ ```
932
+ ````</ pre >
933
+ </ div >
934
+
935
+ < div class ="case " data-name ="four ticks inside code " data-options ='{"codeBlockStyle": "fenced", "fence": "```"} '>
936
+ < div class ="input ">
937
+ < pre > < code >
938
+ ````
939
+ Code
940
+ ````
941
+ </ code > </ pre >
942
+ </ div >
943
+ < pre class ="expected "> `````
944
+ ````
945
+ Code
946
+ ````
947
+ `````</ pre >
948
+ </ div >
949
+
905
950
<!-- /TEST CASES -->
906
951
907
952
< script src ="turndown-test.browser.js "> </ script >
You can’t perform that action at this time.
0 commit comments