bpo-40517: Implement syntax highlighting support for ASDL (#19928) · python/cpython@d60040b (original) (raw)
``
1
`+
import os
`
``
2
`+
import sys
`
``
3
`+
sys.path.append(os.path.abspath("../Parser/"))
`
``
4
+
``
5
`+
from pygments.lexer import RegexLexer, bygroups, include, words
`
``
6
`+
from pygments.token import (Comment, Generic, Keyword, Name, Operator,
`
``
7
`+
Punctuation, Text)
`
``
8
+
``
9
`+
from asdl import builtin_types
`
``
10
`+
from sphinx.highlighting import lexers
`
``
11
+
``
12
`+
class ASDLLexer(RegexLexer):
`
``
13
`+
name = "ASDL"
`
``
14
`+
aliases = ["asdl"]
`
``
15
`+
filenames = ["*.asdl"]
`
``
16
`+
_name = r"([^\W\d]\w*)"
`
``
17
`+
_text_ws = r"(\s*)"
`
``
18
+
``
19
`+
tokens = {
`
``
20
`+
"ws": [
`
``
21
`+
(r"\n", Text),
`
``
22
`+
(r"\s+", Text),
`
``
23
`+
(r"--.*?$", Comment.Singleline),
`
``
24
`+
],
`
``
25
`+
"root": [
`
``
26
`+
include("ws"),
`
``
27
`+
(
`
``
28
`+
r"(module)" + _text_ws + _name,
`
``
29
`+
bygroups(Keyword, Text, Name.Class),
`
``
30
`+
),
`
``
31
`+
(
`
``
32
`+
r"(\w+)(*\s|?\s|\s)(\w+)",
`
``
33
`+
bygroups(Name.Variable, Generic.Strong, Name.Tag),
`
``
34
`+
),
`
``
35
`+
(words(builtin_types), Keyword.Type),
`
``
36
`+
(r"attributes", Name.Builtin),
`
``
37
`+
(
`
``
38
`+
_name + _text_ws + "(=)",
`
``
39
`+
bygroups(Name.Variable, Text, Operator),
`
``
40
`+
),
`
``
41
`+
(_name, Name.Function),
`
``
42
`+
(r"|", Operator),
`
``
43
`+
(r"{|}|(|)", Punctuation),
`
``
44
`+
(r".", Text),
`
``
45
`+
],
`
``
46
`+
}
`
``
47
+
``
48
+
``
49
`+
def setup(app):
`
``
50
`+
lexers["asdl"] = ASDLLexer()
`
``
51
`+
return {'version': '1.0', 'parallel_read_safe': True}
`