<div dir="ltr">I think DrRacket has all of the tools necessary to do what you&#39;re asking, but there is no convenient API for putting it all together. Depending on how you wanted it to look, I&#39;d offer different suggestions on how to get started, I guess. For example, if you&#39;re happy with the projections being in a separate window&lt;%&gt; object, that&#39;d be the easiest thing, I guess (and much of the work you&#39;d do could be re-used if you wanted a different way to draw it, with a little bit of planning).<div>
<br></div><div>Are you thinking of using the raw source code to get the projection, or are you planning to involve macro expansion?</div><div><br></div><div>Robby</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Fri, Jul 5, 2013 at 2:52 AM, Tony Clark <span dir="ltr">&lt;<a href="mailto:t.n.clark@mdx.ac.uk" target="_blank">t.n.clark@mdx.ac.uk</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Dear All,<br>
<br>
I am implementing a language that involves patterns over sets. I am experimenting with an &#39;indexed set&#39; pattern of the form:<br>
<br>
(iU (index-var limit-var) pattern …)<br>
<br>
Where pattern can include constants, (indexed) variables, (indexed) sets and terms. For example:<br>
<br>
(iU (i n) (Person (index name i)))<br>
<br>
Matches a set of terms:<br>
<br>
&#39;((Person fred) (Person bert) (Person sally))<br>
<br>
To produce a binding environment:<br>
<br>
&#39;((n . 2) (name-0 . fred) (name-1 . bert) (name-2 . sally))<br>
<br>
My question is whether DrRacket can be extended with &#39;projectional editing&#39; features so that:<br>
<br>
(iU (i n) (Person (index name i)))<br>
<br>
When entered, is displayed using the equivalent of latex:<br>
<br>
$\bigcup_{i\in[0,n]} (Person (index name i))$<br>
<br>
A projectional editor (<a href="http://martinfowler.com/bliki/ProjectionalEditing.html" target="_blank">http://martinfowler.com/bliki/ProjectionalEditing.html</a>) works by representing the AST of a language and then providing the user with a view of the AST, thereby allowing fancy representations. Whether the user can interact with the fancy representation or has to work at the AST level depends on the projectional editor.<br>

<br>
I think DrRacket ought to be ideal for this kind of thing since: (a) we are essentially working on an AST already; (2) the editor appears to be programmable; (3) the GUI libraries allow easy dynamic creation of images that can be inserted into the editor.<br>

<br>
I looked at the reference for DrRacket Plugins, but encountered a large interface that I am unsure how to navigate.<br>
<br>
Thanks for any pointers.<br>
<br>
-- Tony<br>
<br>
<br>
<br>
---------------------------------------------------------------------------<br>
<br>
<br>
Please note that Middlesex University&#39;s preferred way of receiving all correspondence is via email in line with our Environmental Policy. All incoming post to Middlesex University is opened and scanned by our digital document handler, CDS, and then emailed to the recipient.<br>

<br>
If you do not want your correspondence to Middlesex University processed in this way please email the recipient directly. Parcels, couriered items and recorded delivery items will not be opened or scanned by CDS.  There are items which are &quot;exceptions&quot; which will be opened by CDS but will not be scanned a full list of these can be obtained by contacting the University.<br>

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