|
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