diff options
Diffstat (limited to 'src/preproc.lua')
| -rw-r--r-- | src/preproc.lua | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/preproc.lua b/src/preproc.lua new file mode 100644 index 0000000..76f0678 --- /dev/null +++ b/src/preproc.lua @@ -0,0 +1,60 @@ +---@diagnostic disable: undefined-global +-- see https://pandoc.org/lua-filters.html +return { + Link = function(link) + -- set target="_blank" for outgoing links (open them in new tab) + if string.match(link.target, "gzr.im") == nil then + table.insert(link.attributes, { "target", "_blank" }) + end + return link + end, + Pandoc = function(doc) + local front = {} + + -- add a comment + table.insert( + front, + pandoc.RawBlock( + "html5", + "<!-- Generated file, you may edit and discard " + .. pandoc.path.filename(PANDOC_STATE.input_files[1]) + .. " :) -->" + ) + ) + + local toc = pandoc.structure.table_of_contents(doc) + if doc.meta.toc and toc then + table.insert(front, pandoc.RawBlock("html5", '<nav class="table-of-contents capital">')) + table.insert(front, pandoc.RawBlock("html5", "<ol>")) + -- insert jump to top + table.insert(front, pandoc.RawBlock("html5", "<li>")) + table.insert(front, pandoc.Link("back to top", "#top")) + table.insert(front, pandoc.RawBlock("html5", "</li>")) + -- create custom toc + toc:walk({ + Link = function(e) + table.insert(front, pandoc.RawBlock("html5", "<li>")) + table.insert(front, e) + table.insert(front, pandoc.RawBlock("html5", "</li>")) + end, + }) + table.insert(front, pandoc.RawBlock("html5", "</ol>")) + table.insert(front, pandoc.RawBlock("html5", "</nav>")) + end + + -- insert date blocks + if doc.meta.date then + table.insert(front, pandoc.RawBlock("html5", '<span class="date">')) + table.insert(front, doc.meta.date) + table.insert(front, pandoc.RawBlock("html5", "</span>")) + end + + -- prepend front stuffs + for i = #front, 1, -1 do + table.insert(doc.blocks, 1, front[i]) + end + + -- return finished ast + return doc + end, +} |