fix: make lua implemented hilbish interfaces documented

document-lua
sammyette 2024-12-24 18:05:53 -04:00
parent c969f5ed15
commit b1e074ccb5
Signed by: sammyette
GPG Key ID: 904FC49417B44DCD
4 changed files with 146 additions and 30 deletions

View File

@ -1,6 +1,6 @@
local fs = require 'fs' local fs = require 'fs'
local emmyPattern = '^%-%-%- (.+)' local emmyPattern = '^%-%-%- (.+)'
local modpattern = '^%-+ @module (%w+)' local modpattern = '^%-+ @module (.+)'
local pieces = {} local pieces = {}
local files = fs.readdir 'nature' local files = fs.readdir 'nature'
@ -19,6 +19,8 @@ for _, fname in ipairs(files) do
local docPiece = {} local docPiece = {}
local lines = {} local lines = {}
local lineno = 0 local lineno = 0
local tocPos
local tocSearch = false
for line in f:lines() do for line in f:lines() do
lineno = lineno + 1 lineno = lineno + 1
lines[lineno] = line lines[lineno] = line
@ -81,30 +83,64 @@ description: %s
layout: doc layout: doc
menu: menu:
docs: docs:
parent: "Nature" parent: "%s"
--- ---
]] ]]
for iface, dps in pairs(pieces) do for iface, dps in pairs(pieces) do
local mod = iface:match '(%w+)%.' or 'nature' local mod = iface:match '(%w+)%.' or 'nature'
local path = string.format('docs/%s/%s.md', mod, iface) local docParent = 'Nature'
path = string.format('docs/%s/%s.md', mod, iface)
if mod ~= 'nature' then
docParent = "API"
path = string.format('docs/api/%s/%s.md', mod, iface)
end
fs.mkdir(fs.dir(path), true) fs.mkdir(fs.dir(path), true)
local f <close> = io.open(path, 'w')
f:write(string.format(header, 'Module', iface, 'No description.')) local exists = pcall(fs.stat, path)
local newOrNotNature = exists and mod ~= 'nature'
local f <close> = io.open(path, newOrNotNature and 'r+' or 'w+')
if not newOrNotNature then
f:write(string.format(header, 'Module', iface, 'No description.', docParent))
end
print(f) print(f)
print(mod, path) print('mod and path:', mod, path)
local tocSearch = false
local tocPos
for line in f:lines() do
if line:match '^## Functions' then
tocSearch = true
end
if tocSearch and line == '' then
tocSearch = false
tocPos = f:seek() - 1
end
end
for func, docs in pairs(dps) do for func, docs in pairs(dps) do
f:write(string.format('<hr>\n<div id=\'%s\'>', func))
local sig = string.format('%s.%s(', iface, func) local sig = string.format('%s.%s(', iface, func)
for idx, param in ipairs(docs.params) do for idx, param in ipairs(docs.params) do
sig = sig .. ((param.name:gsub('%?$', ''))) sig = sig .. ((param.name:gsub('%?$', '')))
if idx ~= #docs.params then sig = sig .. ', ' end if idx ~= #docs.params then sig = sig .. ', ' end
end end
sig = sig .. ')' sig = sig .. ')'
f:write(string.format([[
if tocPos then
local pos = f:seek()
f:seek('set', tocPos)
f:write(string.format('|<a href="#%s">|%s|\n', func, docs.description[1]))
tocPos = f:seek()
f:seek('set', pos)
end
f:write(string.format('<hr>\n<div id=\'%s\'>\n', func))
f:write(string.format([[
<h4 class='heading'> <h4 class='heading'>
%s %s
<a href="#%s" class='heading-link'> <a href="#%s" class='heading-link'>

View File

@ -57,22 +57,13 @@ end)
|<a href="#runner.setMode">setMode(cb)</a>|This is the same as the `hilbish.runnerMode` function.| |<a href="#runner.setMode">setMode(cb)</a>|This is the same as the `hilbish.runnerMode` function.|
|<a href="#runner.lua">lua(cmd)</a>|Evaluates `cmd` as Lua input. This is the same as using `dofile`| |<a href="#runner.lua">lua(cmd)</a>|Evaluates `cmd` as Lua input. This is the same as using `dofile`|
|<a href="#runner.sh">sh(cmd)</a>|Runs a command in Hilbish's shell script interpreter.| |<a href="#runner.sh">sh(cmd)</a>|Runs a command in Hilbish's shell script interpreter.|
|<a href="#getCurrent">|Returns the current runner by name.|
<hr> |<a href="#setCurrent">|Sets the current interactive/command line runner mode.|
<div id='runner.setMode'> |<a href="#add">|Adds a runner to the table of available runners. If runner is a table,|
<h4 class='heading'> |<a href="#get">|Get a runner by name.|
hilbish.runner.setMode(cb) |<a href="#set">|Sets a runner by name. The runner table must have the run function in it.|
<a href="#runner.setMode" class='heading-link'> |<a href="#exec">|Executes cmd with a runner. If runnerName isn't passed, it uses|
<i class="fas fa-paperclip"></i> ### Parameters
</a>
</h4>
This is the same as the `hilbish.runnerMode` function.
It takes a callback, which will be used to execute all interactive input.
In normal cases, neither callbacks should be overrided by the user,
as the higher level functions listed below this will handle it.
#### Parameters
`function` **`cb`** `function` **`cb`**
@ -114,3 +105,92 @@ This is the equivalent of using `source`.
</div> </div>
<hr>
<div id='getCurrent'>
<h4 class='heading'>
hilbish.runner.getCurrent()
<a href="#getCurrent" class='heading-link'>
<i class="fas fa-paperclip"></i>
</a>
</h4>
Returns the current runner by name.
#### Parameters
This function has no parameters.
</div>
<hr>
<div id='setCurrent'>
<h4 class='heading'>
hilbish.runner.setCurrent(name)
<a href="#setCurrent" class='heading-link'>
<i class="fas fa-paperclip"></i>
</a>
</h4>
Sets the current interactive/command line runner mode.
#### Parameters
`name` **`string`**
</div>
<hr>
<div id='add'>
<h4 class='heading'>
hilbish.runner.add(name, runner)
<a href="#add" class='heading-link'>
<i class="fas fa-paperclip"></i>
</a>
</h4>
Adds a runner to the table of available runners. If runner is a table,
it must have the run function in it.
#### Parameters
`name` **`string`**
`runner` **`function`**
</div>
<hr>
<div id='get'>
<h4 class='heading'>
hilbish.runner.get(name)
<a href="#get" class='heading-link'>
<i class="fas fa-paperclip"></i>
</a>
</h4>
Get a runner by name.
#### Parameters
`name` **`string`**
</div>
<hr>
<div id='set'>
<h4 class='heading'>
hilbish.runner.set(name, runner)
<a href="#set" class='heading-link'>
<i class="fas fa-paperclip"></i>
</a>
</h4>
Sets a runner by name. The runner table must have the run function in it.
#### Parameters
`name` **`string`**
`runner` **`table`**
</div>
<hr>
<div id='exec'>
<h4 class='heading'>
hilbish.runner.exec(cmd, runnerName)
<a href="#exec" class='heading-link'>
<i class="fas fa-paperclip"></i>
</a>
</h4>
Executes cmd with a runner. If runnerName isn't passed, it uses
the user's current runner.
#### Parameters
`cmd` **`string`**
`runnerName` **`string?`**
</div>

View File

@ -8,7 +8,7 @@ menu:
--- ---
<hr> <hr>
<div id='setOld'> <div id='setOld'>
<h4 class='heading'> <h4 class='heading'>
dirs.setOld(d) dirs.setOld(d)
<a href="#setOld" class='heading-link'> <a href="#setOld" class='heading-link'>
@ -22,7 +22,7 @@ Sets the old directory string.
</div> </div>
<hr> <hr>
<div id='push'> <div id='push'>
<h4 class='heading'> <h4 class='heading'>
dirs.push() dirs.push()
<a href="#push" class='heading-link'> <a href="#push" class='heading-link'>
@ -36,7 +36,7 @@ This function has no parameters.
</div> </div>
<hr> <hr>
<div id='peak'> <div id='peak'>
<h4 class='heading'> <h4 class='heading'>
dirs.peak(num) dirs.peak(num)
<a href="#peak" class='heading-link'> <a href="#peak" class='heading-link'>
@ -50,7 +50,7 @@ Look at `num` amount of recent directories, starting from the latest.
</div> </div>
<hr> <hr>
<div id='pop'> <div id='pop'>
<h4 class='heading'> <h4 class='heading'>
dirs.pop(num) dirs.pop(num)
<a href="#pop" class='heading-link'> <a href="#pop" class='heading-link'>
@ -64,7 +64,7 @@ Remove the specified amount of dirs from the recent directories list.
</div> </div>
<hr> <hr>
<div id='recent'> <div id='recent'>
<h4 class='heading'> <h4 class='heading'>
dirs.recent(idx) dirs.recent(idx)
<a href="#recent" class='heading-link'> <a href="#recent" class='heading-link'>

View File

@ -1,4 +1,4 @@
--- hilbish.runner -- @module hilbish.runner
local currentRunner = 'hybrid' local currentRunner = 'hybrid'
local runners = {} local runners = {}