34 lines
1.0 KiB
Scheme
34 lines
1.0 KiB
Scheme
|
|
(module modhelp mzscheme
|
|
(require (lib "string.ss"))
|
|
|
|
(provide explode-relpath-string
|
|
module-path-v?
|
|
module-path-v-string?)
|
|
|
|
(define (explode-relpath-string p)
|
|
(map (lambda (p)
|
|
(cond [(assoc p '((#"." . same) (#".." . up))) => cdr]
|
|
[else (bytes->path p)]))
|
|
(regexp-split #rx#"/+" (string->bytes/utf-8 p))))
|
|
|
|
(define (module-path-v-string? v)
|
|
(and (regexp-match? #rx"^[-a-zA-Z0-9./]+$" v)
|
|
(not (regexp-match? #rx"^/" v))
|
|
(not (regexp-match? #rx"/$" v))))
|
|
|
|
(define (module-path-v? v)
|
|
(cond [(path? v) #t]
|
|
[(string? v) (module-path-v-string? v)]
|
|
[(pair? v)
|
|
(case (car v)
|
|
[(file) (and (pair? (cdr v))
|
|
(path-string? (cadr v))
|
|
(null? (cddr v)))]
|
|
[(lib) (and (pair? (cdr v))
|
|
(list? (cdr v))
|
|
(andmap module-path-v-string? (cdr v)))]
|
|
[(planet) #t]
|
|
[else #f])]
|
|
[else #f])))
|