diff options
author | Y. Wang <yw05@forksworld.de> | 2022-08-10 14:33:33 +0200 |
---|---|---|
committer | Y. Wang <yw05@forksworld.de> | 2022-08-10 14:33:33 +0200 |
commit | 48b9922071c6e338a3ab6ebdea01fc57940cd7f8 (patch) | |
tree | 2605f59e93b3dd51ad92019c3d39f919ed742cf4 /assets/manual/filter_man.lua | |
parent | 80f2f33bfb2b9bf8d38db86aa7b1a982fd7a548d (diff) | |
download | advtrains-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.lua | 73 |
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 |