cannam@48
|
1 #! /usr/bin/env python
|
cannam@48
|
2
|
cannam@48
|
3 from pygments.lexer import RegexLexer
|
cannam@48
|
4 from pygments.token import *
|
cannam@48
|
5
|
cannam@48
|
6 class CapnpLexer(RegexLexer):
|
cannam@48
|
7 name = "Cap'n Proto lexer"
|
cannam@48
|
8 aliases = ['capnp']
|
cannam@48
|
9 filenames = ['*.capnp']
|
cannam@48
|
10
|
cannam@48
|
11 tokens = {
|
cannam@48
|
12 'root': [
|
cannam@48
|
13 (r'#.*?$', Comment.Single),
|
cannam@48
|
14 (r'@[0-9a-zA-Z]*', Name.Decorator),
|
cannam@48
|
15 (r'=', Literal, 'expression'),
|
cannam@48
|
16 (r':', Name.Class, 'type'),
|
cannam@48
|
17 (r'\$', Name.Attribute, 'annotation'),
|
cannam@48
|
18 (r'(struct|enum|interface|union|import|using|const|annotation|extends|in|of|on|as|with|from|fixed)\b',
|
cannam@48
|
19 Token.Keyword),
|
cannam@48
|
20 (r'[a-zA-Z0-9_.]+', Token.Name),
|
cannam@48
|
21 (r'[^#@=:$a-zA-Z0-9_]+', Text),
|
cannam@48
|
22 ],
|
cannam@48
|
23 'type': [
|
cannam@48
|
24 (r'[^][=;,(){}$]+', Name.Class),
|
cannam@48
|
25 (r'[[(]', Name.Class, 'parentype'),
|
cannam@48
|
26 (r'', Name.Class, '#pop')
|
cannam@48
|
27 ],
|
cannam@48
|
28 'parentype': [
|
cannam@48
|
29 (r'[^][;()]+', Name.Class),
|
cannam@48
|
30 (r'[[(]', Name.Class, '#push'),
|
cannam@48
|
31 (r'[])]', Name.Class, '#pop'),
|
cannam@48
|
32 (r'', Name.Class, '#pop')
|
cannam@48
|
33 ],
|
cannam@48
|
34 'expression': [
|
cannam@48
|
35 (r'[^][;,(){}$]+', Literal),
|
cannam@48
|
36 (r'[[(]', Literal, 'parenexp'),
|
cannam@48
|
37 (r'', Literal, '#pop')
|
cannam@48
|
38 ],
|
cannam@48
|
39 'parenexp': [
|
cannam@48
|
40 (r'[^][;()]+', Literal),
|
cannam@48
|
41 (r'[[(]', Literal, '#push'),
|
cannam@48
|
42 (r'[])]', Literal, '#pop'),
|
cannam@48
|
43 (r'', Literal, '#pop')
|
cannam@48
|
44 ],
|
cannam@48
|
45 'annotation': [
|
cannam@48
|
46 (r'[^][;,(){}=:]+', Name.Attribute),
|
cannam@48
|
47 (r'[[(]', Name.Attribute, 'annexp'),
|
cannam@48
|
48 (r'', Name.Attribute, '#pop')
|
cannam@48
|
49 ],
|
cannam@48
|
50 'annexp': [
|
cannam@48
|
51 (r'[^][;()]+', Name.Attribute),
|
cannam@48
|
52 (r'[[(]', Name.Attribute, '#push'),
|
cannam@48
|
53 (r'[])]', Name.Attribute, '#pop'),
|
cannam@48
|
54 (r'', Name.Attribute, '#pop')
|
cannam@48
|
55 ],
|
cannam@48
|
56 }
|
cannam@48
|
57
|
cannam@48
|
58 if __name__ == "__main__":
|
cannam@48
|
59 from setuptools import setup, find_packages
|
cannam@48
|
60 setup(name = "CapnpPygmentsLexer",
|
cannam@48
|
61 version = "0.1",
|
cannam@48
|
62 packages = find_packages(),
|
cannam@48
|
63 py_modules = [ 'capnp_lexer' ],
|
cannam@48
|
64 entry_points = {'pygments.lexers': 'capnp = capnp_lexer:CapnpLexer'})
|