diff --git a/scripts/panvimdoc.lua b/scripts/panvimdoc.lua index c0194ef..88dffcd 100644 --- a/scripts/panvimdoc.lua +++ b/scripts/panvimdoc.lua @@ -51,6 +51,14 @@ local function indent(s, fl, ol) return table.concat(ret, "\n") end +-- Vim help code fences must start at column 1; list indentation can also +-- swallow the blank line before the opening fence, so normalize both markers. +local function normalize_list_codeblock_fences(s) + s = s:gsub("\n +(>[^ \n]*)", "\n\n%1") + s = s:gsub("\n +(<)", "\n%1") + return s +end + Writer = pandoc.scaffolding.Writer local function inlines(ils) @@ -323,7 +331,8 @@ end Writer.Block.BulletList = function(items) local buffer = {} items.content:map(function(item) - table.insert(buffer, indent(blocks(item, "\n"), "- ", " ")) + local rendered = indent(blocks(item, "\n"), "- ", " ") + table.insert(buffer, normalize_list_codeblock_fences(rendered)) end) return table.concat(buffer, "\n") .. "\n\n" end diff --git a/tests/fixtures/render/codeblocks_in_nested_lists_1.md b/tests/fixtures/render/codeblocks_in_nested_lists_1.md new file mode 100644 index 0000000..bf3d1d0 --- /dev/null +++ b/tests/fixtures/render/codeblocks_in_nested_lists_1.md @@ -0,0 +1,32 @@ +# test code blocks + +```lua + print('code block at root') + print('code block at root') + print('code block at root') +``` + +- list + + ```lua + print('code block in list') + print('code block in list') + print('code block in list') + ``` + + - sublist + - a + + ```lua + print('a') + print('a') + print('a') + ``` + + - b + + ```lua + print('b') + print('b') + print('b') + ``` diff --git a/tests/fixtures/render/codeblocks_in_nested_lists_1.txt b/tests/fixtures/render/codeblocks_in_nested_lists_1.txt new file mode 100644 index 0000000..f2059ab --- /dev/null +++ b/tests/fixtures/render/codeblocks_in_nested_lists_1.txt @@ -0,0 +1,43 @@ +*test.txt* Test Description + For NVIM v0.8.0 Last change: 2026 April 12 + +============================================================================== +Table of Contents *test-table-of-contents* + +1. test code blocks |test-test-code-blocks| + +============================================================================== +1. test code blocks *test-test-code-blocks* + +>lua + print('code block at root') + print('code block at root') + print('code block at root') +< + +- list + +>lua + print('code block in list') + print('code block in list') + print('code block in list') +< + - sublist + - a + +>lua + print('a') + print('a') + print('a') +< + - b + +>lua + print('b') + print('b') + print('b') +< + +Generated by panvimdoc + +vim:tw=78:ts=8:noet:ft=help:norl: diff --git a/tests/fixtures/render_cases.json b/tests/fixtures/render_cases.json index 3f6e666..efe9764 100644 --- a/tests/fixtures/render_cases.json +++ b/tests/fixtures/render_cases.json @@ -1,4 +1,22 @@ [ + { + "name": "codeblocks_in_nested_lists_1", + "input": "fixtures/render/codeblocks_in_nested_lists_1.md", + "expected": "fixtures/render/codeblocks_in_nested_lists_1.txt", + "options": { + "toc": true, + "dedup_subheadings": false, + "treesitter": true, + "demojify": false, + "description": "Test Description", + "vimversion": "NVIM v0.8.0", + "ignore_rawblocks": true, + "shift_heading_level_by": 0, + "increment_heading_level_by": 0, + "doc_mapping": true, + "doc_mapping_project_name": true + } + }, { "name": "dedupheadings_1", "input": "fixtures/render/dedupheadings_1.md",