|
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 | + [(? symbol?) (list (list atom transformer))] |
| 97 | + [(? string?) (list (list (format "“~a”" atom) transformer) |
| 98 | + (list (format "~v" atom) transformer))] |
| 99 | + [#t (list (list "#t" transformer) |
| 100 | + (list "#T" transformer) |
| 101 | + (list "#true" transformer))] |
| 102 | + [#f (list (list "#f" transformer) |
| 103 | + (list "#F" transformer) |
| 104 | + (list "#false" transformer))] |
| 105 | + [(? number?) (list (list (number->string atom) transformer))])) |
| 106 | + |
91 | 107 | (define-syntax-rule |
92 | 108 | (with-atomic-rewriter name rewriter body) |
93 | 109 | (with-atomic-rewriters ([name rewriter]) body)) |
94 | 110 | (define-syntax (with-atomic-rewriters stx) |
95 | 111 | (syntax-parse stx |
96 | 112 | [(_ ([name transformer] ...) e:expr) |
97 | 113 | #:declare name |
98 | | - (expr/c #'symbol? |
| 114 | + (expr/c #'(or/c symbol? string? boolean? number?) |
99 | 115 | #:name "atomic-rewriter name") |
100 | 116 | #:declare transformer |
101 | 117 | (expr/c #'(or/c (-> pict?) string?) |
102 | 118 | #:name "atomic-rewriter rewrite") |
103 | 119 | #`(parameterize ([atomic-rewrite-table |
104 | | - (append (list (list name.c transformer.c) ...) |
105 | | - (atomic-rewrite-table))]) |
| 120 | + (apply append |
| 121 | + (generate-atom-entries name.c transformer.c) |
| 122 | + ... |
| 123 | + (list (atomic-rewrite-table)))]) |
106 | 124 | e)])) |
107 | 125 |
|
108 | 126 | ;; compound-rewrite-table : (listof lw) -> (listof (union lw pict string)) |
|
803 | 821 | (string=? "#:" (substring atom 0 2)))) |
804 | 822 | (list (make-string-token col span atom (paren-style)))] |
805 | 823 | [(string? atom) |
806 | | - (list (make-string-token col span atom (default-style)))] |
| 824 | + (list (or (rewrite-atomic col span atom literal-style) |
| 825 | + (make-string-token col span atom (default-style))))] |
807 | 826 | [else (error 'atom->tokens "unk ~s" atom)])) |
808 | 827 |
|
809 | 828 | (define (rewrite-atomic col span e get-style) |
|
818 | 837 | [(assoc e (atomic-rewrite-table)) |
819 | 838 | => |
820 | 839 | (λ (m) |
821 | | - (when (eq? (cadr m) e) |
| 840 | + (when (equal? (cadr m) e) |
822 | 841 | (error 'apply-rewrites "rewritten version of ~s is still ~s" e e)) |
823 | 842 | (let ([p (cadr m)]) |
824 | 843 | (if (procedure? p) |
|
0 commit comments