source: project/stream-wiki/trunk/extensions/math.scm @ 2954

Last change on this file since 2954 was 2954, checked in by azul, 13 years ago

Improvements in the way extensions define new tags.

File size: 1.1 KB
Line 
1(use syntax-case)
2
3(define-syntax environment
4  (syntax-rules ()
5    ((environment original ((name expr) ...))
6     (lambda (op)
7       (case op
8         ((name) expr)
9         ...
10         (else (original op)))))
11    ((environment ((name expr) ...))
12     (environment (lambda (op)
13                    (warning "unbound variable (dynamic environment)" op)
14                    (if #f #f))
15                  ((name expr) ...)))))
16
17(define-syntax environment-get
18  (syntax-rules ()
19    ((environment-get env sym) (env 'sym))))
20
21(define-syntax let-from-environment
22  (syntax-rules ()
23    ((let-from-environment env (sym ...) body ...)
24     (let ((sym (environment-get env sym)) ...) body ...))))
25
26(define-syntax environment-capture
27  (syntax-rules ()
28    ((environment-capture env (sym ...))
29     (environment env ((sym sym) ...)))
30    ((environment-capture (sym ...))
31     (environment ((sym sym) ...)))))
32
33(define *extensions*
34  `((math (code-span ,(lambda (env)
35                        (let-from-environment env (text driver)
36                          ((driver-math driver) text)))))))
Note: See TracBrowser for help on using the repository browser.