"" "
pygments.lexers.teraterm
~~~~~~~~~~~~~~~~~~~~~~~~
Lexer
for Tera Term macro files.
:copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
:license: BSD, see LICENSE
for details.
"" "
import re
from pygments.lexer
import RegexLexer, include, bygroups
from pygments.token
import Text, Comment, Operator, Name, String, \
Number, Keyword, Error
__all__ = [
'TeraTermLexer' ]
class TeraTermLexer(RegexLexer):
"" "
For Tera Term macro source code.
"" "
name =
'Tera Term macro'
url =
'https://ttssh2.osdn.jp/ '
aliases = [
'teratermmacro' ,
'teraterm' ,
'ttl' ]
filenames = [
'*.ttl' ]
mimetypes = [
'text/x-teratermmacro' ]
version_added =
'2.4'
tokens = {
'root' : [
include(
'comments' ),
include(
'labels' ),
include(
'commands' ),
include(
'builtin-variables' ),
include(
'user-variables' ),
include(
'operators' ),
include(
'numeric-literals' ),
include(
'string-literals' ),
include(
'all-whitespace' ),
(r
'\S' , Text),
],
'comments' : [
(r
';[^\r\n]*' , Comment.Single),
(r
'/\*' , Comment.Multiline,
'in-comment' ),
],
'in-comment' : [
(r
'\*/' , Comment.Multiline,
'#pop'),
(r
'[^*/]+' , Comment.Multiline),
(r
'[*/]' , Comment.Multiline)
],
'labels' : [
(r
'(?i)^(\s*)(:[a-z0-9_]+)' , bygroups(Text.Whitespace, Name.Label)),
],
'commands' : [
(
r
'(?i)\b('
r
'basename|'
r
'beep|'
r
'bplusrecv|'
r
'bplussend|'
r
'break|'
r
'bringupbox|'
# 'call' is handled separately.
r
'callmenu|'
r
'changedir|'
r
'checksum16|'
r
'checksum16file|'
r
'checksum32|'
r
'checksum32file|'
r
'checksum8|'
r
'checksum8file|'
r
'clearscreen|'
r
'clipb2var|'
r
'closesbox|'
r
'closett|'
r
'code2str|'
r
'connect|'
r
'continue|'
r
'crc16|'
r
'crc16file|'
r
'crc32|'
r
'crc32file|'
r
'cygconnect|'
r
'delpassword|'
r
'dirname|'
r
'dirnamebox|'
r
'disconnect|'
r
'dispstr|'
r
'do|'
r
'else|'
r
'elseif|'
r
'enablekeyb|'
r
'end|'
r
'endif|'
r
'enduntil|'
r
'endwhile|'
r
'exec|'
r
'execcmnd|'
r
'exit|'
r
'expandenv|'
r
'fileclose|'
r
'fileconcat|'
r
'filecopy|'
r
'filecreate|'
r
'filedelete|'
r
'filelock|'
r
'filemarkptr|'
r
'filenamebox|'
r
'fileopen|'
r
'fileread|'
r
'filereadln|'
r
'filerename|'
r
'filesearch|'
r
'fileseek|'
r
'fileseekback|'
r
'filestat|'
r
'filestrseek|'
r
'filestrseek2|'
r
'filetruncate|'
r
'fileunlock|'
r
'filewrite|'
r
'filewriteln|'
r
'findclose|'
r
'findfirst|'
r
'findnext|'
r
'flushrecv|'
r
'foldercreate|'
r
'folderdelete|'
r
'foldersearch|'
r
'for|'
r
'getdate|'
r
'getdir|'
r
'getenv|'
r
'getfileattr|'
r
'gethostname|'
r
'getipv4addr|'
r
'getipv6addr|'
r
'getmodemstatus|'
r
'getpassword|'
r
'getspecialfolder|'
r
'gettime|'
r
'gettitle|'
r
'getttdir|'
r
'getver|'
# 'goto' is handled separately.
r
'if|'
r
'ifdefined|'
r
'include|'
r
'inputbox|'
r
'int2str|'
r
'intdim|'
r
'ispassword|'
r
'kmtfinish|'
r
'kmtget|'
r
'kmtrecv|'
r
'kmtsend|'
r
'listbox|'
r
'loadkeymap|'
r
'logautoclosemode|'
r
'logclose|'
r
'loginfo|'
r
'logopen|'
r
'logpause|'
r
'logrotate|'
r
'logstart|'
r
'logwrite|'
r
'loop|'
r
'makepath|'
r
'messagebox|'
r
'mpause|'
r
'next|'
r
'passwordbox|'
r
'pause|'
r
'quickvanrecv|'
r
'quickvansend|'
r
'random|'
r
'recvln|'
r
'regexoption|'
r
'restoresetup|'
r
'return|'
r
'rotateleft|'
r
'rotateright|'
r
'scprecv|'
r
'scpsend|'
r
'send|'
r
'sendbreak|'
r
'sendbroadcast|'
r
'sendfile|'
r
'sendkcode|'
r
'sendln|'
r
'sendlnbroadcast|'
r
'sendlnmulticast|'
r
'sendmulticast|'
r
'setbaud|'
r
'setdate|'
r
'setdebug|'
r
'setdir|'
r
'setdlgpos|'
r
'setdtr|'
r
'setecho|'
r
'setenv|'
r
'setexitcode|'
r
'setfileattr|'
r
'setflowctrl|'
r
'setmulticastname|'
r
'setpassword|'
r
'setrts|'
r
'setspeed|'
r
'setsync|'
r
'settime|'
r
'settitle|'
r
'show|'
r
'showtt|'
r
'sprintf|'
r
'sprintf2|'
r
'statusbox|'
r
'str2code|'
r
'str2int|'
r
'strcompare|'
r
'strconcat|'
r
'strcopy|'
r
'strdim|'
r
'strinsert|'
r
'strjoin|'
r
'strlen|'
r
'strmatch|'
r
'strremove|'
r
'strreplace|'
r
'strscan|'
r
'strspecial|'
r
'strsplit|'
r
'strtrim|'
r
'testlink|'
r
'then|'
r
'tolower|'
r
'toupper|'
r
'unlink|'
r
'until|'
r
'uptime|'
r
'var2clipb|'
r
'wait|'
r
'wait4all|'
r
'waitevent|'
r
'waitln|'
r
'waitn|'
r
'waitrecv|'
r
'waitregex|'
r
'while|'
r
'xmodemrecv|'
r
'xmodemsend|'
r
'yesnobox|'
r
'ymodemrecv|'
r
'ymodemsend|'
r
'zmodemrecv|'
r
'zmodemsend'
r
')\b' ,
Keyword,
),
(r
'(?i)(call|goto)([ \t]+)([a-z0-9_]+)' ,
bygroups(Keyword, Text.Whitespace, Name.Label)),
],
'builtin-variables' : [
(
r
'(?i)('
r
'groupmatchstr1|'
r
'groupmatchstr2|'
r
'groupmatchstr3|'
r
'groupmatchstr4|'
r
'groupmatchstr5|'
r
'groupmatchstr6|'
r
'groupmatchstr7|'
r
'groupmatchstr8|'
r
'groupmatchstr9|'
r
'inputstr|'
r
'matchstr|'
r
'mtimeout|'
r
'param1|'
r
'param2|'
r
'param3|'
r
'param4|'
r
'param5|'
r
'param6|'
r
'param7|'
r
'param8|'
r
'param9|'
r
'paramcnt|'
r
'params|'
r
'result|'
r
'timeout'
r
')\b' ,
Name.Builtin
),
],
'user-variables' : [
(r
'(?i)[a-z_][a-z0-9_]*' , Name.Variable),
],
'numeric-literals' : [
(r
'(-?)([0-9]+)' , bygroups(Operator, Number.Integer)),
(r
'(?i)\$[0-9a-f]+' , Number.Hex),
],
'string-literals' : [
(r
'(?i)#(?:[0-9]+|\$[0-9a-f]+)', String.Char),
(r
"'[^'\n]*'" , String.Single),
(r
'"[^"\n]*"' , String.Double),
# Opening quotes without a closing quote on the same line are errors.
(r
"('[^']*)(\n)" , bygroups(Error, Text.Whitespace)),
(r
'("[^"]*)(\n)' , bygroups(Error, Text.Whitespace)),
],
'operators' : [
(r
'and|not|or|xor' , Operator.Word),
(r
'[!%&*+<=>^~\|\/-]+' , Operator),
(r
'[()]' , String.Symbol),
],
'all-whitespace' : [
(r
'\s+' , Text.Whitespace),
],
}
# Turtle and Tera Term macro files share the same file extension
# but each has a recognizable and distinct syntax.
def analyse_text(text):
if re.search(TeraTermLexer.tokens[
'commands' ][0][0], text):
return 0.01
Messung V0.5 C=91 H=89 G=89
¤ Dauer der Verarbeitung: 0.5 Sekunden
¤
*© Formatika GbR, Deutschland