1" Vim syntax file 2" Language: udev(8) rules file 3" Maintainer: Nikolai Weibull <now@bitwi.se> 4" Latest Revision: 2006-12-18 5 6if exists("b:current_syntax") 7 finish 8endif 9 10let s:cpo_save = &cpo 11set cpo&vim 12 13" TODO: Line continuations. 14 15syn keyword udevrulesTodo contained TODO FIXME XXX NOTE 16 17syn region udevrulesComment display oneline start='^\s*#' end='$' 18 \ contains=udevrulesTodo,@Spell 19 20syn keyword udevrulesRuleKey ACTION DEVPATH KERNEL SUBSYSTEM KERNELS 21 \ SUBSYSTEMS DRIVERS RESULT 22 \ nextgroup=udevrulesRuleTest 23 \ skipwhite 24 25syn keyword udevrulesRuleKey ATTRS nextgroup=udevrulesAttrsPath 26 27syn region udevrulesAttrsPath display transparent 28 \ matchgroup=udevrulesDelimiter start='{' 29 \ matchgroup=udevrulesDelimiter end='}' 30 \ contains=udevrulesPath 31 \ nextgroup=udevrulesRuleTest 32 \ skipwhite 33 34syn keyword udevrulesRuleKey ENV nextgroup=udevrulesEnvVar 35 36syn region udevrulesEnvVar display transparent 37 \ matchgroup=udevrulesDelimiter start='{' 38 \ matchgroup=udevrulesDelimiter end='}' 39 \ contains=udevrulesVariable 40 \ nextgroup=udevrulesRuleTest,udevrulesRuleEq 41 \ skipwhite 42 43syn keyword udevrulesRuleKey PROGRAM RESULT 44 \ nextgroup=udevrulesEStringTest,udevrulesEStringEq 45 \ skipwhite 46 47syn keyword udevrulesAssignKey NAME SYMLINK OWNER GROUP RUN 48 \ nextgroup=udevrulesEStringEq 49 \ skipwhite 50 51syn keyword udevrulesAssignKey MODE LABEL GOTO WAIT_FOR_SYSFS 52 \ nextgroup=udevrulesRuleEq 53 \ skipwhite 54 55syn keyword udevrulesAssignKey ATTR nextgroup=udevrulesAttrsPath 56 57syn region udevrulesAttrKey display transparent 58 \ matchgroup=udevrulesDelimiter start='{' 59 \ matchgroup=udevrulesDelimiter end='}' 60 \ contains=udevrulesKey 61 \ nextgroup=udevrulesRuleEq 62 \ skipwhite 63 64syn keyword udevrulesAssignKey IMPORT nextgroup=udevrulesImport, 65 \ udevrulesEStringEq 66 \ skipwhite 67 68syn region udevrulesImport display transparent 69 \ matchgroup=udevrulesDelimiter start='{' 70 \ matchgroup=udevrulesDelimiter end='}' 71 \ contains=udevrulesImportType 72 \ nextgroup=udevrulesEStringEq 73 \ skipwhite 74 75syn keyword udevrulesImportType program file parent 76 77syn keyword udevrulesAssignKey OPTIONS 78 \ nextgroup=udevrulesOptionsEq 79 80syn match udevrulesPath contained display '[^}]\+' 81 82syn match udevrulesVariable contained display '[^}]\+' 83 84syn match udevrulesRuleTest contained display '[=!:]=' 85 \ nextgroup=udevrulesString skipwhite 86 87syn match udevrulesEStringTest contained display '[=!+:]=' 88 \ nextgroup=udevrulesEString skipwhite 89 90syn match udevrulesRuleEq contained display '+=\|=\ze[^=]' 91 \ nextgroup=udevrulesString skipwhite 92 93syn match udevrulesEStringEq contained '+=\|=\ze[^=]' 94 \ nextgroup=udevrulesEString skipwhite 95 96syn match udevrulesOptionsEq contained '+=\|=\ze[^=]' 97 \ nextgroup=udevrulesOptions skipwhite 98 99syn region udevrulesEString contained display oneline start=+"+ end=+"+ 100 \ contains=udevrulesStrEscapes,udevrulesStrVars 101 102syn match udevrulesStrEscapes contained '%[knpbMmcPrN%]' 103 104" TODO: This can actually stand alone (without {…}), so add a nextgroup here. 105syn region udevrulesStrEscapes contained start='%c{' end='}' 106 \ contains=udevrulesStrNumber 107 108syn region udevrulesStrEscapes contained start='%s{' end='}' 109 \ contains=udevrulesPath 110 111syn region udevrulesStrEscapes contained start='%E{' end='}' 112 \ contains=udevrulesVariable 113 114syn match udevrulesStrNumber contained '\d\++\=' 115 116syn match udevrulesStrVars contained display '$\%(kernel\|number\|devpath\|id\|major\|minor\|result\|parent\|root\|tempnode\)\>' 117 118syn region udevrulesStrVars contained start='$attr{' end='}' 119 \ contains=udevrulesPath 120 121syn region udevrulesStrVars contained start='$env{' end='}' 122 \ contains=udevrulesVariable 123 124syn match udevrulesStrVars contained display '\$\$' 125 126syn region udevrulesString contained display oneline start=+"+ end=+"+ 127 \ contains=udevrulesPattern 128 129syn match udevrulesPattern contained '[*?]' 130syn region udevrulesPattern contained start='\[!\=' end='\]' 131 \ contains=udevrulesPatRange 132 133syn match udevrulesPatRange contained '[^[-]-[^]-]' 134 135syn region udevrulesOptions contained display oneline start=+"+ end=+"+ 136 \ contains=udevrulesOption,udevrulesOptionSep 137 138syn keyword udevrulesOption contained last_rule ignore_device ignore_remove 139 \ all_partitions 140 141syn match udevrulesOptionSep contained ',' 142 143hi def link udevrulesTodo Todo 144hi def link udevrulesComment Comment 145hi def link udevrulesRuleKey Keyword 146hi def link udevrulesDelimiter Delimiter 147hi def link udevrulesAssignKey Identifier 148hi def link udevrulesPath Identifier 149hi def link udevrulesVariable Identifier 150hi def link udevrulesAttrKey Identifier 151" XXX: setting this to Operator makes for extremely intense highlighting. 152hi def link udevrulesEq Normal 153hi def link udevrulesRuleEq udevrulesEq 154hi def link udevrulesEStringEq udevrulesEq 155hi def link udevrulesOptionsEq udevrulesEq 156hi def link udevrulesEString udevrulesString 157hi def link udevrulesStrEscapes SpecialChar 158hi def link udevrulesStrNumber Number 159hi def link udevrulesStrVars Identifier 160hi def link udevrulesString String 161hi def link udevrulesPattern SpecialChar 162hi def link udevrulesPatRange SpecialChar 163hi def link udevrulesOptions udevrulesString 164hi def link udevrulesOption Type 165hi def link udevrulesOptionSep Delimiter 166hi def link udevrulesImportType Type 167 168let b:current_syntax = "udevrules" 169 170let &cpo = s:cpo_save 171unlet s:cpo_save 172