2 " Language: Fortran95 (and Fortran90, Fortran77, F and elf90)
4 " Last Change: 2010 July 21
5 " Maintainer: Ajit J. Thakkar (ajit AT unb.ca); <http://www.unb.ca/chem/ajit/>
6 " Usage: For instructions, do :help fortran-syntax from Vim
8 " Version 0.1 was based on the fortran 77 syntax file by Mario Eusebio and
9 " Preben Guldberg. Useful suggestions were made by: Andrej Panjkov,
10 " Bram Moolenaar, Thomas Olsen, Michael Sternberg, Christian Reile,
11 " Walter Dieudonné, Alexander Wagner, Roman Bertle, Charles Rendleman,
12 " Andrew Griffiths, Joe Krahn, and Hendrik Merx.
14 " For version 5.x: Clear all syntax items
15 " For version 6.x: Quit if a syntax file is already loaded
18 elseif exists("b:current_syntax")
22 " let b:fortran_dialect = fortran_dialect if set correctly by user
23 if exists("fortran_dialect")
24 if fortran_dialect =~ '\<\(f\(9[05]\|77\)\|elf\|F\)\>'
25 let b:fortran_dialect = matchstr(fortran_dialect,'\<\(f\(9[05]\|77\)\|elf\|F\)\>')
27 echohl WarningMsg | echo "Unknown value of fortran_dialect" | echohl None
28 let b:fortran_dialect = "unknown"
31 let b:fortran_dialect = "unknown"
34 " fortran_dialect not set or set incorrectly by user,
35 if b:fortran_dialect == "unknown"
36 " set b:fortran_dialect from directive in first three lines of file
37 let b:fortran_retype = getline(1)." ".getline(2)." ".getline(3)
38 if b:fortran_retype =~ '\<fortran_dialect\s*=\s*F\>'
39 let b:fortran_dialect = "F"
40 elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*elf\>'
41 let b:fortran_dialect = "elf"
42 elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f90\>'
43 let b:fortran_dialect = "f90"
44 elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f95\>'
45 let b:fortran_dialect = "f95"
46 elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f77\>'
47 let b:fortran_dialect = "f77"
49 " no directive found, so assume f95
50 let b:fortran_dialect = "f95"
52 unlet b:fortran_retype
55 " Choose between fixed and free source form if this hasn't been done yet
56 if !exists("b:fortran_fixed_source")
57 if b:fortran_dialect == "elf" || b:fortran_dialect == "F"
58 " elf and F require free source form
59 let b:fortran_fixed_source = 0
60 elseif b:fortran_dialect == "f77"
61 " f77 requires fixed source form
62 let b:fortran_fixed_source = 1
63 elseif exists("fortran_free_source")
64 " User guarantees free source form for all f90 and f95 files
65 let b:fortran_fixed_source = 0
66 elseif exists("fortran_fixed_source")
67 " User guarantees fixed source form for all f90 and f95 files
68 let b:fortran_fixed_source = 1
70 " f90 and f95 allow both fixed and free source form.
71 " Assume fixed source form unless signs of free source form
72 " are detected in the first five columns of the first s:lmax lines.
73 " Detection becomes more accurate and time-consuming if more lines
74 " are checked. Increase the limit below if you keep lots of comments at
75 " the very top of each file and you have a fast computer.
77 if ( s:lmax > line("$") )
78 let s:lmax = line("$")
80 let b:fortran_fixed_source = 1
83 let s:test = strpart(getline(s:ln),0,5)
84 if s:test !~ '^[Cc*]' && s:test !~ '^ *[!#]' && s:test =~ '[^ 0-9\t]' && s:test !~ '^[ 0-9]*\t'
85 let b:fortran_fixed_source = 0
90 unlet! s:lmax s:ln s:test
96 if b:fortran_dialect !=? "f77"
98 if b:fortran_fixed_source == 1
99 syn match fortranConstructName "^\s\{6,}\zs\a\w*\ze\s*:"
101 syn match fortranConstructName "^\s*\zs\a\w*\ze\s*:"
103 if exists("fortran_more_precise")
104 syn match fortranConstructName "\(\<end\s*do\s\+\)\@<=\a\w*"
105 syn match fortranConstructName "\(\<end\s*if\s\+\)\@<=\a\w*"
106 syn match fortranConstructName "\(\<end\s*select\s\+\)\@<=\a\w*"
109 if b:fortran_fixed_source == 1
110 syn match fortranConstructName "^\s\{6,}\a\w*\s*:"
112 syn match fortranConstructName "^\s*\a\w*\s*:"
117 syn match fortranUnitHeader "\<end\>"
119 syn match fortranType "\<character\>"
120 syn match fortranType "\<complex\>"
121 syn match fortranType "\<integer\>"
122 syn keyword fortranType intrinsic
123 syn match fortranType "\<implicit\>"
124 syn keyword fortranStructure dimension
125 syn keyword fortranStorageClass parameter save
126 syn match fortranUnitHeader "\<subroutine\>"
127 syn keyword fortranCall call
128 syn match fortranUnitHeader "\<function\>"
129 syn match fortranUnitHeader "\<program\>"
130 syn keyword fortranKeyword return stop
131 syn keyword fortranConditional else then
132 syn match fortranConditional "\<if\>"
133 syn match fortranRepeat "\<do\>"
135 syn keyword fortranTodo contained todo fixme
137 "Catch errors caused by too many right parentheses
138 syn region fortranParen transparent start="(" end=")" contains=ALLBUT,fortranParenError,@fortranCommentGroup,cIncluded,@spell
139 syn match fortranParenError ")"
141 syn match fortranOperator "\.\s*n\=eqv\s*\."
142 syn match fortranOperator "\.\s*\(and\|or\|not\)\s*\."
143 syn match fortranOperator "\(+\|-\|/\|\*\)"
145 syn match fortranBoolean "\.\s*\(true\|false\)\s*\."
147 syn keyword fortranReadWrite backspace close endfile inquire open print read rewind write
149 "If tabs are allowed then the left margin checks do not work
150 if exists("fortran_have_tabs")
151 syn match fortranTab "\t" transparent
153 syn match fortranTab "\t"
156 syn keyword fortranIO access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit
158 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
160 " Intrinsics provided by some vendors
161 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
163 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
164 syn match fortran77Intrinsic "\<len\s*[(,]"me=s+3
165 syn match fortran77Intrinsic "\<real\s*("me=s+4
166 syn match fortranType "\<implicit\s\+real"
167 syn match fortranType "^\s*real\>"
168 syn match fortran90Intrinsic "\<logical\s*("me=s+7
169 syn match fortranType "\<implicit\s\+logical"
170 syn match fortranType "^\s*logical\>"
172 "Numbers of various sorts
174 syn match fortranNumber display "\<\d\+\(_\a\w*\)\=\>"
175 " floating point number, without a decimal point
176 syn match fortranFloatNoDec display "\<\d\+[deq][-+]\=\d\+\(_\a\w*\)\=\>"
177 " floating point number, starting with a decimal point
178 syn match fortranFloatIniDec display "\.\d\+\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
179 " floating point number, no digits after decimal
180 syn match fortranFloatEndDec display "\<\d\+\.\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
181 " floating point number, D or Q exponents
182 syn match fortranFloatDExp display "\<\d\+\.\d\+\([dq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
183 " floating point number
184 syn match fortranFloat display "\<\d\+\.\d\+\(e[-+]\=\d\+\)\=\(_\a\w*\)\=\>"
186 syn match fortranFormatSpec display "\d*f\d\+\.\d\+"
187 syn match fortranFormatSpec display "\d*e[sn]\=\d\+\.\d\+\(e\d+\>\)\="
188 syn match fortranFormatSpec display "\d*\(d\|q\|g\)\d\+\.\d\+\(e\d+\)\="
189 syn match fortranFormatSpec display "\d\+x\>"
190 " The next match cannot be used because it would pick up identifiers as well
191 " syn match fortranFormatSpec display "\<\(a\|i\)\d\+"
194 syn match fortranLabelNumber display "^\d\{1,5}\s"me=e-1
195 syn match fortranLabelNumber display "^ \d\{1,4}\s"ms=s+1,me=e-1
196 syn match fortranLabelNumber display "^ \d\{1,3}\s"ms=s+2,me=e-1
197 syn match fortranLabelNumber display "^ \d\d\=\s"ms=s+3,me=e-1
198 syn match fortranLabelNumber display "^ \d\s"ms=s+4,me=e-1
200 if version >= 600 && exists("fortran_more_precise")
202 syn match fortranTarget display "\(\<if\s*(.\+)\s*\)\@<=\(\d\+\s*,\s*\)\{2}\d\+\>"
203 syn match fortranTarget display "\(\<do\s\+\)\@<=\d\+\>"
204 syn match fortranTarget display "\(\<go\s*to\s*(\=\)\@<=\(\d\+\s*,\s*\)*\d\+\>"
207 syn keyword fortranTypeEx external
208 syn keyword fortranIOEx format
209 syn match fortranKeywordEx "\<continue\>"
210 syn match fortranKeyword "^\s*\d\+\s\+continue\>"
211 syn match fortranKeywordEx "\<go\s*to\>"
212 syn region fortranStringEx start=+'+ end=+'+ contains=fortranContinueMark,fortranLeftMargin,fortranSerialNumber
213 syn keyword fortran77IntrinsicEx dim lge lgt lle llt mod
214 syn keyword fortranKeywordOb assign pause to
216 if b:fortran_dialect != "f77"
218 syn match fortranType "\<type\>"
219 syn keyword fortranType none
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
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\>"
232 syn keyword fortranKeyword allocate deallocate nullify cycle exit
233 syn match fortranConditional "\<select\>"
234 syn keyword fortranConditional case default where elsewhere
236 syn match fortranOperator "\(\(>\|<\)=\=\|==\|/=\|=\)"
237 syn match fortranOperator "=>"
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
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
245 syn match fortran90Intrinsic "\<not\>\(\s*\.\)\@!"me=s+3
246 syn match fortran90Intrinsic "\<kind\>\s*[(,]"me=s+4
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"
260 syn keyword fortranUnitHeaderEx procedure
261 syn keyword fortranIOEx namelist
262 syn keyword fortranConditionalEx while
263 syn keyword fortran90IntrinsicEx achar iachar transfer
265 syn keyword fortranInclude include
266 syn keyword fortran90StorageClassR sequence
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"
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*\."
282 if b:fortran_dialect == "f95" || b:fortran_dialect == "F"
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*\>"
293 if b:fortran_dialect == "f95"
295 syn keyword fortran03Intrinsic command_argument_count get_command get_command_argument get_environment_variable is_iostat_end is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of
297 syn keyword fortran03Constant c_null_char c_alert c_backspace c_form_feed c_new_line c_carriage_return c_horizontal_tab c_vertical_tab
298 syn keyword fortran03Constant c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr
299 syn keyword fortran03Intrinsic iso_c_binding c_loc c_funloc c_associated c_f_pointer c_f_procpointer
300 syn keyword fortran03Type c_ptr c_funptr
302 syn keyword fortran03Constant iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit
304 syn keyword fortran03Intrinsic ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode
306 syn keyword fortran03ReadWrite flush wait
307 syn keyword fortran03IO decimal round iomsg
308 syn keyword fortran03Type asynchronous nopass non_overridable pass protected volatile abstract extends import
309 syn keyword fortran03Type non_intrinsic value bind deferred generic final enumerator class
310 syn match fortran03Type "\<associate\>"
311 syn match fortran03Type "\<end\s*associate"
312 syn match fortran03Type "\<enum\s*,\s*bind\s*(\s*c\s*)"
313 syn match fortran03Type "\<end\s*enum"
314 syn match fortran03Conditional "\<select\s*type"
315 syn match fortran03Conditional "\<type\s*is\>"
316 syn match fortran03UnitHeader "\<abstract\s*interface\>"
317 syn match fortran03Operator "\([\|]\)"
320 syn keyword fortran08Intrinsic acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2
321 syn keyword fortran08Intrinsic atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits
322 syn keyword fortran08Intrinsic bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image
323 syn keyword fortran08IO newunit
324 syn keyword fortran08Type contiguous
327 syn cluster fortranCommentGroup contains=fortranTodo
329 if (b:fortran_fixed_source == 1)
330 if !exists("fortran_have_tabs")
331 "Flag items beyond column 72
332 syn match fortranSerialNumber excludenl "^.\{73,}$"lc=72
333 "Flag left margin errors
334 syn match fortranLabelError "^.\{-,4}[^0-9 ]" contains=fortranTab
335 syn match fortranLabelError "^.\{4}\d\S"
337 syn match fortranComment excludenl "^[!c*].*$" contains=@fortranCommentGroup,@spell
338 syn match fortranLeftMargin transparent "^ \{5}"
339 syn match fortranContinueMark display "^.\{5}\S"lc=5
341 syn match fortranContinueMark display "&"
344 if b:fortran_dialect != "f77"
345 syn match fortranComment excludenl "!.*$" contains=@fortranCommentGroup,@spell
348 "cpp is often used with Fortran
349 syn match cPreProc "^\s*#\s*\(define\|ifdef\)\>.*"
350 syn match cPreProc "^\s*#\s*\(elif\|if\)\>.*"
351 syn match cPreProc "^\s*#\s*\(ifndef\|undef\)\>.*"
352 syn match cPreCondit "^\s*#\s*\(else\|endif\)\>.*"
353 syn region cIncluded contained start=+"[^(]+ skip=+\\\\\|\\"+ end=+"+ contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
354 syn match cIncluded contained "<[^>]*>"
355 syn match cInclude "^\s*#\s*include\>\s*["<]" contains=cIncluded
357 "Synchronising limits assume that comment and continuation lines are not mixed
358 if exists("fortran_fold") || exists("fortran_more_precise")
360 elseif (b:fortran_fixed_source == 0)
361 syn sync linecont "&" minlines=30
366 if version >= 600 && exists("fortran_fold")
368 if (b:fortran_fixed_source == 1)
369 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
370 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
371 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
372 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
373 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
374 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
375 syn region fortranTypeDef transparent fold keepend extend start="^\s*type\s*\(,\s*\(public\|private\)\)\=\s*::" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*type\>" contains=ALLBUT,fortranProgram,fortranModule,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock
377 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
378 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
379 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
380 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
381 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
382 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
383 syn region fortranTypeDef transparent fold keepend extend start="^\s*type\s*\(,\s*\(public\|private\)\)\=\s*::" skip="^\s*[!#].*$" excludenl end="\<end\s*type\>" contains=ALLBUT,fortranProgram,fortranModule,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock
386 if exists("fortran_fold_conditionals")
387 if (b:fortran_fixed_source == 1)
388 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
389 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
390 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
391 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
393 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
394 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
395 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
396 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
400 if exists("fortran_fold_multilinecomments")
401 if (b:fortran_fixed_source == 1)
402 syn match fortranMultiLineComments transparent fold "\(^[!c*].*\(\n\|\%$\)\)\{4,}" contains=ALLBUT,fortranMultiCommentLines
404 syn match fortranMultiLineComments transparent fold "\(^\s*!.*\(\n\|\%$\)\)\{4,}" contains=ALLBUT,fortranMultiCommentLines
409 " Define the default highlighting.
410 " For version 5.7 and earlier: only when not done already
411 " For version 5.8 and later: only when an item doesn't have highlighting yet
412 if version >= 508 || !exists("did_fortran_syn_inits")
414 let did_fortran_syn_inits = 1
415 command -nargs=+ HiLink hi link <args>
417 command -nargs=+ HiLink hi def link <args>
420 " The default highlighting differs for each dialect.
421 " Transparent groups:
422 " fortranParen, fortranLeftMargin
423 " fortranProgram, fortranModule, fortranSubroutine, fortranFunction,
425 " fortran77Loop, fortran90Loop, fortranIfBlock, fortranCase
426 " fortranMultiCommentLines
427 HiLink fortranKeyword Keyword
428 HiLink fortranConstructName Identifier
429 HiLink fortran03Conditional fortranConditional
430 HiLink fortranConditional Conditional
431 HiLink fortranRepeat Repeat
432 HiLink fortranTodo Todo
433 if (b:fortran_fixed_source == 1)
434 HiLink fortranContinueMark Todo
436 HiLink fortranContinueMark Keyword
438 HiLink fortranString String
439 HiLink fortranNumber Number
440 HiLink fortran03Operator fortranOperator
441 HiLink fortranOperator Operator
442 HiLink fortranBoolean Boolean
443 HiLink fortranLabelError Error
444 HiLink fortranObsolete Todo
445 HiLink fortran03Type fortranType
446 HiLink fortran08Type fortranType
447 HiLink fortranType Type
448 HiLink fortranStructure Type
449 HiLink fortranStorageClass StorageClass
450 HiLink fortranCall Function
451 HiLink fortran03UnitHeader fortranUnitHeader
452 HiLink fortranUnitHeader fortranPreCondit
453 HiLink fortran03ReadWrite fortranReadWrite
454 HiLink fortranReadWrite Keyword
455 HiLink fortran03IO fortranIO
456 HiLink fortran08IO fortranIO
457 HiLink fortranIO Keyword
458 HiLink fortran95Intrinsic fortran90Intrinsic
459 HiLink fortran77Intrinsic fortran90Intrinsic
460 HiLink fortran90Intrinsic Function
461 HiLink fortran03Intrinsic Function
462 HiLink fortran08Intrinsic Function
463 HiLink fortran03Constant Function
465 if ( b:fortran_dialect == "elf" || b:fortran_dialect == "F" )
466 HiLink fortranKeywordOb fortranObsolete
467 HiLink fortran66Intrinsic fortranObsolete
468 HiLink fortran77IntrinsicR fortranObsolete
469 HiLink fortranUnitHeaderR fortranObsolete
470 HiLink fortranTypeR fortranObsolete
471 HiLink fortranStorageClassR fortranObsolete
472 HiLink fortran90StorageClassR fortranObsolete
473 HiLink fortran77OperatorR fortranObsolete
474 HiLink fortranInclude fortranObsolete
476 HiLink fortranKeywordOb fortranKeyword
477 HiLink fortran66Intrinsic fortran90Intrinsic
478 HiLink fortran77IntrinsicR fortran90Intrinsic
479 HiLink fortranUnitHeaderR fortranPreCondit
480 HiLink fortranTypeR fortranType
481 HiLink fortranStorageClassR fortranStorageClass
482 HiLink fortran77OperatorR fortranOperator
483 HiLink fortranInclude Include
484 HiLink fortran90StorageClassR fortranStorageClass
487 if ( b:fortran_dialect == "F" )
488 HiLink fortranLabelNumber fortranObsolete
489 HiLink fortranTarget fortranObsolete
490 HiLink fortranFormatSpec fortranObsolete
491 HiLink fortranFloatDExp fortranObsolete
492 HiLink fortranFloatNoDec fortranObsolete
493 HiLink fortranFloatIniDec fortranObsolete
494 HiLink fortranFloatEndDec fortranObsolete
495 HiLink fortranTypeEx fortranObsolete
496 HiLink fortranIOEx fortranObsolete
497 HiLink fortranKeywordEx fortranObsolete
498 HiLink fortranStringEx fortranObsolete
499 HiLink fortran77IntrinsicEx fortranObsolete
500 HiLink fortranUnitHeaderEx fortranObsolete
501 HiLink fortranConditionalEx fortranObsolete
502 HiLink fortran90IntrinsicEx fortranObsolete
504 HiLink fortranLabelNumber Special
505 HiLink fortranTarget Special
506 HiLink fortranFormatSpec Identifier
507 HiLink fortranFloatDExp fortranFloat
508 HiLink fortranFloatNoDec fortranFloat
509 HiLink fortranFloatIniDec fortranFloat
510 HiLink fortranFloatEndDec fortranFloat
511 HiLink fortranTypeEx fortranType
512 HiLink fortranIOEx fortranIO
513 HiLink fortranKeywordEx fortranKeyword
514 HiLink fortranStringEx fortranString
515 HiLink fortran77IntrinsicEx fortran90Intrinsic
516 HiLink fortranUnitHeaderEx fortranUnitHeader
517 HiLink fortranConditionalEx fortranConditional
518 HiLink fortran90IntrinsicEx fortran90Intrinsic
521 HiLink fortranFloat Float
522 HiLink fortranPreCondit PreCondit
523 HiLink fortranInclude Include
524 HiLink cIncluded fortranString
525 HiLink cInclude Include
526 HiLink cPreProc PreProc
527 HiLink cPreCondit PreCondit
528 HiLink fortranParenError Error
529 HiLink fortranComment Comment
530 HiLink fortranSerialNumber Todo
531 HiLink fortranTab Error
533 HiLink fortranExtraIntrinsic Function
538 let b:current_syntax = "fortran"