summaryrefslogtreecommitdiff
path: root/syntax/ipxe.vim
blob: 405c9bfcb696c86ea22c0e8faa040477de8078b2 (plain)
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
" Vim syntax file
" Language:	ipxe
" Maintainer:	cos <cos>, https://www.netizen.se/#contact
" Last Change:	2023 Oct 19
" Remark:	https://ipxe.org/scripting https://ipxe.org/cmd

" quit when a syntax file was already loaded
if exists('b:current_syntax')
  finish
endif

" On current master (ff0f860) there are commands not documented. Running this:
"
"     echo -n 'Missing commands: '
"     for _keyword in $( sed -n 's/.*\.name.*\"\(.*\)\".*/\1/p' < \
"         $_ipxe_src/src/hci/commands/* | tr '\n' ' ' )
"     do
"       grep -q sy\ keyword.\*$_keyword $_vim_rtp/vim-ipxe/syntax/ipxe.vim ||
"           echo -n $_keyword' '
"     done; echo ''
"
" Gives the following output
"
"     Missing commands: md5sum sha1sum ibstat imgmem iwstat iwlist
"
" No attempts have been made at investigate the syntax of those six commands.

hi! def link ipxeArg             Constant
hi! def link ipxeOnlyArg         Constant
hi! def link ipxeOnlyKey         Identifier
hi! def link ipxeKey             Identifier
hi! def link ipxeVal             Constant
hi! def link ipxeComment         Comment
hi! def link ipxeKeyword         Statement
hi! def link ipxeLabel           Identifier
hi! def link ipxeSpecial         Special
hi! def link ipxeVariable        Define
hi! def link ipxeIfconfArg       Constant
hi! def link ipxeIfconfOpt       Type
hi! def link ipxeIflinkwaitArg   Constant
hi! def link ipxeIflinkwaitOpt   Type
hi! def link ipxeVcreateArg      Constant
hi! def link ipxeVcreateOpt      Type
hi! def link ipxeChainArg        Constant
hi! def link ipxeChainOpt        Type
hi! def link ipxeImgfetchArg     Constant
hi! def link ipxeImgfetchOpt     Type
hi! def link ipxeKernelArg       Constant
hi! def link ipxeKernelOpt       Type
hi! def link ipxeImgargsArg      Constant
hi! def link ipxeImgargsOpt      Type
hi! def link ipxeImgtrustOpt     Type
hi! def link ipxeImgverifyArg    Constant
hi! def link ipxeImgverifyOpt    Type
hi! def link ipxeImgextractArg   Constant
hi! def link ipxeImgextractOpt   Type
hi! def link ipxeShimArg         Constant
hi! def link ipxeShimOpt         Type
hi! def link ipxeSanhookArg      Constant
hi! def link ipxeSanhookOpt      Type
hi! def link ipxeSanbootArg      Constant
hi! def link ipxeSanbootOpt      Type
hi! def link ipxeSanunhookArg    Constant
hi! def link ipxeSanunhookOpt    Type
hi! def link ipxeFcelsArg        Constant
hi! def link ipxeFcelsOpt        Type
hi! def link ipxeReadArg         Constant
hi! def link ipxeReadOpt         Type
hi! def link ipxeIncArg          Constant
hi! def link ipxeIncKey          Identifier
hi! def link ipxeIssetVariable   Define
hi! def link ipxeIseqLeft        Constant
hi! def link ipxeIseqRight       Constant
hi! def link ipxeGotoLabel       Identifier
hi! def link ipxeExitArg         Constant
hi! def link ipxeMenuArg         Constant
hi! def link ipxeMenuOpt         Type
hi! def link ipxeItemArg         Constant
hi! def link ipxeItemOpt         Type
hi! def link ipxeChooseArg       Constant
hi! def link ipxeChooseOpt       Type
hi! def link ipxeCertstatArg     Constant
hi! def link ipxeCertstatOpt     Type
hi! def link ipxeCertstoreArg    Constant
hi! def link ipxeCertstoreOpt    Type
hi! def link ipxeCertfreeArg     Constant
hi! def link ipxeCertfreeOpt     Type
hi! def link ipxeConsoleArg      Constant
hi! def link ipxeConsoleOpt      Type
hi! def link ipxeColourArg       Constant
hi! def link ipxeColourOpt       Type
hi! def link ipxeCpairArg        Constant
hi! def link ipxeCpairOpt        Type
hi! def link ipxeParamsArg       Constant
hi! def link ipxeParamsOpt       Type
hi! def link ipxeParamArg        Constant
hi! def link ipxeParamOpt        Type
hi! def link ipxeEchoArg         Constant
hi! def link ipxeEchoOpt         Type
hi! def link ipxePromptArg       Constant
hi! def link ipxePromptOpt       Type
hi! def link ipxeCpuidArg        Constant
hi! def link ipxeCpuidOpt        Type
hi! def link ipxeSyncArg         Constant
hi! def link ipxeSyncOpt         Type
hi! def link ipxePingArg         Constant
hi! def link ipxePingOpt         Type
hi! def link ipxeLotestArg       Constant
hi! def link ipxeLotestOpt       Type
" hi! def link ipxeArg   Constant
" hi! def link ipxeOpt   Type

sy cluster ipxeNext contains=ipxeSpecial,ipxeComment

sy match ipxeArg contained skipwhite /\(\S\+\)\+/ nextgroup=@ipxeNext,ipxeArg contains=ipxeVariable
sy match ipxeOnlyArg contained skipwhite /\S\+/ nextgroup=@ipxeNext contains=ipxeVariable
sy match ipxeOnlyKey contained skipwhite /\S\+/ nextgroup=@ipxeNext contains=ipxeVariable
sy keyword ipxeKeyword autoboot skipwhite nextgroup=@ipxeNext,ipxeArg
sy keyword ipxeKeyword ifstat skipwhite nextgroup=@ipxeNext,ipxeArg
sy keyword ipxeKeyword ifopen skipwhite nextgroup=@ipxeNext,ipxeArg
sy keyword ipxeKeyword ifclose skipwhite nextgroup=@ipxeNext,ipxeArg
sy keyword ipxeKeyword ifconf skipwhite nextgroup=@ipxeNext,ipxeIfconfOpt,ipxeIfconfArg
sy keyword ipxeKeyword dhcp skipwhite nextgroup=@ipxeNext,ipxeIfconfOpt,ipxeIfconfArg
sy match ipxeIfconfArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeIfconfArg,ipxeIfconfOpt contains=ipxeVariable
" FIXME Ideally this file should properly take into account when the syntax
"       requires a specific format of the argument to an option, such as the
"       one to --timeout here being numeric.
sy match ipxeIfconfOpt contained skipwhite /--configurator\|--timeout/ nextgroup=@ipxeNext,ipxeIfconfArg contains=ipxeVariable
sy keyword ipxeKeyword iflinkwait skipwhite nextgroup=@ipxeNext,ipxeIflinkwaitOpt,ipxeIflinkwaitArg
sy match ipxeIflinkwaitArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeIflinkwaitArg,ipxeIflinkwaitOpt contains=ipxeVariable
sy match ipxeIflinkwaitOpt contained skipwhite /--timeout/ nextgroup=@ipxeNext,ipxeIflinkwaitArg contains=ipxeVariable
sy keyword ipxeKeyword route skipwhite nextgroup=@ipxeNext
sy keyword ipxeKeyword nstat skipwhite nextgroup=@ipxeNext
sy keyword ipxeKeyword ipstat skipwhite nextgroup=@ipxeNext
" FIXME Ideally this file should properly take into account the fact that
"       --tag is a required option. There should also only be possible to give
"       one single argument to vcreate.
sy keyword ipxeKeyword vcreate skipwhite nextgroup=@ipxeNext,ipxeVcreateOpt,ipxeVcreateArg
sy match ipxeVcreateArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeVcreateArg,ipxeVcreateOpt contains=ipxeVariable
sy match ipxeVcreateOpt contained skipwhite /--tag\|--priority/ nextgroup=@ipxeNext,ipxeVcreateArg contains=ipxeVariable
sy keyword ipxeKeyword vdestroy skipwhite nextgroup=@ipxeNext,ipxeOnlyArg
sy keyword ipxeKeyword imgstat skipwhite nextgroup=@ipxeNext,ipxeArg
" FIXME Ideally options without arguments such as --autofree should have
"       something like nextgroup=ipxe<command>Opt,@ipxeNext
sy keyword ipxeKeyword chain skipwhite nextgroup=@ipxeNext,ipxeChainArg,ipxeChainOpt
sy keyword ipxeKeyword imgexec skipwhite nextgroup=ipxeChainArg,ipxeChainOpt
sy keyword ipxeKeyword boot skipwhite nextgroup=@ipxeNext,ipxeChainArg,ipxeChainOpt
sy match ipxeChainArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeChainArg,ipxeChainOpt contains=ipxeVariable
sy match ipxeChainOpt contained skipwhite /--name\|--timeout\|--autofree\|--replace/ nextgroup=@ipxeNext,ipxeChainArg,ipxeChainOpt contains=ipxeVariable
sy keyword ipxeKeyword imgfetch skipwhite nextgroup=@ipxeNext,ipxeImgfetchArg,ipxeImgfetchOpt
sy keyword ipxeKeyword module skipwhite nextgroup=@ipxeNext,ipxeImgfetchArg,ipxeImgfetchOpt
sy keyword ipxeKeyword initrd skipwhite nextgroup=@ipxeNext,ipxeImgfetchArg,ipxeImgfetchOpt
sy match ipxeImgfetchArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeImgfetchArg,ipxeImgfetchOpt contains=ipxeVariable
sy match ipxeImgfetchOpt contained skipwhite /--name\|--timeout/ nextgroup=@ipxeNext,ipxeImgfetchArg contains=ipxeVariable
sy keyword ipxeKeyword kernel skipwhite nextgroup=@ipxeNext,ipxeKernelArg,ipxeKernelOpt
sy keyword ipxeKeyword imgselect skipwhite nextgroup=@ipxeNext,ipxeKernelArg,ipxeKernelOpt
sy keyword ipxeKeyword imgload skipwhite nextgroup=@ipxeNext,ipxeKernelArg,ipxeKernelOpt
sy match ipxeKernelArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeKernelArg,ipxeKernelOpt contains=ipxeVariable
sy match ipxeKernelOpt contained skipwhite /--name\|--timeout/ nextgroup=@ipxeNext,ipxeKernelArg contains=ipxeVariable
sy keyword ipxeKeyword imgfree skipwhite nextgroup=@ipxeNext,ipxeOnlyArg
sy keyword ipxeKeyword imgargs skipwhite nextgroup=@ipxeNext,ipxeImgargsArg,ipxeImgargsOpt
sy match ipxeImgargsArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeImgargsArg,ipxeImgargsOpt contains=ipxeVariable
sy match ipxeImgargsOpt contained skipwhite /--name/ nextgroup=@ipxeNext,ipxeImgargsArg contains=ipxeVariable
sy keyword ipxeKeyword imgtrust skipwhite nextgroup=@ipxeNext,ipxeImgtrustOpt
sy match ipxeImgtrustOpt contained skipwhite /--allow\|--permanent/ nextgroup=@ipxeNext,ipxeImgtrustOpt contains=ipxeVariable
sy keyword ipxeKeyword imgverify skipwhite nextgroup=@ipxeNext,ipxeImgverifyArg,ipxeImgverifyOpt
sy match ipxeImgverifyArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeImgverifyArg,ipxeImgverifyOpt contains=ipxeVariable
sy match ipxeImgverifyOpt contained skipwhite /--signer\|--keep/ nextgroup=@ipxeNext,ipxeImgverifyArg contains=ipxeVariable
sy keyword ipxeKeyword imgextract skipwhite nextgroup=@ipxeNext,ipxeImgextractArg,ipxeImgextractOpt
sy match ipxeImgextractArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeImgextractArg,ipxeImgextractOpt contains=ipxeVariable
sy match ipxeImgextractOpt contained skipwhite /--name\|--timeout\|--keep/ nextgroup=@ipxeNext,ipxeImgextractArg contains=ipxeVariable
" FIXME It seems wise to take <extra option> into account, but that might be a
"       fairly large task.
sy keyword ipxeKeyword shim skipwhite nextgroup=@ipxeNext,ipxeShimArg,ipxeShimOpt
sy match ipxeShimArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeShimArg,ipxeShimOpt contains=ipxeVariable
sy match ipxeShimOpt contained skipwhite /--timeout/ nextgroup=@ipxeNext,ipxeShimArg contains=ipxeVariable
sy keyword ipxeKeyword sanhook skipwhite nextgroup=@ipxeNext,ipxeSanhookArg,ipxeSanhookOpt
sy match ipxeSanhookArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeSanhookArg,ipxeSanhookOpt contains=ipxeVariable
sy match ipxeSanhookOpt contained skipwhite /--drive\|--no-describe/ nextgroup=@ipxeNext,ipxeSanhookArg contains=ipxeVariable
sy keyword ipxeKeyword sanboot skipwhite nextgroup=@ipxeNext,ipxeSanbootArg,ipxeSanbootOpt
sy match ipxeSanbootArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeSanbootArg,ipxeSanbootOpt contains=ipxeVariable
sy match ipxeSanbootOpt contained skipwhite /--drive\|--filename\|--no-describe\|--keep/ nextgroup=@ipxeNext,ipxeSanbootArg contains=ipxeVariable
sy keyword ipxeKeyword sanunhook nextgroup=@ipxeNext,ipxeSanunhookArg,ipxeSanunhookOpt
sy match ipxeSanunhookArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeSanunhookArg,ipxeSanunhookOpt contains=ipxeVariable
sy match ipxeSanunhookOpt contained skipwhite /--drive/ nextgroup=@ipxeNext,ipxeSanunhookArg contains=ipxeVariable
sy keyword ipxeKeyword fcstat skipwhite nextgroup=@ipxeNext
sy keyword ipxeKeyword fcels skipwhite nextgroup=@ipxeNext,ipxeFcelsArg,ipxeFcelsOpt
sy match ipxeFcelsArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeFcelsArg,ipxeFcelsOpt contains=ipxeVariable
sy match ipxeFcelsOpt contained skipwhite /--port\|--id/ nextgroup=ipxeFcelsSpecial,ipxeFcelsArg contains=ipxeVariable
sy keyword ipxeKeyword config skipwhite nextgroup=@ipxeNext,ipxeOnlyArg
sy keyword ipxeKeyword show skipwhite nextgroup=@ipxeNext,ipxeOnlyKey
sy keyword ipxeKeyword set skipwhite nextgroup=ipxeKey
sy match ipxeKey contained skipwhite /\S\+/ nextgroup=ipxeVal contains=ipxeVariable
sy match ipxeVal contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeVal contains=ipxeVariable
sy keyword ipxeKeyword clear skipwhite nextgroup=ipxeOnlyKey
sy keyword ipxeKeyword read skipwhite nextgroup=ipxeOnlyKey,ipxeReadOpt
sy match ipxeReadArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeOnlyKey,ipxeReadOpt contains=ipxeVariable
sy match ipxeReadOpt contained skipwhite /--timeout/ nextgroup=ipxeReadArg contains=ipxeVariable
sy keyword ipxeKeyword inc skipwhite nextgroup=ipxeIncKey
sy match ipxeIncArg contained skipwhite /\d\+/ nextgroup=ipxeIncArg,@ipxeNext contains=ipxeVariable
sy match ipxeIncKey contained skipwhite /\S\+/ nextgroup=ipxeIncArg contains=ipxeVariable
sy keyword ipxeKeyword login skipwhite nextgroup=@ipxeNext
sy keyword ipxeKeyword isset skipwhite nextgroup=ipxeIssetVariable
sy match ipxeIssetVariable contained skipwhite /\${\S*}/ nextgroup=@ipxeNext
sy keyword ipxeKeyword iseq skipwhite nextgroup=ipxeIseqLeft
sy match ipxeIseqLeft contained skipwhite /\S\+/ nextgroup=ipxeIseqRight contains=ipxeVariable
sy match ipxeIseqRight contained skipwhite /\S\+/ nextgroup=@ipxeNext contains=ipxeVariable
sy keyword ipxeKeyword goto skipwhite nextgroup=ipxeGotoLabel
sy match ipxeGotoLabel contained skipwhite /\S\+/ nextgroup=@ipxeNext contains=ipxeVariable
sy keyword ipxeKeyword exit skipwhite nextgroup=ipxeExitArg,@ipxeNext
sy match ipxeExitArg contained skipwhite /\S\+/ nextgroup=@ipxeNext contains=ipxeVariable
sy keyword ipxeKeyword menu skipwhite nextgroup=@ipxeNext,ipxeMenuArg,ipxeMenuOpt
sy match ipxeMenuArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeMenuArg,ipxeMenuOpt contains=ipxeVariable
sy match ipxeMenuOpt contained skipwhite /--name\|--delete/ nextgroup=ipxeMenuSpecial,ipxeMenuArg contains=ipxeVariable
sy keyword ipxeKeyword item skipwhite nextgroup=@ipxeNext,ipxeItemArg,ipxeItemOpt
sy match ipxeItemArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeItemArg,ipxeItemOpt contains=ipxeVariable
sy match ipxeItemOpt contained skipwhite /--menu\|--key\|--default\|--gap/ nextgroup=@ipxeNext,ipxeItemArg contains=ipxeVariable
sy keyword ipxeKeyword choose skipwhite nextgroup=@ipxeNext,ipxeChooseArg,ipxeChooseOpt
sy match ipxeChooseArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeChooseArg,ipxeChooseOpt contains=ipxeVariable
sy match ipxeChooseOpt contained skipwhite /--menu\|--default\|--timeout\|--keep/ nextgroup=ipxeChooseArg,ipxeChooseOpt contains=ipxeVariable
sy keyword ipxeKeyword certstat skipwhite nextgroup=@ipxeNext,ipxeCertstatArg,ipxeCertstatOpt
sy match ipxeCertstatArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeCertstatArg,ipxeCertstatOpt contains=ipxeVariable
sy match ipxeCertstatOpt contained skipwhite /--subject/ nextgroup=@ipxeCertstatNext,ipxeCertstatArg contains=ipxeVariable
sy keyword ipxeKeyword certstore skipwhite nextgroup=@ipxeNext,ipxeCertstoreArg,ipxeCertstoreOpt
sy match ipxeCertstoreArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeCertstoreArg,ipxeCertstoreOpt contains=ipxeVariable
sy match ipxeCertstoreOpt contained skipwhite /--subject\|--keep/ nextgroup=@ipxeNext,ipxeCertstoreArg,ipxeCertstoreOpt contains=ipxeVariable
sy keyword ipxeKeyword certfree skipwhite nextgroup=@ipxeNext,ipxeCertfreeArg,ipxeCertfreeOpt
sy match ipxeCertfreeArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeCertfreeArg,ipxeCertfreeOpt contains=ipxeVariable
sy match ipxeCertfreeOpt contained skipwhite /--subject/ nextgroup=@ipxeNext,ipxeCertfreeArg contains=ipxeVariable
sy keyword ipxeKeyword console skipwhite nextgroup=@ipxeNext,ipxeConsoleArg,ipxeConsoleOpt
sy match ipxeConsoleArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeConsoleArg,ipxeConsoleOpt contains=ipxeVariable
sy match ipxeConsoleOpt contained skipwhite /--x\|--y\|--left\|--right\|--top\|--bottom\|--depth\|--picture\|--keep/ nextgroup=@ipxeNext,ipxeConsoleArg,ipxeConsoleOpt contains=ipxeVariable
sy keyword ipxeKeyword colour skipwhite nextgroup=@ipxeNext,ipxeColourArg,ipxeColourOpt
sy match ipxeColourArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeColourArg,ipxeColourOpt contains=ipxeVariable
sy match ipxeColourOpt contained skipwhite /--basic\|--rgb/ nextgroup=@ipxeNext,ipxeColourArg,ipxeColourOpt contains=ipxeVariable
sy keyword ipxeKeyword cpair skipwhite nextgroup=@ipxeNext,ipxeCpairArg,ipxeCpairOpt
sy match ipxeCpairArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeCpairArg,ipxeCpairOpt contains=ipxeVariable
sy match ipxeCpairOpt contained skipwhite /--foreground\|--background/ nextgroup=@ipxeNext,ipxeCpairArg,ipxeCpairOpt contains=ipxeVariable
sy keyword ipxeKeyword params skipwhite nextgroup=@ipxeNext,ipxeParamsArg,ipxeParamsOpt
sy match ipxeParamsArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeParamsArg,ipxeParamsOpt contains=ipxeVariable
sy match ipxeParamsOpt contained skipwhite /--name\|--delete/ nextgroup=@ipxeNext,ipxeParamsArg,ipxeParamsOpt contains=ipxeVariable
sy keyword ipxeKeyword param skipwhite nextgroup=@ipxeNext,ipxeParamArg,ipxeParamOpt
sy match ipxeParamArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeParamArg,ipxeParamOpt contains=ipxeVariable
sy match ipxeParamOpt contained skipwhite /--params\|--header/ nextgroup=@ipxeNext,ipxeParamArg,ipxeParamOpt contains=ipxeVariable
sy keyword ipxeKeyword echo skipwhite nextgroup=@ipxeNext,ipxeEchoArg,ipxeEchoOpt
sy match ipxeEchoArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeEchoArg contains=ipxeVariable
sy match ipxeEchoOpt contained skipwhite /-n/ nextgroup=@ipxeNext,ipxeEchoArg
sy keyword ipxeKeyword prompt skipwhite nextgroup=@ipxeNext,ipxePromptArg,ipxePromptOpt
sy match ipxePromptArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxePromptArg,ipxePromptOpt contains=ipxeVariable
sy match ipxePromptOpt contained skipwhite /--key\|--timeout/ nextgroup=@ipxeNext,ipxePromptArg,ipxePromptOpt contains=ipxeVariable
sy keyword ipxeKeyword shell skipwhite nextgroup=@ipxeNext
sy keyword ipxeKeyword help skipwhite nextgroup=@ipxeNext
sy keyword ipxeKeyword sleep skipwhite nextgroup=@ipxeNext,ipxeOnlyArg
sy keyword ipxeKeyword reboot skipwhite nextgroup=@ipxeNext
sy keyword ipxeKeyword poweroff skipwhite nextgroup=@ipxeNext
sy keyword ipxeKeyword cpuid skipwhite nextgroup=@ipxeNext,ipxeCpuidArg,ipxeCpuidOpt
sy match ipxeCpuidArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeCpuidArg,ipxeCpuidOpt contains=ipxeVariable
sy match ipxeCpuidOpt contained skipwhite /--ext\|--ecx/ nextgroup=@ipxeNext,ipxeCpuidArg,ipxeCpuidOpt contains=ipxeVariable
sy keyword ipxeKeyword sync skipwhite nextgroup=@ipxeNext,ipxeSyncArg,ipxeSyncOpt
sy match ipxeSyncArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeSyncArg,ipxeSyncOpt contains=ipxeVariable
sy match ipxeSyncOpt contained skipwhite /--timeout/ nextgroup=@ipxeNext,ipxeSyncArg,ipxeSyncOpt contains=ipxeVariable
sy keyword ipxeKeyword nslookup skipwhite nextgroup=ipxeKey
sy keyword ipxeKeyword ping skipwhite nextgroup=@ipxeNext,ipxePingArg,ipxePingOpt
sy match ipxePingArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxePingArg,ipxePingOpt contains=ipxeVariable
sy match ipxePingOpt contained skipwhite /--size\|--timeout\|--count/ nextgroup=@ipxeNext,ipxePingArg,ipxePingOpt contains=ipxeVariable
sy keyword ipxeKeyword ntp skipwhite nextgroup=@ipxeNext,ipxeOnlyArg
sy keyword ipxeKeyword pciscan skipwhite nextgroup=@ipxeNext,ipxeOnlyKey
sy keyword ipxeKeyword lotest skipwhite nextgroup=@ipxeNext,ipxeLotestArg,ipxeLotestOpt
sy match ipxeLotestArg contained skipwhite /\S\+/ nextgroup=@ipxeNext,ipxeLotestArg,ipxeLotestOpt contains=ipxeVariable
sy match ipxeLotestOpt contained skipwhite /--mtu\|--broadcast/ nextgroup=@ipxeNext,ipxeLotestArg,ipxeLotestOpt contains=ipxeVariable
sy keyword ipxeKeyword pxebs skipwhite nextgroup=@ipxeNext,ipxeArg
sy keyword ipxeKeyword time
sy keyword ipxeKeyword gdbstub skipwhite nextgroup=@ipxeNext,ipxeArg
sy keyword ipxeKeyword profstat skipwhite nextgroup=@ipxeNext

" FIXME Are ipxeSpecial allowed on the same line immediately after defining a
"       label?
sy match ipxeLabel /^:\S\+/
sy match ipxeSpecial contained /;\|&&\|||/
" FIXME Are ipxeSpecial really allowed to start a line like this?
"       Are they also valid to chain without anything in between them?
"       e.g. '; ; ; && && || ;'
sy match ipxeSpecial /^\s*\(;\|&&\|||\)/
sy match ipxeVariable /\${[^}]*}/
sy match ipxeComment /#.*/