mirror of
				https://github.com/vim/vim.git
				synced 2025-10-20 08:14:18 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			738 lines
		
	
	
		
			37 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			738 lines
		
	
	
		
			37 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
| " Vim syntax file
 | ||
| " Maintainer:           Christian Brabandt <cb@256bit.org>
 | ||
| " Previous Maintainer:  Nikolai Weibull <now@bitwi.se>
 | ||
| " Latest Revision:      2025 Jan 20
 | ||
| " License:              Vim (see :h license)
 | ||
| " Repository:		https://github.com/chrisbra/vim-kconfig
 | ||
| 
 | ||
| if exists("b:current_syntax")
 | ||
|   finish
 | ||
| endif
 | ||
| 
 | ||
| let s:cpo_save = &cpo
 | ||
| set cpo&vim
 | ||
| 
 | ||
| exe "syn sync minlines=" . get(g:, 'kconfig_minlines', 50)
 | ||
| 
 | ||
| if exists("g:kconfig_syntax_heavy")
 | ||
| 
 | ||
|   syn match   kconfigBegin              '^' nextgroup=kconfigKeyword
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn keyword kconfigTodo               contained TODO FIXME XXX NOTE
 | ||
| 
 | ||
|   syn match   kconfigComment            display '#.*$' contains=kconfigTodo
 | ||
| 
 | ||
|   syn keyword kconfigKeyword            config nextgroup=kconfigSymbol
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn keyword kconfigKeyword            menuconfig nextgroup=kconfigSymbol
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn keyword kconfigKeyword            comment menu mainmenu
 | ||
|                                         \ nextgroup=kconfigKeywordPrompt
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn keyword kconfigKeyword            choice
 | ||
|                                         \ nextgroup=@kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn keyword kconfigKeyword            endmenu endchoice
 | ||
| 
 | ||
|   syn keyword kconfigPreProc            source
 | ||
|                                         \ nextgroup=kconfigPath
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   " TODO: This is a hack.  The who .*Expr stuff should really be generated so
 | ||
|   " that we can reuse it for various nextgroups.
 | ||
|   syn keyword kconfigConditional        if endif
 | ||
|                                         \ nextgroup=@kconfigConfigOptionIfExpr
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigKeywordPrompt      '"[^"\\]*\%(\\.[^"\\]*\)*"'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigPath               '"[^"\\]*\%(\\.[^"\\]*\)*"\|\S\+'
 | ||
|                                         \ contained
 | ||
| 
 | ||
|   syn match   kconfigSymbol             '\<\k\+\>'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   " FIXME: There is – probably – no reason to cluster these instead of just
 | ||
|   " defining them in the same group.
 | ||
|   syn cluster kconfigConfigOptions      contains=kconfigTypeDefinition,
 | ||
|                                         \        kconfigInputPrompt,
 | ||
|                                         \        kconfigDefaultValue,
 | ||
|                                         \        kconfigDependencies,
 | ||
|                                         \        kconfigReverseDependencies,
 | ||
|                                         \        kconfigNumericalRanges,
 | ||
|                                         \        kconfigHelpText,
 | ||
|                                         \        kconfigDefBool,
 | ||
|                                         \        kconfigOptional
 | ||
| 
 | ||
|   syn keyword kconfigTypeDefinition     bool boolean tristate string hex int
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigTypeDefPrompt,
 | ||
|                                         \           @kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigTypeDefPrompt      '"[^"\\]*\%(\\.[^"\\]*\)*"'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfigOptionIf,
 | ||
|                                         \           @kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigTypeDefPrompt      "'[^'\\]*\%(\\.[^'\\]*\)*'"
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfigOptionIf,
 | ||
|                                         \           @kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn keyword kconfigInputPrompt        prompt
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigPromptPrompt
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigPromptPrompt       '"[^"\\]*\%(\\.[^"\\]*\)*"'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfigOptionIf,
 | ||
|                                         \           @kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigPromptPrompt       "'[^'\\]*\%(\\.[^'\\]*\)*'"
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfigOptionIf,
 | ||
|                                         \           @kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn keyword   kconfigDefaultValue     default
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptionExpr
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigDependencies       'depends on\|requires'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptionIfExpr
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn keyword kconfigReverseDependencies select
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigRevDepSymbol
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn cluster kconfigRevDepSymbol       contains=kconfigRevDepCSymbol,
 | ||
|                                         \        kconfigRevDepNCSymbol
 | ||
| 
 | ||
|   syn match   kconfigRevDepCSymbol      '"[^"\\]*\%(\\.[^"\\]*\)*"'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfigOptionIf,
 | ||
|                                         \           @kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigRevDepCSymbol      "'[^'\\]*\%(\\.[^'\\]*\)*'"
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfigOptionIf,
 | ||
|                                         \           @kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigRevDepNCSymbol     '\<\k\+\>'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfigOptionIf,
 | ||
|                                         \           @kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn keyword kconfigNumericalRanges    range
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigRangeSymbol
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn cluster kconfigRangeSymbol        contains=kconfigRangeCSymbol,
 | ||
|                                         \        kconfigRangeNCSymbol
 | ||
| 
 | ||
|   syn match   kconfigRangeCSymbol       '"[^"\\]*\%(\\.[^"\\]*\)*"'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigRangeSymbol2
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigRangeCSymbol       "'[^'\\]*\%(\\.[^'\\]*\)*'"
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigRangeSymbol2
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigRangeNCSymbol      '\<\k\+\>'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigRangeSymbol2
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn cluster kconfigRangeSymbol2       contains=kconfigRangeCSymbol2,
 | ||
|                                         \        kconfigRangeNCSymbol2
 | ||
| 
 | ||
|   syn match   kconfigRangeCSymbol2      "'[^'\\]*\%(\\.[^'\\]*\)*'"
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfigOptionIf,
 | ||
|                                         \           @kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigRangeNCSymbol2     '\<\k\+\>'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfigOptionIf,
 | ||
|                                         \           @kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn region  kconfigHelpText           contained
 | ||
|         \ matchgroup=kconfigConfigOption
 | ||
|         \ start='\%(help\|---help---\)\ze\s*\n\z(\s\+\)'
 | ||
|         \ skip='^$'
 | ||
|         \ end='^\z1\@!'
 | ||
|         \ nextgroup=@kconfigConfigOptions
 | ||
|         \ skipwhite skipnl
 | ||
| 
 | ||
|   " XXX: Undocumented
 | ||
|   syn keyword kconfigDefBool            def_bool
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigDefBoolSymbol
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn cluster kconfigDefBoolSymbol      contains=kconfigDefBoolCSymbol,
 | ||
|                                         \        kconfigDefBoolNCSymbol
 | ||
| 
 | ||
|   syn match   kconfigDefBoolCSymbol     '"[^"\\]*\%(\\.[^"\\]*\)*"'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfigOptionIf,
 | ||
|                                         \           @kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigDefBoolCSymbol     "'[^'\\]*\%(\\.[^'\\]*\)*'"
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfigOptionIf,
 | ||
|                                         \           @kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigDefBoolNCSymbol    '\<\k\+\>'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfigOptionIf,
 | ||
|                                         \           @kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   " XXX: This is actually only a valid option for “choice”, but treating it
 | ||
|   " specially would require a lot of extra groups.
 | ||
|   syn keyword kconfigOptional           optional
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn keyword kconfigConfigOptionIf     if
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptionIfExpr
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn cluster kconfigConfigOptionIfExpr contains=@kconfigConfOptIfExprSym,
 | ||
|                                         \        kconfigConfOptIfExprNeg,
 | ||
|                                         \        kconfigConfOptIfExprGroup
 | ||
| 
 | ||
|   syn cluster kconfigConfOptIfExprSym   contains=kconfigConfOptIfExprCSym,
 | ||
|                                         \        kconfigConfOptIfExprNCSym
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfExprCSym  '"[^"\\]*\%(\\.[^"\\]*\)*"'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptions,
 | ||
|                                         \           kconfigConfOptIfExprAnd,
 | ||
|                                         \           kconfigConfOptIfExprOr,
 | ||
|                                         \           kconfigConfOptIfExprEq,
 | ||
|                                         \           kconfigConfOptIfExprNEq
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfExprCSym  "'[^'\\]*\%(\\.[^'\\]*\)*'"
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptions,
 | ||
|                                         \           kconfigConfOptIfExprAnd,
 | ||
|                                         \           kconfigConfOptIfExprOr,
 | ||
|                                         \           kconfigConfOptIfExprEq,
 | ||
|                                         \           kconfigConfOptIfExprNEq
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfExprNCSym '\<\k\+\>'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptions,
 | ||
|                                         \           kconfigConfOptIfExprAnd,
 | ||
|                                         \           kconfigConfOptIfExprOr,
 | ||
|                                         \           kconfigConfOptIfExprEq,
 | ||
|                                         \           kconfigConfOptIfExprNEq
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn cluster kconfigConfOptIfExprSym2  contains=kconfigConfOptIfExprCSym2,
 | ||
|                                         \        kconfigConfOptIfExprNCSym2
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfExprEq    '='
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfOptIfExprSym2
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfExprNEq   '!='
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfOptIfExprSym2
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfExprCSym2 "'[^'\\]*\%(\\.[^'\\]*\)*'"
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptions,
 | ||
|                                         \           kconfigConfOptIfExprAnd,
 | ||
|                                         \           kconfigConfOptIfExprOr
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfExprNCSym2 '\<\k\+\>'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptions,
 | ||
|                                         \           kconfigConfOptIfExprAnd,
 | ||
|                                         \           kconfigConfOptIfExprOr
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfExprNeg   '!'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptionIfExpr
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfExprAnd   '&&'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptionIfExpr
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfExprOr    '||'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptionIfExpr
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfExprGroup '('
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptionIfGExp
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   " TODO: hm, this kind of recursion doesn't work right.  We need another set of
 | ||
|   " expressions that have kconfigConfigOPtionIfGExp as nextgroup and a matcher
 | ||
|   " for '(' that sets it all off.
 | ||
|   syn cluster kconfigConfigOptionIfGExp contains=@kconfigConfOptIfGExpSym,
 | ||
|                                         \        kconfigConfOptIfGExpNeg,
 | ||
|                                         \        kconfigConfOptIfExprGroup
 | ||
| 
 | ||
|   syn cluster kconfigConfOptIfGExpSym   contains=kconfigConfOptIfGExpCSym,
 | ||
|                                         \        kconfigConfOptIfGExpNCSym
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfGExpCSym  '"[^"\\]*\%(\\.[^"\\]*\)*"'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigIf,
 | ||
|                                         \           kconfigConfOptIfGExpAnd,
 | ||
|                                         \           kconfigConfOptIfGExpOr,
 | ||
|                                         \           kconfigConfOptIfGExpEq,
 | ||
|                                         \           kconfigConfOptIfGExpNEq
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfGExpCSym  "'[^'\\]*\%(\\.[^'\\]*\)*'"
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigIf,
 | ||
|                                         \           kconfigConfOptIfGExpAnd,
 | ||
|                                         \           kconfigConfOptIfGExpOr,
 | ||
|                                         \           kconfigConfOptIfGExpEq,
 | ||
|                                         \           kconfigConfOptIfGExpNEq
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfGExpNCSym '\<\k\+\>'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfOptIfExprGrpE,
 | ||
|                                         \           kconfigConfOptIfGExpAnd,
 | ||
|                                         \           kconfigConfOptIfGExpOr,
 | ||
|                                         \           kconfigConfOptIfGExpEq,
 | ||
|                                         \           kconfigConfOptIfGExpNEq
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn cluster kconfigConfOptIfGExpSym2  contains=kconfigConfOptIfGExpCSym2,
 | ||
|                                         \        kconfigConfOptIfGExpNCSym2
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfGExpEq    '='
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfOptIfGExpSym2
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfGExpNEq   '!='
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfOptIfGExpSym2
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfGExpCSym2 '"[^"\\]*\%(\\.[^"\\]*\)*"'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfOptIfExprGrpE,
 | ||
|                                         \           kconfigConfOptIfGExpAnd,
 | ||
|                                         \           kconfigConfOptIfGExpOr
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfGExpCSym2 "'[^'\\]*\%(\\.[^'\\]*\)*'"
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfOptIfExprGrpE,
 | ||
|                                         \           kconfigConfOptIfGExpAnd,
 | ||
|                                         \           kconfigConfOptIfGExpOr
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfGExpNCSym2 '\<\k\+\>'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfOptIfExprGrpE,
 | ||
|                                         \           kconfigConfOptIfGExpAnd,
 | ||
|                                         \           kconfigConfOptIfGExpOr
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfGExpNeg   '!'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptionIfGExp
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfGExpAnd   '&&'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptionIfGExp
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfGExpOr    '||'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptionIfGExp
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigConfOptIfExprGrpE  ')'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptions,
 | ||
|                                         \           kconfigConfOptIfExprAnd,
 | ||
|                                         \           kconfigConfOptIfExprOr
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
| 
 | ||
|   syn cluster kconfigConfigOptionExpr   contains=@kconfigConfOptExprSym,
 | ||
|                                         \        kconfigConfOptExprNeg,
 | ||
|                                         \        kconfigConfOptExprGroup
 | ||
| 
 | ||
|   syn cluster kconfigConfOptExprSym     contains=kconfigConfOptExprCSym,
 | ||
|                                         \        kconfigConfOptExprNCSym
 | ||
| 
 | ||
|   syn match   kconfigConfOptExprCSym    '"[^"\\]*\%(\\.[^"\\]*\)*"'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfigOptionIf,
 | ||
|                                         \           kconfigConfOptExprAnd,
 | ||
|                                         \           kconfigConfOptExprOr,
 | ||
|                                         \           kconfigConfOptExprEq,
 | ||
|                                         \           kconfigConfOptExprNEq,
 | ||
|                                         \           @kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigConfOptExprCSym    "'[^'\\]*\%(\\.[^'\\]*\)*'"
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfigOptionIf,
 | ||
|                                         \           kconfigConfOptExprAnd,
 | ||
|                                         \           kconfigConfOptExprOr,
 | ||
|                                         \           kconfigConfOptExprEq,
 | ||
|                                         \           kconfigConfOptExprNEq,
 | ||
|                                         \           @kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigConfOptExprNCSym   '\<\k\+\>'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfigOptionIf,
 | ||
|                                         \           kconfigConfOptExprAnd,
 | ||
|                                         \           kconfigConfOptExprOr,
 | ||
|                                         \           kconfigConfOptExprEq,
 | ||
|                                         \           kconfigConfOptExprNEq,
 | ||
|                                         \           @kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn cluster kconfigConfOptExprSym2    contains=kconfigConfOptExprCSym2,
 | ||
|                                         \        kconfigConfOptExprNCSym2
 | ||
| 
 | ||
|   syn match   kconfigConfOptExprEq      '='
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfOptExprSym2
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigConfOptExprNEq     '!='
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfOptExprSym2
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigConfOptExprCSym2   '"[^"\\]*\%(\\.[^"\\]*\)*"'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfigOptionIf,
 | ||
|                                         \           kconfigConfOptExprAnd,
 | ||
|                                         \           kconfigConfOptExprOr,
 | ||
|                                         \           @kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigConfOptExprCSym2   "'[^'\\]*\%(\\.[^'\\]*\)*'"
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfigOptionIf,
 | ||
|                                         \           kconfigConfOptExprAnd,
 | ||
|                                         \           kconfigConfOptExprOr,
 | ||
|                                         \           @kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigConfOptExprNCSym2  '\<\k\+\>'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfigOptionIf,
 | ||
|                                         \           kconfigConfOptExprAnd,
 | ||
|                                         \           kconfigConfOptExprOr,
 | ||
|                                         \           @kconfigConfigOptions
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigConfOptExprNeg     '!'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptionExpr
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigConfOptExprAnd     '&&'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptionExpr
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigConfOptExprOr      '||'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptionExpr
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigConfOptExprGroup   '('
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptionGExp
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn cluster kconfigConfigOptionGExp   contains=@kconfigConfOptGExpSym,
 | ||
|                                         \        kconfigConfOptGExpNeg,
 | ||
|                                         \        kconfigConfOptGExpGroup
 | ||
| 
 | ||
|   syn cluster kconfigConfOptGExpSym     contains=kconfigConfOptGExpCSym,
 | ||
|                                         \        kconfigConfOptGExpNCSym
 | ||
| 
 | ||
|   syn match   kconfigConfOptGExpCSym    '"[^"\\]*\%(\\.[^"\\]*\)*"'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfOptExprGrpE,
 | ||
|                                         \           kconfigConfOptGExpAnd,
 | ||
|                                         \           kconfigConfOptGExpOr,
 | ||
|                                         \           kconfigConfOptGExpEq,
 | ||
|                                         \           kconfigConfOptGExpNEq
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigConfOptGExpCSym    "'[^'\\]*\%(\\.[^'\\]*\)*'"
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfOptExprGrpE,
 | ||
|                                         \           kconfigConfOptGExpAnd,
 | ||
|                                         \           kconfigConfOptGExpOr,
 | ||
|                                         \           kconfigConfOptGExpEq,
 | ||
|                                         \           kconfigConfOptGExpNEq
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigConfOptGExpNCSym   '\<\k\+\>'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfOptExprGrpE,
 | ||
|                                         \           kconfigConfOptGExpAnd,
 | ||
|                                         \           kconfigConfOptGExpOr,
 | ||
|                                         \           kconfigConfOptGExpEq,
 | ||
|                                         \           kconfigConfOptGExpNEq
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn cluster kconfigConfOptGExpSym2    contains=kconfigConfOptGExpCSym2,
 | ||
|                                         \        kconfigConfOptGExpNCSym2
 | ||
| 
 | ||
|   syn match   kconfigConfOptGExpEq      '='
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfOptGExpSym2
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigConfOptGExpNEq     '!='
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfOptGExpSym2
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigConfOptGExpCSym2   '"[^"\\]*\%(\\.[^"\\]*\)*"'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfOptExprGrpE,
 | ||
|                                         \           kconfigConfOptGExpAnd,
 | ||
|                                         \           kconfigConfOptGExpOr
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigConfOptGExpCSym2   "'[^'\\]*\%(\\.[^'\\]*\)*'"
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfOptExprGrpE,
 | ||
|                                         \           kconfigConfOptGExpAnd,
 | ||
|                                         \           kconfigConfOptGExpOr
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigConfOptGExpNCSym2  '\<\k\+\>'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfOptExprGrpE,
 | ||
|                                         \           kconfigConfOptGExpAnd,
 | ||
|                                         \           kconfigConfOptGExpOr
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   syn match   kconfigConfOptGExpNeg     '!'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptionGExp
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigConfOptGExpAnd     '&&'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptionGExp
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigConfOptGExpOr      '||'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=@kconfigConfigOptionGExp
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn match   kconfigConfOptExprGrpE    ')'
 | ||
|                                         \ contained
 | ||
|                                         \ nextgroup=kconfigConfigOptionIf,
 | ||
|                                         \           kconfigConfOptExprAnd,
 | ||
|                                         \           kconfigConfOptExprOr
 | ||
|                                         \ skipwhite skipnl
 | ||
| 
 | ||
|   hi def link kconfigTodo                 Todo
 | ||
|   hi def link kconfigComment              Comment
 | ||
|   hi def link kconfigKeyword              Keyword
 | ||
|   hi def link kconfigPreProc              PreProc
 | ||
|   hi def link kconfigConditional          Conditional
 | ||
|   hi def link kconfigPrompt               String
 | ||
|   hi def link kconfigKeywordPrompt        kconfigPrompt
 | ||
|   hi def link kconfigPath                 String
 | ||
|   hi def link kconfigSymbol               String
 | ||
|   hi def link kconfigConstantSymbol       Constant
 | ||
|   hi def link kconfigConfigOption         Type
 | ||
|   hi def link kconfigTypeDefinition       kconfigConfigOption
 | ||
|   hi def link kconfigTypeDefPrompt        kconfigPrompt
 | ||
|   hi def link kconfigInputPrompt          kconfigConfigOption
 | ||
|   hi def link kconfigPromptPrompt         kconfigPrompt
 | ||
|   hi def link kconfigDefaultValue         kconfigConfigOption
 | ||
|   hi def link kconfigDependencies         kconfigConfigOption
 | ||
|   hi def link kconfigReverseDependencies  kconfigConfigOption
 | ||
|   hi def link kconfigRevDepCSymbol        kconfigConstantSymbol
 | ||
|   hi def link kconfigRevDepNCSymbol       kconfigSymbol
 | ||
|   hi def link kconfigNumericalRanges      kconfigConfigOption
 | ||
|   hi def link kconfigRangeCSymbol         kconfigConstantSymbol
 | ||
|   hi def link kconfigRangeNCSymbol        kconfigSymbol
 | ||
|   hi def link kconfigRangeCSymbol2        kconfigConstantSymbol
 | ||
|   hi def link kconfigRangeNCSymbol2       kconfigSymbol
 | ||
|   hi def link kconfigHelpText             Normal
 | ||
|   hi def link kconfigDefBool              kconfigConfigOption
 | ||
|   hi def link kconfigDefBoolCSymbol       kconfigConstantSymbol
 | ||
|   hi def link kconfigDefBoolNCSymbol      kconfigSymbol
 | ||
|   hi def link kconfigOptional             kconfigConfigOption
 | ||
|   hi def link kconfigConfigOptionIf       Conditional
 | ||
|   hi def link kconfigConfOptIfExprCSym    kconfigConstantSymbol
 | ||
|   hi def link kconfigConfOptIfExprNCSym   kconfigSymbol
 | ||
|   hi def link kconfigOperator             Operator
 | ||
|   hi def link kconfigConfOptIfExprEq      kconfigOperator
 | ||
|   hi def link kconfigConfOptIfExprNEq     kconfigOperator
 | ||
|   hi def link kconfigConfOptIfExprCSym2   kconfigConstantSymbol
 | ||
|   hi def link kconfigConfOptIfExprNCSym2  kconfigSymbol
 | ||
|   hi def link kconfigConfOptIfExprNeg     kconfigOperator
 | ||
|   hi def link kconfigConfOptIfExprAnd     kconfigOperator
 | ||
|   hi def link kconfigConfOptIfExprOr      kconfigOperator
 | ||
|   hi def link kconfigDelimiter            Delimiter
 | ||
|   hi def link kconfigConfOptIfExprGroup   kconfigDelimiter
 | ||
|   hi def link kconfigConfOptIfGExpCSym    kconfigConstantSymbol
 | ||
|   hi def link kconfigConfOptIfGExpNCSym   kconfigSymbol
 | ||
|   hi def link kconfigConfOptIfGExpEq      kconfigOperator
 | ||
|   hi def link kconfigConfOptIfGExpNEq     kconfigOperator
 | ||
|   hi def link kconfigConfOptIfGExpCSym2   kconfigConstantSymbol
 | ||
|   hi def link kconfigConfOptIfGExpNCSym2  kconfigSymbol
 | ||
|   hi def link kconfigConfOptIfGExpNeg     kconfigOperator
 | ||
|   hi def link kconfigConfOptIfGExpAnd     kconfigOperator
 | ||
|   hi def link kconfigConfOptIfGExpOr      kconfigOperator
 | ||
|   hi def link kconfigConfOptIfExprGrpE    kconfigDelimiter
 | ||
|   hi def link kconfigConfOptExprCSym      kconfigConstantSymbol
 | ||
|   hi def link kconfigConfOptExprNCSym     kconfigSymbol
 | ||
|   hi def link kconfigConfOptExprEq        kconfigOperator
 | ||
|   hi def link kconfigConfOptExprNEq       kconfigOperator
 | ||
|   hi def link kconfigConfOptExprCSym2     kconfigConstantSymbol
 | ||
|   hi def link kconfigConfOptExprNCSym2    kconfigSymbol
 | ||
|   hi def link kconfigConfOptExprNeg       kconfigOperator
 | ||
|   hi def link kconfigConfOptExprAnd       kconfigOperator
 | ||
|   hi def link kconfigConfOptExprOr        kconfigOperator
 | ||
|   hi def link kconfigConfOptExprGroup     kconfigDelimiter
 | ||
|   hi def link kconfigConfOptGExpCSym      kconfigConstantSymbol
 | ||
|   hi def link kconfigConfOptGExpNCSym     kconfigSymbol
 | ||
|   hi def link kconfigConfOptGExpEq        kconfigOperator
 | ||
|   hi def link kconfigConfOptGExpNEq       kconfigOperator
 | ||
|   hi def link kconfigConfOptGExpCSym2     kconfigConstantSymbol
 | ||
|   hi def link kconfigConfOptGExpNCSym2    kconfigSymbol
 | ||
|   hi def link kconfigConfOptGExpNeg       kconfigOperator
 | ||
|   hi def link kconfigConfOptGExpAnd       kconfigOperator
 | ||
|   hi def link kconfigConfOptGExpOr        kconfigOperator
 | ||
|   hi def link kconfigConfOptExprGrpE      kconfigConfOptIfExprGroup
 | ||
| 
 | ||
| else
 | ||
| 
 | ||
|   syn keyword kconfigTodo               contained TODO FIXME XXX NOTE
 | ||
| 
 | ||
|   syn match   kconfigComment            display '#.*$' contains=kconfigTodo
 | ||
| 
 | ||
|   syn keyword kconfigKeyword            config menuconfig comment mainmenu
 | ||
| 
 | ||
|   syn keyword kconfigConditional        menu endmenu choice endchoice if endif
 | ||
| 
 | ||
|   syn keyword kconfigPreProc            source
 | ||
|                                         \ nextgroup=kconfigPath
 | ||
|                                         \ skipwhite
 | ||
| 
 | ||
|   syn keyword kconfigTriState           y m n
 | ||
| 
 | ||
|   syn match   kconfigSpecialChar        contained '\\.'
 | ||
|   syn match   kconfigSpecialChar        '\\$'
 | ||
| 
 | ||
|   syn region  kconfigPath               matchgroup=kconfigPath
 | ||
|                                         \ start=+"+ skip=+\\\\\|\\\"+ end=+"+
 | ||
|                                         \ contains=kconfigSpecialChar
 | ||
| 
 | ||
|   syn region  kconfigPath               matchgroup=kconfigPath
 | ||
|                                         \ start=+'+ skip=+\\\\\|\\\'+ end=+'+
 | ||
|                                         \ contains=kconfigSpecialChar
 | ||
| 
 | ||
|   syn match   kconfigPath               '\S\+'
 | ||
|                                         \ contained
 | ||
| 
 | ||
|   syn region  kconfigString             matchgroup=kconfigString
 | ||
|                                         \ start=+"+ skip=+\\\\\|\\\"+ end=+"+
 | ||
|                                         \ contains=kconfigSpecialChar
 | ||
| 
 | ||
|   syn region  kconfigString             matchgroup=kconfigString
 | ||
|                                         \ start=+'+ skip=+\\\\\|\\\'+ end=+'+
 | ||
|                                         \ contains=kconfigSpecialChar
 | ||
| 
 | ||
|   syn keyword kconfigType               bool boolean tristate string hex int
 | ||
| 
 | ||
|   syn keyword kconfigOption             prompt default requires select range
 | ||
|                                         \ optional
 | ||
|   syn match   kconfigOption             'depends\%( on\)\='
 | ||
| 
 | ||
|   syn keyword kconfigMacro              def_bool def_tristate
 | ||
| 
 | ||
|   syn region  kconfigHelpText
 | ||
|         \ matchgroup=kconfigOption
 | ||
|         \ start='\%(help\|---help---\)\ze\s*\n\z(\s\+\)'
 | ||
|         \ skip='^$'
 | ||
|         \ end='^\z1\@!'
 | ||
| 
 | ||
|   hi def link kconfigTodo         Todo
 | ||
|   hi def link kconfigComment      Comment
 | ||
|   hi def link kconfigKeyword      Keyword
 | ||
|   hi def link kconfigConditional  Conditional
 | ||
|   hi def link kconfigPreProc      PreProc
 | ||
|   hi def link kconfigTriState     Boolean
 | ||
|   hi def link kconfigSpecialChar  SpecialChar
 | ||
|   hi def link kconfigPath         String
 | ||
|   hi def link kconfigString       String
 | ||
|   hi def link kconfigType         Type
 | ||
|   hi def link kconfigOption       Identifier
 | ||
|   hi def link kconfigHelpText     Normal
 | ||
|   hi def link kconfigmacro        Macro
 | ||
| 
 | ||
| endif
 | ||
| 
 | ||
| let b:current_syntax = "kconfig"
 | ||
| 
 | ||
| let &cpo = s:cpo_save
 | ||
| unlet s:cpo_save
 |