File tree 2 files changed +73
-3
lines changed
2 files changed +73
-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 . 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 )
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 $ / , '' ) +
132
+ '\n' + fence + '\n\n'
119
133
)
120
134
}
121
135
}
Original file line number Diff line number Diff line change @@ -902,6 +902,62 @@ <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
+ 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
+
905
961
<!-- /TEST CASES -->
906
962
907
963
< script src ="turndown-test.browser.js "> </ script >
You can’t perform that action at this time.
0 commit comments