racket/collects/srfi/features.rkt
2010-04-27 16:50:15 -06:00

29 lines
958 B
Racket

#lang scheme/base
(provide feature-present? feature->require-clause)
(define *feature-alist*
'())
(define (srfi-id? id)
(regexp-match? #rx"^srfi-[0-9]+$" (symbol->string id)))
(define (srfi-id->filename srfi-id)
(regexp-replace #rx"^srfi-([0-9]+)$" (symbol->string srfi-id) "\\1/\\1.ss"))
(define (srfi-id-present? srfi-id)
(file-exists? (build-path (collection-path "srfi")
(srfi-id->filename srfi-id))))
(define (feature-present? id)
(or (and (srfi-id? id) (srfi-id-present? id))
(and (assq id *feature-alist*) #t)))
(define (feature->require-clause id)
(cond [(and (srfi-id? id) (srfi-id-present? id))
(string->symbol (regexp-replace #rx"^srfi-([0-9]+)$"
(symbol->string id)
"srfi/\\1/\\1"))]
[(assq id *feature-alist*) => cdr]
[else (error 'feature->require-clause "unknown feature: ~e" id)]))