eric6/ThirdParty/Pygments/pygments/lexers/teraterm.py

changeset 7547
21b0534faebc
child 7701
25f42e208e08
equal deleted inserted replaced
7546:bf5f777260a6 7547:21b0534faebc
1 # -*- coding: utf-8 -*-
2 """
3 pygments.lexers.teraterm
4 ~~~~~~~~~~~~~~~~~~~~~~~~
5
6 Lexer for Tera Term macro files.
7
8 :copyright: Copyright 2006-2019 by the Pygments team, see AUTHORS.
9 :license: BSD, see LICENSE for details.
10 """
11
12 import re
13
14 from pygments.lexer import RegexLexer, include, bygroups
15 from pygments.token import Text, Comment, Operator, Name, String, \
16 Number, Keyword
17
18 __all__ = ['TeraTermLexer']
19
20
21 class TeraTermLexer(RegexLexer):
22 """
23 For `Tera Term <https://ttssh2.osdn.jp/>`_ macro source code.
24
25 .. versionadded:: 2.4
26 """
27 name = 'Tera Term macro'
28 aliases = ['ttl', 'teraterm', 'teratermmacro']
29 filenames = ['*.ttl']
30 mimetypes = ['text/x-teratermmacro']
31
32 tokens = {
33 'root': [
34 include('comments'),
35 include('labels'),
36 include('commands'),
37 include('builtin-variables'),
38 include('user-variables'),
39 include('operators'),
40 include('numeric-literals'),
41 include('string-literals'),
42 include('all-whitespace'),
43 (r'[^\s]', Text),
44 ],
45 'comments': [
46 (r';[^\r\n]*', Comment.Single),
47 (r'/\*', Comment.Multiline, 'in-comment'),
48 ],
49 'in-comment': [
50 (r'\*/', Comment.Multiline, '#pop'),
51 (r'[^*/]+', Comment.Multiline),
52 (r'[*/]', Comment.Multiline)
53 ],
54 'labels': [
55 (r'(?i)^(\s*)(:[0-9a-z_]+)', bygroups(Text, Name.Label)),
56 ],
57 'commands': [
58 (
59 r'(?i)\b('
60 r'basename|beep|bplusrecv|bplussend|break|bringupbox|'
61 r'callmenu|changedir|checksum16|checksum16file|'
62 r'checksum32|checksum32file|checksum8|checksum8file|'
63 r'clearscreen|clipb2var|closesbox|closett|code2str|'
64 r'connect|continue|crc16|crc16file|crc32|crc32file|'
65 r'cygconnect|delpassword|dirname|dirnamebox|disconnect|'
66 r'dispstr|do|else|elseif|enablekeyb|end|endif|enduntil|'
67 r'endwhile|exec|execcmnd|exit|expandenv|fileclose|'
68 r'fileconcat|filecopy|filecreate|filedelete|filelock|'
69 r'filemarkptr|filenamebox|fileopen|fileread|filereadln|'
70 r'filerename|filesearch|fileseek|fileseekback|filestat|'
71 r'filestrseek|filestrseek2|filetruncate|fileunlock|'
72 r'filewrite|filewriteln|findclose|findfirst|findnext|'
73 r'flushrecv|foldercreate|folderdelete|foldersearch|for|'
74 r'getdate|getdir|getenv|getfileattr|gethostname|'
75 r'getipv4addr|getipv6addr|getmodemstatus|getpassword|'
76 r'getspecialfolder|gettime|gettitle|getttdir|getver|'
77 r'if|ifdefined|include|inputbox|int2str|intdim|'
78 r'ispassword|kmtfinish|kmtget|kmtrecv|kmtsend|listbox|'
79 r'loadkeymap|logautoclosemode|logclose|loginfo|logopen|'
80 r'logpause|logrotate|logstart|logwrite|loop|makepath|'
81 r'messagebox|mpause|next|passwordbox|pause|quickvanrecv|'
82 r'quickvansend|random|recvln|regexoption|restoresetup|'
83 r'return|rotateleft|rotateright|scprecv|scpsend|send|'
84 r'sendbreak|sendbroadcast|sendfile|sendkcode|sendln|'
85 r'sendlnbroadcast|sendlnmulticast|sendmulticast|setbaud|'
86 r'setdate|setdebug|setdir|setdlgpos|setdtr|setecho|'
87 r'setenv|setexitcode|setfileattr|setflowctrl|'
88 r'setmulticastname|setpassword|setrts|setsync|settime|'
89 r'settitle|show|showtt|sprintf|sprintf2|statusbox|'
90 r'str2code|str2int|strcompare|strconcat|strcopy|strdim|'
91 r'strinsert|strjoin|strlen|strmatch|strremove|'
92 r'strreplace|strscan|strspecial|strsplit|strtrim|'
93 r'testlink|then|tolower|toupper|unlink|until|uptime|'
94 r'var2clipb|wait|wait4all|waitevent|waitln|waitn|'
95 r'waitrecv|waitregex|while|xmodemrecv|xmodemsend|'
96 r'yesnobox|ymodemrecv|ymodemsend|zmodemrecv|zmodemsend'
97 r')\b',
98 Keyword,
99 ),
100 (
101 r'(?i)(call|goto)([ \t]+)([0-9a-z_]+)',
102 bygroups(Keyword, Text, Name.Label),
103 )
104 ],
105 'builtin-variables': [
106 (
107 r'(?i)('
108 r'groupmatchstr1|groupmatchstr2|groupmatchstr3|'
109 r'groupmatchstr4|groupmatchstr5|groupmatchstr6|'
110 r'groupmatchstr7|groupmatchstr8|groupmatchstr9|'
111 r'param1|param2|param3|param4|param5|param6|'
112 r'param7|param8|param9|paramcnt|params|'
113 r'inputstr|matchstr|mtimeout|result|timeout'
114 r')\b',
115 Name.Builtin
116 ),
117 ],
118 'user-variables': [
119 (r'(?i)[A-Z_][A-Z0-9_]*', Name.Variable),
120 ],
121 'numeric-literals': [
122 (r'(-?)([0-9]+)', bygroups(Operator, Number.Integer)),
123 (r'(?i)\$[0-9a-f]+', Number.Hex),
124 ],
125 'string-literals': [
126 (r'(?i)#(?:[0-9]+|\$[0-9a-f]+)', String.Char),
127 (r"'", String.Single, 'in-single-string'),
128 (r'"', String.Double, 'in-double-string'),
129 ],
130 'in-general-string': [
131 (r'[\\][\\nt]', String.Escape), # Only three escapes are supported.
132 (r'.', String),
133 ],
134 'in-single-string': [
135 (r"'", String.Single, '#pop'),
136 include('in-general-string'),
137 ],
138 'in-double-string': [
139 (r'"', String.Double, '#pop'),
140 include('in-general-string'),
141 ],
142 'operators': [
143 (r'and|not|or|xor', Operator.Word),
144 (r'[!%&*+<=>^~\|\/-]+', Operator),
145 (r'[()]', String.Symbol),
146 ],
147 'all-whitespace': [
148 (r'[\s]+', Text),
149 ],
150 }
151
152 # Turtle and Tera Term macro files share the same file extension
153 # but each has a recognizable and distinct syntax.
154 def analyse_text(text):
155 result = 0.0
156 if re.search(TeraTermLexer.tokens['commands'][0][0], text):
157 result += 0.01
158 return result

eric ide

mercurial