1 import os
2 import sys
3 from pathlib import Path
4
5 CPYTHON_ROOT = Path(__file__).resolve().parent.parent.parent.parent
6 sys.path.append(str(CPYTHON_ROOT / "Parser"))
7
8 from pygments.lexer import RegexLexer, bygroups, include, words
9 from pygments.token import (Comment, Generic, Keyword, Name, Operator,
10 Punctuation, Text)
11
12 from asdl import builtin_types
13 from sphinx.highlighting import lexers
14
15 class ESC[4;38;5;81mASDLLexer(ESC[4;38;5;149mRegexLexer):
16 name = "ASDL"
17 aliases = ["asdl"]
18 filenames = ["*.asdl"]
19 _name = r"([^\W\d]\w*)"
20 _text_ws = r"(\s*)"
21
22 tokens = {
23 "ws": [
24 (r"\n", Text),
25 (r"\s+", Text),
26 (r"--.*?$", Comment.Singleline),
27 ],
28 "root": [
29 include("ws"),
30 (
31 r"(module)" + _text_ws + _name,
32 bygroups(Keyword, Text, Name.Tag),
33 ),
34 (
35 r"(\w+)(\*\s|\?\s|\s)(\w+)",
36 bygroups(Name.Builtin.Pseudo, Operator, Name),
37 ),
38 (words(builtin_types), Name.Builtin),
39 (r"attributes", Name.Builtin),
40 (
41 _name + _text_ws + "(=)",
42 bygroups(Name, Text, Operator),
43 ),
44 (_name, Name.Class),
45 (r"\|", Operator),
46 (r"{|}|\(|\)", Punctuation),
47 (r".", Text),
48 ],
49 }
50
51
52 def setup(app):
53 lexers["asdl"] = ASDLLexer()
54 return {'version': '1.0', 'parallel_read_safe': True}