This repository has been archived by the owner on Dec 4, 2022. It is now read-only.
/
main.rkt
78 lines (70 loc) · 2.52 KB
/
main.rkt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#lang racket/base
(module reader syntax/module-reader
remix/main
#:read at:read
#:read-syntax at:read-syntax
#:wrapper1
(λ (t)
(parameterize ([read-square-bracket-as-paren #f]
[read-curly-brace-as-paren #f]
[read-square-bracket-with-tag #t]
[read-curly-brace-with-tag #t]
[read-accept-dot #f]
[read-accept-infix-dot #f]
[read-cdot #t])
(t)))
#:info
(λ (key defval proc)
(define (fallback) (if proc (proc key defval) defval))
(define (try-dynamic-require lib export)
(with-handlers ([exn:missing-module?
(λ (x) (fallback))])
(dynamic-require lib export)))
(case key
[(color-lexer)
(try-dynamic-require 'syntax-color/scribble-lexer 'scribble-lexer)]
[(drracket:indentation)
(try-dynamic-require 'scribble/private/indentation 'determine-spaces)]
[(drracket:keystrokes)
(try-dynamic-require 'scribble/private/indentation 'keystrokes)]
[else (fallback)]))
(require (prefix-in at: scribble/reader)))
(require (for-syntax racket/base
syntax/parse)
remix/private/required-helper
remix/default-in)
;; xxx remove need for local-require/local-require* by detecting context?
(define-syntax (remix-module-begin stx)
(syntax-parse stx
#:literals (remix-require*)
[(_ (~and s (~not (remix-require* . _))) ...)
(syntax/loc stx
(#%module-begin s ...))]
[(_ (~and pre (~not (remix-require* . _))) ...
(remix-require* m)
post ...)
(syntax/loc stx
(#%module-begin pre ... (do-remix-require* m post ...)))]))
(define-syntax (do-remix-require* stx)
(syntax-parse stx
[(_ m . body)
(syntax/loc stx
(begin (require (rename-in m [#%require*d internal-#%require*d]))
(internal-#%require*d . body)))]))
(define-syntax (remix-require stx)
(syntax-parse stx
[(_ m)
(syntax/loc stx
(begin (require (rename-in (default-in m
[#%required default-#%required])
[#%required internal-#%required]))
(internal-#%required m)))]
[(_ m ...)
(syntax/loc stx
(begin (remix-require m) ...))]))
(define-syntax (remix-require* stx)
(raise-syntax-error 'require* "illegal outside of top-level" stx))
(provide (rename-out
[remix-module-begin #%module-begin]
[remix-require require]
[remix-require* require*]))