patch 9.1.1533: helptoc: does not handle code sections in markdown well

Commit: 
https://github.com/vim/vim/commit/6715b3510e8bf3814a91a39e9c15e772018359e2
Author: Christian Brabandt <c...@256bit.org>
Date:   Wed Jul 9 20:26:07 2025 +0200

    patch 9.1.1533: helptoc: does not handle code sections in markdown well
    
    Problem:  helptoc: does not handle code sections in markdown well
              (VimWei)
    Solution: Skip over fenced code sections (lacygoill), add a test.
    
    fixes: #17699
    closes: #17710
    
    Co-authored-by: lagygoill <lacygo...@lacygoill.me>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/runtime/pack/dist/opt/helptoc/autoload/helptoc.vim 
b/runtime/pack/dist/opt/helptoc/autoload/helptoc.vim
index a22d4bafd..1b3044a1a 100644
--- a/runtime/pack/dist/opt/helptoc/autoload/helptoc.vim
+++ b/runtime/pack/dist/opt/helptoc/autoload/helptoc.vim
@@ -1,4 +1,10 @@
 vim9script noclear
+
+# the Vim HelpTOC plugin, creates a table of contents in a popup
+# Maintainer: Vim project
+# Original Author: @lacygoill
+# Latest Change: 2025 Jul 09
+#
 # Config {{{1
 # g:helptoc {{{2
 # Create the g:helptoc dict (used to specify the shell_prompt and other
@@ -503,6 +509,7 @@ def SetToc() #{{{2
             l[0]->str2nr() - ll[0]->str2nr())
 
     var skip_next: bool = false
+    var skip_fence: bool = false
 
     # Non-help headings processing
     for lnum: number in range(1, line('$'))
@@ -516,6 +523,14 @@ def SetToc() #{{{2
 
         # Special handling for markdown filetype using setext headings
         if g:helptoc.type == 'markdown'
+            if curline =~ '^```.'
+                skip_fence = true
+            elseif curline =~ '^```$'
+                skip_fence = false
+            endif
+            if skip_fence
+                continue
+            endif
             # Check for setext formatted headings (= or - underlined)
             if nextline =~ '^\s\{0,3}=\+$' && curline =~ '\S'
                 # Level 1 heading (one or more =, up to three spaces preceding)
diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak
index 497248754..c0e3e60d3 100644
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -242,6 +242,7 @@ NEW_TESTS = \
        test_perl \
        test_plugin_comment \
        test_plugin_glvs \
+       test_plugin_helptoc \
        test_plugin_man \
        test_plugin_matchparen \
        test_plugin_termdebug \
@@ -513,6 +514,7 @@ NEW_TESTS_RES = \
        test_perl.res \
        test_plugin_comment.res \
        test_plugin_glvs.res \
+       test_plugin_helptoc.res \
        test_plugin_man.res \
        test_plugin_matchparen.res \
        test_plugin_termdebug.res \
diff --git a/src/testdir/dumps/Test_helptoc_markdown_01.dump 
b/src/testdir/dumps/Test_helptoc_markdown_01.dump
new file mode 100644
index 000000000..fc6ad879d
--- /dev/null
+++ b/src/testdir/dumps/Test_helptoc_markdown_01.dump
@@ -0,0 +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|┐
+| @40|│| |M+0#0000001#e0e0e08|y| |D|o|c|u|m|e|n|t| @18| +0#0000000#ffffff0|│
+|S|o|m|e| |t|e|x|t|.| @30|│| | +0#4040ff13&@29| +0#0000000&|│
+| @40|│| | +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&|│
+|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&|│
+|e|n|d@1|e|f| @34|│| | +0#4040ff13&@29| +0#0000000&|│
+|`+0#e000e06&@2| +0#0000000&@37|│| | +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|┘
+|:|H|e|l|p|T|o|c| @48|1@1|,|0|-|1| @7|A|l@1| 
diff --git a/src/testdir/test_plugin_helptoc.vim 
b/src/testdir/test_plugin_helptoc.vim
new file mode 100644
index 000000000..eca0dda93
--- /dev/null
+++ b/src/testdir/test_plugin_helptoc.vim
@@ -0,0 +1,32 @@
+" Test for the HelpTOC package
+
+source util/screendump.vim
+
+func Test_helptoc_markdown_with_comments()
+  CheckScreendump
+  let lines =<< trim END
+    packadd helptoc
+    e Xmarkdown.md
+    call append(0, [
+          \ '# My Document',
+          \ '', 'Some text.',
+          \ '',
+          \ '```vim',
+          \ '# This is a Vim9Script comment',
+          \ 'def MyFunc()',
+          \ '  # Another comment',
+          \ 'enddef',
+          \ '```'
+          \])
+  END
+
+  let input_file = "Xhelptoc.vim"
+  call writefile(lines, input_file, "D")
+
+  let buf = RunVimInTerminal($"-S {input_file}", {})
+  call term_sendkeys(buf, ":HelpToc\<cr>")
+  call WaitFor({-> term_getline(buf, 1) =~ 'press ? for help'})
+  call VerifyScreenDump(buf, 'Test_helptoc_markdown_01', {})
+  call term_sendkeys(buf, ":qa!\<cr>")
+  call StopVimInTerminal(buf)
+endfunc
diff --git a/src/version.c b/src/version.c
index 7bfa74605..560f9cfa8 100644
--- a/src/version.c
+++ b/src/version.c
@@ -719,6 +719,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1533,
 /**/
     1532,
 /**/

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/vim_dev/E1uZZYR-00DAZL-SN%40256bit.org.

Raspunde prin e-mail lui