62 lines
1.4 KiB
Lua
62 lines
1.4 KiB
Lua
--[[
|
|
Remove all subtrees whose headlines contain class `noexport`.
|
|
|
|
License: MIT
|
|
Copyright: © Albert Krewinkel
|
|
]]
|
|
|
|
-- pandoc.utils.make_sections exists since pandoc 2.8
|
|
PANDOC_VERSION:must_be_at_least {2,8}
|
|
|
|
local utils = require 'pandoc.utils'
|
|
|
|
-- Returns true iff a div is a section div.
|
|
local function is_section_div (div)
|
|
return div.t == 'Div'
|
|
and div.classes[1] == 'section'
|
|
and div.attributes.number
|
|
end
|
|
|
|
-- Returns the header element of a section, or nil if the argument is not a
|
|
-- section.
|
|
local function section_header (div)
|
|
if not div.t == 'Div' then return nil end
|
|
local header = div.content and div.content[1]
|
|
local is_header = is_section_div(div)
|
|
and header
|
|
and header.t == 'Header'
|
|
return is_header and header or nil
|
|
end
|
|
|
|
--- Remove remaining section divs
|
|
local function flatten_sections (div)
|
|
local header = section_header(div)
|
|
if not header then
|
|
return nil
|
|
else
|
|
header.identifier = div.identifier
|
|
div.content[1] = header
|
|
return div.content
|
|
end
|
|
end
|
|
|
|
function drop_noexport_sections (div)
|
|
if div.classes:includes('noexport') then
|
|
return {}
|
|
end
|
|
end
|
|
|
|
--- Setup the document for further processing by wrapping all
|
|
--- sections in Div elements.
|
|
function setup_document (doc)
|
|
local sections = utils.make_sections(false, nil, doc.blocks)
|
|
return pandoc.Pandoc(sections, doc.meta)
|
|
end
|
|
|
|
return {
|
|
{Pandoc = setup_document},
|
|
{Div = drop_noexport_sections},
|
|
{Div = flatten_sections}
|
|
}
|
|
|