1" Filename: spec.vim 2" Purpose: Vim syntax file 3" Language: SPEC: Build/install scripts for Linux RPM packages 4" Maintainer: Donovan Rebbechi elflord@panix.com 5" Last Change: Fri Dec 3 11:54 EST 2004 Marcin Dalecki 6 7" For version 5.x: Clear all syntax items 8" For version 6.x: Quit when a syntax file was already loaded 9if version < 600 10 syntax clear 11elseif exists("b:current_syntax") 12 finish 13endif 14 15syn sync minlines=1000 16 17syn match specSpecialChar contained '[][!$()\\|>^;:{}]' 18syn match specColon contained ':' 19syn match specPercent contained '%' 20 21syn match specVariables contained '\$\h\w*' contains=specSpecialVariablesNames,specSpecialChar 22syn match specVariables contained '\${\w*}' contains=specSpecialVariablesNames,specSpecialChar 23 24syn match specMacroIdentifier contained '%\h\w*' contains=specMacroNameLocal,specMacroNameOther,specPercent 25syn match specMacroIdentifier contained '%{\w*}' contains=specMacroNameLocal,specMacroNameOther,specPercent,specSpecialChar 26 27syn match specSpecialVariables contained '\$[0-9]\|\${[0-9]}' 28syn match specCommandOpts contained '\s\(-\w\+\|--\w[a-zA-Z_-]\+\)'ms=s+1 29syn match specComment '^\s*#.*$' 30 31 32syn case match 33 34 35"matches with no highlight 36syn match specNoNumberHilite 'X11\|X11R6\|[a-zA-Z]*\.\d\|[a-zA-Z][-/]\d' 37syn match specManpageFile '[a-zA-Z]\.1' 38 39"Day, Month and most used license acronyms 40syn keyword specLicense contained GPL LGPL BSD MIT GNU 41syn keyword specWeekday contained Mon Tue Wed Thu Fri Sat Sun 42syn keyword specMonth contained Jan Feb Mar Apr Jun Jul Aug Sep Oct Nov Dec 43syn keyword specMonth contained January February March April May June July August September October November December 44 45"#, @, www 46syn match specNumber '\(^-\=\|[ \t]-\=\|-\)[0-9.-]*[0-9]' 47syn match specEmail contained "<\=\<[A-Za-z0-9_.-]\+@\([A-Za-z0-9_-]\+\.\)\+[A-Za-z]\+\>>\=" 48syn match specURL contained '\<\(\(https\{0,1}\|ftp\)://\|\(www[23]\{0,1}\.\|ftp\.\)\)[A-Za-z0-9._/~:,#-]\+\>' 49syn match specURLMacro contained '\<\(\(https\{0,1}\|ftp\)://\|\(www[23]\{0,1}\.\|ftp\.\)\)[A-Za-z0-9._/~:,#%{}-]\+\>' contains=specMacroIdentifier 50 51"TODO take specSpecialVariables out of the cluster for the sh* contains (ALLBUT) 52"Special system directories 53syn match specListedFilesPrefix contained '/\(usr\|local\|opt\|X11R6\|X11\)/'me=e-1 54syn match specListedFilesBin contained '/s\=bin/'me=e-1 55syn match specListedFilesLib contained '/\(lib\|include\)/'me=e-1 56syn match specListedFilesDoc contained '/\(man\d*\|doc\|info\)\>' 57syn match specListedFilesEtc contained '/etc/'me=e-1 58syn match specListedFilesShare contained '/share/'me=e-1 59syn cluster specListedFiles contains=specListedFilesBin,specListedFilesLib,specListedFilesDoc,specListedFilesEtc,specListedFilesShare,specListedFilesPrefix,specVariables,specSpecialChar 60 61"specComands 62syn match specConfigure contained '\./configure' 63syn match specTarCommand contained '\<tar\s\+[cxvpzIf]\{,5}\s*' 64syn keyword specCommandSpecial contained root 65syn keyword specCommand contained make xmkmf mkdir chmod ln find sed rm strip moc echo grep ls rm mv mkdir install cp pwd cat tail then else elif cd gzip rmdir ln eval export touch 66syn cluster specCommands contains=specCommand,specTarCommand,specConfigure,specCommandSpecial 67 68"frequently used rpm env vars 69syn keyword specSpecialVariablesNames contained RPM_BUILD_ROOT RPM_BUILD_DIR RPM_SOURCE_DIR RPM_OPT_FLAGS LDFLAGS CC CC_FLAGS CPPNAME CFLAGS CXX CXXFLAGS CPPFLAGS 70 71"valid macro names from /usr/lib/rpm/macros 72syn keyword specMacroNameOther contained buildroot buildsubdir distribution disturl ix86 name nil optflags perl_sitearch release requires_eq vendor version 73syn match specMacroNameOther contained '\<\(PATCH\|SOURCE\)\d*\>' 74 75"valid _macro names from /usr/lib/rpm/macros 76syn keyword specMacroNameLocal contained _arch _binary_payload _bindir _build _build_alias _build_cpu _builddir _build_os _buildshell _buildsubdir _build_vendor _bzip2bin _datadir _dbpath _dbpath_rebuild _defaultdocdir _docdir _excludedocs _exec_prefix _fixgroup _fixowner _fixperms _ftpport _ftpproxy _gpg_path _gzipbin _host _host_alias _host_cpu _host_os _host_vendor _httpport _httpproxy _includedir _infodir _install_langs _install_script_path _instchangelog _langpatt _lib _libdir _libexecdir _localstatedir _mandir _netsharedpath _oldincludedir _os _pgpbin _pgp_path _prefix _preScriptEnvironment _provides _rpmdir _rpmfilename _sbindir _sharedstatedir _signature _sourcedir _source_payload _specdir _srcrpmdir _sysconfdir _target _target_alias _target_cpu _target_os _target_platform _target_vendor _timecheck _tmppath _topdir _usr _usrsrc _var _vendor 77 78 79"------------------------------------------------------------------------------ 80" here's is all the spec sections definitions: PreAmble, Description, Package, 81" Scripts, Files and Changelog 82 83"One line macros - valid in all ScriptAreas 84"tip: remember do include new items on specScriptArea's skip section 85syn region specSectionMacroArea oneline matchgroup=specSectionMacro start='^%\(define\|patch\d*\|setup\|configure\|GNUconfigure\|find_lang\|makeinstall\|include\)\>' end='$' contains=specCommandOpts,specMacroIdentifier 86syn region specSectionMacroBracketArea oneline matchgroup=specSectionMacro start='^%{\(configure\|GNUconfigure\|find_lang\|makeinstall\)}' end='$' contains=specCommandOpts,specMacroIdentifier 87 88"%% Files Section %% 89"TODO %config valid parameters: missingok\|noreplace 90"TODO %verify valid parameters: \(not\)\= \(md5\|atime\|...\) 91syn region specFilesArea matchgroup=specSection start='^%[Ff][Ii][Ll][Ee][Ss]\>' skip='%\(attrib\|defattr\|attr\|dir\|config\|docdir\|doc\|lang\|verify\|ghost\)\>' end='^%[a-zA-Z]'me=e-2 contains=specFilesOpts,specFilesDirective,@specListedFiles,specComment,specCommandSpecial,specMacroIdentifier 92"tip: remember to include new itens in specFilesArea above 93syn match specFilesDirective contained '%\(attrib\|defattr\|attr\|dir\|config\|docdir\|doc\|lang\|verify\|ghost\)\>' 94 95"valid options for certain section headers 96syn match specDescriptionOpts contained '\s-[ln]\s*\a'ms=s+1,me=e-1 97syn match specPackageOpts contained '\s-n\s*\w'ms=s+1,me=e-1 98syn match specFilesOpts contained '\s-f\s*\w'ms=s+1,me=e-1 99 100 101syn case ignore 102 103 104"%% PreAmble Section %% 105"Copyright and Serial were deprecated by License and Epoch 106syn region specPreAmbleDeprecated oneline matchgroup=specError start='^\(Copyright\|Serial\)' end='$' contains=specEmail,specURL,specURLMacro,specLicense,specColon,specVariables,specSpecialChar,specMacroIdentifier 107syn region specPreAmble oneline matchgroup=specCommand start='^\(Prereq\|Summary\|Name\|Version\|Packager\|Requires\|Icon\|URL\|Source\d*\|Patch\d*\|Prefix\|Packager\|Group\|License\|Release\|BuildRoot\|Distribution\|Vendor\|Provides\|ExclusiveArch\|ExcludeArch\|ExclusiveOS\|Obsoletes\|BuildArch\|BuildArchitectures\|BuildRequires\|BuildConflicts\|BuildPreReq\|Conflicts\|AutoRequires\|AutoReq\|AutoReqProv\|AutoProv\|Epoch\)' end='$' contains=specEmail,specURL,specURLMacro,specLicense,specColon,specVariables,specSpecialChar,specMacroIdentifier 108 109"%% Description Section %% 110syn region specDescriptionArea matchgroup=specSection start='^%description' end='^%'me=e-1 contains=specDescriptionOpts,specEmail,specURL,specNumber,specMacroIdentifier,specComment 111 112"%% Package Section %% 113syn region specPackageArea matchgroup=specSection start='^%package' end='^%'me=e-1 contains=specPackageOpts,specPreAmble,specComment 114 115"%% Scripts Section %% 116syn region specScriptArea matchgroup=specSection start='^%\(prep\|build\|install\|clean\|pre\|postun\|preun\|post\)\>' skip='^%{\|^%\(define\|patch\d*\|configure\|GNUconfigure\|setup\|find_lang\|makeinstall\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2 117 118"%% Changelog Section %% 119syn region specChangelogArea matchgroup=specSection start='^%changelog' end='^%'me=e-1 contains=specEmail,specURL,specWeekday,specMonth,specNumber,specComment,specLicense 120 121 122 123"------------------------------------------------------------------------------ 124"here's the shell syntax for all the Script Sections 125 126 127syn case match 128 129 130"sh-like comment stile, only valid in script part 131syn match shComment contained '#.*$' 132 133syn region shQuote1 contained matchgroup=shQuoteDelim start=+'+ skip=+\\'+ end=+'+ contains=specMacroIdentifier 134syn region shQuote2 contained matchgroup=shQuoteDelim start=+"+ skip=+\\"+ end=+"+ contains=specVariables,specMacroIdentifier 135 136syn match shOperator contained '[><|!&;]\|[!=]=' 137syn region shDo transparent matchgroup=specBlock start="\<do\>" end="\<done\>" contains=ALLBUT,shFunction,shDoError,shCase,specPreAmble,@specListedFiles 138 139syn region specIf matchgroup=specBlock start="%ifosf\|%ifos\|%ifnos\|%ifarch\|%ifnarch\|%else" end='%endif' contains=ALLBUT, specIfError, shCase 140 141syn region shIf transparent matchgroup=specBlock start="\<if\>" end="\<fi\>" contains=ALLBUT,shFunction,shIfError,shCase,@specListedFiles 142 143syn region shFor matchgroup=specBlock start="\<for\>" end="\<in\>" contains=ALLBUT,shFunction,shInError,shCase,@specListedFiles 144 145syn region shCaseEsac transparent matchgroup=specBlock start="\<case\>" matchgroup=NONE end="\<in\>"me=s-1 contains=ALLBUT,shFunction,shCaseError,@specListedFiles nextgroup=shCaseEsac 146syn region shCaseEsac matchgroup=specBlock start="\<in\>" end="\<esac\>" contains=ALLBUT,shFunction,shCaseError,@specListedFilesBin 147syn region shCase matchgroup=specBlock contained start=")" end=";;" contains=ALLBUT,shFunction,shCaseError,shCase,@specListedFiles 148 149syn sync match shDoSync grouphere shDo "\<do\>" 150syn sync match shDoSync groupthere shDo "\<done\>" 151syn sync match shIfSync grouphere shIf "\<if\>" 152syn sync match shIfSync groupthere shIf "\<fi\>" 153syn sync match specIfSync grouphere specIf "%ifarch\|%ifos\|%ifnos" 154syn sync match specIfSync groupthere specIf "%endIf" 155syn sync match shForSync grouphere shFor "\<for\>" 156syn sync match shForSync groupthere shFor "\<in\>" 157syn sync match shCaseEsacSync grouphere shCaseEsac "\<case\>" 158syn sync match shCaseEsacSync groupthere shCaseEsac "\<esac\>" 159 160" Define the default highlighting. 161" For version 5.7 and earlier: only when not done already 162" For version 5.8 and later: only when an item doesn't have highlighting yet 163if version >= 508 || !exists("did_spec_syntax_inits") 164 if version < 508 165 let did_spec_syntax_inits = 1 166 command -nargs=+ HiLink hi link <args> 167 else 168 command -nargs=+ HiLink hi def link <args> 169 endif 170 171 "main types color definitions 172 HiLink specSection Structure 173 HiLink specSectionMacro Macro 174 HiLink specWWWlink PreProc 175 HiLink specOpts Operator 176 177 "yes, it's ugly, but white is sooo cool 178 if &background == "dark" 179 hi def specGlobalMacro ctermfg=white 180 else 181 HiLink specGlobalMacro Identifier 182 endif 183 184 "sh colors 185 HiLink shComment Comment 186 HiLink shIf Statement 187 HiLink shOperator Special 188 HiLink shQuote1 String 189 HiLink shQuote2 String 190 HiLink shQuoteDelim Statement 191 192 "spec colors 193 HiLink specBlock Function 194 HiLink specColon Special 195 HiLink specCommand Statement 196 HiLink specCommandOpts specOpts 197 HiLink specCommandSpecial Special 198 HiLink specComment Comment 199 HiLink specConfigure specCommand 200 HiLink specDate String 201 HiLink specDescriptionOpts specOpts 202 HiLink specEmail specWWWlink 203 HiLink specError Error 204 HiLink specFilesDirective specSectionMacro 205 HiLink specFilesOpts specOpts 206 HiLink specLicense String 207 HiLink specMacroNameLocal specGlobalMacro 208 HiLink specMacroNameOther specGlobalMacro 209 HiLink specManpageFile NONE 210 HiLink specMonth specDate 211 HiLink specNoNumberHilite NONE 212 HiLink specNumber Number 213 HiLink specPackageOpts specOpts 214 HiLink specPercent Special 215 HiLink specSpecialChar Special 216 HiLink specSpecialVariables specGlobalMacro 217 HiLink specSpecialVariablesNames specGlobalMacro 218 HiLink specTarCommand specCommand 219 HiLink specURL specWWWlink 220 HiLink specURLMacro specWWWlink 221 HiLink specVariables Identifier 222 HiLink specWeekday specDate 223 HiLink specListedFilesBin Statement 224 HiLink specListedFilesDoc Statement 225 HiLink specListedFilesEtc Statement 226 HiLink specListedFilesLib Statement 227 HiLink specListedFilesPrefix Statement 228 HiLink specListedFilesShare Statement 229 230 delcommand HiLink 231endif 232 233let b:current_syntax = "spec" 234 235" vim: ts=8 236