about summary refs log tree commit diff
path: root/preproc.lua
diff options
context:
space:
mode:
Diffstat (limited to 'preproc.lua')
-rw-r--r--preproc.lua40
1 files changed, 40 insertions, 0 deletions
diff --git a/preproc.lua b/preproc.lua
new file mode 100644
index 0000000..6bfa8c5
--- /dev/null
+++ b/preproc.lua
@@ -0,0 +1,40 @@
+---@diagnostic disable: undefined-global
+-- see https://pandoc.org/lua-filters.html
+return {
+    Pandoc = function(doc)
+        local front = {}
+
+        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.Link("back to top", "#top"))
+            -- 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,
+}