7
|
1 " Vim syntax file
|
|
2 " Language: Fortran95 (and Fortran90, Fortran77, F and elf90)
|
840
|
3 " Version: 0.88
|
7
|
4 " URL: http://www.unb.ca/chem/ajit/syntax/fortran.vim
|
2034
|
5 " Last Change: 2008 Nov 01
|
7
|
6 " Maintainer: Ajit J. Thakkar (ajit AT unb.ca); <http://www.unb.ca/chem/ajit/>
|
|
7 " Usage: Do :help fortran-syntax from Vim
|
|
8 " Credits:
|
|
9 " Version 0.1 was based on the fortran 77 syntax file by Mario Eusebio and
|
|
10 " Preben Guldberg. Useful suggestions were made by: Andrej Panjkov,
|
|
11 " Bram Moolenaar, Thomas Olsen, Michael Sternberg, Christian Reile,
|
|
12 " Walter Dieudonné, Alexander Wagner, Roman Bertle, Charles Rendleman,
|
|
13 " and Andrew Griffiths. For instructions on use, do :help fortran from vim
|
|
14
|
|
15 " For version 5.x: Clear all syntax items
|
|
16 " For version 6.x: Quit if a syntax file is already loaded
|
|
17 if version < 600
|
|
18 syntax clear
|
|
19 elseif exists("b:current_syntax")
|
|
20 finish
|
|
21 endif
|
|
22
|
|
23 " let b:fortran_dialect = fortran_dialect if set correctly by user
|
|
24 if exists("fortran_dialect")
|
|
25 if fortran_dialect =~ '\<\(f\(9[05]\|77\)\|elf\|F\)\>'
|
|
26 let b:fortran_dialect = matchstr(fortran_dialect,'\<\(f\(9[05]\|77\)\|elf\|F\)\>')
|
|
27 else
|
|
28 echohl WarningMsg | echo "Unknown value of fortran_dialect" | echohl None
|
|
29 let b:fortran_dialect = "unknown"
|
|
30 endif
|
|
31 else
|
|
32 let b:fortran_dialect = "unknown"
|
|
33 endif
|
|
34
|
|
35 " fortran_dialect not set or set incorrectly by user,
|
|
36 if b:fortran_dialect == "unknown"
|
|
37 " set b:fortran_dialect from directive in first three lines of file
|
|
38 let b:fortran_retype = getline(1)." ".getline(2)." ".getline(3)
|
|
39 if b:fortran_retype =~ '\<fortran_dialect\s*=\s*F\>'
|
|
40 let b:fortran_dialect = "F"
|
|
41 elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*elf\>'
|
|
42 let b:fortran_dialect = "elf"
|
|
43 elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f90\>'
|
|
44 let b:fortran_dialect = "f90"
|
|
45 elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f95\>'
|
|
46 let b:fortran_dialect = "f95"
|
|
47 elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f77\>'
|
|
48 let b:fortran_dialect = "f77"
|
|
49 else
|
|
50 " no directive found, so assume f95
|
|
51 let b:fortran_dialect = "f95"
|
|
52 endif
|
|
53 unlet b:fortran_retype
|
|
54 endif
|
|
55
|
|
56 " Choose between fixed and free source form if this hasn't been done yet
|
|
57 if !exists("b:fortran_fixed_source")
|
|
58 if b:fortran_dialect == "elf" || b:fortran_dialect == "F"
|
|
59 " elf and F require free source form
|
|
60 let b:fortran_fixed_source = 0
|
|
61 elseif b:fortran_dialect == "f77"
|
|
62 " f77 requires fixed source form
|
|
63 let b:fortran_fixed_source = 1
|
|
64 elseif exists("fortran_free_source")
|
|
65 " User guarantees free source form for all f90 and f95 files
|
|
66 let b:fortran_fixed_source = 0
|
|
67 elseif exists("fortran_fixed_source")
|
|
68 " User guarantees fixed source form for all f90 and f95 files
|
|
69 let b:fortran_fixed_source = 1
|
|
70 else
|
|
71 " f90 and f95 allow both fixed and free source form.
|
|
72 " Assume fixed source form unless signs of free source form
|
|
73 " are detected in the first five columns of the first b:lmax lines.
|
|
74 " Detection becomes more accurate and time-consuming if more lines
|
|
75 " are checked. Increase the limit below if you keep lots of comments at
|
|
76 " the very top of each file and you have a fast computer.
|
819
|
77 let b:lmax = 250
|
7
|
78 if ( b:lmax > line("$") )
|
|
79 let b:lmax = line("$")
|
|
80 endif
|
|
81 let b:fortran_fixed_source = 1
|
|
82 let b:ln=1
|
|
83 while b:ln <= b:lmax
|
|
84 let b:test = strpart(getline(b:ln),0,5)
|
|
85 if b:test[0] !~ '[Cc*!#]' && b:test !~ '^ \+[!#]' && b:test =~ '[^ 0-9\t]'
|
|
86 let b:fortran_fixed_source = 0
|
|
87 break
|
|
88 endif
|
|
89 let b:ln = b:ln + 1
|
|
90 endwhile
|
|
91 unlet b:lmax b:ln b:test
|
|
92 endif
|
|
93 endif
|
|
94
|
|
95 syn case ignore
|
|
96
|
819
|
97 if b:fortran_dialect !=? "f77"
|
7
|
98 if version >= 600
|
|
99 if b:fortran_fixed_source == 1
|
|
100 syn match fortranConstructName "^\s\{6,}\zs\a\w*\ze\s*:"
|
|
101 else
|
|
102 syn match fortranConstructName "^\s*\zs\a\w*\ze\s*:"
|
|
103 endif
|
|
104 if exists("fortran_more_precise")
|
|
105 syn match fortranConstructName "\(\<end\s*do\s\+\)\@<=\a\w*"
|
|
106 syn match fortranConstructName "\(\<end\s*if\s\+\)\@<=\a\w*"
|
|
107 syn match fortranConstructName "\(\<end\s*select\s\+\)\@<=\a\w*"
|
|
108 endif
|
|
109 else
|
|
110 if b:fortran_fixed_source == 1
|
|
111 syn match fortranConstructName "^\s\{6,}\a\w*\s*:"
|
|
112 else
|
|
113 syn match fortranConstructName "^\s*\a\w*\s*:"
|
|
114 endif
|
|
115 endif
|
|
116 endif
|
|
117
|
|
118 syn match fortranUnitHeader "\<end\>"
|
|
119
|
819
|
120 syn match fortranType "\<character\>"
|
|
121 syn match fortranType "\<complex\>"
|
|
122 syn match fortranType "\<integer\>"
|
7
|
123 syn keyword fortranType intrinsic
|
|
124 syn match fortranType "\<implicit\>"
|
|
125 syn keyword fortranStructure dimension
|
|
126 syn keyword fortranStorageClass parameter save
|
|
127 syn match fortranUnitHeader "\<subroutine\>"
|
|
128 syn keyword fortranCall call
|
|
129 syn match fortranUnitHeader "\<function\>"
|
|
130 syn match fortranUnitHeader "\<program\>"
|
819
|
131 syn keyword fortranKeyword return stop
|
7
|
132 syn keyword fortranConditional else then
|
|
133 syn match fortranConditional "\<if\>"
|
|
134 syn match fortranRepeat "\<do\>"
|
|
135
|
|
136 syn keyword fortranTodo contained todo fixme
|
|
137
|
|
138 "Catch errors caused by too many right parentheses
|
819
|
139 syn region fortranParen transparent start="(" end=")" contains=ALLBUT,fortranParenError,@fortranCommentGroup,cIncluded,@spell
|
7
|
140 syn match fortranParenError ")"
|
|
141
|
|
142 syn match fortranOperator "\.\s*n\=eqv\s*\."
|
|
143 syn match fortranOperator "\.\s*\(and\|or\|not\)\s*\."
|
|
144 syn match fortranOperator "\(+\|-\|/\|\*\)"
|
|
145
|
|
146 syn match fortranBoolean "\.\s*\(true\|false\)\s*\."
|
|
147
|
819
|
148 syn keyword fortranReadWrite backspace close endfile inquire open print read rewind write
|
7
|
149
|
|
150 "If tabs are allowed then the left margin checks do not work
|
|
151 if exists("fortran_have_tabs")
|
|
152 syn match fortranTab "\t" transparent
|
|
153 else
|
|
154 syn match fortranTab "\t"
|
|
155 endif
|
|
156
|
819
|
157 syn keyword fortranIO access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit
|
7
|
158
|
819
|
159 syn keyword fortran66Intrinsic alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl
|
7
|
160
|
|
161 " Intrinsics provided by some vendors
|
819
|
162 syn keyword fortranExtraIntrinsic algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama erf erfc gamma iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh
|
7
|
163
|
819
|
164 syn keyword fortran77Intrinsic abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh
|
7
|
165 syn match fortran77Intrinsic "\<len\s*[(,]"me=s+3
|
|
166 syn match fortran77Intrinsic "\<real\s*("me=s+4
|
|
167 syn match fortranType "\<implicit\s\+real"
|
|
168 syn match fortranType "^\s*real\>"
|
|
169 syn match fortran90Intrinsic "\<logical\s*("me=s+7
|
|
170 syn match fortranType "\<implicit\s\+logical"
|
|
171 syn match fortranType "^\s*logical\>"
|
|
172
|
|
173 "Numbers of various sorts
|
|
174 " Integers
|
|
175 syn match fortranNumber display "\<\d\+\(_\a\w*\)\=\>"
|
|
176 " floating point number, without a decimal point
|
|
177 syn match fortranFloatNoDec display "\<\d\+[deq][-+]\=\d\+\(_\a\w*\)\=\>"
|
|
178 " floating point number, starting with a decimal point
|
|
179 syn match fortranFloatIniDec display "\.\d\+\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
|
|
180 " floating point number, no digits after decimal
|
|
181 syn match fortranFloatEndDec display "\<\d\+\.\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
|
|
182 " floating point number, D or Q exponents
|
|
183 syn match fortranFloatDExp display "\<\d\+\.\d\+\([dq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
|
|
184 " floating point number
|
|
185 syn match fortranFloat display "\<\d\+\.\d\+\(e[-+]\=\d\+\)\=\(_\a\w*\)\=\>"
|
|
186 " Numbers in formats
|
|
187 syn match fortranFormatSpec display "\d*f\d\+\.\d\+"
|
|
188 syn match fortranFormatSpec display "\d*e[sn]\=\d\+\.\d\+\(e\d+\>\)\="
|
|
189 syn match fortranFormatSpec display "\d*\(d\|q\|g\)\d\+\.\d\+\(e\d+\)\="
|
|
190 syn match fortranFormatSpec display "\d\+x\>"
|
|
191 " The next match cannot be used because it would pick up identifiers as well
|
|
192 " syn match fortranFormatSpec display "\<\(a\|i\)\d\+"
|
|
193
|
|
194 " Numbers as labels
|
|
195 syn match fortranLabelNumber display "^\d\{1,5}\s"me=e-1
|
|
196 syn match fortranLabelNumber display "^ \d\{1,4}\s"ms=s+1,me=e-1
|
|
197 syn match fortranLabelNumber display "^ \d\{1,3}\s"ms=s+2,me=e-1
|
|
198 syn match fortranLabelNumber display "^ \d\d\=\s"ms=s+3,me=e-1
|
|
199 syn match fortranLabelNumber display "^ \d\s"ms=s+4,me=e-1
|
|
200
|
|
201 if version >= 600 && exists("fortran_more_precise")
|
|
202 " Numbers as targets
|
|
203 syn match fortranTarget display "\(\<if\s*(.\+)\s*\)\@<=\(\d\+\s*,\s*\)\{2}\d\+\>"
|
|
204 syn match fortranTarget display "\(\<do\s\+\)\@<=\d\+\>"
|
|
205 syn match fortranTarget display "\(\<go\s*to\s*(\=\)\@<=\(\d\+\s*,\s*\)*\d\+\>"
|
|
206 endif
|
|
207
|
|
208 syn keyword fortranTypeEx external
|
|
209 syn keyword fortranIOEx format
|
819
|
210 syn keyword fortranKeywordEx continue
|
|
211 syn match fortranKeywordEx "\<go\s*to\>"
|
7
|
212 syn region fortranStringEx start=+'+ end=+'+ contains=fortranContinueMark,fortranLeftMargin,fortranSerialNumber
|
|
213 syn keyword fortran77IntrinsicEx dim lge lgt lle llt mod
|
819
|
214 syn keyword fortranKeywordOb assign pause to
|
7
|
215
|
|
216 if b:fortran_dialect != "f77"
|
|
217
|
819
|
218 syn match fortranType "\<type\>"
|
|
219 syn keyword fortranType none
|
7
|
220
|
|
221 syn keyword fortranStructure private public intent optional
|
|
222 syn keyword fortranStructure pointer target allocatable
|
|
223 syn keyword fortranStorageClass in out
|
|
224 syn match fortranStorageClass "\<kind\s*="me=s+4
|
|
225 syn match fortranStorageClass "\<len\s*="me=s+3
|
|
226
|
|
227 syn match fortranUnitHeader "\<module\>"
|
|
228 syn keyword fortranUnitHeader use only contains
|
|
229 syn keyword fortranUnitHeader result operator assignment
|
|
230 syn match fortranUnitHeader "\<interface\>"
|
|
231 syn match fortranUnitHeader "\<recursive\>"
|
819
|
232 syn keyword fortranKeyword allocate deallocate nullify cycle exit
|
7
|
233 syn match fortranConditional "\<select\>"
|
|
234 syn keyword fortranConditional case default where elsewhere
|
|
235
|
|
236 syn match fortranOperator "\(\(>\|<\)=\=\|==\|/=\|=\)"
|
|
237 syn match fortranOperator "=>"
|
|
238
|
|
239 syn region fortranString start=+"+ end=+"+ contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
|
|
240 syn keyword fortranIO pad position action delim readwrite
|
|
241 syn keyword fortranIO eor advance nml
|
|
242
|
819
|
243 syn keyword fortran90Intrinsic adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack precision present product radix random_number random_seed range repeat reshape rrspacing
|
|
244 syn keyword fortran90Intrinsic scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify
|
7
|
245 syn match fortran90Intrinsic "\<not\>\(\s*\.\)\@!"me=s+3
|
|
246 syn match fortran90Intrinsic "\<kind\>\s*[(,]"me=s+4
|
|
247
|
|
248 syn match fortranUnitHeader "\<end\s*function"
|
|
249 syn match fortranUnitHeader "\<end\s*interface"
|
|
250 syn match fortranUnitHeader "\<end\s*module"
|
|
251 syn match fortranUnitHeader "\<end\s*program"
|
|
252 syn match fortranUnitHeader "\<end\s*subroutine"
|
|
253 syn match fortranRepeat "\<end\s*do"
|
|
254 syn match fortranConditional "\<end\s*where"
|
|
255 syn match fortranConditional "\<select\s*case"
|
|
256 syn match fortranConditional "\<end\s*select"
|
|
257 syn match fortranType "\<end\s*type"
|
|
258 syn match fortranType "\<in\s*out"
|
|
259
|
|
260 syn keyword fortranUnitHeaderEx procedure
|
|
261 syn keyword fortranIOEx namelist
|
|
262 syn keyword fortranConditionalEx while
|
|
263 syn keyword fortran90IntrinsicEx achar iachar transfer
|
|
264
|
|
265 syn keyword fortranInclude include
|
|
266 syn keyword fortran90StorageClassR sequence
|
|
267 endif
|
|
268
|
|
269 syn match fortranConditional "\<end\s*if"
|
|
270 syn match fortranIO contains=fortranOperator "\<e\(nd\|rr\)\s*=\s*\d\+"
|
|
271 syn match fortranConditional "\<else\s*if"
|
|
272
|
|
273 syn keyword fortranUnitHeaderR entry
|
|
274 syn match fortranTypeR display "double\s\+precision"
|
|
275 syn match fortranTypeR display "double\s\+complex"
|
|
276 syn match fortranUnitHeaderR display "block\s\+data"
|
|
277 syn keyword fortranStorageClassR common equivalence data
|
|
278 syn keyword fortran77IntrinsicR dble dprod
|
|
279 syn match fortran77OperatorR "\.\s*[gl][et]\s*\."
|
|
280 syn match fortran77OperatorR "\.\s*\(eq\|ne\)\s*\."
|
|
281
|
840
|
282 if b:fortran_dialect == "f95" || b:fortran_dialect == "F"
|
7
|
283 syn keyword fortranRepeat forall
|
|
284 syn match fortranRepeat "\<end\s*forall"
|
|
285 syn keyword fortran95Intrinsic null cpu_time
|
|
286 syn match fortranType "\<elemental\>"
|
|
287 syn match fortranType "\<pure\>"
|
|
288 if exists("fortran_more_precise")
|
|
289 syn match fortranConstructName "\(\<end\s*forall\s\+\)\@<=\a\w*\>"
|
|
290 endif
|
|
291 endif
|
|
292
|
|
293 syn cluster fortranCommentGroup contains=fortranTodo
|
|
294
|
|
295 if (b:fortran_fixed_source == 1)
|
|
296 if !exists("fortran_have_tabs")
|
|
297 "Flag items beyond column 72
|
|
298 syn match fortranSerialNumber excludenl "^.\{73,}$"lc=72
|
|
299 "Flag left margin errors
|
|
300 syn match fortranLabelError "^.\{-,4}[^0-9 ]" contains=fortranTab
|
|
301 syn match fortranLabelError "^.\{4}\d\S"
|
|
302 endif
|
2034
|
303 syn match fortranComment excludenl "^[!c*].*$" contains=@fortranCommentGroup,@spell
|
7
|
304 syn match fortranLeftMargin transparent "^ \{5}"
|
|
305 syn match fortranContinueMark display "^.\{5}\S"lc=5
|
|
306 else
|
|
307 syn match fortranContinueMark display "&"
|
|
308 endif
|
|
309
|
|
310 if b:fortran_dialect != "f77"
|
819
|
311 syn match fortranComment excludenl "!.*$" contains=@fortranCommentGroup,@spell
|
7
|
312 endif
|
|
313
|
|
314 "cpp is often used with Fortran
|
|
315 syn match cPreProc "^\s*#\s*\(define\|ifdef\)\>.*"
|
|
316 syn match cPreProc "^\s*#\s*\(elif\|if\)\>.*"
|
|
317 syn match cPreProc "^\s*#\s*\(ifndef\|undef\)\>.*"
|
|
318 syn match cPreCondit "^\s*#\s*\(else\|endif\)\>.*"
|
|
319 syn region cIncluded contained start=+"[^(]+ skip=+\\\\\|\\"+ end=+"+ contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
|
|
320 syn match cIncluded contained "<[^>]*>"
|
|
321 syn match cInclude "^\s*#\s*include\>\s*["<]" contains=cIncluded
|
|
322
|
|
323 "Synchronising limits assume that comment and continuation lines are not mixed
|
819
|
324 if exists("fortran_fold") || exists("fortran_more_precise")
|
|
325 syn sync fromstart
|
|
326 elseif (b:fortran_fixed_source == 0)
|
|
327 syn sync linecont "&" minlines=20
|
7
|
328 else
|
|
329 syn sync minlines=20
|
|
330 endif
|
|
331
|
|
332 if version >= 600 && exists("fortran_fold")
|
|
333
|
|
334 if (b:fortran_fixed_source == 1)
|
|
335 syn region fortranProgram transparent fold keepend start="^\s*program\s\+\z(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\(program\(\s\+\z1\>\)\=\|$\)" contains=ALLBUT,fortranModule
|
|
336 syn region fortranModule transparent fold keepend start="^\s*module\s\+\(procedure\)\@!\z(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\(module\(\s\+\z1\>\)\=\|$\)" contains=ALLBUT,fortranProgram
|
819
|
337 syn region fortranFunction transparent fold keepend extend start="^\s*\(elemental \|pure \|recursive \)\=\s*\(\(\(real \|integer \|logical \|complex \|double \s*precision \)\s*\((\(\s*kind\s*=\)\=\s*\w\+\s*)\)\=\)\|type\s\+(\s*\w\+\s*) \|character \((\(\s*len\s*=\)\=\s*\d\+\s*)\|(\(\s*kind\s*=\)\=\s*\w\+\s*)\)\=\)\=\s*function\s\+\z(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\($\|function\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule
|
7
|
338 syn region fortranSubroutine transparent fold keepend extend start="^\s*\(elemental \|pure \|recursive \)\=\s*subroutine\s\+\z(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\($\|subroutine\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule
|
|
339 syn region fortranBlockData transparent fold keepend start="\<block\s*data\s\+\z(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\($\|block\s*data\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock
|
|
340 syn region fortranInterface transparent fold keepend extend start="^\s*interface\>" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*interface\>" contains=ALLBUT,fortranProgram,fortranModule,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock
|
|
341 else
|
|
342 syn region fortranProgram transparent fold keepend start="^\s*program\s\+\z(\a\w*\)" skip="^\s*[!#].*$" excludenl end="\<end\s*\(program\(\s\+\z1\>\)\=\|$\)" contains=ALLBUT,fortranModule
|
|
343 syn region fortranModule transparent fold keepend start="^\s*module\s\+\(procedure\)\@!\z(\a\w*\)" skip="^\s*[!#].*$" excludenl end="\<end\s*\(module\(\s\+\z1\>\)\=\|$\)" contains=ALLBUT,fortranProgram
|
819
|
344 syn region fortranFunction transparent fold keepend extend start="^\s*\(elemental \|pure \|recursive \)\=\s*\(\(\(real \|integer \|logical \|complex \|double \s*precision \)\s*\((\(\s*kind\s*=\)\=\s*\w\+\s*)\)\=\)\|type\s\+(\s*\w\+\s*) \|character \((\(\s*len\s*=\)\=\s*\d\+\s*)\|(\(\s*kind\s*=\)\=\s*\w\+\s*)\)\=\)\=\s*function\s\+\z(\a\w*\)" skip="^\s*[!#].*$" excludenl end="\<end\s*\($\|function\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule
|
7
|
345 syn region fortranSubroutine transparent fold keepend extend start="^\s*\(elemental \|pure \|recursive \)\=\s*subroutine\s\+\z(\a\w*\)" skip="^\s*[!#].*$" excludenl end="\<end\s*\($\|subroutine\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule
|
|
346 syn region fortranBlockData transparent fold keepend start="\<block\s*data\s\+\z(\a\w*\)" skip="^\s*[!#].*$" excludenl end="\<end\s*\($\|block\s*data\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock
|
|
347 syn region fortranInterface transparent fold keepend extend start="^\s*interface\>" skip="^\s*[!#].*$" excludenl end="\<end\s*interface\>" contains=ALLBUT,fortranProgram,fortranModule,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock
|
|
348 endif
|
|
349
|
|
350 if exists("fortran_fold_conditionals")
|
|
351 if (b:fortran_fixed_source == 1)
|
|
352 syn region fortran77Loop transparent fold keepend start="\<do\s\+\z(\d\+\)" end="^\s*\z1\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
|
|
353 syn region fortran90Loop transparent fold keepend extend start="\(\<end\s\+\)\@<!\<do\(\s\+\a\|\s*$\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*do\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
|
|
354 syn region fortranIfBlock transparent fold keepend extend start="\(\<e\(nd\|lse\)\s\+\)\@<!\<if\s*(.\+)\s*then\>" skip="^\([!c*]\|\s*#\).*$" end="\<end\s*if\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
|
|
355 syn region fortranCase transparent fold keepend extend start="\<select\s*case\>" skip="^\([!c*]\|\s*#\).*$" end="\<end\s*select\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
|
|
356 else
|
|
357 syn region fortran77Loop transparent fold keepend start="\<do\s\+\z(\d\+\)" end="^\s*\z1\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
|
|
358 syn region fortran90Loop transparent fold keepend extend start="\(\<end\s\+\)\@<!\<do\(\s\+\a\|\s*$\)" skip="^\s*[!#].*$" excludenl end="\<end\s*do\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
|
|
359 syn region fortranIfBlock transparent fold keepend extend start="\(\<e\(nd\|lse\)\s\+\)\@<!\<if\s*(.\+)\s*then\>" skip="^\s*[!#].*$" end="\<end\s*if\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
|
|
360 syn region fortranCase transparent fold keepend extend start="\<select\s*case\>" skip="^\s*[!#].*$" end="\<end\s*select\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
|
|
361 endif
|
|
362 endif
|
|
363
|
|
364 if exists("fortran_fold_multilinecomments")
|
|
365 if (b:fortran_fixed_source == 1)
|
|
366 syn match fortranMultiLineComments transparent fold "\(^[!c*].*\(\n\|\%$\)\)\{4,}" contains=ALLBUT,fortranMultiCommentLines
|
|
367 else
|
|
368 syn match fortranMultiLineComments transparent fold "\(^\s*!.*\(\n\|\%$\)\)\{4,}" contains=ALLBUT,fortranMultiCommentLines
|
|
369 endif
|
|
370 endif
|
|
371 endif
|
|
372
|
|
373 " Define the default highlighting.
|
|
374 " For version 5.7 and earlier: only when not done already
|
|
375 " For version 5.8 and later: only when an item doesn't have highlighting yet
|
|
376 if version >= 508 || !exists("did_fortran_syn_inits")
|
|
377 if version < 508
|
|
378 let did_fortran_syn_inits = 1
|
|
379 command -nargs=+ HiLink hi link <args>
|
|
380 else
|
|
381 command -nargs=+ HiLink hi def link <args>
|
|
382 endif
|
|
383
|
|
384 " The default highlighting differs for each dialect.
|
|
385 " Transparent groups:
|
|
386 " fortranParen, fortranLeftMargin
|
|
387 " fortranProgram, fortranModule, fortranSubroutine, fortranFunction,
|
|
388 " fortranBlockData
|
|
389 " fortran77Loop, fortran90Loop, fortranIfBlock, fortranCase
|
|
390 " fortranMultiCommentLines
|
819
|
391 HiLink fortranKeyword Keyword
|
|
392 HiLink fortranConstructName Identifier
|
|
393 HiLink fortranConditional Conditional
|
7
|
394 HiLink fortranRepeat Repeat
|
819
|
395 HiLink fortranTodo Todo
|
|
396 HiLink fortranContinueMark Todo
|
7
|
397 HiLink fortranString String
|
|
398 HiLink fortranNumber Number
|
819
|
399 HiLink fortranOperator Operator
|
7
|
400 HiLink fortranBoolean Boolean
|
819
|
401 HiLink fortranLabelError Error
|
|
402 HiLink fortranObsolete Todo
|
|
403 HiLink fortranType Type
|
|
404 HiLink fortranStructure Type
|
|
405 HiLink fortranStorageClass StorageClass
|
|
406 HiLink fortranCall fortranUnitHeader
|
|
407 HiLink fortranUnitHeader fortranPreCondit
|
|
408 HiLink fortranReadWrite Keyword
|
|
409 HiLink fortranIO Keyword
|
|
410 HiLink fortran95Intrinsic fortran90Intrinsic
|
|
411 HiLink fortran77Intrinsic fortran90Intrinsic
|
|
412 HiLink fortran90Intrinsic Function
|
7
|
413
|
|
414 if ( b:fortran_dialect == "elf" || b:fortran_dialect == "F" )
|
819
|
415 HiLink fortranKeywordOb fortranObsolete
|
7
|
416 HiLink fortran66Intrinsic fortranObsolete
|
|
417 HiLink fortran77IntrinsicR fortranObsolete
|
|
418 HiLink fortranUnitHeaderR fortranObsolete
|
|
419 HiLink fortranTypeR fortranObsolete
|
|
420 HiLink fortranStorageClassR fortranObsolete
|
|
421 HiLink fortran90StorageClassR fortranObsolete
|
|
422 HiLink fortran77OperatorR fortranObsolete
|
819
|
423 HiLink fortranInclude fortranObsolete
|
7
|
424 else
|
819
|
425 HiLink fortranKeywordOb fortranKeyword
|
7
|
426 HiLink fortran66Intrinsic fortran90Intrinsic
|
|
427 HiLink fortran77IntrinsicR fortran90Intrinsic
|
|
428 HiLink fortranUnitHeaderR fortranPreCondit
|
|
429 HiLink fortranTypeR fortranType
|
|
430 HiLink fortranStorageClassR fortranStorageClass
|
|
431 HiLink fortran77OperatorR fortranOperator
|
819
|
432 HiLink fortranInclude Include
|
7
|
433 HiLink fortran90StorageClassR fortranStorageClass
|
|
434 endif
|
|
435
|
|
436 if ( b:fortran_dialect == "F" )
|
|
437 HiLink fortranLabelNumber fortranObsolete
|
819
|
438 HiLink fortranTarget fortranObsolete
|
|
439 HiLink fortranFormatSpec fortranObsolete
|
|
440 HiLink fortranFloatDExp fortranObsolete
|
|
441 HiLink fortranFloatNoDec fortranObsolete
|
7
|
442 HiLink fortranFloatIniDec fortranObsolete
|
|
443 HiLink fortranFloatEndDec fortranObsolete
|
819
|
444 HiLink fortranTypeEx fortranObsolete
|
7
|
445 HiLink fortranIOEx fortranObsolete
|
819
|
446 HiLink fortranKeywordEx fortranObsolete
|
|
447 HiLink fortranStringEx fortranObsolete
|
7
|
448 HiLink fortran77IntrinsicEx fortranObsolete
|
|
449 HiLink fortranUnitHeaderEx fortranObsolete
|
|
450 HiLink fortranConditionalEx fortranObsolete
|
|
451 HiLink fortran90IntrinsicEx fortranObsolete
|
|
452 else
|
|
453 HiLink fortranLabelNumber Special
|
819
|
454 HiLink fortranTarget Special
|
|
455 HiLink fortranFormatSpec Identifier
|
|
456 HiLink fortranFloatDExp fortranFloat
|
|
457 HiLink fortranFloatNoDec fortranFloat
|
7
|
458 HiLink fortranFloatIniDec fortranFloat
|
|
459 HiLink fortranFloatEndDec fortranFloat
|
819
|
460 HiLink fortranTypeEx fortranType
|
7
|
461 HiLink fortranIOEx fortranIO
|
819
|
462 HiLink fortranKeywordEx fortranKeyword
|
|
463 HiLink fortranStringEx fortranString
|
7
|
464 HiLink fortran77IntrinsicEx fortran90Intrinsic
|
|
465 HiLink fortranUnitHeaderEx fortranUnitHeader
|
|
466 HiLink fortranConditionalEx fortranConditional
|
|
467 HiLink fortran90IntrinsicEx fortran90Intrinsic
|
|
468 endif
|
|
469
|
|
470 HiLink fortranFloat Float
|
819
|
471 HiLink fortranPreCondit PreCondit
|
7
|
472 HiLink fortranInclude Include
|
819
|
473 HiLink cIncluded fortranString
|
|
474 HiLink cInclude Include
|
|
475 HiLink cPreProc PreProc
|
|
476 HiLink cPreCondit PreCondit
|
|
477 HiLink fortranParenError Error
|
7
|
478 HiLink fortranComment Comment
|
819
|
479 HiLink fortranSerialNumber Todo
|
|
480 HiLink fortranTab Error
|
7
|
481 " Vendor extensions
|
819
|
482 HiLink fortranExtraIntrinsic Function
|
7
|
483
|
|
484 delcommand HiLink
|
|
485 endif
|
|
486
|
|
487 let b:current_syntax = "fortran"
|
|
488
|
|
489 " vim: ts=8 tw=132
|