-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnoexport-subtrees.lua
63 lines (52 loc) · 1.49 KB
/
noexport-subtrees.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
--[[
Remove all subtrees whose headlines contain class `noexport`.
License: MIT
Copyright: © Albert Krewinkel
From https://gist.github.com/tarleb/a0f41adfa7b0e5a9be441e945f843299
]]
-- 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}
}