47 lines
1.6 KiB
Racket
47 lines
1.6 KiB
Racket
#lang at-exp racket/base
|
|
|
|
(module reader syntax/module-reader
|
|
phc-graph/make-lang)
|
|
|
|
(provide (rename-out [-#%module-begin #%module-begin]))
|
|
|
|
(require (for-syntax racket/base
|
|
setup/collects)
|
|
scribble/manual)
|
|
|
|
(define-syntax (-#%module-begin stx)
|
|
(syntax-case stx ()
|
|
[(self #:require req)
|
|
;; TODO: isn't there a more reliable way to get the "require path"
|
|
;; for the source module of #'self ?
|
|
(let* ([src (syntax-source #'self)]
|
|
[modpath (path->module-path src)]
|
|
[md (if (and (pair? modpath)
|
|
(eq? (car modpath) 'lib)
|
|
(string? (cadr modpath))
|
|
(null? (cddr modpath))
|
|
(regexp-match ".rkt$" (cadr modpath)))
|
|
(string->symbol
|
|
(substring (cadr modpath)
|
|
0
|
|
(- (string-length (cadr modpath)) 4)))
|
|
modpath)])
|
|
#`(-#%module-begin #:module #,md #:require req))]
|
|
[(_ #:module md ;; TODO: detect this automatically
|
|
#:require (req ...))
|
|
#`(#%module-begin
|
|
(module reader syntax/module-reader
|
|
md)
|
|
@module[scrbl racket/base (require scribble/manual)]{
|
|
@defmodule[md]{
|
|
This module language re-provides the following modules:
|
|
@itemlist[(item (racketmodname req)) ...]
|
|
}
|
|
}
|
|
(module doc racket/base
|
|
(require (submod ".." scrbl))
|
|
(provide (all-from-out (submod ".." scrbl))))
|
|
(require req ...)
|
|
(provide (all-from-out req ...)))]))
|
|
|