]> Dogcows Code - chaz/yoink/blobdiff - scripts/man2html.lua
build system enhancements
[chaz/yoink] / scripts / man2html.lua
diff --git a/scripts/man2html.lua b/scripts/man2html.lua
new file mode 100755 (executable)
index 0000000..e33a126
--- /dev/null
@@ -0,0 +1,82 @@
+#!/usr/bin/env lua
+
+--
+-- Yoink
+-- Run this script to convert the manual page to html.
+--
+
+function showhelp()
+       print("Usage: "..arg[0].." [-eh] [-i manpage] [-o htmlfile]")
+       print("  Convert the manual page to html with groff.")
+       print("")
+       print("  -e  Hide email addresses in the manual page.")
+       print("  -h  Show this help an exit.")
+       print("  -i  Specify the manual page to convert.")
+       print("  -o  Specify output path of html file.")
+end
+
+-----
+
+function die(...) print("die:", ...); os.exit(1) end
+function isReadable(file) return os.execute("test -r "..file) == 0 end
+
+arg.hideEmail = false
+arg.output = "yoink.html"
+
+arg.input = "yoink.6"
+if not isReadable(arg.input) then arg.input = "build/doc/yoink.6" end
+
+do
+       local t = {
+               ["-e"] = function(a,i) a.hideEmail = true end,
+               ["-h"] = function(a,i) showhelp(); os.exit() end,
+               ["-i"] = function(a,i) a.input = a[i+1];  return 1 end,
+               ["-o"] = function(a,i) a.output = a[i+1]; return 1 end
+       }
+       function parseArgs(args)
+               local skip = 0
+               for i,v in ipairs(args) do
+                       if skip <= 0 then
+                               if type(t[v]) ~= "function" then
+                                       print("unknown option: "..v)
+                                       showhelp(); os.exit(1)
+                               end
+                               skip = t[v](args, i)
+                               if tonumber(skip) then skip = skip + 1 else skip = 1 end
+                       end
+                       skip = skip - 1
+               end
+       end
+end
+parseArgs(arg)
+
+filters = {
+       function(t)                                             -- 1. Edit page title
+               return t:gsub("(<title>).*(</title>)", "%1Yoink Manual%2")
+       end,
+       function(t)                                             -- 2. Insert footer before </body>
+               return t:gsub("</body>", [[
+<p style="font-size: 9px; text-align: center;">
+       This manual page was generated on ]]..os.date("%d %b %Y")..[[.
+       For more information, go to the
+               <a href="http://www.dogcows.com/yoink">Yoink website</a>.
+</p>
+</body> ]])
+       end,
+       arg.hideEmail and function(t)   -- 3. Hide email addresses
+               return t:gsub("&lt;.+@.+&gt;", "&lt;email address hidden&gt;")
+       end or nil
+}
+
+output, err = io.open(arg.output, "w")
+if not output then die("io.open", err) end
+input = io.popen("groff -t -e -mandoc -Thtml "..arg.input)
+
+for line in input:lines() do
+       for _,filter in ipairs(filters) do line = filter(line) end
+       output:write(line.."\n")
+end
+
+output:close()
+input:close()
+
This page took 0.02081 seconds and 4 git commands to generate.