cannam@133: #! /usr/bin/env python cannam@133: cannam@133: from pygments.lexer import RegexLexer cannam@133: from pygments.token import * cannam@133: cannam@133: class CapnpLexer(RegexLexer): cannam@133: name = "Cap'n Proto lexer" cannam@133: aliases = ['capnp'] cannam@133: filenames = ['*.capnp'] cannam@133: cannam@133: tokens = { cannam@133: 'root': [ cannam@133: (r'#.*?$', Comment.Single), cannam@133: (r'@[0-9a-zA-Z]*', Name.Decorator), cannam@133: (r'=', Literal, 'expression'), cannam@133: (r':', Name.Class, 'type'), cannam@133: (r'\$', Name.Attribute, 'annotation'), cannam@133: (r'(struct|enum|interface|union|import|using|const|annotation|extends|in|of|on|as|with|from|fixed)\b', cannam@133: Token.Keyword), cannam@133: (r'[a-zA-Z0-9_.]+', Token.Name), cannam@133: (r'[^#@=:$a-zA-Z0-9_]+', Text), cannam@133: ], cannam@133: 'type': [ cannam@133: (r'[^][=;,(){}$]+', Name.Class), cannam@133: (r'[[(]', Name.Class, 'parentype'), cannam@133: (r'', Name.Class, '#pop') cannam@133: ], cannam@133: 'parentype': [ cannam@133: (r'[^][;()]+', Name.Class), cannam@133: (r'[[(]', Name.Class, '#push'), cannam@133: (r'[])]', Name.Class, '#pop'), cannam@133: (r'', Name.Class, '#pop') cannam@133: ], cannam@133: 'expression': [ cannam@133: (r'[^][;,(){}$]+', Literal), cannam@133: (r'[[(]', Literal, 'parenexp'), cannam@133: (r'', Literal, '#pop') cannam@133: ], cannam@133: 'parenexp': [ cannam@133: (r'[^][;()]+', Literal), cannam@133: (r'[[(]', Literal, '#push'), cannam@133: (r'[])]', Literal, '#pop'), cannam@133: (r'', Literal, '#pop') cannam@133: ], cannam@133: 'annotation': [ cannam@133: (r'[^][;,(){}=:]+', Name.Attribute), cannam@133: (r'[[(]', Name.Attribute, 'annexp'), cannam@133: (r'', Name.Attribute, '#pop') cannam@133: ], cannam@133: 'annexp': [ cannam@133: (r'[^][;()]+', Name.Attribute), cannam@133: (r'[[(]', Name.Attribute, '#push'), cannam@133: (r'[])]', Name.Attribute, '#pop'), cannam@133: (r'', Name.Attribute, '#pop') cannam@133: ], cannam@133: } cannam@133: cannam@133: if __name__ == "__main__": cannam@133: from setuptools import setup, find_packages cannam@133: setup(name = "CapnpPygmentsLexer", cannam@133: version = "0.1", cannam@133: packages = find_packages(), cannam@133: py_modules = [ 'capnp_lexer' ], cannam@133: entry_points = {'pygments.lexers': 'capnp = capnp_lexer:CapnpLexer'})