<div dir="ltr">Would something like this work for your use? <div><br></div><div><div>&#39;@f{3</div><div>    4 @5 @6}</div></div><div><br></div><div>=</div><div><br></div><div style>&#39;(f &quot;3&quot; &quot;\n&quot; &quot;4 &quot; 5 &quot; &quot; 6)</div>
<div style><br></div><div style>(Eli may know a way to get around the extra spaces that get inserted.)</div><div style><br></div><div style>Robby</div><div style><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Sun, Jun 9, 2013 at 11:15 PM, Matthew Butterick <span dir="ltr">&lt;<a href="mailto:mb.list.acct@gmail.com" target="_blank">mb.list.acct@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div>Perhaps I&#39;m overlooking some obvious complication. But today, the pattern of how Scribble parses @ ‹cmd› [ ‹datum›* ] { ‹text-body› } is roughly &quot;apply &lt;cmd&gt; to the list formed by concatenating the datum arguments and the text-body arguments&quot;. So it seems to me that this pattern could be logically extended to cover any number of datum or text-body blocks.<br>

</div><div><br></div><div>For instance, today, this expression:<div><div><br></div><div><div>@foo[1 2]{3          <br>4}</div></div><div><br></div><div>expands to:</div><div><br></div><div>(foo 1 2 &quot;3&quot; &quot;\n&quot; &quot;4&quot;)<br>

</div><div><br></div><div>Therefore, this expression:</div><div><br></div><div>@foo{3          <br>4}[5 6]<br></div></div></div><div><br></div><div>would expand to</div><div><br></div>
<div>(foo &quot;3&quot; &quot;\n&quot; &quot;4&quot; 5 6)<br></div><div><br></div><div>And this:</div><div><br></div><div>@foo[1 2]{3          <br>4}[5 6]{7<br></div><div>8}</div><div>
<br></div><div>To this:</div><div><br></div><div>(foo 1 2 &quot;3&quot; &quot;\n&quot; &quot;4&quot; 5 6 &quot;7&quot; &quot;\n&quot; &quot;8&quot;)<br></div><div><br></div><div>If you needed a text body to become a single argument, you would just do what you do today, which is add another set of braces to produce a sublist. So this:</div>

<div><br></div><div>@foo{@{3          <br>4}}[5 6]<br></div><div><br></div><div>Would become:</div><div><br></div><div>(foo (&quot;3&quot; &quot;\n&quot; &quot;4&quot;) 5 6)<br></div><div class="gmail_extra">
<br></div><div class="gmail_extra">You could also convert the sublist back into a string with string-join. But again, that&#39;s consistent with current behavior, so NBD.</div><div><div class="h5"><div class="gmail_extra">
<br></div>
<div class="gmail_extra"><div><br></div></div><div class="gmail_extra"><br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Jun 9, 2013 at 6:14 PM, Robby Findler <span dir="ltr">&lt;<a href="mailto:robby@eecs.northwestern.edu" target="_blank">robby@eecs.northwestern.edu</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div>But a block of text does not always turn into a single argument, so I&#39;m not sure how to do what you ask.<br>

<br></div>Robby<br></div><div class="gmail_extra"><br><br><div class="gmail_quote"><div><div>On Sun, Jun 9, 2013 at 7:05 PM, Matthew Butterick <span dir="ltr">&lt;<a href="mailto:mb.list.acct@gmail.com" target="_blank">mb.list.acct@gmail.com</a>&gt;</span> wrote:<br>


</div></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div><div dir="ltr">Semantically, &quot;an operation [in Scribble] doesn’t care whether it’s used with [...] or {...}.&quot; Therefore, it would be useful if Scribble expressions were not syntactically limited to the form @ ‹cmd› [ ‹datum›* ] { ‹text-body› }, and instead allowed text-mode and racket-mode arguments to be freely &amp; indefinitely sequenced.<div>



<br></div><div>What I&#39;ve found using Scribble is that many of the functions one writes are, of course, intended to operate on a text argument. So the text-mode argument naturally wants to come first in the function:</div>



<div><br></div><div>@cross-ref{This text}</div><div><br></div><div>Now, suppose I want to add an optional second argument. The natural place for this optional argument would be after the first:</div>
<div><br></div><div>@cross-ref{This text}[&quot;where.html&quot;]  </div><div><br></div><div>or</div><div><br></div><div>@cross-ref{This text){where.html}<br></div><div><br></div>
<div>But AFAIK, Scribble forbids these patterns. So I might try this:</div><div><br></div><div>@cross-ref[&quot;where.html&quot;]{This text}</div><div><br></div><div>But that doesn&#39;t work either, because the cross-ref function expects the target text to be in the first position. So either I must forego idiomatic Scribble expressions altogether:</div>



<div><br></div><div>@(cross-ref &quot;This text&quot; &quot;where.html&quot;) </div><div><br></div><div>Or use a keyword argument:</div><div><br></div><div>@cross-ref[#:destination &quot;where.html&quot;]{This text}</div>



<div><br></div><div>As a workaround, that&#39;s OK. But at this point, Scribble is reaching up into my code and starting to impose design restrictions (namely, keyword arguments) that have ripple effects elsewhere.</div>



</div>
<br></div></div>____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div></div></div></div>
<br>____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br></blockquote></div><br></div>