|
88 | 88 | (basic-text "..." (default-style)))))
|
89 | 89 | (hole "[]"))))
|
90 | 90 |
|
| 91 | + ;; generate the assoc-table lookup entries to rewrite atoms |
| 92 | + ;; (i.e. since internally all atom literals will be a string |
| 93 | + ;; of some sort) |
| 94 | + (define (generate-atom-entries atom transformer) |
| 95 | + (match atom |
| 96 | + [(or (? symbol?) (? string?)) |
| 97 | + (list (list atom transformer))] |
| 98 | + [#t (list (list "#t" transformer) |
| 99 | + (list "#T" transformer) |
| 100 | + (list "#true" transformer))] |
| 101 | + [#f (list (list "#f" transformer) |
| 102 | + (list "#F" transformer) |
| 103 | + (list "#false" transformer))] |
| 104 | + [(? number?) (list (list (number->string atom) transformer))])) |
| 105 | + |
91 | 106 | (define-syntax-rule
|
92 | 107 | (with-atomic-rewriter name rewriter body)
|
93 | 108 | (with-atomic-rewriters ([name rewriter]) body))
|
94 | 109 | (define-syntax (with-atomic-rewriters stx)
|
95 | 110 | (syntax-parse stx
|
96 | 111 | [(_ ([name transformer] ...) e:expr)
|
97 | 112 | #:declare name
|
98 |
| - (expr/c #'symbol? |
| 113 | + (expr/c #'(or/c symbol? string? boolean? number?) |
99 | 114 | #:name "atomic-rewriter name")
|
100 | 115 | #:declare transformer
|
101 | 116 | (expr/c #'(or/c (-> pict?) string?)
|
102 | 117 | #:name "atomic-rewriter rewrite")
|
103 | 118 | #`(parameterize ([atomic-rewrite-table
|
104 |
| - (append (list (list name.c transformer.c) ...) |
| 119 | + (apply append |
| 120 | + (generate-atom-entries name.c transformer.c) |
| 121 | + ... |
105 | 122 | (atomic-rewrite-table))])
|
106 | 123 | e)]))
|
107 | 124 |
|
|
803 | 820 | (string=? "#:" (substring atom 0 2))))
|
804 | 821 | (list (make-string-token col span atom (paren-style)))]
|
805 | 822 | [(string? atom)
|
806 |
| - (list (make-string-token col span atom (default-style)))] |
| 823 | + (list (or (rewrite-atomic col span atom literal-style) |
| 824 | + (make-string-token col span atom (default-style))))] |
807 | 825 | [else (error 'atom->tokens "unk ~s" atom)]))
|
808 | 826 |
|
809 | 827 | (define (rewrite-atomic col span e get-style)
|
|
818 | 836 | [(assoc e (atomic-rewrite-table))
|
819 | 837 | =>
|
820 | 838 | (λ (m)
|
821 |
| - (when (eq? (cadr m) e) |
| 839 | + (when (equal? (cadr m) e) |
822 | 840 | (error 'apply-rewrites "rewritten version of ~s is still ~s" e e))
|
823 | 841 | (let ([p (cadr m)])
|
824 | 842 | (if (procedure? p)
|
|
0 commit comments