patch 9.1.1537: helptoc: still some issues when markdown code blocks

Problem:  helptoc: still some issues when parsing markdown code blocks
          (VimWei)
Solution: assign nextline to curline before starting the next loop
          iteration; when processing fenced code blocks, flip the
          skip_fence variable, update the test to be more comprehensive

related: https://github.com/vim/vim/issues/17699#issuecomment-3055603968
closes: #17716

Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Christian Brabandt
2025-07-10 20:44:51 +02:00
parent 48d7f5b5a3
commit ea528a9482
4 changed files with 29 additions and 17 deletions

View File

@ -3,7 +3,7 @@ vim9script noclear
# the Vim HelpTOC plugin, creates a table of contents in a popup # the Vim HelpTOC plugin, creates a table of contents in a popup
# Maintainer: Vim project # Maintainer: Vim project
# Original Author: @lacygoill # Original Author: @lacygoill
# Latest Change: 2025 Jul 09 # Latest Change: 2025 Jul 10
# #
# Config {{{1 # Config {{{1
# g:helptoc {{{2 # g:helptoc {{{2
@ -523,12 +523,14 @@ def SetToc() #{{{2
# Special handling for markdown filetype using setext headings # Special handling for markdown filetype using setext headings
if g:helptoc.type == 'markdown' if g:helptoc.type == 'markdown'
# ignore fenced codeblock lines
if curline =~ '^```.' if curline =~ '^```.'
skip_fence = true skip_fence = true
elseif curline =~ '^```$' elseif curline =~ '^```$'
skip_fence = false skip_fence = !skip_fence
endif endif
if skip_fence if skip_fence
curline = nextline
continue continue
endif endif
# Check for setext formatted headings (= or - underlined) # Check for setext formatted headings (= or - underlined)

View File

@ -1,20 +1,20 @@
|#+0#e000e06#ffffff0| |M|y| |D|o|c|u|m|e|n|t| +0#0000000&@27|┌| |1|/|1| |(|1|/|1|)| @2|p|r|e|s@1| |?| |f|o|r| |h|e|l|p| |─@1|┐ |#+0#e000e06#ffffff0| |H|e|a|d|i|n|g| |1| +0#0000000&@29|┌| |3|/|3| |(|1|/|1|)| @2|p|r|e|s@1| |?| |f|o|r| |h|e|l|p| |─@1|┐
| @40|│| |M+0#0000001#e0e0e08|y| |D|o|c|u|m|e|n|t| @18| +0#0000000#ffffff0|│ | @40|│| |H|e|a|d|i|n|g| |1| @21|│
|S|o|m|e| |t|e|x|t|.| @30|│| | +0#4040ff13&@29| +0#0000000&|│ |S|o|m|e| |t|e|x|t|.| @30|│| |A|n|o|t|h|e|r| |H|e|a|d|i|n|g| |1| @13|│
| @40|│| | +0#4040ff13&@29| +0#0000000&|│ | @40|│| |L+0#0000001#e0e0e08|a|s|t| |H|e|a|d|i|n|g| |1| @15| +0#0000000#ffffff0|│
|`+0#e000e06&@2|v|i|m| +0#0000000&@34|│| | +0#4040ff13&@29| +0#0000000&|│ |`+0#e000e06&@2|v|i|m| +0#0000000&@34|│| | +0#4040ff13&@29| +0#0000000&|│
|#| |T|h|i|s| |i|s| |a| |V|i|m|9|S|c|r|i|p|t| |c|o|m@1|e|n|t| @10|│| | +0#4040ff13&@29| +0#0000000&|│ |#| |T|h|i|s| |i|s| |a| |V|i|m|9|S|c|r|i|p|t| |c|o|m@1|e|n|t| @10|│| | +0#4040ff13&@29| +0#0000000&|│
|d|e|f| |M|y|F|u|n|c|(|)| @28|│| | +0#4040ff13&@29| +0#0000000&|│ |d|e|f| |M|y|F|u|n|c|(|)| @28|│| | +0#4040ff13&@29| +0#0000000&|│
| @1|#| |A|n|o|t|h|e|r| |c|o|m@1|e|n|t| @21|│| | +0#4040ff13&@29| +0#0000000&|│ | @1|#| |A|n|o|t|h|e|r| |c|o|m@1|e|n|t| @21|│| | +0#4040ff13&@29| +0#0000000&|│
|e|n|d@1|e|f| @34|│| | +0#4040ff13&@29| +0#0000000&|│ |e|n|d@1|e|f| @34|│| | +0#4040ff13&@29| +0#0000000&|│
|`+0#e000e06&@2| +0#0000000&@37|│| | +0#4040ff13&@29| +0#0000000&|│ |`+0#e000e06&@2| +0#0000000&@37|│| | +0#4040ff13&@29| +0#0000000&|│
|#+0#e000e06&| |A|n|o|t|h|e|r| |H|e|a|d|i|n|g| |1| +0#0000000&@21|│| | +0#4040ff13&@29| +0#0000000&|│
| @40|│| | +0#4040ff13&@29| +0#0000000&|│
|`+0#e000e06&@2| +0#0000000&@37|│| | +0#4040ff13&@29| +0#0000000&|│
|#| |T|h|i|s| |i|s| |a| |c|o|m@1|e|n|t| |i|n| |a| |c|o|d|e|b|l|o|c|k| @6|│| | +0#4040ff13&@29| +0#0000000&|│
|`+0#e000e06&@2| +0#0000000&@37|│| | +0#4040ff13&@29| +0#0000000&|│
|#+0#e000e06&| |L|a|s|t| |H|e|a|d|i|n|g| |1| +0#0000000&@24|│| | +0#4040ff13&@29| +0#0000000&|│
|a|n|d| |m|o|r|e| |t|e|x|t| @27|│| | +0#4040ff13&@29| +0#0000000&|│
> @40|│| | +0#4040ff13&@29| +0#0000000&|│ > @40|│| | +0#4040ff13&@29| +0#0000000&|│
|~+0#4040ff13&| @39|│+0#0000000&| | +0#4040ff13&@29| +0#0000000&|│
|~+0#4040ff13&| @39|│+0#0000000&| | +0#4040ff13&@29| +0#0000000&|│
|~+0#4040ff13&| @39|│+0#0000000&| | +0#4040ff13&@29| +0#0000000&|│
|~+0#4040ff13&| @39|│+0#0000000&| | +0#4040ff13&@29| +0#0000000&|│
|~+0#4040ff13&| @39|│+0#0000000&| | +0#4040ff13&@29| +0#0000000&|│
|~+0#4040ff13&| @39|│+0#0000000&| | +0#4040ff13&@29| +0#0000000&|│
|~+0#4040ff13&| @39|│+0#0000000&| | +0#4040ff13&@29| +0#0000000&|│
|~+0#4040ff13&| @39|└+0#0000000&|─@31|┘ |~+0#4040ff13&| @39|└+0#0000000&|─@31|┘
|:|H|e|l|p|T|o|c| @48|1@1|,|0|-|1| @7|A|l@1| |:|H|e|l|p|T|o|c| @48|1|8|,|0|-|1| @7|A|l@1|

View File

@ -8,15 +8,23 @@ func Test_helptoc_markdown_with_comments()
packadd helptoc packadd helptoc
e Xmarkdown.md e Xmarkdown.md
call append(0, [ call append(0, [
\ '# My Document', \ '# Heading 1',
\ '', 'Some text.', \ '',
\ 'Some text.',
\ '', \ '',
\ '```vim', \ '```vim',
\ '# This is a Vim9Script comment', \ '# This is a Vim9Script comment',
\ 'def MyFunc()', \ 'def MyFunc()',
\ ' # Another comment', \ ' # Another comment',
\ 'enddef', \ 'enddef',
\ '```' \ '```',
\ '# Another Heading 1',
\ '',
\ '```',
\ '# This is a comment in a codeblock',
\ '```',
\ '# Last Heading 1',
\ 'and more text'
\]) \])
END END

View File

@ -719,6 +719,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1537,
/**/ /**/
1536, 1536,
/**/ /**/