[racket] Anyone familiar with mercurial? Add syntax coloring to github?

From: Greg Hendershott (greghendershott at gmail.com)
Date: Mon Aug 13 08:46:10 EDT 2012

I spent more time on this, including trying to recognzie all the
variations of numbers like these:

(values
 ;; #b
 #b1.1
 #b-1.1
 #b1e1
 #b1/1
 #b0/1
 #b1e-1
 #b101
 #b2 ;highlight as error

 ;; #d
 #d-1.23
 #d1.123
 #d1e3
 #d1e-22
 #d1/2
 #d-1/2
 #d1
 #d-1
 #dZ ;highlight as error

 ;; No # reader prefix -- same as #d
 -1.23
 1.123
 1e3
 1e-22
 1/2
 -1/2
 1
 -1

 ;; #e
 #e-1.23
 #e1.123
 #e1e3
 #e1e-22
 #e1
 #e-1
 #e1/2
 #e-1/2
 #eZ ;highlight as error

 ;; #i always float
 #i-1.23
 #i1.123
 #i1e3
 #i1e-22
 #i1/2
 #i-1/2
 #i1
 #i-1
 #iZ ;highlight as error

 ;; #o
 #o777.777
 #o-777.777
 #o777e777
 #o777e-777
 #o3/7
 #o-3/7
 #o777
 #o-777
 #08 ;highlight as error

 ;; #x
 #x-f.f
 #xf.f
 #x-f
 #xf
 #xG ;highlight as error

 )

In this way (Python):

            ## numbers: Keep in mind Racket reader hash prefixes,
            ## which can denote the base or the type. These don't map
            ## neatly onto pygment token types; some judgment calls
            ## here.  Note that none of these regexps attempt to
            ## exclude identifiers that start with a number, such as a
            ## variable named "100-Continue".

            # #b
            (r'#b[-+]?[01]+\.[01]+', Number.Float),
            (r'#b[01]+e[-+]?[01]+', Number.Float),
            (r'#b[-+]?[01]/[01]+', Number),
            (r'#b[-+]?[01]+', Number.Integer),
            (r'#b\S*', Error),

            # #d OR no hash prefix
            (r'(#d)?[-+]?\d+\.\d+', Number.Float),
            (r'(#d)?\d+e[-+]?\d+', Number.Float),
            (r'(#d)?[-+]?\d+/\d+', Number),
            (r'(#d)?[-+]?\d+', Number.Integer),
            (r'#d\S*', Error),

            # #e
            (r'#e[-+]?\d+\.\d+', Number.Float),
            (r'#e\d+e[-+]?\d+', Number.Float),
            (r'#e[-+]?\d+/\d+', Number),
            (r'#e[-+]?\d+', Number),
            (r'#e\S*', Error),

            # #i is always inexact-real, i.e. float
            (r'#i[-+]?\d+\.\d+', Number.Float),
            (r'#i\d+e[-+]?\d+', Number.Float),
            (r'#i[-+]?\d+/\d+', Number.Float),
            (r'#i[-+]?\d+', Number.Float),
            (r'#i\S*', Error),

            # #o
            (r'#o[-+]?[0-7]+\.[0-7]+', Number.Oct),
            (r'#o[0-7]+e[-+]?[0-7]+', Number.Oct),
            (r'#o[-+]?[0-7]+/[0-7]+', Number.Oct),
            (r'#o[-+]?[0-7]+', Number.Oct),
            (r'#o\S*', Error),

            # #x
            (r'#x[-+]?[0-9a-fA-F]+\.[0-9a-fA-F]+', Number.Hex),
            # the exponent variation (e.g. #x1e1) is N/A
            (r'#x[-+]?[0-9a-fA-F]+/[0-9a-fA-F]+', Number.Hex),
            (r'#x[-+]?[0-9a-fA-F]+', Number.Hex),
            (r'#x\S*', Error),

Talk about brain burn. :)

Also, Jens pointed out I should also handle curly braces. () = [] = {}

https://bitbucket.org/greghendershott/pygments-main

On Sun, Aug 12, 2012 at 6:50 PM, Sam Tobin-Hochstadt <samth at ccs.neu.edu> wrote:
> Wonderful!  This will make the github experience much nicer.
>
> On Sun, Aug 12, 2012 at 6:36 PM, Greg Hendershott
> <greghendershott at gmail.com> wrote:
>> So I followed up on this.
>>
>> https://bitbucket.org/greghendershott/pygments-main/changeset/240e51e2da13b079482f6b61c215280224f89f06
>>
>> ~~~~~
>> Add RacketLexer.
>>
>> Previously Racket files were handled by SchemeLexer. Instead, use a
>> proper RacketLexer, which handles Racket more appropriately:
>>
>>  1. Treat square brackets like parentheses.
>>  2. Expanded list of keywords.
>>  3. Different file extensions, MIME types, etc.
>>  4. Handle #:keyword arguments.
>>  5. Handle more number literals (e.g. #xFF, #o777, 2e2, #e232, etc.).
>>  6. Handle #| ... |# multiline comments (although NOT nested).
>> ~~~~~
>>
>> Before I give them a pull request, I wanted to give folks here a
>> chance to critique it (or even flatly veto it).
>>
>> Again, the goal is that eventually this would flow through to GitHub,
>> and improve the readability of Racket repos and gists.
>>
>> On Thu, Jun 2, 2011 at 12:49 PM, John Clements
>> <clements at brinckerhoff.org> wrote:
>>>
>>> On Jun 2, 2011, at 6:43 AM, Eli Barzilay wrote:
>>>
>>>> An hour ago, Vincent St-Amour wrote:
>>>>> At Thu, 2 Jun 2011 06:30:00 -0400,
>>>>> Greg Hendershott wrote:
>>>>>>  aliases = ['scheme', 'scm', 'ss', 'racket', 'rkt']
>>>>>
>>>>> rktl would probably fit in there too.
>>>>
>>>> (This is just in case someone takes it on more seriously: IIRC,
>>>> another issue with pygments was either ignoring square brackets, or
>>>> highlighting them as errors.)
>>>
>>> Gosh, sounds complicated.  I don't think any of us could handle that!
>>>
>>>
>>> John (goad, goad) Clements
>>>
>>>
>>> _________________________________________________
>>>   For list-related administrative tasks:
>>>   http://lists.racket-lang.org/listinfo/users
>> ____________________
>>   Racket Users list:
>>   http://lists.racket-lang.org/users
>
>
>
> --
> sam th
> samth at ccs.neu.edu

Posted on the users mailing list.