xref: /vim-8.2.3635/runtime/syntax/spec.vim (revision 89bcfda6)
1" Filename:    spec.vim
2" Purpose:     Vim syntax file
3" Language:    SPEC: Build/install scripts for Linux RPM packages
4" Maintainer:  Igor Gnatenko [email protected]
5" Former Maintainer:  Donovan Rebbechi [email protected] (until March 2014)
6" Last Change: Sat Apr 9 15:30 2016 Filip Szymański
7
8" quit when a syntax file was already loaded
9if exists("b:current_syntax")
10  finish
11endif
12
13syn sync minlines=1000
14
15syn match specSpecialChar contained '[][!$()\\|>^;:{}]'
16syn match specColon       contained ':'
17syn match specPercent     contained '%'
18
19syn match specVariables   contained '\$\h\w*' contains=specSpecialVariablesNames,specSpecialChar
20syn match specVariables   contained '\${\w*}' contains=specSpecialVariablesNames,specSpecialChar
21
22syn match specMacroIdentifier contained '%\h\w*' contains=specMacroNameLocal,specMacroNameOther,specPercent
23syn match specMacroIdentifier contained '%{\w*}' contains=specMacroNameLocal,specMacroNameOther,specPercent,specSpecialChar
24
25syn match specSpecialVariables contained '\$[0-9]\|\${[0-9]}'
26syn match specCommandOpts      contained '\s\(-\w\+\|--\w[a-zA-Z_-]\+\)'ms=s+1
27syn match specComment '^\s*#.*$'
28
29
30syn case match
31
32
33"matches with no highlight
34syn match specNoNumberHilite 'X11\|X11R6\|[a-zA-Z]*\.\d\|[a-zA-Z][-/]\d'
35syn match specManpageFile '[a-zA-Z]\.1'
36
37"Day, Month and most used license acronyms
38syn keyword specLicense contained GPL LGPL BSD MIT GNU
39syn keyword specWeekday contained Mon Tue Wed Thu Fri Sat Sun
40syn keyword specMonth   contained Jan Feb Mar Apr Jun Jul Aug Sep Oct Nov Dec
41syn keyword specMonth   contained January February March April May June July August September October November December
42
43"#, @, www
44syn match specNumber '\(^-\=\|[ \t]-\=\|-\)[0-9.-]*[0-9]'
45syn match specEmail contained "<\=\<[A-Za-z0-9_.-]\+@\([A-Za-z0-9_-]\+\.\)\+[A-Za-z]\+\>>\="
46syn match specURL      contained '\<\(\(https\{0,1}\|ftp\)://\|\(www[23]\{0,1}\.\|ftp\.\)\)[A-Za-z0-9._/~:,#-]\+\>'
47syn match specURLMacro contained '\<\(\(https\{0,1}\|ftp\)://\|\(www[23]\{0,1}\.\|ftp\.\)\)[A-Za-z0-9._/~:,#%{}-]\+\>' contains=specMacroIdentifier
48
49"TODO take specSpecialVariables out of the cluster for the sh* contains (ALLBUT)
50"Special system directories
51syn match specListedFilesPrefix contained '/\(usr\|local\|opt\|X11R6\|X11\)/'me=e-1
52syn match specListedFilesBin    contained '/s\=bin/'me=e-1
53syn match specListedFilesLib    contained '/\(lib\|include\)/'me=e-1
54syn match specListedFilesDoc    contained '/\(man\d*\|doc\|info\)\>'
55syn match specListedFilesEtc    contained '/etc/'me=e-1
56syn match specListedFilesShare  contained '/share/'me=e-1
57syn cluster specListedFiles contains=specListedFilesBin,specListedFilesLib,specListedFilesDoc,specListedFilesEtc,specListedFilesShare,specListedFilesPrefix,specVariables,specSpecialChar
58
59"specComands
60syn match   specConfigure  contained '\./configure'
61syn match   specTarCommand contained '\<tar\s\+[cxvpzIf]\{,5}\s*'
62syn keyword specCommandSpecial contained root
63syn 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
64syn cluster specCommands contains=specCommand,specTarCommand,specConfigure,specCommandSpecial
65
66"frequently used rpm env vars
67syn keyword specSpecialVariablesNames contained RPM_BUILD_ROOT RPM_BUILD_DIR RPM_SOURCE_DIR RPM_OPT_FLAGS LDFLAGS CC CC_FLAGS CPPNAME CFLAGS CXX CXXFLAGS CPPFLAGS
68
69"valid macro names from /usr/lib/rpm/macros
70syn keyword specMacroNameOther contained buildroot buildsubdir distribution disturl ix86 name nil optflags perl_sitearch release requires_eq vendor version
71syn match   specMacroNameOther contained '\<\(PATCH\|SOURCE\)\d*\>'
72
73"valid _macro names from /usr/lib/rpm/macros
74syn 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
75
76
77"------------------------------------------------------------------------------
78" here's is all the spec sections definitions: PreAmble, Description, Package,
79"   Scripts, Files and Changelog
80
81"One line macros - valid in all ScriptAreas
82"tip: remember do include new items on specScriptArea's skip section
83syn region specSectionMacroArea oneline matchgroup=specSectionMacro start='^%\(define\|global\|patch\d*\|setup\|autosetup\|autopatch\|configure\|GNUconfigure\|find_lang\|make_build\|makeinstall\|make_install\|include\)\>' end='$' contains=specCommandOpts,specMacroIdentifier
84syn region specSectionMacroBracketArea oneline matchgroup=specSectionMacro start='^%{\(configure\|GNUconfigure\|find_lang\|make_build\|makeinstall\|make_install\)}' end='$' contains=specCommandOpts,specMacroIdentifier
85
86"%% Files Section %%
87"TODO %config valid parameters: missingok\|noreplace
88"TODO %verify valid parameters: \(not\)\= \(md5\|atime\|...\)
89syn 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
90"tip: remember to include new itens in specFilesArea above
91syn match  specFilesDirective contained '%\(attrib\|defattr\|attr\|dir\|config\|docdir\|doc\|lang\|verify\|ghost\)\>'
92
93"valid options for certain section headers
94syn match specDescriptionOpts contained '\s-[ln]\s*\a'ms=s+1,me=e-1
95syn match specPackageOpts     contained    '\s-n\s*\w'ms=s+1,me=e-1
96syn match specFilesOpts       contained    '\s-f\s*\w'ms=s+1,me=e-1
97
98
99syn case ignore
100
101
102"%% PreAmble Section %%
103"Copyright and Serial were deprecated by License and Epoch
104syn region specPreAmbleDeprecated oneline matchgroup=specError start='^\(Copyright\|Serial\)' end='$' contains=specEmail,specURL,specURLMacro,specLicense,specColon,specVariables,specSpecialChar,specMacroIdentifier
105syn region specPreAmble oneline matchgroup=specCommand start='^\(Prereq\|Summary\|Name\|Version\|Packager\|Requires\|Recommends\|Suggests\|Supplements\|Enhances\|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
106
107"%% Description Section %%
108syn region specDescriptionArea matchgroup=specSection start='^%description' end='^%'me=e-1 contains=specDescriptionOpts,specEmail,specURL,specNumber,specMacroIdentifier,specComment
109
110"%% Package Section %%
111syn region specPackageArea matchgroup=specSection start='^%package' end='^%'me=e-1 contains=specPackageOpts,specPreAmble,specComment
112
113"%% Scripts Section %%
114syn region specScriptArea matchgroup=specSection start='^%\(prep\|build\|install\|clean\|pre\|postun\|preun\|post\|posttrans\)\>' skip='^%{\|^%\(define\|patch\d*\|configure\|GNUconfigure\|setup\|autosetup\|autopatch\|find_lang\|make_build\|makeinstall\|make_install\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2
115
116"%% Changelog Section %%
117syn region specChangelogArea matchgroup=specSection start='^%changelog' end='^%'me=e-1 contains=specEmail,specURL,specWeekday,specMonth,specNumber,specComment,specLicense
118
119
120
121"------------------------------------------------------------------------------
122"here's the shell syntax for all the Script Sections
123
124
125syn case match
126
127
128"sh-like comment stile, only valid in script part
129syn match shComment contained '#.*$'
130
131syn region shQuote1 contained matchgroup=shQuoteDelim start=+'+ skip=+\\'+ end=+'+ contains=specMacroIdentifier
132syn region shQuote2 contained matchgroup=shQuoteDelim start=+"+ skip=+\\"+ end=+"+ contains=specVariables,specMacroIdentifier
133
134syn match shOperator contained '[><|!&;]\|[!=]='
135syn region shDo transparent matchgroup=specBlock start="\<do\>" end="\<done\>" contains=ALLBUT,shFunction,shDoError,shCase,specPreAmble,@specListedFiles
136
137syn region specIf  matchgroup=specBlock start="%ifosf\|%ifos\|%ifnos\|%ifarch\|%ifnarch\|%else"  end='%endif'  contains=ALLBUT, specIfError, shCase
138
139syn region  shIf transparent matchgroup=specBlock start="\<if\>" end="\<fi\>" contains=ALLBUT,shFunction,shIfError,shCase,@specListedFiles
140
141syn region  shFor  matchgroup=specBlock start="\<for\>" end="\<in\>" contains=ALLBUT,shFunction,shInError,shCase,@specListedFiles
142
143syn region shCaseEsac transparent matchgroup=specBlock start="\<case\>" matchgroup=NONE end="\<in\>"me=s-1 contains=ALLBUT,shFunction,shCaseError,@specListedFiles nextgroup=shCaseEsac
144syn region shCaseEsac matchgroup=specBlock start="\<in\>" end="\<esac\>" contains=ALLBUT,shFunction,shCaseError,@specListedFilesBin
145syn region shCase matchgroup=specBlock contained start=")"  end=";;" contains=ALLBUT,shFunction,shCaseError,shCase,@specListedFiles
146
147syn sync match shDoSync       grouphere  shDo       "\<do\>"
148syn sync match shDoSync       groupthere shDo       "\<done\>"
149syn sync match shIfSync       grouphere  shIf       "\<if\>"
150syn sync match shIfSync       groupthere shIf       "\<fi\>"
151syn sync match specIfSync     grouphere  specIf     "%ifarch\|%ifos\|%ifnos"
152syn sync match specIfSync     groupthere specIf     "%endIf"
153syn sync match shForSync      grouphere  shFor      "\<for\>"
154syn sync match shForSync      groupthere shFor      "\<in\>"
155syn sync match shCaseEsacSync grouphere  shCaseEsac "\<case\>"
156syn sync match shCaseEsacSync groupthere shCaseEsac "\<esac\>"
157
158" Define the default highlighting.
159" Only when an item doesn't have highlighting yet
160command -nargs=+ HiLink hi def link <args>
161
162"main types color definitions
163HiLink specSection			Structure
164HiLink specSectionMacro		Macro
165HiLink specWWWlink			PreProc
166HiLink specOpts			Operator
167
168"yes, it's ugly, but white is sooo cool
169if &background == "dark"
170hi def specGlobalMacro		ctermfg=white
171else
172HiLink specGlobalMacro		Identifier
173endif
174
175"sh colors
176HiLink shComment			Comment
177HiLink shIf				Statement
178HiLink shOperator			Special
179HiLink shQuote1			String
180HiLink shQuote2			String
181HiLink shQuoteDelim			Statement
182
183"spec colors
184HiLink specBlock			Function
185HiLink specColon			Special
186HiLink specCommand			Statement
187HiLink specCommandOpts		specOpts
188HiLink specCommandSpecial		Special
189HiLink specComment			Comment
190HiLink specConfigure			specCommand
191HiLink specDate			String
192HiLink specDescriptionOpts		specOpts
193HiLink specEmail			specWWWlink
194HiLink specError			Error
195HiLink specFilesDirective		specSectionMacro
196HiLink specFilesOpts			specOpts
197HiLink specLicense			String
198HiLink specMacroNameLocal		specGlobalMacro
199HiLink specMacroNameOther		specGlobalMacro
200HiLink specManpageFile		NONE
201HiLink specMonth			specDate
202HiLink specNoNumberHilite		NONE
203HiLink specNumber			Number
204HiLink specPackageOpts		specOpts
205HiLink specPercent			Special
206HiLink specSpecialChar		Special
207HiLink specSpecialVariables		specGlobalMacro
208HiLink specSpecialVariablesNames	specGlobalMacro
209HiLink specTarCommand			specCommand
210HiLink specURL			specWWWlink
211HiLink specURLMacro			specWWWlink
212HiLink specVariables			Identifier
213HiLink specWeekday			specDate
214HiLink specListedFilesBin		Statement
215HiLink specListedFilesDoc		Statement
216HiLink specListedFilesEtc		Statement
217HiLink specListedFilesLib		Statement
218HiLink specListedFilesPrefix		Statement
219HiLink specListedFilesShare		Statement
220
221delcommand HiLink
222
223let b:current_syntax = "spec"
224
225" vim: ts=8
226