[racket] color partial lexemes

From: Jon Rafkind (rafkind at cs.utah.edu)
Date: Tue Aug 2 18:24:17 EDT 2011

On 08/02/2011 03:36 PM, Robby Findler wrote:
> On Tue, Aug 2, 2011 at 4:18 PM, Jon Rafkind <rafkind at cs.utah.edu> wrote:
>> On 08/02/2011 12:57 PM, Jon Rafkind wrote:
>> Oh sorry, I realize I was talking about two different things. I set up a
>> test case that creates a color:text% and explicitly calls `start-colorer'
>> with the pairs, style, and get-token things I defined, but for implementing
>> a language I only have access to #:info.
>> I think some new keys can be passed to the #:info function that can get a
>> new pair list and style function. I'll work on a patch for that.
>> After searching a handful of paths it seems the only way to make this work
>> is to hook into the 'run' button. I imagine that start-colorer can be called
>> each time 'run' is invoked and at which time the #:info function can be
>> probed for the `pairs', `token-sym->symbol' and possibly the lexer as well.
>> A cursory glance at module-lexer looks like its going through the whole
>> process of getting the lexer by 1. calling `read-language' and 2. calling
>> (get-info 'color-lexer). This seems like redundant work if the #lang hasn't
>> changed. Hooking into the run button could do most of this work once.
> No, it doesn't do that. It detects when you edit the region around the
> #lang (this is why the docs say not to read too far into the port;
> that's how it knows).
> I don't think we want to tie this to the run button. DrRacket already
> sets up the right stuff to know when to check to change the colorer;
> we should just continue to use that.
> Can you be more precise about what is not working for you?

I need a way to override the `token-sym->symbol' function that returns a
style given a symbol representing the current lexeme and a way to
override the `pairs' list that contains matching paren-like symbols.

The module-reader currently has a #:info argument that lets you return a
new lexer when passed 'color-lexer but there is no way to override the
other two things (token-sym->symbol and pairs).

Posted on the users mailing list.