hyper-literate/collects/scribble/private/manual-method.ss
Matthew Flatt 5a7821c879 split scribble/manual module into smaller modules
svn: r12150

original commit: ea659ba286fc5c1fda44a89d10c137473e46e8da
2008-10-28 01:40:51 +00:00

56 lines
1.5 KiB
Scheme

#lang scheme/base
(require "../struct.ss"
"../search.ss"
"../scheme.ss"
"../basic.ss"
"manual-scheme.ss"
(for-syntax scheme/base))
(provide *method **method
method-tag
name-this-object
;; public:
method xmethod)
(define-syntax-rule (method a b)
(*method 'b (quote-syntax a)))
(define-syntax-rule (xmethod a b)
(elem (method a b) " in " (scheme a)))
(define (*method sym id)
(**method sym id))
(define (**method sym id/tag)
(let ([content (list (symbol->string sym))])
((if (identifier? id/tag)
(lambda (c mk)
(make-delayed-element
(lambda (ren p ri)
(let ([tag (find-scheme-tag p ri id/tag #f)])
(if tag (list (mk tag)) content)))
(lambda () (car content))
(lambda () (car content))))
(lambda (c mk) (mk id/tag)))
content
(lambda (tag)
(make-element "schemesymbol"
(list (make-link-element "schemevaluelink" content
(method-tag tag sym))))))))
(define (method-tag vtag sym)
(list 'meth (list (cadr vtag) sym)))
(define (name-this-object type-sym)
(to-element
(string->symbol
(regexp-replace
#rx"(%|<%>|-mixin)$"
(format "_a~a-~s"
(if (member (string-ref (symbol->string type-sym) 0)
'(#\a #\e #\i #\o #\u))
"n"
"")
type-sym)
""))))