"" "
pygments.lexers.tal
~~~~~~~~~~~~~~~~~~~
Lexer
for Uxntal
.. versionadded:: 2.12
:copyright: Copyright 2006-2024 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 source code.
"" "
name =
'Tal'
aliases = [
'tal' ,
'uxntal' ]
filenames = [
'*.tal' ]
mimetypes = [
'text/x-uxntal' ]
url =
'https://wiki.xxiivv.com/site/uxntal.html '
version_added =
'2.12'
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]
Messung V0.5 in Prozent C=87 H=70 G=78
¤ Dauer der Verarbeitung: 0.1 Sekunden
(vorverarbeitet am 2026-04-26)
¤
*© Formatika GbR, Deutschland