From e81b1822a69da7a1e7436bb383c9472d17f8772c Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Fri, 26 Jun 2009 16:30:41 +0000 Subject: [PATCH] added metafunction-cases and fixed a layout bug svn: r15299 --- collects/redex/pict.ss | 1 + .../bmps/unix-metafunction-multi-arg.png | Bin 7207 -> 7208 bytes collects/redex/private/core-layout.ss | 4 +- collects/redex/private/pict.ss | 36 +++++++++++++++++- collects/redex/redex.scrbl | 20 ++++++++-- 5 files changed, 55 insertions(+), 6 deletions(-) diff --git a/collects/redex/pict.ss b/collects/redex/pict.ss index d5ebef2e4b..17c7b6caba 100644 --- a/collects/redex/pict.ss +++ b/collects/redex/pict.ss @@ -69,6 +69,7 @@ (parameter/c reduction-rule-style/c)] [arrow-space (parameter/c natural-number/c)] [label-space (parameter/c natural-number/c)] + [metafunction-cases (parameter/c (or/c #f (and/c pair? (listof (and/c integer? (or/c zero? positive?))))))] [metafunction-pict-style (parameter/c (symbols 'left-right 'left-right/vertical-side-conditions diff --git a/collects/redex/private/bmps/unix-metafunction-multi-arg.png b/collects/redex/private/bmps/unix-metafunction-multi-arg.png index 0ccd5e69e935c1a515c04dce4e25da286c03fb54..6753b06610c91138ac899994f5552dbcce5ed2c0 100644 GIT binary patch literal 7208 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 literal 7207 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 diff --git a/collects/redex/private/core-layout.ss b/collects/redex/private/core-layout.ss index 11f938d39d..4236afc557 100644 --- a/collects/redex/private/core-layout.ss +++ b/collects/redex/private/core-layout.ss @@ -259,7 +259,9 @@ [(null? lst) null] [(null? (cdr lst)) (let ([last (car lst)]) - (list (just-before (close-white-square-bracket) last)))] + (list (build-lw "" (lw-line last) 0 (lw-column last) 0) + 'spring + (just-after (close-white-square-bracket) last)))] [(null? (cddr lst)) (cons (car lst) (loop (cdr lst)))] [else (list* (car lst) diff --git a/collects/redex/private/pict.ss b/collects/redex/private/pict.ss index c58a780d2d..edc56bbbfc 100644 --- a/collects/redex/private/pict.ss +++ b/collects/redex/private/pict.ss @@ -45,6 +45,7 @@ arrow-space label-space metafunction-pict-style + metafunction-cases compact-vertical-min-width extend-language-show-union set-arrow-pict!) @@ -682,6 +683,35 @@ (define linebreaks (make-parameter #f)) (define metafunction-pict-style (make-parameter 'left-right)) +(define metafunction-cases (make-parameter #f)) +(define (select-cases eqns) + (let ([cases (metafunction-cases)]) + (if cases + (let loop ([eqns eqns] + [cases (remove-dups (sort cases <))] + [i 0]) + (cond + [(null? eqns) null] + [(null? cases) null] + [else + (cond + [(= i (car cases)) + (cons (car eqns) + (loop (cdr eqns) (cdr cases) (+ i 1)))] + [else + (loop (cdr eqns) cases (+ i 1))])])) + eqns))) + +;; remove-dups : (listof number)[sorted] -> (listof number)[sorted] +;; removes duplicate numbers from 'l' +(define (remove-dups l) + (let loop ([l l]) + (cond + [(null? (cdr l)) l] + [(= (car l) (cadr l)) + (loop (cdr l))] + [else + (cons (car l) (loop (cdr l)))]))) (define (metafunctions->pict/proc mfs name) (unless (andmap (λ (mf) (eq? (metafunc-proc-lang (metafunction-proc (car mfs))) @@ -693,8 +723,8 @@ [sep 2] [style (metafunction-pict-style)] [wrapper->pict (lambda (lw) (lw->pict all-nts lw))] - [eqns (apply append (map (λ (mf) (metafunc-proc-pict-info (metafunction-proc mf))) mfs))] - [lhss + [all-eqns (apply append (map (λ (mf) (metafunc-proc-pict-info (metafunction-proc mf))) mfs))] + [all-lhss (apply append (map (λ (mf) (map (lambda (eqn) @@ -704,6 +734,8 @@ (metafunc-proc-multi-arg? (metafunction-proc mf))))) (metafunc-proc-pict-info (metafunction-proc mf)))) mfs))] + [eqns (select-cases all-eqns)] + [lhss (select-cases all-lhss)] [scs (map (lambda (eqn) (if (and (null? (list-ref eqn 1)) (null? (list-ref eqn 2))) diff --git a/collects/redex/redex.scrbl b/collects/redex/redex.scrbl index 233b64cac1..57a6478688 100644 --- a/collects/redex/redex.scrbl +++ b/collects/redex/redex.scrbl @@ -1756,15 +1756,29 @@ label on each rule, but only in horizontal mode. Defaults to 0. } -@defparam[metafunction-pict-style style (parameter/c (symbols 'left-right 'up-down 'left-right/vertical-side-conditions 'up-down/vertical-side-conditions))]{ +@defparam[metafunction-pict-style style + (or/c 'left-right + 'up-down + 'left-right/vertical-side-conditions + 'up-down/vertical-side-conditions)]{ This parameter controls the style used for typesetting -metafunctions. The 'left-right style means that the +metafunctions. The @scheme['left-right] style means that the results of calling the metafunction are displayed to the -right of the arguments and the 'up-down style means that +right of the arguments and the @scheme['up-down] style means that the results are displayed below the arguments. } +@defparam[metafunction-cases + cases + (or/c #f (and/c (listof (and/c integer? + (or/c zero? positive?))) + pair?))]{ + +This parameter controls which cases in a metafunction are rendered. If it is @scheme[#f] (the default), then all of the +cases appear. If it is a list of numbers, then only the selected cases appear (counting from @scheme[0]). +} + @deftogether[[ @defparam[label-style style text-style/c]{} @defparam[literal-style style text-style/c]{}