summaryrefslogtreecommitdiffstats
path: root/article-dates.lua
blob: df4e2a04e94365c3ea847ebc3a44ae05c6286c40 (plain)
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
local function parse_inlines(text)
  return pandoc.read(text, "markdown").blocks[1].content
end

function Pandoc(doc)
  local articles = pandoc.List()
  local blocks = pandoc.Blocks({})

  for _, block in ipairs(doc.blocks) do
    if block.t == "Header" and block.level == 1 then
      local date = block.attributes["data-date"]
      if not date or date == "" then
        error("article is missing data-date: " .. pandoc.utils.stringify(block.content))
      end

      block.attributes["data-date"] = nil

      local label = pandoc.Inlines(block.content)
      label:insert(pandoc.Span(parse_inlines(date), {class = "article-date"}))
      articles:insert({pandoc.Plain({pandoc.Link(label, block.identifier .. ".html")})})

      blocks:insert(block)
      blocks:insert(pandoc.Para(parse_inlines(date)))
    else
      blocks:insert(block)
    end
  end

  doc.blocks = blocks
  doc.meta["article-list"] = pandoc.MetaBlocks({pandoc.BulletList(articles)})
  return doc
end