35 lines
1.0 KiB
Fennel
35 lines
1.0 KiB
Fennel
(local fennel (require :fennel))
|
||
|
||
(fn remove-html-escape-codes [x]
|
||
(-> x
|
||
(: :gsub " " " ")
|
||
(: :gsub "–" "–")
|
||
(: :gsub "—" "—")
|
||
(: :gsub ">" ">")
|
||
(: :gsub "<" "<")
|
||
(: :gsub "&" "<")
|
||
(: :gsub "π" "π")))
|
||
|
||
(fn markdown->arglist [markdown]
|
||
(case (markdown:match "%(([^%)]*)%)")
|
||
signature
|
||
(icollect [arg (signature:gmatch "%S+")]
|
||
(case (arg:match "(.*)=")
|
||
argname (.. "?" argname)
|
||
_ arg))))
|
||
|
||
(fn markdown->data [html]
|
||
(let [api-markdown (html:match "## API functions.-### (.*)## Button IDs")
|
||
api-markdown (remove-html-escape-codes api-markdown)]
|
||
(collect [(name args docs) (api-markdown:gmatch
|
||
"([_%w]+)%s+`([^`]+)`%s(.-)\n### ")]
|
||
(let [arglist (markdown->arglist args)]
|
||
(values name {:metadata {:fnl/arglist arglist
|
||
:fnl/docstring docs}
|
||
:binding name})))))
|
||
|
||
(fn convert [contents]
|
||
(fennel.view (markdown->data contents)))
|
||
|
||
{: convert}
|