17db96d56Sopenharmony_ciimport os
27db96d56Sopenharmony_ciimport sys
37db96d56Sopenharmony_cifrom pathlib import Path
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ciCPYTHON_ROOT = Path(__file__).resolve().parent.parent.parent.parent
67db96d56Sopenharmony_cisys.path.append(str(CPYTHON_ROOT / "Parser"))
77db96d56Sopenharmony_ci
87db96d56Sopenharmony_cifrom pygments.lexer import RegexLexer, bygroups, include, words
97db96d56Sopenharmony_cifrom pygments.token import (Comment, Generic, Keyword, Name, Operator,
107db96d56Sopenharmony_ci                            Punctuation, Text)
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_cifrom asdl import builtin_types
137db96d56Sopenharmony_cifrom sphinx.highlighting import lexers
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ciclass ASDLLexer(RegexLexer):
167db96d56Sopenharmony_ci    name = "ASDL"
177db96d56Sopenharmony_ci    aliases = ["asdl"]
187db96d56Sopenharmony_ci    filenames = ["*.asdl"]
197db96d56Sopenharmony_ci    _name = r"([^\W\d]\w*)"
207db96d56Sopenharmony_ci    _text_ws = r"(\s*)"
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ci    tokens = {
237db96d56Sopenharmony_ci        "ws": [
247db96d56Sopenharmony_ci            (r"\n", Text),
257db96d56Sopenharmony_ci            (r"\s+", Text),
267db96d56Sopenharmony_ci            (r"--.*?$", Comment.Singleline),
277db96d56Sopenharmony_ci        ],
287db96d56Sopenharmony_ci        "root": [
297db96d56Sopenharmony_ci            include("ws"),
307db96d56Sopenharmony_ci            (
317db96d56Sopenharmony_ci                r"(module)" + _text_ws + _name,
327db96d56Sopenharmony_ci                bygroups(Keyword, Text, Name.Tag),
337db96d56Sopenharmony_ci            ),
347db96d56Sopenharmony_ci            (
357db96d56Sopenharmony_ci                r"(\w+)(\*\s|\?\s|\s)(\w+)",
367db96d56Sopenharmony_ci                bygroups(Name.Builtin.Pseudo, Operator, Name),
377db96d56Sopenharmony_ci            ),
387db96d56Sopenharmony_ci            (words(builtin_types), Name.Builtin),
397db96d56Sopenharmony_ci            (r"attributes", Name.Builtin),
407db96d56Sopenharmony_ci            (
417db96d56Sopenharmony_ci                _name + _text_ws + "(=)",
427db96d56Sopenharmony_ci                bygroups(Name, Text, Operator),
437db96d56Sopenharmony_ci            ),
447db96d56Sopenharmony_ci            (_name, Name.Class),
457db96d56Sopenharmony_ci            (r"\|", Operator),
467db96d56Sopenharmony_ci            (r"{|}|\(|\)", Punctuation),
477db96d56Sopenharmony_ci            (r".", Text),
487db96d56Sopenharmony_ci        ],
497db96d56Sopenharmony_ci    }
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_cidef setup(app):
537db96d56Sopenharmony_ci    lexers["asdl"] = ASDLLexer()
547db96d56Sopenharmony_ci    return {'version': '1.0', 'parallel_read_safe': True}
55