diff --git a/collects/redex/pict.rkt b/collects/redex/pict.rkt index 7152103ca3..4d8c67965d 100644 --- a/collects/redex/pict.rkt +++ b/collects/redex/pict.rkt @@ -82,7 +82,8 @@ 'left-right/beside-side-conditions 'up-down 'up-down/vertical-side-conditions - 'up-down/compact-side-conditions))]) + 'up-down/compact-side-conditions))] + [delimit-ellipsis-arguments? (parameter/c any/c)]) (provide/contract [label-font-size (parameter/c (and/c (between/c 1 255) integer?))] diff --git a/collects/redex/private/core-layout.rkt b/collects/redex/private/core-layout.rkt index c10b4870ee..9052c98859 100644 --- a/collects/redex/private/core-layout.rkt +++ b/collects/redex/private/core-layout.rkt @@ -29,6 +29,7 @@ non-terminal literal-style metafunction-style + delimit-ellipsis-arguments? open-white-square-bracket close-white-square-bracket just-before @@ -259,7 +260,8 @@ [(null? (cddr lst)) (cons (car lst) (loop (cdr lst)))] [else - (if (eq? '... (lw-e (cadr lst))) + (if (and (not (delimit-ellipsis-arguments?)) + (eq? '... (lw-e (cadr lst)))) (cons (car lst) (loop (cdr lst))) (list* (car lst) @@ -760,6 +762,7 @@ (define default-font-size (make-parameter 14)) (define metafunction-font-size (make-parameter (default-font-size))) (define label-font-size (make-parameter 14)) + (define delimit-ellipsis-arguments? (make-parameter #t)) (define (open-white-square-bracket) (white-bracket "[")) (define (close-white-square-bracket) (white-bracket "]")) diff --git a/collects/redex/private/pict.rkt b/collects/redex/private/pict.rkt index cc997fbf57..1a87a7871e 100644 --- a/collects/redex/private/pict.rkt +++ b/collects/redex/private/pict.rkt @@ -36,6 +36,7 @@ label-style literal-style metafunction-style + delimit-ellipsis-arguments? label-font-size default-font-size diff --git a/collects/redex/redex.scrbl b/collects/redex/redex.scrbl index 0050387f20..8d79cf875b 100644 --- a/collects/redex/redex.scrbl +++ b/collects/redex/redex.scrbl @@ -2027,6 +2027,13 @@ The @racket['left-right/beside-side-conditions] variant is like @racket['left-right], except it puts the side-conditions on the same line, instead of on a new line below the case.} +@defparam[delimit-ellipsis-arguments? delimit? any/c]{ +This parameter controls the typesetting of metafunction definitions +and applications. When it is non-@racket[#f] (the default), commas +precede ellipses that represent argument sequences; when it is +@racket[#f] no commas appear in those positions. +} + @defparam[linebreaks breaks (or/c #f (listof boolean?))]{ This parameter controls which cases in the metafunction are rendered on two lines and which are rendered on one. diff --git a/collects/redex/tests/bitmap-test.rkt b/collects/redex/tests/bitmap-test.rkt index 4b0c5a40d4..de28d2b737 100644 --- a/collects/redex/tests/bitmap-test.rkt +++ b/collects/redex/tests/bitmap-test.rkt @@ -197,7 +197,9 @@ (where (x_3 ...) (rdups x_2 ...))] [(rdups) ()]) -(test (render-metafunction rdups) "rdups.png") +(test (render-metafunction rdups) "rdups-delimited.png") +(parameterize ([delimit-ellipsis-arguments? #f]) + (test (render-metafunction rdups) "rdups-undelimited.png")) ;; Non-terminal superscripts (test (render-lw lang (to-lw (x_^abcdef x_q^abcdef))) diff --git a/collects/redex/tests/bmps-macosx/rdups-delimited.png b/collects/redex/tests/bmps-macosx/rdups-delimited.png new file mode 100644 index 0000000000..a24ee3c1b1 Binary files /dev/null and b/collects/redex/tests/bmps-macosx/rdups-delimited.png differ diff --git a/collects/redex/tests/bmps-macosx/rdups.png b/collects/redex/tests/bmps-macosx/rdups-undelimited.png similarity index 100% rename from collects/redex/tests/bmps-macosx/rdups.png rename to collects/redex/tests/bmps-macosx/rdups-undelimited.png