blob: 64a47a5995c208b368f4be7ed8bcb7696355567e [file] [log] [blame]
Bram Moolenaar4c3f5362006-04-11 21:38:50 +00001" Vim syntax file
Bram Moolenaarf2571c62015-06-09 19:44:55 +02002" Maintainer: Christian Brabandt <cb@256bit.org>
3" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
Christian Brabandt4335fcf2025-01-20 21:01:41 +01004" Latest Revision: 2025 Jan 20
Bram Moolenaarf2571c62015-06-09 19:44:55 +02005" License: Vim (see :h license)
6" Repository: https://github.com/chrisbra/vim-kconfig
Bram Moolenaar4c3f5362006-04-11 21:38:50 +00007
8if exists("b:current_syntax")
9 finish
10endif
11
12let s:cpo_save = &cpo
13set cpo&vim
14
Christian Brabandt4335fcf2025-01-20 21:01:41 +010015exe "syn sync minlines=" . get(g:, 'kconfig_minlines', 50)
16
Bram Moolenaar4c3f5362006-04-11 21:38:50 +000017if exists("g:kconfig_syntax_heavy")
18
Christian Brabandt4335fcf2025-01-20 21:01:41 +010019 syn match kconfigBegin '^' nextgroup=kconfigKeyword
20 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +000021
Christian Brabandt4335fcf2025-01-20 21:01:41 +010022 syn keyword kconfigTodo contained TODO FIXME XXX NOTE
Bram Moolenaar4c3f5362006-04-11 21:38:50 +000023
Christian Brabandt4335fcf2025-01-20 21:01:41 +010024 syn match kconfigComment display '#.*$' contains=kconfigTodo
Bram Moolenaar4c3f5362006-04-11 21:38:50 +000025
Christian Brabandt4335fcf2025-01-20 21:01:41 +010026 syn keyword kconfigKeyword config nextgroup=kconfigSymbol
27 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +000028
Christian Brabandt4335fcf2025-01-20 21:01:41 +010029 syn keyword kconfigKeyword menuconfig nextgroup=kconfigSymbol
30 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +000031
Christian Brabandt4335fcf2025-01-20 21:01:41 +010032 syn keyword kconfigKeyword comment menu mainmenu
33 \ nextgroup=kconfigKeywordPrompt
34 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +000035
Christian Brabandt4335fcf2025-01-20 21:01:41 +010036 syn keyword kconfigKeyword choice
37 \ nextgroup=@kconfigConfigOptions
38 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +000039
Christian Brabandt4335fcf2025-01-20 21:01:41 +010040 syn keyword kconfigKeyword endmenu endchoice
Bram Moolenaar4c3f5362006-04-11 21:38:50 +000041
Christian Brabandt4335fcf2025-01-20 21:01:41 +010042 syn keyword kconfigPreProc source
43 \ nextgroup=kconfigPath
44 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +000045
Christian Brabandt4335fcf2025-01-20 21:01:41 +010046 " TODO: This is a hack. The who .*Expr stuff should really be generated so
47 " that we can reuse it for various nextgroups.
48 syn keyword kconfigConditional if endif
49 \ nextgroup=@kconfigConfigOptionIfExpr
50 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +000051
Christian Brabandt4335fcf2025-01-20 21:01:41 +010052 syn match kconfigKeywordPrompt '"[^"\\]*\%(\\.[^"\\]*\)*"'
53 \ contained
54 \ nextgroup=@kconfigConfigOptions
55 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +000056
Christian Brabandt4335fcf2025-01-20 21:01:41 +010057 syn match kconfigPath '"[^"\\]*\%(\\.[^"\\]*\)*"\|\S\+'
58 \ contained
Bram Moolenaar4c3f5362006-04-11 21:38:50 +000059
Christian Brabandt4335fcf2025-01-20 21:01:41 +010060 syn match kconfigSymbol '\<\k\+\>'
61 \ contained
62 \ nextgroup=@kconfigConfigOptions
63 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +000064
Christian Brabandt4335fcf2025-01-20 21:01:41 +010065 " FIXME: There is – probably – no reason to cluster these instead of just
66 " defining them in the same group.
67 syn cluster kconfigConfigOptions contains=kconfigTypeDefinition,
68 \ kconfigInputPrompt,
69 \ kconfigDefaultValue,
70 \ kconfigDependencies,
71 \ kconfigReverseDependencies,
72 \ kconfigNumericalRanges,
73 \ kconfigHelpText,
74 \ kconfigDefBool,
75 \ kconfigOptional
Bram Moolenaar4c3f5362006-04-11 21:38:50 +000076
Christian Brabandt4335fcf2025-01-20 21:01:41 +010077 syn keyword kconfigTypeDefinition bool boolean tristate string hex int
78 \ contained
79 \ nextgroup=kconfigTypeDefPrompt,
80 \ @kconfigConfigOptions
81 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +000082
Christian Brabandt4335fcf2025-01-20 21:01:41 +010083 syn match kconfigTypeDefPrompt '"[^"\\]*\%(\\.[^"\\]*\)*"'
84 \ contained
85 \ nextgroup=kconfigConfigOptionIf,
86 \ @kconfigConfigOptions
87 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +000088
Christian Brabandt4335fcf2025-01-20 21:01:41 +010089 syn match kconfigTypeDefPrompt "'[^'\\]*\%(\\.[^'\\]*\)*'"
90 \ contained
91 \ nextgroup=kconfigConfigOptionIf,
92 \ @kconfigConfigOptions
93 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +000094
Christian Brabandt4335fcf2025-01-20 21:01:41 +010095 syn keyword kconfigInputPrompt prompt
96 \ contained
97 \ nextgroup=kconfigPromptPrompt
98 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +000099
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100100 syn match kconfigPromptPrompt '"[^"\\]*\%(\\.[^"\\]*\)*"'
101 \ contained
102 \ nextgroup=kconfigConfigOptionIf,
103 \ @kconfigConfigOptions
104 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000105
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100106 syn match kconfigPromptPrompt "'[^'\\]*\%(\\.[^'\\]*\)*'"
107 \ contained
108 \ nextgroup=kconfigConfigOptionIf,
109 \ @kconfigConfigOptions
110 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000111
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100112 syn keyword kconfigDefaultValue default
113 \ contained
114 \ nextgroup=@kconfigConfigOptionExpr
115 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000116
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100117 syn match kconfigDependencies 'depends on\|requires'
118 \ contained
119 \ nextgroup=@kconfigConfigOptionIfExpr
120 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000121
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100122 syn keyword kconfigReverseDependencies select
123 \ contained
124 \ nextgroup=@kconfigRevDepSymbol
125 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000126
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100127 syn cluster kconfigRevDepSymbol contains=kconfigRevDepCSymbol,
128 \ kconfigRevDepNCSymbol
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000129
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100130 syn match kconfigRevDepCSymbol '"[^"\\]*\%(\\.[^"\\]*\)*"'
131 \ contained
132 \ nextgroup=kconfigConfigOptionIf,
133 \ @kconfigConfigOptions
134 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000135
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100136 syn match kconfigRevDepCSymbol "'[^'\\]*\%(\\.[^'\\]*\)*'"
137 \ contained
138 \ nextgroup=kconfigConfigOptionIf,
139 \ @kconfigConfigOptions
140 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000141
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100142 syn match kconfigRevDepNCSymbol '\<\k\+\>'
143 \ contained
144 \ nextgroup=kconfigConfigOptionIf,
145 \ @kconfigConfigOptions
146 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000147
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100148 syn keyword kconfigNumericalRanges range
149 \ contained
150 \ nextgroup=@kconfigRangeSymbol
151 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000152
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100153 syn cluster kconfigRangeSymbol contains=kconfigRangeCSymbol,
154 \ kconfigRangeNCSymbol
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000155
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100156 syn match kconfigRangeCSymbol '"[^"\\]*\%(\\.[^"\\]*\)*"'
157 \ contained
158 \ nextgroup=@kconfigRangeSymbol2
159 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000160
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100161 syn match kconfigRangeCSymbol "'[^'\\]*\%(\\.[^'\\]*\)*'"
162 \ contained
163 \ nextgroup=@kconfigRangeSymbol2
164 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000165
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100166 syn match kconfigRangeNCSymbol '\<\k\+\>'
167 \ contained
168 \ nextgroup=@kconfigRangeSymbol2
169 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000170
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100171 syn cluster kconfigRangeSymbol2 contains=kconfigRangeCSymbol2,
172 \ kconfigRangeNCSymbol2
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000173
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100174 syn match kconfigRangeCSymbol2 "'[^'\\]*\%(\\.[^'\\]*\)*'"
175 \ contained
176 \ nextgroup=kconfigConfigOptionIf,
177 \ @kconfigConfigOptions
178 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000179
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100180 syn match kconfigRangeNCSymbol2 '\<\k\+\>'
181 \ contained
182 \ nextgroup=kconfigConfigOptionIf,
183 \ @kconfigConfigOptions
184 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000185
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100186 syn region kconfigHelpText contained
187 \ matchgroup=kconfigConfigOption
188 \ start='\%(help\|---help---\)\ze\s*\n\z(\s\+\)'
189 \ skip='^$'
190 \ end='^\z1\@!'
191 \ nextgroup=@kconfigConfigOptions
192 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000193
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100194 " XXX: Undocumented
195 syn keyword kconfigDefBool def_bool
196 \ contained
197 \ nextgroup=@kconfigDefBoolSymbol
198 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000199
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100200 syn cluster kconfigDefBoolSymbol contains=kconfigDefBoolCSymbol,
201 \ kconfigDefBoolNCSymbol
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000202
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100203 syn match kconfigDefBoolCSymbol '"[^"\\]*\%(\\.[^"\\]*\)*"'
204 \ contained
205 \ nextgroup=kconfigConfigOptionIf,
206 \ @kconfigConfigOptions
207 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000208
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100209 syn match kconfigDefBoolCSymbol "'[^'\\]*\%(\\.[^'\\]*\)*'"
210 \ contained
211 \ nextgroup=kconfigConfigOptionIf,
212 \ @kconfigConfigOptions
213 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000214
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100215 syn match kconfigDefBoolNCSymbol '\<\k\+\>'
216 \ contained
217 \ nextgroup=kconfigConfigOptionIf,
218 \ @kconfigConfigOptions
219 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000220
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100221 " XXX: This is actually only a valid option for “choice”, but treating it
222 " specially would require a lot of extra groups.
223 syn keyword kconfigOptional optional
224 \ contained
225 \ nextgroup=@kconfigConfigOptions
226 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000227
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100228 syn keyword kconfigConfigOptionIf if
229 \ contained
230 \ nextgroup=@kconfigConfigOptionIfExpr
231 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000232
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100233 syn cluster kconfigConfigOptionIfExpr contains=@kconfigConfOptIfExprSym,
234 \ kconfigConfOptIfExprNeg,
235 \ kconfigConfOptIfExprGroup
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000236
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100237 syn cluster kconfigConfOptIfExprSym contains=kconfigConfOptIfExprCSym,
238 \ kconfigConfOptIfExprNCSym
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000239
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100240 syn match kconfigConfOptIfExprCSym '"[^"\\]*\%(\\.[^"\\]*\)*"'
241 \ contained
242 \ nextgroup=@kconfigConfigOptions,
243 \ kconfigConfOptIfExprAnd,
244 \ kconfigConfOptIfExprOr,
245 \ kconfigConfOptIfExprEq,
246 \ kconfigConfOptIfExprNEq
247 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000248
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100249 syn match kconfigConfOptIfExprCSym "'[^'\\]*\%(\\.[^'\\]*\)*'"
250 \ contained
251 \ nextgroup=@kconfigConfigOptions,
252 \ kconfigConfOptIfExprAnd,
253 \ kconfigConfOptIfExprOr,
254 \ kconfigConfOptIfExprEq,
255 \ kconfigConfOptIfExprNEq
256 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000257
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100258 syn match kconfigConfOptIfExprNCSym '\<\k\+\>'
259 \ contained
260 \ nextgroup=@kconfigConfigOptions,
261 \ kconfigConfOptIfExprAnd,
262 \ kconfigConfOptIfExprOr,
263 \ kconfigConfOptIfExprEq,
264 \ kconfigConfOptIfExprNEq
265 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000266
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100267 syn cluster kconfigConfOptIfExprSym2 contains=kconfigConfOptIfExprCSym2,
268 \ kconfigConfOptIfExprNCSym2
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000269
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100270 syn match kconfigConfOptIfExprEq '='
271 \ contained
272 \ nextgroup=@kconfigConfOptIfExprSym2
273 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000274
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100275 syn match kconfigConfOptIfExprNEq '!='
276 \ contained
277 \ nextgroup=@kconfigConfOptIfExprSym2
278 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000279
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100280 syn match kconfigConfOptIfExprCSym2 "'[^'\\]*\%(\\.[^'\\]*\)*'"
281 \ contained
282 \ nextgroup=@kconfigConfigOptions,
283 \ kconfigConfOptIfExprAnd,
284 \ kconfigConfOptIfExprOr
285 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000286
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100287 syn match kconfigConfOptIfExprNCSym2 '\<\k\+\>'
288 \ contained
289 \ nextgroup=@kconfigConfigOptions,
290 \ kconfigConfOptIfExprAnd,
291 \ kconfigConfOptIfExprOr
292 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000293
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100294 syn match kconfigConfOptIfExprNeg '!'
295 \ contained
296 \ nextgroup=@kconfigConfigOptionIfExpr
297 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000298
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100299 syn match kconfigConfOptIfExprAnd '&&'
300 \ contained
301 \ nextgroup=@kconfigConfigOptionIfExpr
302 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000303
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100304 syn match kconfigConfOptIfExprOr '||'
305 \ contained
306 \ nextgroup=@kconfigConfigOptionIfExpr
307 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000308
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100309 syn match kconfigConfOptIfExprGroup '('
310 \ contained
311 \ nextgroup=@kconfigConfigOptionIfGExp
312 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000313
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100314 " TODO: hm, this kind of recursion doesn't work right. We need another set of
315 " expressions that have kconfigConfigOPtionIfGExp as nextgroup and a matcher
316 " for '(' that sets it all off.
317 syn cluster kconfigConfigOptionIfGExp contains=@kconfigConfOptIfGExpSym,
318 \ kconfigConfOptIfGExpNeg,
319 \ kconfigConfOptIfExprGroup
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000320
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100321 syn cluster kconfigConfOptIfGExpSym contains=kconfigConfOptIfGExpCSym,
322 \ kconfigConfOptIfGExpNCSym
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000323
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100324 syn match kconfigConfOptIfGExpCSym '"[^"\\]*\%(\\.[^"\\]*\)*"'
325 \ contained
326 \ nextgroup=@kconfigConfigIf,
327 \ kconfigConfOptIfGExpAnd,
328 \ kconfigConfOptIfGExpOr,
329 \ kconfigConfOptIfGExpEq,
330 \ kconfigConfOptIfGExpNEq
331 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000332
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100333 syn match kconfigConfOptIfGExpCSym "'[^'\\]*\%(\\.[^'\\]*\)*'"
334 \ contained
335 \ nextgroup=@kconfigConfigIf,
336 \ kconfigConfOptIfGExpAnd,
337 \ kconfigConfOptIfGExpOr,
338 \ kconfigConfOptIfGExpEq,
339 \ kconfigConfOptIfGExpNEq
340 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000341
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100342 syn match kconfigConfOptIfGExpNCSym '\<\k\+\>'
343 \ contained
344 \ nextgroup=kconfigConfOptIfExprGrpE,
345 \ kconfigConfOptIfGExpAnd,
346 \ kconfigConfOptIfGExpOr,
347 \ kconfigConfOptIfGExpEq,
348 \ kconfigConfOptIfGExpNEq
349 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000350
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100351 syn cluster kconfigConfOptIfGExpSym2 contains=kconfigConfOptIfGExpCSym2,
352 \ kconfigConfOptIfGExpNCSym2
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000353
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100354 syn match kconfigConfOptIfGExpEq '='
355 \ contained
356 \ nextgroup=@kconfigConfOptIfGExpSym2
357 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000358
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100359 syn match kconfigConfOptIfGExpNEq '!='
360 \ contained
361 \ nextgroup=@kconfigConfOptIfGExpSym2
362 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000363
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100364 syn match kconfigConfOptIfGExpCSym2 '"[^"\\]*\%(\\.[^"\\]*\)*"'
365 \ contained
366 \ nextgroup=kconfigConfOptIfExprGrpE,
367 \ kconfigConfOptIfGExpAnd,
368 \ kconfigConfOptIfGExpOr
369 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000370
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100371 syn match kconfigConfOptIfGExpCSym2 "'[^'\\]*\%(\\.[^'\\]*\)*'"
372 \ contained
373 \ nextgroup=kconfigConfOptIfExprGrpE,
374 \ kconfigConfOptIfGExpAnd,
375 \ kconfigConfOptIfGExpOr
376 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000377
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100378 syn match kconfigConfOptIfGExpNCSym2 '\<\k\+\>'
379 \ contained
380 \ nextgroup=kconfigConfOptIfExprGrpE,
381 \ kconfigConfOptIfGExpAnd,
382 \ kconfigConfOptIfGExpOr
383 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000384
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100385 syn match kconfigConfOptIfGExpNeg '!'
386 \ contained
387 \ nextgroup=@kconfigConfigOptionIfGExp
388 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000389
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100390 syn match kconfigConfOptIfGExpAnd '&&'
391 \ contained
392 \ nextgroup=@kconfigConfigOptionIfGExp
393 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000394
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100395 syn match kconfigConfOptIfGExpOr '||'
396 \ contained
397 \ nextgroup=@kconfigConfigOptionIfGExp
398 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000399
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100400 syn match kconfigConfOptIfExprGrpE ')'
401 \ contained
402 \ nextgroup=@kconfigConfigOptions,
403 \ kconfigConfOptIfExprAnd,
404 \ kconfigConfOptIfExprOr
405 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000406
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000407
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100408 syn cluster kconfigConfigOptionExpr contains=@kconfigConfOptExprSym,
409 \ kconfigConfOptExprNeg,
410 \ kconfigConfOptExprGroup
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000411
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100412 syn cluster kconfigConfOptExprSym contains=kconfigConfOptExprCSym,
413 \ kconfigConfOptExprNCSym
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000414
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100415 syn match kconfigConfOptExprCSym '"[^"\\]*\%(\\.[^"\\]*\)*"'
416 \ contained
417 \ nextgroup=kconfigConfigOptionIf,
418 \ kconfigConfOptExprAnd,
419 \ kconfigConfOptExprOr,
420 \ kconfigConfOptExprEq,
421 \ kconfigConfOptExprNEq,
422 \ @kconfigConfigOptions
423 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000424
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100425 syn match kconfigConfOptExprCSym "'[^'\\]*\%(\\.[^'\\]*\)*'"
426 \ contained
427 \ nextgroup=kconfigConfigOptionIf,
428 \ kconfigConfOptExprAnd,
429 \ kconfigConfOptExprOr,
430 \ kconfigConfOptExprEq,
431 \ kconfigConfOptExprNEq,
432 \ @kconfigConfigOptions
433 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000434
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100435 syn match kconfigConfOptExprNCSym '\<\k\+\>'
436 \ contained
437 \ nextgroup=kconfigConfigOptionIf,
438 \ kconfigConfOptExprAnd,
439 \ kconfigConfOptExprOr,
440 \ kconfigConfOptExprEq,
441 \ kconfigConfOptExprNEq,
442 \ @kconfigConfigOptions
443 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000444
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100445 syn cluster kconfigConfOptExprSym2 contains=kconfigConfOptExprCSym2,
446 \ kconfigConfOptExprNCSym2
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000447
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100448 syn match kconfigConfOptExprEq '='
449 \ contained
450 \ nextgroup=@kconfigConfOptExprSym2
451 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000452
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100453 syn match kconfigConfOptExprNEq '!='
454 \ contained
455 \ nextgroup=@kconfigConfOptExprSym2
456 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000457
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100458 syn match kconfigConfOptExprCSym2 '"[^"\\]*\%(\\.[^"\\]*\)*"'
459 \ contained
460 \ nextgroup=kconfigConfigOptionIf,
461 \ kconfigConfOptExprAnd,
462 \ kconfigConfOptExprOr,
463 \ @kconfigConfigOptions
464 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000465
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100466 syn match kconfigConfOptExprCSym2 "'[^'\\]*\%(\\.[^'\\]*\)*'"
467 \ contained
468 \ nextgroup=kconfigConfigOptionIf,
469 \ kconfigConfOptExprAnd,
470 \ kconfigConfOptExprOr,
471 \ @kconfigConfigOptions
472 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000473
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100474 syn match kconfigConfOptExprNCSym2 '\<\k\+\>'
475 \ contained
476 \ nextgroup=kconfigConfigOptionIf,
477 \ kconfigConfOptExprAnd,
478 \ kconfigConfOptExprOr,
479 \ @kconfigConfigOptions
480 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000481
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100482 syn match kconfigConfOptExprNeg '!'
483 \ contained
484 \ nextgroup=@kconfigConfigOptionExpr
485 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000486
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100487 syn match kconfigConfOptExprAnd '&&'
488 \ contained
489 \ nextgroup=@kconfigConfigOptionExpr
490 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000491
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100492 syn match kconfigConfOptExprOr '||'
493 \ contained
494 \ nextgroup=@kconfigConfigOptionExpr
495 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000496
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100497 syn match kconfigConfOptExprGroup '('
498 \ contained
499 \ nextgroup=@kconfigConfigOptionGExp
500 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000501
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100502 syn cluster kconfigConfigOptionGExp contains=@kconfigConfOptGExpSym,
503 \ kconfigConfOptGExpNeg,
504 \ kconfigConfOptGExpGroup
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000505
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100506 syn cluster kconfigConfOptGExpSym contains=kconfigConfOptGExpCSym,
507 \ kconfigConfOptGExpNCSym
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000508
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100509 syn match kconfigConfOptGExpCSym '"[^"\\]*\%(\\.[^"\\]*\)*"'
510 \ contained
511 \ nextgroup=kconfigConfOptExprGrpE,
512 \ kconfigConfOptGExpAnd,
513 \ kconfigConfOptGExpOr,
514 \ kconfigConfOptGExpEq,
515 \ kconfigConfOptGExpNEq
516 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000517
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100518 syn match kconfigConfOptGExpCSym "'[^'\\]*\%(\\.[^'\\]*\)*'"
519 \ contained
520 \ nextgroup=kconfigConfOptExprGrpE,
521 \ kconfigConfOptGExpAnd,
522 \ kconfigConfOptGExpOr,
523 \ kconfigConfOptGExpEq,
524 \ kconfigConfOptGExpNEq
525 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000526
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100527 syn match kconfigConfOptGExpNCSym '\<\k\+\>'
528 \ contained
529 \ nextgroup=kconfigConfOptExprGrpE,
530 \ kconfigConfOptGExpAnd,
531 \ kconfigConfOptGExpOr,
532 \ kconfigConfOptGExpEq,
533 \ kconfigConfOptGExpNEq
534 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000535
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100536 syn cluster kconfigConfOptGExpSym2 contains=kconfigConfOptGExpCSym2,
537 \ kconfigConfOptGExpNCSym2
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000538
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100539 syn match kconfigConfOptGExpEq '='
540 \ contained
541 \ nextgroup=@kconfigConfOptGExpSym2
542 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000543
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100544 syn match kconfigConfOptGExpNEq '!='
545 \ contained
546 \ nextgroup=@kconfigConfOptGExpSym2
547 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000548
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100549 syn match kconfigConfOptGExpCSym2 '"[^"\\]*\%(\\.[^"\\]*\)*"'
550 \ contained
551 \ nextgroup=kconfigConfOptExprGrpE,
552 \ kconfigConfOptGExpAnd,
553 \ kconfigConfOptGExpOr
554 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000555
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100556 syn match kconfigConfOptGExpCSym2 "'[^'\\]*\%(\\.[^'\\]*\)*'"
557 \ contained
558 \ nextgroup=kconfigConfOptExprGrpE,
559 \ kconfigConfOptGExpAnd,
560 \ kconfigConfOptGExpOr
561 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000562
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100563 syn match kconfigConfOptGExpNCSym2 '\<\k\+\>'
564 \ contained
565 \ nextgroup=kconfigConfOptExprGrpE,
566 \ kconfigConfOptGExpAnd,
567 \ kconfigConfOptGExpOr
568 \ skipwhite skipnl
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000569
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100570 syn match kconfigConfOptGExpNeg '!'
571 \ contained
572 \ nextgroup=@kconfigConfigOptionGExp
573 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000574
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100575 syn match kconfigConfOptGExpAnd '&&'
576 \ contained
577 \ nextgroup=@kconfigConfigOptionGExp
578 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000579
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100580 syn match kconfigConfOptGExpOr '||'
581 \ contained
582 \ nextgroup=@kconfigConfigOptionGExp
583 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000584
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100585 syn match kconfigConfOptExprGrpE ')'
586 \ contained
587 \ nextgroup=kconfigConfigOptionIf,
588 \ kconfigConfOptExprAnd,
589 \ kconfigConfOptExprOr
590 \ skipwhite skipnl
Bram Moolenaar18144c82006-04-12 21:52:12 +0000591
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100592 hi def link kconfigTodo Todo
593 hi def link kconfigComment Comment
594 hi def link kconfigKeyword Keyword
595 hi def link kconfigPreProc PreProc
596 hi def link kconfigConditional Conditional
597 hi def link kconfigPrompt String
598 hi def link kconfigKeywordPrompt kconfigPrompt
599 hi def link kconfigPath String
600 hi def link kconfigSymbol String
601 hi def link kconfigConstantSymbol Constant
602 hi def link kconfigConfigOption Type
603 hi def link kconfigTypeDefinition kconfigConfigOption
604 hi def link kconfigTypeDefPrompt kconfigPrompt
605 hi def link kconfigInputPrompt kconfigConfigOption
606 hi def link kconfigPromptPrompt kconfigPrompt
607 hi def link kconfigDefaultValue kconfigConfigOption
608 hi def link kconfigDependencies kconfigConfigOption
609 hi def link kconfigReverseDependencies kconfigConfigOption
610 hi def link kconfigRevDepCSymbol kconfigConstantSymbol
611 hi def link kconfigRevDepNCSymbol kconfigSymbol
612 hi def link kconfigNumericalRanges kconfigConfigOption
613 hi def link kconfigRangeCSymbol kconfigConstantSymbol
614 hi def link kconfigRangeNCSymbol kconfigSymbol
615 hi def link kconfigRangeCSymbol2 kconfigConstantSymbol
616 hi def link kconfigRangeNCSymbol2 kconfigSymbol
617 hi def link kconfigHelpText Normal
618 hi def link kconfigDefBool kconfigConfigOption
619 hi def link kconfigDefBoolCSymbol kconfigConstantSymbol
620 hi def link kconfigDefBoolNCSymbol kconfigSymbol
621 hi def link kconfigOptional kconfigConfigOption
622 hi def link kconfigConfigOptionIf Conditional
623 hi def link kconfigConfOptIfExprCSym kconfigConstantSymbol
624 hi def link kconfigConfOptIfExprNCSym kconfigSymbol
625 hi def link kconfigOperator Operator
626 hi def link kconfigConfOptIfExprEq kconfigOperator
627 hi def link kconfigConfOptIfExprNEq kconfigOperator
628 hi def link kconfigConfOptIfExprCSym2 kconfigConstantSymbol
629 hi def link kconfigConfOptIfExprNCSym2 kconfigSymbol
630 hi def link kconfigConfOptIfExprNeg kconfigOperator
631 hi def link kconfigConfOptIfExprAnd kconfigOperator
632 hi def link kconfigConfOptIfExprOr kconfigOperator
633 hi def link kconfigDelimiter Delimiter
634 hi def link kconfigConfOptIfExprGroup kconfigDelimiter
635 hi def link kconfigConfOptIfGExpCSym kconfigConstantSymbol
636 hi def link kconfigConfOptIfGExpNCSym kconfigSymbol
637 hi def link kconfigConfOptIfGExpEq kconfigOperator
638 hi def link kconfigConfOptIfGExpNEq kconfigOperator
639 hi def link kconfigConfOptIfGExpCSym2 kconfigConstantSymbol
640 hi def link kconfigConfOptIfGExpNCSym2 kconfigSymbol
641 hi def link kconfigConfOptIfGExpNeg kconfigOperator
642 hi def link kconfigConfOptIfGExpAnd kconfigOperator
643 hi def link kconfigConfOptIfGExpOr kconfigOperator
644 hi def link kconfigConfOptIfExprGrpE kconfigDelimiter
645 hi def link kconfigConfOptExprCSym kconfigConstantSymbol
646 hi def link kconfigConfOptExprNCSym kconfigSymbol
647 hi def link kconfigConfOptExprEq kconfigOperator
648 hi def link kconfigConfOptExprNEq kconfigOperator
649 hi def link kconfigConfOptExprCSym2 kconfigConstantSymbol
650 hi def link kconfigConfOptExprNCSym2 kconfigSymbol
651 hi def link kconfigConfOptExprNeg kconfigOperator
652 hi def link kconfigConfOptExprAnd kconfigOperator
653 hi def link kconfigConfOptExprOr kconfigOperator
654 hi def link kconfigConfOptExprGroup kconfigDelimiter
655 hi def link kconfigConfOptGExpCSym kconfigConstantSymbol
656 hi def link kconfigConfOptGExpNCSym kconfigSymbol
657 hi def link kconfigConfOptGExpEq kconfigOperator
658 hi def link kconfigConfOptGExpNEq kconfigOperator
659 hi def link kconfigConfOptGExpCSym2 kconfigConstantSymbol
660 hi def link kconfigConfOptGExpNCSym2 kconfigSymbol
661 hi def link kconfigConfOptGExpNeg kconfigOperator
662 hi def link kconfigConfOptGExpAnd kconfigOperator
663 hi def link kconfigConfOptGExpOr kconfigOperator
664 hi def link kconfigConfOptExprGrpE kconfigConfOptIfExprGroup
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000665
666else
667
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100668 syn keyword kconfigTodo contained TODO FIXME XXX NOTE
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000669
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100670 syn match kconfigComment display '#.*$' contains=kconfigTodo
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000671
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100672 syn keyword kconfigKeyword config menuconfig comment mainmenu
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000673
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100674 syn keyword kconfigConditional menu endmenu choice endchoice if endif
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000675
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100676 syn keyword kconfigPreProc source
677 \ nextgroup=kconfigPath
678 \ skipwhite
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000679
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100680 syn keyword kconfigTriState y m n
Bram Moolenaar18144c82006-04-12 21:52:12 +0000681
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100682 syn match kconfigSpecialChar contained '\\.'
683 syn match kconfigSpecialChar '\\$'
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000684
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100685 syn region kconfigPath matchgroup=kconfigPath
686 \ start=+"+ skip=+\\\\\|\\\"+ end=+"+
687 \ contains=kconfigSpecialChar
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000688
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100689 syn region kconfigPath matchgroup=kconfigPath
690 \ start=+'+ skip=+\\\\\|\\\'+ end=+'+
691 \ contains=kconfigSpecialChar
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000692
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100693 syn match kconfigPath '\S\+'
694 \ contained
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000695
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100696 syn region kconfigString matchgroup=kconfigString
697 \ start=+"+ skip=+\\\\\|\\\"+ end=+"+
698 \ contains=kconfigSpecialChar
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000699
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100700 syn region kconfigString matchgroup=kconfigString
701 \ start=+'+ skip=+\\\\\|\\\'+ end=+'+
702 \ contains=kconfigSpecialChar
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000703
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100704 syn keyword kconfigType bool boolean tristate string hex int
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000705
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100706 syn keyword kconfigOption prompt default requires select range
707 \ optional
708 syn match kconfigOption 'depends\%( on\)\='
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000709
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100710 syn keyword kconfigMacro def_bool def_tristate
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000711
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100712 syn region kconfigHelpText
713 \ matchgroup=kconfigOption
714 \ start='\%(help\|---help---\)\ze\s*\n\z(\s\+\)'
715 \ skip='^$'
716 \ end='^\z1\@!'
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000717
Christian Brabandt4335fcf2025-01-20 21:01:41 +0100718 hi def link kconfigTodo Todo
719 hi def link kconfigComment Comment
720 hi def link kconfigKeyword Keyword
721 hi def link kconfigConditional Conditional
722 hi def link kconfigPreProc PreProc
723 hi def link kconfigTriState Boolean
724 hi def link kconfigSpecialChar SpecialChar
725 hi def link kconfigPath String
726 hi def link kconfigString String
727 hi def link kconfigType Type
728 hi def link kconfigOption Identifier
729 hi def link kconfigHelpText Normal
730 hi def link kconfigmacro Macro
Bram Moolenaar4c3f5362006-04-11 21:38:50 +0000731
732endif
733
734let b:current_syntax = "kconfig"
735
736let &cpo = s:cpo_save
737unlet s:cpo_save