| """ |
| pygments.lexers.teraterm |
| ~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| Lexer for Tera Term macro files. |
| |
| :copyright: Copyright 2006-2023 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. |
| |
| .. versionadded:: 2.4 |
| """ |
| name = 'Tera Term macro' |
| url = 'https://ttssh2.osdn.jp/' |
| aliases = ['teratermmacro', 'teraterm', 'ttl'] |
| filenames = ['*.ttl'] |
| mimetypes = ['text/x-teratermmacro'] |
| |
| 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 |