From 17be497fc2f12f5c607453cac9ac8ef8317b0717 Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Thu, 24 Apr 2014 10:37:42 +0100 Subject: [PATCH] elua: help support in getopt --- src/bin/elua/modules/getopt.lua | 54 +++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/src/bin/elua/modules/getopt.lua b/src/bin/elua/modules/getopt.lua index 1e3ff97224..9f796399ea 100644 --- a/src/bin/elua/modules/getopt.lua +++ b/src/bin/elua/modules/getopt.lua @@ -112,4 +112,58 @@ M.getopt_desc = function(parser) return getopt(args, short, long) end +M.help = function(parser, f) + f = f or io.stderr + local usage = parser.usage + local progn = parser.prog or parser.args[0] or "program" + if usage then + usage = usage:gsub("%%prog", progn) + else + usage = ("Usage: %s [OPTIONS]"):format(progn) + end + f:write(usage, "\n") + if parser.header then + f:write("\n", parser.header:gsub("%%prog", progn), "\n") + end + if #parser.descs > 0 then + local ohdr = parser.optheader + f:write("\n", ohdr and ohdr:gsub("%%prog", progn) + or "The following options are supported:", "\n\n") + local lns = {} + local lln = 0 + for i, desc in ipairs(parser.descs) do + if desc[1] or desc[2] then + local mv = desc.metavar + if not mv and desc[3] then + mv = desc[2] and desc[2]:upper() or "VAL" + end + local ln = {} + ln[#ln + 1] = " " + if desc[1] then + ln[#ln + 1] = "-" .. desc[1] + if mv then ln[#ln + 1] = "[" .. mv .. "]" end + if desc[2] then ln[#ln + 1] = ", " end + end + if desc[2] then + ln[#ln + 1] = "--" .. desc[2] + if mv then ln[#ln + 1] = "=[" .. mv .. "]" end + end + ln = table.concat(ln) + lln = math.max(lln, #ln) + lns[#lns + 1] = { ln, desc.help } + end + end + for i, lnt in ipairs(lns) do + local ln = lnt[1] + local hp = lnt[2] + f:write(ln) + if hp then f:write((" "):rep(lln - #ln), " ", hp) end + f:write("\n") + end + end + if parser.footer then + f:write("\n", parser.footer:gsub("%%prog", progn), "\n") + end +end + return M \ No newline at end of file