2022-04-23 03:56:57 +00:00
|
|
|
local commander = require 'commander'
|
|
|
|
local fs = require 'fs'
|
|
|
|
local lunacolors = require 'lunacolors'
|
|
|
|
|
|
|
|
commander.register('doc', function(args)
|
|
|
|
local moddocPath = hilbish.dataDir .. '/docs/'
|
2022-12-15 04:00:54 +00:00
|
|
|
local apidocHeader = [[
|
|
|
|
# %s
|
|
|
|
{grayBg} {white}{italic}%s {reset}
|
|
|
|
|
2022-04-23 03:56:57 +00:00
|
|
|
]]
|
|
|
|
|
|
|
|
if #args > 0 then
|
|
|
|
local mod = args[1]
|
|
|
|
|
2022-12-15 04:00:54 +00:00
|
|
|
local f = io.open(moddocPath .. mod .. '.md', 'rb')
|
2022-04-23 03:56:57 +00:00
|
|
|
local funcdocs = nil
|
2022-12-20 05:38:19 +00:00
|
|
|
local subdocName = args[2]
|
2022-04-23 03:56:57 +00:00
|
|
|
if not f then
|
|
|
|
-- assume subdir
|
2022-12-15 04:00:54 +00:00
|
|
|
-- dataDir/docs/<mod>/<mod>.md
|
2022-04-23 03:56:57 +00:00
|
|
|
moddocPath = moddocPath .. mod .. '/'
|
|
|
|
if not subdocName then
|
2022-12-20 05:38:19 +00:00
|
|
|
subdocName = '_index'
|
2022-04-23 03:56:57 +00:00
|
|
|
end
|
2022-12-15 04:00:54 +00:00
|
|
|
f = io.open(moddocPath .. subdocName .. '.md', 'rb')
|
2022-12-20 05:38:19 +00:00
|
|
|
if not f then
|
|
|
|
moddocPath = moddocPath .. subdocName .. '/'
|
2022-12-20 05:42:58 +00:00
|
|
|
subdocName = args[3] or '_index'
|
|
|
|
f = io.open(moddocPath .. subdocName .. '.md', 'rb')
|
2022-12-20 05:38:19 +00:00
|
|
|
end
|
2022-04-23 03:56:57 +00:00
|
|
|
if not f then
|
|
|
|
print('No documentation found for ' .. mod .. '.')
|
|
|
|
return
|
|
|
|
end
|
|
|
|
end
|
2022-12-20 05:38:19 +00:00
|
|
|
funcdocs = f:read '*a':gsub('-([%d]+)', '%1')
|
|
|
|
local moddocs = table.filter(fs.readdir(moddocPath), function(f) return f ~= '_index.md' end)
|
|
|
|
local subdocs = table.map(moddocs, function(fname)
|
|
|
|
return lunacolors.underline(lunacolors.blue(string.gsub(fname, '.md', '')))
|
|
|
|
end)
|
|
|
|
if subdocName == '_index' then
|
|
|
|
funcdocs = funcdocs .. '\nSubdocs: ' .. table.concat(subdocs, ', ')
|
2022-04-23 03:56:57 +00:00
|
|
|
end
|
2022-12-20 05:38:19 +00:00
|
|
|
|
2022-12-15 04:00:54 +00:00
|
|
|
local valsStr = funcdocs:match '%-%-%-\n([^%-%-%-]+)\n'
|
|
|
|
local vals = {}
|
|
|
|
if valsStr then
|
|
|
|
local _, endpos = funcdocs:find('---\n' .. valsStr .. '\n---\n\n', 1, true)
|
|
|
|
funcdocs = funcdocs:sub(endpos + 1, #funcdocs)
|
|
|
|
|
|
|
|
-- parse vals
|
|
|
|
local lines = string.split(valsStr, '\n')
|
|
|
|
for _, line in ipairs(lines) do
|
|
|
|
local key = line:match '(%w+): '
|
|
|
|
local val = line:match '^%w+: (.-)$'
|
|
|
|
|
2022-12-20 05:38:19 +00:00
|
|
|
if key then
|
|
|
|
vals[key] = val
|
|
|
|
end
|
2022-12-15 04:00:54 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
if mod == 'api' then
|
2022-12-20 05:38:19 +00:00
|
|
|
funcdocs = string.format(apidocHeader, vals.title, vals.description or 'no description.') .. funcdocs
|
2022-12-15 04:00:54 +00:00
|
|
|
end
|
2022-04-23 03:56:57 +00:00
|
|
|
local backtickOccurence = 0
|
|
|
|
local formattedFuncs = lunacolors.format(funcdocs:sub(1, #funcdocs - 1):gsub('`', function()
|
|
|
|
backtickOccurence = backtickOccurence + 1
|
|
|
|
if backtickOccurence % 2 == 0 then
|
|
|
|
return '{reset}'
|
|
|
|
else
|
|
|
|
return '{underline}{green}'
|
|
|
|
end
|
2022-12-15 04:00:54 +00:00
|
|
|
end):gsub('#+.-\n', function(t)
|
|
|
|
return '{bold}{magenta}' .. t .. '{reset}'
|
2022-04-23 03:56:57 +00:00
|
|
|
end))
|
2022-12-15 04:00:54 +00:00
|
|
|
print(formattedFuncs)
|
2022-04-23 03:56:57 +00:00
|
|
|
f:close()
|
|
|
|
|
|
|
|
return
|
|
|
|
end
|
|
|
|
local modules = table.map(fs.readdir(moddocPath), function(f)
|
2022-12-15 04:00:54 +00:00
|
|
|
return lunacolors.underline(lunacolors.blue(string.gsub(f, '.md', '')))
|
2022-04-23 03:56:57 +00:00
|
|
|
end)
|
|
|
|
|
|
|
|
io.write [[
|
|
|
|
Welcome to Hilbish's doc tool! Here you can find documentation for builtin
|
|
|
|
functions and other things.
|
|
|
|
|
|
|
|
Usage: doc <section> [subdoc]
|
|
|
|
A section is a module or a literal section and a subdoc is a subsection for it.
|
|
|
|
|
|
|
|
Available sections: ]]
|
|
|
|
io.flush()
|
|
|
|
|
|
|
|
print(table.concat(modules, ', '))
|
|
|
|
end)
|