aboutsummaryrefslogtreecommitdiff
path: root/assets/manual/filter_man.lua
diff options
context:
space:
mode:
authorY. Wang <yw05@forksworld.de>2022-08-10 14:33:33 +0200
committerY. Wang <yw05@forksworld.de>2022-08-10 14:33:33 +0200
commit48b9922071c6e338a3ab6ebdea01fc57940cd7f8 (patch)
tree2605f59e93b3dd51ad92019c3d39f919ed742cf4 /assets/manual/filter_man.lua
parent80f2f33bfb2b9bf8d38db86aa7b1a982fd7a548d (diff)
downloadadvtrains-48b9922071c6e338a3ab6ebdea01fc57940cd7f8.tar.gz
advtrains-48b9922071c6e338a3ab6ebdea01fc57940cd7f8.tar.bz2
advtrains-48b9922071c6e338a3ab6ebdea01fc57940cd7f8.zip
Add "SEE ALSO" section to manual pages where applicable
Diffstat (limited to 'assets/manual/filter_man.lua')
-rw-r--r--assets/manual/filter_man.lua73
1 files changed, 73 insertions, 0 deletions
diff --git a/assets/manual/filter_man.lua b/assets/manual/filter_man.lua
new file mode 100644
index 0000000..0178462
--- /dev/null
+++ b/assets/manual/filter_man.lua
@@ -0,0 +1,73 @@
+local filters = {}
+
+local function add_filter(x)
+ table.insert(filters, x)
+end
+
+local is_latex = FORMAT:match "latex"
+local is_man = FORMAT:match "man"
+
+add_filter {
+ Pandoc = function(elem)
+ local seealso = elem.meta.seealso
+ if not seealso then
+ return
+ end
+ local blocks = elem.blocks
+ blocks:insert(pandoc.Header(1, pandoc.Str("SEE ALSO")))
+ if is_man then
+ for k, v in pairs(seealso) do
+ seealso[k] = v[1].text
+ end
+ blocks:insert(pandoc.Str(table.concat(seealso, ", ")))
+ else
+ local list = {}
+ for _, i in ipairs(seealso) do
+ local page = i[1].text
+ local pgname, pgsection = string.match(page, "^([^%)]+)%(([^%)]+)%)$")
+ local item = pandoc.Str(page)
+ if is_latex and pgname and pgsection then
+ pgname = pgname:gsub("_","\\string_")
+ item = pandoc.RawInline("latex", string.format("\\manref{%s}{%s}", pgname, pgsection))
+ end
+ table.insert(list, item)
+ end
+ blocks:insert(pandoc.BulletList(list))
+ end
+ return elem
+ end
+}
+
+if is_latex then
+ add_filter {
+ Str = function(elem)
+ if elem.tex == "Advtrains" then
+ return pandoc.RawInline("latex", "\\advtrains{}")
+ end
+ end
+ }
+ add_filter {
+ Header = function(elem)
+ local attr = {
+ class = "unnumbered unlisted",
+ }
+ return pandoc.Header(elem.level+1, elem.content, attr)
+ end,
+ }
+ add_filter {
+ Pandoc = function(elem)
+ local outputfn = PANDOC_STATE.output_file or error("No output file specified")
+ local pgname, pgsection = outputfn:match("([^%./\\]+)%.([^%.]+)%.tex$")
+ assert(pgname and pgsection, "Cannot fetch manpage name and section")
+ local blocks = elem.blocks
+ local titlestr = string.format("%s(%s)", pgname, pgsection)
+ local titleid = string.format("man:%s.%s", pgname, pgsection)
+ local titleobj = pandoc.Header(1, pandoc.Code(titlestr))
+ titleobj.identifier = titleid
+ blocks:insert(1, titleobj)
+ return elem
+ end,
+ }
+end
+
+return filters