[darcs-users] Darcs Patch highlighting

Max Battcher me at worldmaker.net
Fri Mar 30 15:27:01 UTC 2007


As part of a larger project I decided that I wanted highlighting for
Darcs Patches.  This would be output of commands such as darcs
annotate --patch and darcs send --output

What I've arrived at (attached) is a lexer for the Pygments syntax
highlighting library[1].  I built it largely from trial and error, but
this version seems to work against a wide range of patches I've been
testing it against.

I'd love any feedback on it.  Following further testing and usage I'd
like to submit to the Pygments team for inclusion as a core lexer.

[1] http://pygments.pocoo.org

-- 
--Max Battcher--
http://www.worldmaker.net/
-------------- next part --------------
from pygments.lexer import RegexLexer, bygroups
from pygments.token import *

"""
Lexers for use with Pygments Syntax Highlighting
"""

class DarcsPatchLexer(RegexLexer):
    """
    DarcsPatchLexer is a lexer for the various versions of the darcs patch
    format.  Examples of this format are derived by commands such as
    ``darcs annotate --patch`` and ``darcs send``.
    """
    name='Darcs Patch'
    aliases=['dpatch']
    filenames=['*.dpatch', '*.darcspatch']

    tokens = {
        'root': [
            (r'<', Operator),
            (r'>', Operator),
            (r'{', Operator, 'patch'),
            (r'(\[)((?:TAG )?)(.*)(\n)(.*)(\*\*)(\d+)(\s?)', bygroups(Operator, Keyword, Name, Text,
                Name, Operator, Literal.Date, Text), 'comment'),
            (r'New patches:', Generic.Heading),
            (r'Context:', Generic.Heading),
            (r'Patch bundle hash:', Generic.Heading),
            (r'\s+|\w+', Text),
        ],
        'comment': [
            (r' .*\n', Comment),
            (r'\]', Operator, "#pop"),
        ],
        'patch': [
            (r'}', Operator, "#pop"),
            (r'(\w+)(.*\n)', bygroups(Keyword, Text)),
            (r'\+.*\n', Generic.Inserted),
            (r'-.*\n', Generic.Deleted),
            (r'.*\n', Text),
        ],
    }

# vim: et ts=4 sts=4 sw=4


More information about the darcs-users mailing list