@@ -14,15 +14,21 @@ endfunction
1414
1515if get (g: , ' vim_markdown_folding_style_pythonic' , 0 )
1616 function ! Foldexpr_markdown (lnum)
17+ if (a: lnum == 1 )
18+ let b: fence_str = ' '
19+ endif
20+
1721 let l1 = getline (a: lnum )
1822 " ~~~~~ keep track of fenced code blocks ~~~~~
1923 " If we hit a code block fence
20- if l1 = ~# ' ````* ' || l1 = ~# ' \~\~\~\~* '
24+ if l1 = ~# ' \v^[[:space:]>]*\v(`{3,}|\~{3,})\s*(\w+)?\s*$ '
2125 " toggle the variable that says if we're in a code block
2226 if b: fenced_block == 0
2327 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
2530 let b: fenced_block = 0
31+ let b: fence_str = ' '
2632 endif
2733 " else, if we're caring about front matter
2834 elseif get (g: , ' vim_markdown_frontmatter' , 0 ) == 1
@@ -100,16 +106,19 @@ else " vim_markdown_folding_style_pythonic == 0
100106 function ! Foldexpr_markdown (lnum)
101107 if (a: lnum == 1 )
102108 let l0 = ' '
109+ let b: fence_str = ' '
103110 else
104111 let l0 = getline (a: lnum- 1 )
105112 endif
106113
107114 " keep track of fenced code blocks
108- if l0 = ~# ' ````* ' || l0 = ~# ' \~\~\~\~* '
115+ if l0 = ~# ' \v^[[:space:]>]*\v(`{3,}|\~{3,})\s*(\w+)?\s*$ '
109116 if b: fenced_block == 0
110117 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
112120 let b: fenced_block = 0
121+ let b: fence_str = ' '
113122 endif
114123 elseif get (g: , ' vim_markdown_frontmatter' , 0 ) == 1
115124 if b: front_matter == 1
0 commit comments