Path: blob/main/Doc/tools/extensions/asdl_highlight.py
12 views
import sys1from pathlib import Path23CPYTHON_ROOT = Path(__file__).resolve().parent.parent.parent.parent4sys.path.append(str(CPYTHON_ROOT / "Parser"))56from pygments.lexer import RegexLexer, bygroups, include, words7from pygments.token import (Comment, Keyword, Name, Operator,8Punctuation, Text)910from asdl import builtin_types11from sphinx.highlighting import lexers1213class ASDLLexer(RegexLexer):14name = "ASDL"15aliases = ["asdl"]16filenames = ["*.asdl"]17_name = r"([^\W\d]\w*)"18_text_ws = r"(\s*)"1920tokens = {21"ws": [22(r"\n", Text),23(r"\s+", Text),24(r"--.*?$", Comment.Singleline),25],26"root": [27include("ws"),28(29r"(module)" + _text_ws + _name,30bygroups(Keyword, Text, Name.Tag),31),32(33r"(\w+)(\*\s|\?\s|\s)(\w+)",34bygroups(Name.Builtin.Pseudo, Operator, Name),35),36(words(builtin_types), Name.Builtin),37(r"attributes", Name.Builtin),38(39_name + _text_ws + "(=)",40bygroups(Name, Text, Operator),41),42(_name, Name.Class),43(r"\|", Operator),44(r"{|}|\(|\)", Punctuation),45(r".", Text),46],47}484950def setup(app):51lexers["asdl"] = ASDLLexer()52return {'version': '1.0', 'parallel_read_safe': True}535455