@@ -14,15 +14,21 @@ endfunction
14
14
15
15
if get (g: , ' vim_markdown_folding_style_pythonic' , 0 )
16
16
function ! Foldexpr_markdown (lnum)
17
+ if (a: lnum == 1 )
18
+ let b: fence_str = ' '
19
+ endif
20
+
17
21
let l1 = getline (a: lnum )
18
22
" ~~~~~ keep track of fenced code blocks ~~~~~
19
23
" If we hit a code block fence
20
- if l1 = ~# ' ````* ' || l1 = ~# ' \~\~\~\~* '
24
+ if l1 = ~# ' \v^[[:space:]>]*\v(`{3,}|\~{3,})\s*(\w+)?\s*$ '
21
25
" toggle the variable that says if we're in a code block
22
26
if b: fenced_block == 0
23
27
let b: fenced_block = 1
24
- elseif b: fenced_block == 1
28
+ let b: fence_str = matchstr (l1, ' \v(`{3,}|\~{3,})' )
29
+ elseif b: fenced_block == 1 && matchstr (l1, ' \v(`{3,}|\~{3,})' ) == # b: fence_str
25
30
let b: fenced_block = 0
31
+ let b: fence_str = ' '
26
32
endif
27
33
" else, if we're caring about front matter
28
34
elseif get (g: , ' vim_markdown_frontmatter' , 0 ) == 1
@@ -100,16 +106,19 @@ else " vim_markdown_folding_style_pythonic == 0
100
106
function ! Foldexpr_markdown (lnum)
101
107
if (a: lnum == 1 )
102
108
let l0 = ' '
109
+ let b: fence_str = ' '
103
110
else
104
111
let l0 = getline (a: lnum- 1 )
105
112
endif
106
113
107
114
" keep track of fenced code blocks
108
- if l0 = ~# ' ````* ' || l0 = ~# ' \~\~\~\~* '
115
+ if l0 = ~# ' \v^[[:space:]>]*\v(`{3,}|\~{3,})\s*(\w+)?\s*$ '
109
116
if b: fenced_block == 0
110
117
let b: fenced_block = 1
111
- elseif b: fenced_block == 1
118
+ let b: fence_str = matchstr (l0, ' \v(`{3,}|\~{3,})' )
119
+ elseif b: fenced_block == 1 && matchstr (l0, ' \v(`{3,}|\~{3,})' ) == # b: fence_str
112
120
let b: fenced_block = 0
121
+ let b: fence_str = ' '
113
122
endif
114
123
elseif get (g: , ' vim_markdown_frontmatter' , 0 ) == 1
115
124
if b: front_matter == 1
0 commit comments