The markers are called syntax-properties and you can use the syntax-property function to attach one to the output of the macro.
This is a link to the docs for drracket:module-language-tools:add-online-expansion-handler: 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 That is how the information for the arrows are collected. The precise grammar of the syntax object is given here: http://docs.racket-lang.org/reference/syntax-model.html?q=expand#%28part._fully-expanded%29 but I think you can probably get away with a simpler loop that just walks over the syntax object like this: (define (walk-over stx) (let loop ([stx stx]) (cond [(syntax? stx) (check-for-property-and-do-something stx) (loop (syntax-e stx))] [(pair? stx) (loop (car stx)) (loop (cdr stx))] [else (void)]))) 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. hth, Robby
____________________ Racket Users list: http://lists.racket-lang.org/users