41 lines
1.3 KiB
Scheme
41 lines
1.3 KiB
Scheme
(define-module (guile-docs docs)
|
|
#:use-module (srfi srfi-9)
|
|
#:use-module (web uri)
|
|
#:export (make-doc
|
|
doc?
|
|
doc-module
|
|
doc-symbol
|
|
doc-documentation
|
|
docs-in-module
|
|
document-uri))
|
|
|
|
(define-record-type <doc>
|
|
(make-doc module symbol documentation)
|
|
doc?
|
|
(module doc-module)
|
|
(symbol doc-symbol)
|
|
(documentation doc-documentation))
|
|
|
|
(define (document-uri doc)
|
|
"Returns the URI for the provided <doc> argument"
|
|
(when (doc? doc)
|
|
(let ((symbol-list (append (doc-module doc)
|
|
(list (doc-symbol doc)))))
|
|
(build-uri 'guiledoc
|
|
#:path (string-join (map (lambda (x) (symbol->string x))
|
|
symbol-list)
|
|
"/")))))
|
|
|
|
(define (docs-in-module module)
|
|
"Returns a list of <doc> for each symbol in module mod"
|
|
(module-map
|
|
(lambda (sym var)
|
|
(let* ((binding (variable-ref var))
|
|
(proc (cond
|
|
((procedure? binding) binding)
|
|
((macro? binding) (macro-binding binding))
|
|
(else #f)))
|
|
(docs (when (procedure? proc) (procedure-documentation proc))))
|
|
(make-doc (module-name module) sym docs)))
|
|
module))
|