diff options
Diffstat (limited to 'venv/lib/python3.11/site-packages/pygments/lexers/tal.py')
| -rw-r--r-- | venv/lib/python3.11/site-packages/pygments/lexers/tal.py | 77 | 
1 files changed, 77 insertions, 0 deletions
diff --git a/venv/lib/python3.11/site-packages/pygments/lexers/tal.py b/venv/lib/python3.11/site-packages/pygments/lexers/tal.py new file mode 100644 index 0000000..170b781 --- /dev/null +++ b/venv/lib/python3.11/site-packages/pygments/lexers/tal.py @@ -0,0 +1,77 @@ +""" +    pygments.lexers.tal +    ~~~~~~~~~~~~~~~~~~~ + +    Lexer for Uxntal + +    .. versionadded:: 2.12 + +    :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS. +    :license: BSD, see LICENSE for details. +""" + +from pygments.lexer import RegexLexer, words +from pygments.token import Comment, Keyword, Name, String, Number, \ +    Punctuation, Whitespace, Literal + +__all__ = ['TalLexer'] + + +class TalLexer(RegexLexer): +    """ +    For `Uxntal <https://wiki.xxiivv.com/site/uxntal.html>`_ source code. + +    .. versionadded:: 2.12 +    """ + +    name = 'Tal' +    aliases = ['tal', 'uxntal'] +    filenames = ['*.tal'] +    mimetypes = ['text/x-uxntal'] + +    instructions = [ +        'BRK', 'LIT', 'INC', 'POP', 'DUP', 'NIP', 'SWP', 'OVR', 'ROT', +        'EQU', 'NEQ', 'GTH', 'LTH', 'JMP', 'JCN', 'JSR', 'STH', +        'LDZ', 'STZ', 'LDR', 'STR', 'LDA', 'STA', 'DEI', 'DEO', +        'ADD', 'SUB', 'MUL', 'DIV', 'AND', 'ORA', 'EOR', 'SFT' +    ] + +    tokens = { +        # the comment delimiters must not be adjacent to non-space characters. +        # this means ( foo ) is a valid comment but (foo) is not. this also +        # applies to nested comments. +        'comment': [ +            (r'(?<!\S)\((?!\S)', Comment.Multiline, '#push'), # nested comments +            (r'(?<!\S)\)(?!\S)', Comment.Multiline, '#pop'), # nested comments +            (r'[^()]+', Comment.Multiline), # comments +            (r'[()]+', Comment.Multiline), # comments +        ], +        'root': [ +            (r'\s+', Whitespace), # spaces +            (r'(?<!\S)\((?!\S)', Comment.Multiline, 'comment'), # comments +            (words(instructions, prefix=r'(?<!\S)', suffix=r'2?k?r?(?!\S)'), +             Keyword.Reserved), # instructions +            (r'[][{}](?!\S)', Punctuation), # delimiters +            (r'#([0-9a-f]{2}){1,2}(?!\S)', Number.Hex), # integer +            (r'"\S+', String), # raw string +            (r'([0-9a-f]{2}){1,2}(?!\S)', Literal), # raw integer +            (r'[|$][0-9a-f]{1,4}(?!\S)', Keyword.Declaration), # abs/rel pad +            (r'%\S+', Name.Decorator), # macro +            (r'@\S+', Name.Function), # label +            (r'&\S+', Name.Label), # sublabel +            (r'/\S+', Name.Tag), # spacer +            (r'\.\S+', Name.Variable.Magic), # literal zero page addr +            (r',\S+', Name.Variable.Instance), # literal rel addr +            (r';\S+', Name.Variable.Global), # literal abs addr +            (r'-\S+', Literal), # raw zero page addr +            (r'_\S+', Literal), # raw relative addr +            (r'=\S+', Literal), # raw absolute addr +            (r'!\S+', Name.Function), # immediate jump +            (r'\?\S+', Name.Function), # conditional immediate jump +            (r'~\S+', Keyword.Namespace), # include +            (r'\S+', Name.Function), # macro invocation, immediate subroutine +        ] +    } + +    def analyse_text(text): +        return '|0100' in text[:500]  | 
