1import os 2import sys 3from pathlib import Path 4 5CPYTHON_ROOT = Path(__file__).resolve().parent.parent.parent.parent 6sys.path.append(str(CPYTHON_ROOT / "Parser")) 7 8from pygments.lexer import RegexLexer, bygroups, include, words 9from pygments.token import (Comment, Generic, Keyword, Name, Operator, 10 Punctuation, Text) 11 12from asdl import builtin_types 13from sphinx.highlighting import lexers 14 15class ASDLLexer(RegexLexer): 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 52def setup(app): 53 lexers["asdl"] = ASDLLexer() 54 return {'version': '1.0', 'parallel_read_safe': True} 55