<div dir="ltr">The markers are called syntax-properties and you can use the syntax-property function to attach one to the output of the macro.<br><br>This is a link to the docs for drracket:module-language-tools:add-online-expansion-handler:<br>
<br><a href="http://docs.racket-lang.org/tools/drracket_module-language-tools.html#%28def._%28%28lib._drracket%2Ftool-lib..rkt%29._drracket~3amodule-language-tools~3aadd-online-expansion-handler%29%29">http://docs.racket-lang.org/tools/drracket_module-language-tools.html#%28def._%28%28lib._drracket%2Ftool-lib..rkt%29._drracket~3amodule-language-tools~3aadd-online-expansion-handler%29%29</a><div>
<br></div><div style>That is how the information for the arrows are collected. The precise grammar of the syntax object is given here: </div><div style><br></div><div style><a href="http://docs.racket-lang.org/reference/syntax-model.html?q=expand#%28part._fully-expanded%29">http://docs.racket-lang.org/reference/syntax-model.html?q=expand#%28part._fully-expanded%29</a><br>
</div><div style><br></div><div style>but I think you can probably get away with a simpler loop that just walks over the syntax object like this:</div><div style><br></div><div style><div>(define (walk-over stx)</div><div>
(let loop ([stx stx])</div><div> (cond</div><div> [(syntax? stx)</div><div> (check-for-property-and-do-something stx)</div><div> (loop (syntax-e stx))]</div><div> [(pair? stx)</div><div> (loop (car stx))</div>
<div> (loop (cdr stx))]</div><div> [else (void)])))</div><div><br></div><div style>The check-for-property-and-do-something would collect whatever information was left in the properties and return it using the drracket:module-language-tools:add-online-expansion-handler handler.</div>
<div style><br></div><div style>hth,</div><div style>Robby</div><div style><br></div><div style><br></div><div style><br></div></div></div>