attr -> datum (following the docs)

svn: r6900
This commit is contained in:
Eli Barzilay 2007-07-12 22:17:20 +00:00
parent 51da08ee9a
commit a7b1a7119b

View File

@ -37,13 +37,13 @@
;; syntax
;; basic customization
(define ch:command #\@)
(define ch:comment #\;)
(define ch:expr-escape #\|)
(define ch:attrs-begin #\[)
(define ch:attrs-end #\])
(define ch:lines-begin #\{)
(define ch:lines-end #\})
(define ch:command #\@)
(define ch:comment #\;)
(define ch:expr-escape #\|)
(define ch:datums-begin #\[)
(define ch:datums-end #\])
(define ch:lines-begin #\{)
(define ch:lines-end #\})
(define str:lines-begin* #"(\\|[^a-zA-Z0-9 \t\r\n\f@\\\177-\377{]*)\\{")
@ -55,8 +55,8 @@
(define re:comment-start (^px ch:comment))
(define re:comment-line (^px "[^\n]*\n[ \t]*")) ; like tex's `%'
(define re:expr-escape (^px ch:expr-escape))
(define re:attrs-begin (^px ch:attrs-begin))
(define re:attrs-end (^px ch:attrs-end))
(define re:datums-begin (^px ch:datums-begin))
(define re:datums-end (^px ch:datums-end))
(define re:lines-begin (^px ch:lines-begin))
(define re:lines-begin* (^px str:lines-begin*))
(define re:lines-end (^px ch:lines-end))
@ -367,8 +367,8 @@
end)))]
[else #f]))
(define (get-attrs)
(read-delimited-list re:attrs-begin re:attrs-end ch:attrs-end))
(define (get-datums)
(read-delimited-list re:datums-begin re:datums-end ch:datums-end))
(define (get-escape-expr single?)
;; single? means expect just one expression (or none, which is returned
@ -429,19 +429,20 @@
[else
(let*-values
([(rpfxs) (get-rprefixes)]
[(cmd attrs lines)
(cond
;; try get-lines first -- so @|{...}| is not used as a
;; simple expression escape, same for get-attrs
[(get-lines) => (lambda (lines) (values #f #f lines))]
[(get-attrs) => (lambda (attrs) (values #f attrs (get-lines)))]
[(get-escape-expr #t) => (lambda (expr) (values expr #f #f))]
[else (values (get-command) (get-attrs) (get-lines))])]
[(stx) (and (or attrs lines)
(append (or attrs '()) (or lines '())))]
[(cmd datums lines)
(cond [(get-lines)
;; try get-lines first -- so @|{...}| is not used as a
;; simple expression escape, same for get-datums
=> (lambda (lines) (values #f #f lines))]
[(get-datums)
=> (lambda (datums) (values #f datums (get-lines)))]
[(get-escape-expr #t) => (lambda (expr) (values expr #f #f))]
[else (values (get-command) (get-datums) (get-lines))])]
[(stx) (and (or datums lines)
(append (or datums '()) (or lines '())))]
[(stx) (or (and cmd stx (cons cmd stx)) ; all parts
stx ; no cmd part => just a parenthesized expression
cmd ; no attrs/lines => simple expression (no parens)
cmd ; no datums/lines => simple expression (no parens)
;; impossible: either we saw []s or {}s, or we read a
;; scheme expression
(internal-error 'dispatcher))]