<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div>Is this anything like what you wanted?</div><div><br></div><div><div><font face="Courier New">(require web-server/dispatch</font></div><div><font face="Courier New">         (for-syntax syntax/parse</font></div><div><font face="Courier New">                     racket/list))</font></div><div><font face="Courier New"><br></font></div><div><font face="Courier New">(begin-for-syntax</font></div><div><font face="Courier New">  ;; mdr-clause->dr-clauses : Syntax -> (Listof Syntax)</font></div><div><font face="Courier New">  (define (mdr-clause->dr-clauses mdr-clause)</font></div><div><font face="Courier New">    (syntax-parse mdr-clause</font></div><div><font face="Courier New">      [[(thing ...) #:dispatch-rules sub-dr-clause ...]</font></div><div><font face="Courier New">       (for/list ([sub-dr-clause-stx (in-list (syntax->list #'(sub-dr-clause ...)))])</font></div><div><font face="Courier New">         (syntax-parse sub-dr-clause-stx</font></div><div><font face="Courier New">           [[(sub-thing ...) dispatch-fun]</font></div><div><font face="Courier New">            #'[(thing ... sub-thing ...) dispatch-fun]]</font></div><div><font face="Courier New">           [[(sub-thing ...) #:method method dispatch-fun]</font></div><div><font face="Courier New">            #'[(thing ... sub-thing ...) #:method method dispatch-fun]]))]</font></div><div><font face="Courier New">      [[(thing ...) #:my-dispatch-rules sub-mdr-clause ...]</font></div><div><font face="Courier New">       (with-syntax ([(sub-dr-clause ...) (append*</font></div><div><font face="Courier New">                                           (for/list ([sub-mdr-clause (in-list (syntax->list #'(sub-mdr-clause ...)))])</font></div><div><font face="Courier New">                                             (mdr-clause->dr-clauses sub-mdr-clause)))])</font></div><div><font face="Courier New">         (mdr-clause->dr-clauses #'[(thing ...) #:dispatch-rules sub-dr-clause ...]))]</font></div><div><font face="Courier New">      [_ (list mdr-clause)]</font></div><div><font face="Courier New">      ))</font></div><div><font face="Courier New">  )</font></div><div><font face="Courier New"><br></font></div><div><font face="Courier New">(define-syntax (my-dispatch-rules stx)</font></div><div><font face="Courier New">  (syntax-parse stx</font></div><div><font face="Courier New">    [(my-dispatch-rules mdr-clause ...)</font></div><div><font face="Courier New">     (with-syntax ([(dr-clause ...) (append*</font></div><div><font face="Courier New">                                     (for/list ([mdr-clause (in-list (syntax->list #'(mdr-clause ...)))])</font></div><div><font face="Courier New">                                       (mdr-clause->dr-clauses mdr-clause)))])</font></div><div><font face="Courier New">       #'(dispatch-rules</font></div><div><font face="Courier New">          dr-clause ...))]))</font></div><div><font face="Courier New">      </font></div><div><font face="Courier New"><br></font></div><div><font face="Courier New">(syntax->datum</font></div><div><font face="Courier New"> (expand-syntax-once</font></div><div><font face="Courier New">  #'(my-dispatch-rules</font></div><div><font face="Courier New">     [("page-a") #:my-dispatch-rules </font></div><div><font face="Courier New">                 [("handler-a" (integer-arg)) handler-a]</font></div><div><font face="Courier New">                 [("handler-b" (integer-arg)) handler-b]]</font></div><div><font face="Courier New">     [("page-b") #:my-dispatch-rules </font></div><div><font face="Courier New">                 [("handler-c" (integer-arg)) handler-c]</font></div><div><font face="Courier New">                 [("handler-d" (integer-arg)) handler-d]])))</font></div><div><font face="Courier New">; =></font></div><div><font face="Courier New">;'(dispatch-rules</font></div><div><font face="Courier New">;  (("page-a" "handler-a" (integer-arg)) handler-a)</font></div><div><font face="Courier New">;  (("page-a" "handler-b" (integer-arg)) handler-b)</font></div><div><font face="Courier New">;  (("page-b" "handler-c" (integer-arg)) handler-c)</font></div><div><font face="Courier New">;  (("page-b" "handler-d" (integer-arg)) handler-d))</font></div></div><br><div><div>On Jun 27, 2014, at 3:47 PM, Jack Firth <<a href="mailto:jackhfirth@gmail.com">jackhfirth@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div dir="ltr">I'm working with some servlet dispatching code and I want to be able to use dispatch-rules to generate the url to response mappings, but I want to be able to group related handlers to subpages. Under dispatch-rules, that looks something like this:<br>
<br>(dispatch-rules<div>    [("page-a" "handler-a" (integer-arg)) handler-a]</div><div>    [("page-a" "handler-b" (integer-arg)) handler-b]</div><div>    [("page-b" "handler-c" (integer-arg)) handler-c]</div>
<div>    [("page-b" "handler-d" (integer-arg)) handler-d])</div><div><br></div><div>What I want is to be able to specify a tree structure of some sort like this:</div><div><br></div><div>(my-dispatch-rules</div>
<div>    [(my-dispatch-rules "page-a"</div><div>        [("handler-a" (integer-arg)) handler-a)]</div><div>        [("handler-b" (integer-arg)) handler-b)]</div><div>    [(my-dispatch-rules "page-b"</div>
<div>        [("handler-c" (integer-arg)) handler-c)]</div><div>        [("handler-d" (integer-arg)) handler-d)])</div><div><br></div><div>And have that expand, placing the page-a and page-b bits in the appropriate areas. From what I understand of macros, the appropriate way to do this is with quasiquoting and splicing unquotes, but I can't seem to figure out using splicing with syntax-case, and the various tutorials and documentation I've looked at haven't helped me really wrap my head around the specifics. If someone could point me towards enlightenment, that would be much appreciated.</div>
</div>
____________________<br>  Racket Users list:<br>  <a href="http://lists.racket-lang.org/users">http://lists.racket-lang.org/users</a><br></blockquote></div><br></body></html>