55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
import os
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
CPYTHON_ROOT = Path(__file__).resolve().parent.parent.parent.parent
|
|
sys.path.append(str(CPYTHON_ROOT / "Parser"))
|
|
|
|
from pygments.lexer import RegexLexer, bygroups, include, words
|
|
from pygments.token import (Comment, Generic, Keyword, Name, Operator,
|
|
Punctuation, Text)
|
|
|
|
from asdl import builtin_types
|
|
from sphinx.highlighting import lexers
|
|
|
|
class ASDLLexer(RegexLexer):
|
|
name = "ASDL"
|
|
aliases = ["asdl"]
|
|
filenames = ["*.asdl"]
|
|
_name = r"([^\W\d]\w*)"
|
|
_text_ws = r"(\s*)"
|
|
|
|
tokens = {
|
|
"ws": [
|
|
(r"\n", Text),
|
|
(r"\s+", Text),
|
|
(r"--.*?$", Comment.Singleline),
|
|
],
|
|
"root": [
|
|
include("ws"),
|
|
(
|
|
r"(module)" + _text_ws + _name,
|
|
bygroups(Keyword, Text, Name.Tag),
|
|
),
|
|
(
|
|
r"(\w+)(\*\s|\?\s|\s)(\w+)",
|
|
bygroups(Name.Builtin.Pseudo, Operator, Name),
|
|
),
|
|
(words(builtin_types), Name.Builtin),
|
|
(r"attributes", Name.Builtin),
|
|
(
|
|
_name + _text_ws + "(=)",
|
|
bygroups(Name, Text, Operator),
|
|
),
|
|
(_name, Name.Class),
|
|
(r"\|", Operator),
|
|
(r"{|}|\(|\)", Punctuation),
|
|
(r".", Text),
|
|
],
|
|
}
|
|
|
|
|
|
def setup(app):
|
|
lexers["asdl"] = ASDLLexer()
|
|
return {'version': '1.0', 'parallel_read_safe': True}
|