-
Notifications
You must be signed in to change notification settings - Fork 1
/
mIRC-msl.sublime-syntax
310 lines (257 loc) · 29.4 KB
/
mIRC-msl.sublime-syntax
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
%YAML 1.2
#MIT License
#Copyright (c) 2024 Evan Greene
#Permission is hereby granted, free of charge, to any person obtaining a copy
#of this software and associated documentation files (the "Software"), to deal
#in the Software without restriction, including without limitation the rights
#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
#copies of the Software, and to permit persons to whom the Software is
#furnished to do so, subject to the following conditions:
#The above copyright notice and this permission notice shall be included in all
#copies or substantial portions of the Software.
#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
##IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
#SOFTWARE.
---
name: mIRC mSl
file_extensions:
- mrc
scope: source.msl
variables:
menus: '([,]?channel|[,]?menubar|[,]?nicklist|[,]?query|[,]?status|[,]?\@[\w\d\,\-\_\:]+)'
contexts:
prototype:
- include: comments
- include: comments2
main:
- include: popup-start
- include: commands-colon
- include: commands-bar
- include: commands-brace
- include: commands-beginline
- include: commands-user-colon
- include: commands-user-inline
- include: commands-user-newline
- include: control-codes
- include: events
- include: events-ctcp
- include: events-onclose
- include: events-ondialog
- include: gotoloop-label-newline
- include: gotoloop-label-inline
- include: gotoloop-newline
- include: gotoloop-inline
- include: groups
- include: groups-command
- include: identifiers
- include: identifiers-dns
- include: identifiers-params
- include: identifiers-user
- include: keywords
- include: keywords2
- include: numeric
- include: prompt-operator
- include: syntax-parameters
- include: variables
- include: windows
commands-bar:
# based on https://en.wikichip.org/wiki/mirc/commands
- match: '(?i)\s*(?<=\|)\s+([\/\.])*(xyzzy|writeini|write|winhelp|window|wavplay|wallchops|vol|vcrem|vcmd|vcadd|var|uwho|username|url|updatenl|unsetall|unset|unload|ulist|treebar|tray|toolbar|tokenize|tnick|titlebar|tips|tip|timestamp|timer[\w\d\.\_\-]+|timer|switchbar|strip|sreq|splay|speak|sound|sockwrite|sockudp|sockrename|sockread|sockpause|sockopen|sockmark|socklisten|socklist|sockclose|sockaccept|sline|signal|showmirc|setlayer|set|server|scon|scid|say|saveini|savebuf|save|ruser|run|rmdir|rline|rlevel|returnex|return|resetidle|reseterror|renwin|rename|remove|remote|remini|reload|registration|raw|quote|quit|queryrn|query|qmsg|qme|pvoice|proxy|protect|pop|playctrl|play|perform|pdcc|partall|part|parseline|onotice|omsg|notify|noop|msg|mode|mnick|mkdir|me|mdi|maxdepth|logview|log|localinfo|loadbuf|load|list|links|linesep|leave|iuser|inc|iline|ignore|identd|ialmark|ialclear|ial|hsave|hotlink|hop|hmake|hload|hinc|hfree|help|hdel|hdec|haltdef|halt|hadd|guser|gunload|gtalk|gstop|gsize|gshow|groups|gqreq|gpoint|gplay|gopts|gmove|gload|ghide|fwrite|fupdate|fullname|fserve|fsend|fseek|fopen|font|fnord|flushini|flush|flood|flist|flash|firewall|finger|findtext|filter|fclose|exit|events|enable|emailaddr|editbox|echo|ebeeps|drawtext|drawsize|drawscroll|drawsave|drawrot|drawreplace|drawrect|drawpic|drawline|drawfill|drawdot|drawcopy|dqwindow|dns|dll|dline|dlevel|disconnect|disable|didtok|did|dialog|describe|dec|debug|ddeserver|dde|dccserver|dcc|ctcps|ctcpreply|ctcp|creq|copy|continue|comreg|comopen|commands|comlist|comclose|colour|color|cnick|closemsg|closefserves|closedccs|closechats|close|clipboard|cline|clearial|clearall|clear|channel|bwrite|bunset|btrunc|bset|breplace|break|bread|bindip|beep|bcopy|ban|background|away|avoice|autojoin|auto|auser|aop|anick|amsg|ame|aline|ajinvite|add|action|abook)\s+'
scope: entity.name.tag.msl
commands-beginline:
# based on https://en.wikichip.org/wiki/mirc/commands
- match: '(?i)^\s*[\/\.]*(xyzzy|writeini|write|winhelp|window|wavplay|wallchops|vol|vcrem|vcmd|vcadd|var|uwho|username|url|updatenl|unsetall|unset|unload|ulist|treebar|tray|toolbar|tokenize|tnick|titlebar|tips|tip|timestamp|timer|switchbar|strip|sreq|splay|speak|sound|sockwrite|sockudp|sockrename|sockread|sockpause|sockopen|sockmark|socklisten|socklist|sockclose|sockaccept|sline|signal|showmirc|setlayer|set|server|scon|scid|say|saveini|savebuf|save|ruser|run|rmdir|rline|rlevel|returnex|return|resetidle|reseterror|renwin|rename|remove|remote|remini|reload|registration|raw|quote|quit|queryrn|query|qmsg|qme|pvoice|proxy|protect|pop|playctrl|play|perform|pdcc|partall|part|parseline|onotice|omsg|notify|noop|msg|mode|mnick|mkdir|me|mdi|maxdepth|logview|log|localinfo|loadbuf|load|list|links|linesep|leave|iuser|inc|iline|ignore|identd|ialmark|ialclear|ial|hsave|hotlink|hop|hmake|hload|hinc|hfree|help|hdel|hdec|haltdef|halt|hadd|guser|gunload|gtalk|gstop|gsize|gshow|groups|gqreq|gpoint|gplay|goto|gopts|gmove|gload|ghide|fwrite|fupdate|fullname|fserve|fsend|fseek|fopen|font|fnord|flushini|flush|flood|flist|flash|firewall|finger|findtext|filter|fclose|exit|events|enable|emailaddr|editbox|echo|ebeeps|drawtext|drawsize|drawscroll|drawsave|drawrot|drawreplace|drawrect|drawpic|drawline|drawfill|drawdot|drawcopy|dqwindow|dns|dll|dline|dlevel|disconnect|disable|didtok|did|dialog|describe|dec|debug|ddeserver|dde|dccserver|dcc|ctcps|ctcpreply|ctcp|creq|copy|continue|comreg|comopen|commands|comlist|comclose|colour|color|cnick|closemsg|closefserves|closedccs|closechats|close|clipboard|cline|clearial|clearall|clear|channel|bwrite|bunset|btrunc|bset|breplace|break|bread|bindip|beep|bcopy|ban|background|away|avoice|autojoin|auto|auser|aop|anick|amsg|ame|aline|ajinvite|add|action|abook)\s+'
scope: entity.name.tag.msl
commands-brace:
# based on https://en.wikichip.org/wiki/mirc/commands
- match: '(?i)\s*(?<=\{)\s+([\/\.])*(xyzzy|writeini|write|winhelp|window|wavplay|wallchops|vol|vcrem|vcmd|vcadd|var|uwho|username|url|updatenl|unsetall|unset|unload|ulist|treebar|tray|toolbar|tokenize|tnick|titlebar|tips|tip|timestamp|timer[\w\d\.\_\-]+|timer|switchbar|strip|sreq|splay|speak|sound|sockwrite|sockudp|sockrename|sockread|sockpause|sockopen|sockmark|socklisten|socklist|sockclose|sockaccept|sline|signal|showmirc|setlayer|set|server|scon|scid|say|saveini|savebuf|save|ruser|run|rmdir|rline|rlevel|returnex|return|resetidle|reseterror|renwin|rename|remove|remote|remini|reload|registration|raw|quote|quit|queryrn|query|qmsg|qme|pvoice|proxy|protect|pop|playctrl|play|perform|pdcc|partall|part|parseline|onotice|omsg|notify|noop|msg|mode|mnick|mkdir|me|mdi|maxdepth|logview|log|localinfo|loadbuf|load|list|links|linesep|leave|iuser|inc|iline|ignore|identd|ialmark|ialclear|ial|hsave|hotlink|hop|hmake|hload|hinc|hfree|help|hdel|hdec|haltdef|halt|hadd|guser|gunload|gtalk|gstop|gsize|gshow|groups|gqreq|gpoint|gplay|gopts|gmove|gload|ghide|fwrite|fupdate|fullname|fserve|fsend|fseek|fopen|font|fnord|flushini|flush|flood|flist|flash|firewall|finger|findtext|filter|fclose|exit|events|enable|emailaddr|editbox|echo|ebeeps|drawtext|drawsize|drawscroll|drawsave|drawrot|drawreplace|drawrect|drawpic|drawline|drawfill|drawdot|drawcopy|dqwindow|dns|dll|dline|dlevel|disconnect|disable|didtok|did|dialog|describe|dec|debug|ddeserver|dde|dccserver|dcc|ctcps|ctcpreply|ctcp|creq|copy|continue|comreg|comopen|commands|comlist|comclose|colour|color|cnick|closemsg|closefserves|closedccs|closechats|close|clipboard|cline|clearial|clearall|clear|channel|bwrite|bunset|btrunc|bset|breplace|break|bread|bindip|beep|bcopy|ban|background|away|avoice|autojoin|auto|auser|aop|anick|amsg|ame|aline|ajinvite|add|action|abook)\s+'
scope: entity.name.tag.msl
commands-colon:
# based on https://en.wikichip.org/wiki/mirc/commands
- match: '(?i)\s*(?<=\:)([\/\.])*(xyzzy|writeini|write|winhelp|window|wavplay|wallchops|vol|vcrem|vcmd|vcadd|var|uwho|username|url|updatenl|unsetall|unset|unload|ulist|treebar|tray|toolbar|tokenize|tnick|titlebar|tips|tip|timestamp|timer[\w\d\.\_\-]+|timer|switchbar|strip|sreq|splay|speak|sound|sockwrite|sockudp|sockrename|sockread|sockpause|sockopen|sockmark|socklisten|socklist|sockclose|sockaccept|sline|signal|showmirc|setlayer|set|server|scon|scid|say|saveini|savebuf|save|ruser|run|rmdir|rline|rlevel|returnex|return|resetidle|reseterror|renwin|rename|remove|remote|remini|reload|registration|raw|quote|quit|queryrn|query|qmsg|qme|pvoice|proxy|protect|pop|playctrl|play|perform|pdcc|partall|part|parseline|onotice|omsg|notify|noop|msg|mode|mnick|mkdir|me|mdi|maxdepth|logview|log|localinfo|loadbuf|load|list|links|linesep|leave|iuser|inc|iline|ignore|identd|ialmark|ialclear|ial|hsave|hotlink|hop|hmake|hload|hinc|hfree|help|hdel|hdec|haltdef|halt|hadd|guser|gunload|gtalk|gstop|gsize|gshow|groups|gqreq|gpoint|gplay|gopts|gmove|gload|ghide|fwrite|fupdate|fullname|fserve|fsend|fseek|fopen|font|fnord|flushini|flush|flood|flist|flash|firewall|finger|findtext|filter|fclose|exit|events|enable|emailaddr|editbox|echo|ebeeps|drawtext|drawsize|drawscroll|drawsave|drawrot|drawreplace|drawrect|drawpic|drawline|drawfill|drawdot|drawcopy|dqwindow|dns|dll|dline|dlevel|disconnect|disable|didtok|did|dialog|describe|dec|debug|ddeserver|dde|dccserver|dcc|ctcps|ctcpreply|ctcp|creq|copy|continue|comreg|comopen|commands|comlist|comclose|colour|color|cnick|closemsg|closefserves|closedccs|closechats|close|clipboard|cline|clearial|clearall|clear|channel|bwrite|bunset|btrunc|bset|breplace|break|bread|bindip|beep|bcopy|ban|background|away|avoice|autojoin|auto|auser|aop|anick|amsg|ame|aline|ajinvite|add|action|abook)\s+'
scope: entity.name.tag.msl
commands-user-colon:
- match: '(?i)\s*(?<=\:)([\/\.\s])*(?!xyzzy|writeini|write|winhelp|window|wavplay|wallchops|vol|vcrem|vcmd|vcadd|var|uwho|username|url|updatenl|unsetall|unset|unload|ulist|treebar|tray|toolbar|tokenize|tnick|titlebar|tips|tip|timestamp|timer[\w\d\.\_\-]+|timer|switchbar|strip|sreq|splay|speak|sound|sockwrite|sockudp|sockrename|sockread|sockpause|sockopen|sockmark|socklisten|socklist|sockclose|sockaccept|sline|signal|showmirc|setlayer|set|server|scon|scid|say|saveini|savebuf|save|ruser|run|rmdir|rline|rlevel|returnex|return|resetidle|reseterror|renwin|rename|remove|remote|remini|reload|registration|raw|quote|quit|queryrn|query|qmsg|qme|pvoice|proxy|protect|pop|playctrl|play|perform|pdcc|partall|part|parseline|onotice|omsg|notify|noop|msg|mode|mnick|mkdir|me|mdi|maxdepth|logview|log|localinfo|loadbuf|load|list|links|linesep|leave|iuser|inc|iline|ignore|identd|ialmark|ialclear|ial|hsave|hotlink|hop|hmake|hload|hinc|hfree|help|hdel|hdec|haltdef|halt|hadd|guser|gunload|gtalk|gstop|gsize|gshow|groups|gqreq|gpoint|gplay|gopts|gmove|gload|ghide|fwrite|fupdate|fullname|fserve|fsend|fseek|fopen|font|fnord|flushini|flush|flood|flist|flash|firewall|finger|findtext|filter|fclose|exit|events|enable|emailaddr|editbox|echo|ebeeps|drawtext|drawsize|drawscroll|drawsave|drawrot|drawreplace|drawrect|drawpic|drawline|drawfill|drawdot|drawcopy|dqwindow|dns|dll|dline|dlevel|disconnect|disable|didtok|did|dialog|describe|dec|debug|ddeserver|dde|dccserver|dcc|ctcps|ctcpreply|ctcp|creq|copy|continue|comreg|comopen|commands|comlist|comclose|colour|color|cnick|closemsg|closefserves|closedccs|closechats|close|clipboard|cline|clearial|clearall|clear|channel|bwrite|bunset|btrunc|bset|breplace|break|bread|bindip|beep|bcopy|ban|background|away|avoice|autojoin|auto|auser|aop|anick|amsg|ame|aline|ajinvite|add|action|abook)[\w\.\_\-0-9]+[\:]*[\w\.\_\-0-9]+\s*'
scope: entity.name.class.msl
commands-user-newline:
- match: '(?i)^\s+[\/\.]*(?!xyzzy|writeini|write|winhelp|window|while|wavplay|wallchops|vol|vcrem|vcmd|vcadd|var|uwho|username|url|updatenl|unsetall|unset|unload|ulist|treebar|tray|toolbar|tokenize|tnick|titlebar|tips|tip|timestamp|timer|switchbar|strip|sreq|splay|speak|sound|sockwrite|sockudp|sockrename|sockread|sockpause|sockopen|sockmark|socklisten|socklist|sockclose|sockaccept|sline|signal|showmirc|setlayer|set|server|scon|scid|say|saveini|savebuf|save|ruser|run|rmdir|rline|rlevel|returnex|return|resetidle|reseterror|renwin|rename|remove|remote|remini|reload|registration|raw|quote|quit|queryrn|query|qmsg|qme|pvoice|proxy|protect|pop|playctrl|play|perform|pdcc|partall|part|parseline|onotice|omsg|notify|noop|msg|mode|mnick|mkdir|menubar|menu|me|mdi|maxdepth|logview|log|localinfo|loadbuf|load|list|links|linesep|leave|iuser|iswmcs|iswm|isvoice|isupper|isreg|isprotec|isop|ison|isnum|isnotify|islower|isletter|isinvite|isincs|isin|isignore|ishop|isexcept|ischan|isban|isavoice|isaop|isalpha|isalnum|inc|iline|ignore|if|identd|ialmark|ialclear|ial|hsave|hotlink|hop|hmake|hload|hinc|hfree|help|hdel|hdec|haltdef|halt|hadd|guser|gunload|gtalk|gstop|gsize|gshow|groups|gqreq|gpoint|gplay|goto|gopts|gmove|gload|ghide|fwrite|fupdate|fullname|fserve|fsend|fseek|fopen|font|fnord|flushini|flush|flood|flist|flash|firewall|finger|findtext|filter|fclose|exit|events|enable|emailaddr|elseif|else|editbox|echo|ebeeps|drawtext|drawsize|drawscroll|drawsave|drawrot|drawreplace|drawrect|drawpic|drawline|drawfill|drawdot|drawcopy|dqwindow|dns|dll|dline|dlevel|disconnect|disable|didtok|did|dialog|describe|dec|debug|ddeserver|dde|dccserver|dcc|ctcps|ctcpreply|ctcp|creq|copy|continue|comreg|comopen|commands|comlist|comclose|colour|color|cnick|closemsg|closefserves|closedccs|closechats|close|clipboard|cline|clearial|clearall|clear|channel|bwrite|bunset|btrunc|bset|breplace|break|bread|bindip|beep|bcopy|ban|background|away|avoice|autojoin|auto|auser|aop|anick|amsg|ame|aline|alias -l|alias|ajinvite|add|action|abook)[\w\.\_\-0-9]+[\:]*[\w\.\_\-0-9]+'
scope: entity.name.class.msl
commands-user-inline:
- match: '(?i)(?<=[\|\{\)]|else)\s+[\/\.]*(?!xyzzy|writeini|write|winhelp|window|while|wavplay|wallchops|vol|vcrem|vcmd|vcadd|var|uwho|username|url|updatenl|unsetall|unset|unload|ulist|treebar|tray|toolbar|tokenize|tnick|titlebar|tips|tip|timestamp|timer|switchbar|strip|sreq|splay|speak|sound|sockwrite|sockudp|sockrename|sockread|sockpause|sockopen|sockmark|socklisten|socklist|sockclose|sockaccept|sline|signal|showmirc|setlayer|set|server|scon|scid|say|saveini|savebuf|save|ruser|run|rmdir|rline|rlevel|returnex|return|resetidle|reseterror|renwin|rename|remove|remote|remini|reload|registration|raw|quote|quit|queryrn|query|qmsg|qme|pvoice|proxy|protect|pop|playctrl|play|perform|pdcc|partall|part|parseline|onotice|omsg|notify|noop|msg|mode|mnick|mkdir|menubar|menu|me|mdi|maxdepth|logview|log|localinfo|loadbuf|load|list|links|linesep|leave|iuser|iswmcs|iswm|isvoice|isupper|isreg|isprotec|isop|ison|isnum|isnotify|islower|isletter|isinvite|isincs|isin|isignore|ishop|isexcept|ischan|isban|isavoice|isaop|isalpha|isalnum|inc|iline|ignore|if|identd|ialmark|ialclear|ial|hsave|hotlink|hop|hmake|hload|hinc|hfree|help|hdel|hdec|haltdef|halt|hadd|guser|gunload|gtalk|gstop|gsize|gshow|groups|gqreq|gpoint|gplay|goto|gopts|gmove|gload|ghide|fwrite|fupdate|fullname|fserve|fsend|fseek|fopen|font|fnord|flushini|flush|flood|flist|flash|firewall|finger|findtext|filter|fclose|exit|events|enable|emailaddr|elseif|else|editbox|echo|ebeeps|drawtext|drawsize|drawscroll|drawsave|drawrot|drawreplace|drawrect|drawpic|drawline|drawfill|drawdot|drawcopy|dqwindow|dns|dll|dline|dlevel|disconnect|disable|didtok|did|dialog|describe|dec|debug|ddeserver|dde|dccserver|dcc|ctcps|ctcpreply|ctcp|creq|copy|continue|comreg|comopen|commands|comlist|comclose|colour|color|cnick|closemsg|closefserves|closedccs|closechats|close|clipboard|cline|clearial|clearall|clear|channel|bwrite|bunset|btrunc|bset|breplace|break|bread|bindip|beep|bcopy|ban|background|away|avoice|autojoin|auto|auser|aop|anick|amsg|ame|aline|alias -l|alias|ajinvite|add|action|abook)[\w\d\_\-\:]+\b'
scope: entity.name.class.msl
comments:
- match: '^\s*;'
scope: punctuation.definition.comment.msl
push:
- meta_scope: comment.line.double-slash.msl
- match: $\n?
pop: true
comments2:
- match: '(^\s*\/\*)'
scope: punctuation.definition.comment.msl
push:
- meta_scope: comment.line.double-slash.msl
- match: '(^\s*\*\/)(.)*'
pop: true
control-codes:
- match: '|||||'
scope: keyword.control.msl
events:
# based on https://en.wikichip.org/wiki/mirc/on_events
- match: '(?i)(^(on)) ([\*\+\^\!\@\&\$\d\w]+|me\:\*){1}(\:)(waveend|wallops|voice|vcmd|usermode|unotify|unload|unban|udpwrite|udpread|topic|text|tabcomp|start|sockwrite|sockread|sockopen|socklisten|sockclose|snotice|signal|servopen|serverop|servermode|servclose|serv|sendfail|rawmode|quit|queryopen|queryclose|pong|playend|ping|part|parseline|owner|op|notify|notice|nosound|nick|mp3end|mode|midiend|logon|load|kick|keyup|keydown|join|invite|input|hotlink|help|getfail|filesent|filercvd|exit|error|dns|disconnect|devoice|deowner|deop|dehelp|dccserver|ctcpreply|connectfail|connect|chatopen|chatclose|chat|ban|appactive|agent|active|action)(\:)'
scope: constant.numeric.line-number.find-in-files.msl
captures:
1: constant.numeric.line-number.find-in-files.msl # on/raw
2: constant.numeric.line-number.find-in-files.msl # on/raw
3: constant.numeric.line-number.find-in-files.msl # ^+*!@$
4: entity.name.function.msl # :
5: entity.name.function.msl # Event
6: entity.name.function.msl # :
events-ctcp:
# based on https://en.wikichip.org/wiki/mirc/ctcp_events
- match: '(?i)(^ctcp) ([\*\+\^\!\@\&\$\d\w]+|me\:\*){1}(\:)([\d\D\w]+)\:([\*\?\#]+)(\:)'
scope: constant.numeric.line-number.find-in-files.msl
captures:
1: constant.numeric.line-number.find-in-files.msl
2: constant.numeric.line-number.find-in-files.msl
3: constant.numeric.line-number.find-in-files.msl
4: entity.name.function.msl
5: variable.parameter.msl
6: entity.name.function.msl
events-onclose:
# based on https://en.wikichip.org/wiki/mirc/on_events/on_close
- match: '(?i)(^on) ([\*\+\^\!\@\&\$\d\w]+|me\:\*){1}(\:)(Open|Close)(\:)(\?|\@|\=|\!|\*)([\w\d\D]*)(\:)'
scope: entity.name.tag.msl
captures:
1: constant.numeric.line-number.find-in-files.msl
2: constant.numeric.line-number.find-in-files.msl
3: entity.name.function.msl
4: entity.name.function.msl
5: entity.name.function.msl
6: variable.parameter.msl
7: variable.parameter.msl
8: entity.name.function.msl
events-ondialog:
# based on https://en.wikichip.org/wiki/mirc/on_events/on_dialog
- match: '(?i)(^on) ([\*\+\^\!\@\&\$\d\w]+|me\:\*){1}(\:)(Dialog)(\:)([\w\d\D]*)(\:)(uclick|scroll|sclick|rclick|mouse|menu|init|edit|drop|dclick|close|active):([\*\d\,\-]+)'
scope: entity.name.tag.msl
captures:
1: constant.numeric.line-number.find-in-files.msl # on
2: constant.numeric.line-number.find-in-files.msl # level
3: entity.name.function.msl # :
4: entity.name.function.msl # Dialog
5: entity.name.function.msl # :
6: variable.parameter.msl # Name
7: variable.parameter.msl # :
8: entity.name.tag.msl # Event
9: variable.parameter.msl # Did
gotoloop-label-newline:
# based on https://en.wikichip.org/wiki/mirc/goto_statements
- match: '(?i)^\s*:[\w\d\-\_0-9]+'
scope: constant.numeric.line-number.find-in-files.msl
gotoloop-label-inline:
# based on https://en.wikichip.org/wiki/mirc/goto_statements
- match: '(?i)(?<=\||\{)\s+:[\w\d\-\_0-9]+'
scope: constant.numeric.line-number.find-in-files.msl
gotoloop-newline:
# based on https://en.wikichip.org/wiki/mirc/goto_statements
- match: '(?i)^\s*(\.*\/*goto\b)'
scope: entity.name.tag.msl
push:
- meta_scope: constant.numeric.line-number.find-in-files.msl
- match: '\s+[\w\d\-\|\:]+'
pop: true
gotoloop-inline:
# based on https://en.wikichip.org/wiki/mirc/goto_statements
- match: '(?i)(?<=[\|\{])\s+(\.*\/*goto\b)'
scope: entity.name.tag.msl
push:
- meta_scope: constant.numeric.line-number.find-in-files.msl
- match: '\s+[\w\d\-]+'
pop: true
groups:
- match: '(?i)^#[\w\d\.\_\-]+\s+(on|off|end)'
scope: variable.parameter.msl
groups-command:
- match: '(?i)([\/\.\s]+)(enable|disable)\s+([\#]+[\w\d\_\-]+)(?=\s*(\n|\|))'
captures:
2: entity.name.tag.msl
3: variable.parameter.msl
keywords:
# based on https://en.wikichip.org/wiki/mirc/operators
- match: '(?i)\b(while|menubar|menu|iswmcs|iswm|isvoice|isupper|isreg|isprotec|isop|ison|isnum|isnotify|islower|isletter|isinvite|isincs|isin|isignore|ishop|isexcept|ischan|isban|isavoice|isaop|isalpha|isalnum|if|elseif|else|alias -l|alias)'
scope: keyword.control.msl
keywords2:
# based on https://en.wikichip.org/wiki/mirc/operators
- match: '(?i)(\||===|==|!==|!=|>=|<=|<|>|\&|\$\+|\$iif)'
scope: keyword.operator.msl
identifiers:
# based on https://en.wikichip.org/wiki/mirc/identifiers
- match: '(?i)\$+(zip|yes|xor|wrap|window|wildtokcs|wildtok|wildsite|width|wid|wavedir|vol|vnick|version|vcmdver|vcmdstat|vcmd|vc|var|v2|v1|utfencode|utfdecode|usermode|urlget|url|uptime|upper|unsafe|ulist|ulevel|trust|true|treebar|totp|topic|toolbar|token|titlebar|tips|tip|timezone|timestampfmt|timestamp|timer|timeout|time|ticksqpc|ticks|tempfn|target|tanh|tan|sysdir|switchbar|submenu|style|stripped|strip|str|status|starting|sslversion|sslready|ssllibdll|sslhash|ssldll|sslcertvalid|sslcertsha256|sslcertsha1|ssl|sreq|sqrt|speak|sound|sorttokcs|sorttok|sockname|sockerr|sockbr|sock|snotify|snicks|snick|sline|site|sinh|sin|signal|show|shortfn|sha512|sha384|sha256|sha1|sfile|servertarget|serverip|server|send|sdir|scriptline|scriptdir|script|scon|scid|samepath|round|rnick|right|rgb|result|reptokcs|reptok|replacexcs|replacex|replacecs|replace|remtokcs|remtok|removecs|remove|remote|regsubex|regsub|regmlex|regml|regex|regerrstr|regbr|readn|readini|read|rawmsg|rawbytes|rands|rand|raddress|r|query|qt|puttok|protect|prop|prefix|powmod|poscs|pos|portfree|portable|port|pnick|play|pic|pi|passivedcc|parseutf|parsetype|parseline|parseem|parms|os|ord|or|opnick|onpoly|onlinetotal|onlineserver|online|ok|nvnick|numtok|numeric|numbits|null|notify|notags|not|noqt|nopnick|nopath|nonstdmsg|nofile|no|nickmode|nick|nhnick|newnick|network|naddress|msgtags|msgstamp|msfile|mp3dir|mp3|mouse|modinv|modespl|modelast|modefirst|mode|mnick|mknickfn|mklogfn|mkfn|mircpid|mircini|mircexe|mircdir|min|mididir|mid|menutype|menucontext|menubar|menu|me|md5|maxlens|maxlenm|maxlenl|max|matchtokcs|matchtok|matchkey|mask|maddress|ltimer|lower|longip|longfn|logstampfmt|logstamp|logdir|log2|log10|log|lof|locked|lock|link|lines|line|lf|level|len|leftwinwid|leftwincid|leftwin|left|lcm|lactivewid|lactivecid|lactive|knick|keyval|keyrpt|keylparam|keychar|isutf|isupper|istokcs|istok|isnumber|isnum|islower|isid|isfile|isdir|isdde|isbit|isalias|isadmin|iql|iptype|ip|inwho|inwave|intersect|int|instok|insong|inroundrect|inrect|input|inpoly|inpaste|inmp3|inmode|inmidi|initopic|ini|inellipse|iil|iif|ignore|ifmatch2|ifmatch|iel|idle|ibl|ialchan|ial|iaddress|hypot|hregex|hotp|hotlink|hotlinepos|hotline|host|hnick|hmatch|hmac|highlight|hget|hfind|hfile=|hfile|height|hash|halted|group|gmt|gettok|getdot|getdir|get|gcd|fupdate|fullscreen|fullname|fulldate|fulladdress|fserve|fserv|fromeditbox|freadex|fread|fopen|font|floor|flinen|fline|findtokcs|findtok|findfilen|findfile|finddirn|finddir|filtered|filename|file|fibonacci|fgetc|ferr|feof|false|factorial|exiting|exists|eventparms|eventid|event|evalnext|eval|error|envvar|encode|emailaddr|email|editbox|ebeeps|duration|dqwindow|donotdisturb|dname|dllcall|dll|dlevel|disk|dir|didwm|didtok|didreg|did|dialog|devent|deltok|decompress|decode|debug|ddename|dde|dccport|dccignore|dbuw|dbuh|daylight|day|date|ctrlenter|ctimer|ctime|crlf|creq|crc64|crc|cr|countcs|count|cosh|cos|comval|compress|compact|comerr|comchar|comchan|comcall|com|colour|color|codepage|cnick|cmdline|cmdbox|click|clevel|cid|chr|chat|chantypes|channel|chanmodes|chan|ceil|cd|cbrt|cb|cancel|caller|calc|bytes|bvar|bnick|bits|biton|bitoff|bindip|bfind|beta|base|banmask|banlist|awaytime|awaymsg|away|avoice|auto|atan2|atan|asin|asctime|asc|appstate|appactive|aop|ansi2mirc|anick|and|alias|agentver|agentstat|agentname|agent|addtokcs|addtok|address|adate|activewid|activecid|active|acos|abs|abook|=nick)[\s]*'
scope: entity.name.function.msl
identifiers-dns:
# based on https://en.wikichip.org/wiki/mirc/identifiers/$dns
- match: '(\$dns)(\()([\d\w\\%\$]+)(\))(\.){0,1}(addr|ip|nick){0,1}[\s\)]'
captures:
1: entity.name.function.msl
2: entity.name.function.msl
3: variable.parameter.msl
4: entity.name.function.msl
5: entity.name.function.msl
6: constant.numeric.line-number.find-in-files.msl
identifiers-params:
- match: '(\$[0-9]+\b[-]{0,1})'
scope: constant.numeric.msl
identifiers-user:
- match: '(?i)[\$]+(?!zip|yes|xor|wrap|window|wildtokcs|wildtok|wildsite|width|wid|wavedir|vol|vnick|version|vcmdver|vcmdstat|vcmd|vc|var|v2|v1|utfencode|utfdecode|usermode|urlget|url|uptime|upper|unsafe|ulist|ulevel|trust|true|treebar|totp|topic|toolbar|token|titlebar|tips|tip|timezone|timestampfmt|timestamp|timer|timeout|time|ticksqpc|ticks|tempfn|target|tanh|tan|sysdir|switchbar|submenu|style|stripped|strip|str|status|starting|sslversion|sslready|ssllibdll|sslhash|ssldll|sslcertvalid|sslcertsha256|sslcertsha1|ssl|sreq|sqrt|speak|sound|sorttokcs|sorttok|sockname|sockerr|sockbr|sock|snotify|snicks|snick|sline|site|sinh|sin|signal|show|shortfn|sha512|sha384|sha256|sha1|sfile|servertarget|serverip|server|send|sdir|scriptline|scriptdir|script|scon|scid|samepath|round|rnick|right|rgb|result|reptokcs|reptok|replacexcs|replacex|replacecs|replace|remtokcs|remtok|removecs|remove|remote|regsubex|regsub|regmlex|regml|regex|regerrstr|regbr|readn|readini|read|rawmsg|rawbytes|rands|rand|raddress|r|query|qt|puttok|protect|prop|prefix|powmod|poscs|pos|portfree|portable|port|pnick|play|pic|pi|passivedcc|parseutf|parsetype|parseline|parseem|parms|os|ord|or|opnick|onpoly|onlinetotal|onlineserver|online|ok|nvnick|numtok|numeric|numbits|null|notify|notags|not|noqt|nopnick|nopath|nonstdmsg|nofile|no|nickmode|nick|nhnick|newnick|network|naddress|msgtags|msgstamp|msfile|mp3dir|mp3|mouse|modinv|modespl|modelast|modefirst|mode|mnick|mknickfn|mklogfn|mkfn|mircpid|mircini|mircexe|mircdir|min|mididir|mid|menutype|menucontext|menubar|menu|me|md5|maxlens|maxlenm|maxlenl|max|matchtokcs|matchtok|matchkey|mask|maddress|ltimer|lower|longip|longfn|logstampfmt|logstamp|logdir|log2|log10|log|lof|locked|lock|link|lines|line|lf|level|len|leftwinwid|leftwincid|leftwin|left|lcm|lactivewid|lactivecid|lactive|knick|keyval|keyrpt|keylparam|keychar|isutf|isupper|istokcs|istok|isnumber|isnum|islower|isid|isfile|isdir|isdde|isbit|isalias|isadmin|iql|iptype|ip|inwho|inwave|intersect|int|instok|insong|inroundrect|inrect|input|inpoly|inpaste|inmp3|inmode|inmidi|initopic|ini|inellipse|iil|iif|ignore|ifmatch2|ifmatch|iel|idle|ibl|ialchan|ial|iaddress|hypot|hregex|hotp|hotlink|hotlinepos|hotline|host|hnick|hmatch|hmac|highlight|hget|hfind|hfile=|hfile|height|hash|halted|group|gmt|gettok|getdot|getdir|get|gcd|fupdate|fullscreen|fullname|fulldate|fulladdress|fserve|fserv|fromeditbox|freadex|fread|fopen|font|floor|flinen|fline|findtokcs|findtok|findfilen|findfile|finddirn|finddir|filtered|filename|file|fibonacci|fgetc|ferr|feof|false|factorial|exiting|exists|eventparms|eventid|event|evalnext|eval|error|envvar|encode|emailaddr|email|editbox|ebeeps|duration|dqwindow|donotdisturb|dname|dllcall|dll|dlevel|disk|dir|didwm|didtok|didreg|did|dialog|devent|deltok|decompress|decode|debug|ddename|dde|dccport|dccignore|dbuw|dbuh|daylight|day|date|ctrlenter|ctimer|ctime|crlf|creq|crc64|crc|cr|countcs|count|cosh|cos|comval|compress|compact|comerr|comchar|comchan|comcall|com|colour|color|codepage|cnick|cmdline|cmdbox|click|clevel|cid|chr|chat|chantypes|channel|chanmodes|chan|ceil|cd|cbrt|cb|cancel|caller|calc|bytes|bvar|bnick|bits|biton|bitoff|bindip|bfind|beta|base|banmask|banlist|awaytime|awaymsg|away|avoice|auto|atan2|atan|asin|asctime|asc|appstate|appactive|aop|ansi2mirc|anick|and|alias|agentver|agentstat|agentname|agent|addtokcs|addtok|address|adate|activewid|activecid|active|acos|abs|abook|=nick)[\.\:a-z\_\-0-9]+'
scope: entity.other.attribute-name.msl
numeric:
- match: '[\-]{0,1}\b[0-9]+\b'
scope: constant.numeric.msl
popup-codeblock:
- include: main
- match: '\{'
push: popup-codeblock
# Code following a {
- match: '\}'
pop: true
popup-context:
# Popup name (before :)
- match: '(^[\$\+\(\)\w\d\-\_\.\s]+)(\:|\n)'
captures:
1: variable.parameter.msl
2: entity.name.function.msl
- include: main
# go into "codeblock" view
- match: '\{'
push: popup-codeblock
- match: '\}'
scope: entity.name.function.msl
pop: true
popup-start:
- match: '(menu) ({{menus}}{1}{{menus}}*)\s+\{'
captures:
1: keyword.control.msl
2: entity.name.function.msl
push: popup-context
prompt-operator:
- match: '(\$\?[\*]{0,1}[\!]{0,1}\=)(?=\".+\")'
scope: keyword.operator.msl
# matches parameters for the syntax-* entries while building commands
syntax-parameters:
- match: 'ˇ(Optional|Required){1}:([^\]>]+)'
captures:
1: entity.name.function.msl
2: variable.parameter.msl
- match: 'ˇORˇ'
scope: entity.name.tag.msl
variables:
- match: '%[\w._-]+'
scope: variable.parameter.msl
windows:
- match: '\@[\.\w\d_\-]+'
scope: variable.parameter.msl