API Generator
A Nomsu snippet for generating API docs.This is a simple tool I threw together that automatically generates the Nomsu API here.
/usr/bin/env nomsu -v7.0.0
#!###
A command line tool to generate HTML documentation for Nomsu code.
"commandline"
use "filesystem"
use
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$text) means
(HTML escaped
($text, with "&" -> "&", with "<" -> "<", with ">" -> ">"),
("\"" -> """
with "'" -> "'"
), with
### This is specifically for the Nomsu repo:
$filename $linenum) means:
(URL for $url = "https://code.bruce-hill.com/Bruce/nomsu/src/branch/master/\$filename"
$linenum:
if $basename = ($filename, match "[^/]+$")
$url = "\($url)#L\($basename)-\$linenum"
$url
return
$args:
command line program with $def_stubs = {
"1 means", ."1 all mean", ."1 parses as", ."1 all parse as", ."1 compiles to"
."1 all compile to"
.
}$skip_stubs = {."\\", .test}
$tree) means:
(defs in $tree.type == "Action") and $def_stubs.($tree, get stub)): return [$tree]
if (($tree.type == "Action") and $skip_stubs.($tree, get stub)): return []
if (($tree.type):
if {.Action, .Block, .FileChunks}.($subtree in $tree: for $def in (defs in $subtree): add $def]
return [: for
return []
("
say <style>
.collapsed { display: none; padding: 4px; }
.collapsed:target { display: table; }
</style>
## Nomsu v\($(NOMSU VERSION), joined with ".") API
")
$filename in $args.extras:
for $file = (read file $filename)
$file:
unless "File does not exist: \$filename"
fail $code = (NomsuCode from ($Source $filename 1 #$file) $file)
try:$tree = ($code parsed)
..if it fails with $msg:
("
say \$filename failed to parse:
\$msg
")
$tree = (nil)
$tree:
unless $filename
do next
$showed_header = (no)
$def from $body) means:
(display $def.type != "Action"): return
if ($def, get stub) == ""): return
if (($file = ($def, get source file)
$line, $linenum, $linepos] = ($file, line info at $def.source.start)
[$filename = $def.source.filename
$showed_header:
unless ("
say
### [\($filename)](\(URL for $filename))
<ul>
")
external:$showed_header = (yes)
("
say <li>
<a href='#\($def, get stub, as lua id)' class='action-name'>`\($def as nomsu, text)`</a>
<div class='collapsed' id='\($def, get stub, as lua id)'>
<a href='\(URL for $filename $linenum)' rel='noreferrer' target='_blank'>View source</a>
```nomsu
\($body as nomsu, text)
```
</div>
</li>
")
$def in (defs in $tree):
for $def.1.type == "List"):
if ($d in $def.1:
for $d from $def
display ..else:
$def.1 from $def
display
$showed_header:
if "</ul>" say