48 lines
1.8 KiB
Lua
48 lines
1.8 KiB
Lua
-- Remove junk module.args section of the nix documentation
|
|
|
|
-- This function checks if a string starts with a given start string
|
|
function starts_with(str, start)
|
|
return str:sub(1, #start) == start
|
|
end
|
|
|
|
-- This recursive function traverses the AST and removes sections based on the header condition
|
|
function remove_sections(elements, condition)
|
|
local result = {}
|
|
local skip_level = nil -- Define skip_level outside the loop, initialized to nil
|
|
|
|
for _, el in ipairs(elements) do
|
|
if el.t == "Header" then
|
|
-- Check if we are currently skipping sections and this header is of equal or higher level
|
|
if skip_level and el.level <= skip_level then
|
|
skip_level = nil -- Stop skipping sections
|
|
end
|
|
|
|
-- If skip_level is nil, check if this header starts a new section to skip
|
|
if not skip_level and condition(el) then
|
|
skip_level = el.level -- Start skipping sections
|
|
else
|
|
table.insert(result, el) -- Add the header to results if not skipping
|
|
end
|
|
elseif not skip_level then
|
|
table.insert(result, el) -- Add non-header elements if not skipping
|
|
end
|
|
end
|
|
|
|
return result
|
|
end
|
|
|
|
-- The Pandoc filter function to apply our custom logic
|
|
function Pandoc(doc)
|
|
-- Define the condition function to be used for identifying sections to remove
|
|
local condition = function(header)
|
|
-- Assuming the header's actual text is in the 'content' array and in the first element
|
|
local header_text = pandoc.utils.stringify(header.content)
|
|
return starts_with(header_text, "_module.args")
|
|
end
|
|
|
|
-- Apply the removal function to the document blocks
|
|
doc.blocks = remove_sections(doc.blocks, condition)
|
|
|
|
return doc
|
|
end
|