blob: 4c26e78f168247640f6b0a449a0391b5316b492e [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaar256972a2015-12-29 19:10:25 +01002" Language: Fortran 2008 (and older: Fortran 2003, 95, 90, and 77)
Bram Moolenaarc0514bf2016-11-17 14:50:09 +01003" Version: 100
4" Last Change: 2016 Oct. 29
Bram Moolenaar8a94d872015-01-25 13:02:57 +01005" Maintainer: Ajit J. Thakkar <ajit@unb.ca>; <http://www2.unb.ca/~ajit/>
Bram Moolenaare06c1882010-07-21 22:05:20 +02006" Usage: For instructions, do :help fortran-syntax from Vim
Bram Moolenaar071d4272004-06-13 20:20:40 +00007" Credits:
Bram Moolenaar3e496b02016-09-25 22:11:48 +02008" Version 0.1 (April 2000) for Fortran 95 was based on the Fortran 77 syntax file by
9" Mario Eusebio and Preben Guldberg. Since then, useful suggestions and contributions
10" have been made, in chronological order, by:
Bram Moolenaardae8d212016-02-27 22:40:16 +010011" Andrej Panjkov, Bram Moolenaar, Thomas Olsen, Michael Sternberg, Christian Reile,
Bram Moolenaar071d4272004-06-13 20:20:40 +000012" Walter Dieudonné, Alexander Wagner, Roman Bertle, Charles Rendleman,
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +020013" Andrew Griffiths, Joe Krahn, Hendrik Merx, Matt Thompson, Jan Hermann,
Bram Moolenaar3e496b02016-09-25 22:11:48 +020014" Stefano Zaghi, Vishnu V. Krishnan and Judicaël Grasset
Bram Moolenaar071d4272004-06-13 20:20:40 +000015
Bram Moolenaar6be7f872012-01-20 21:08:56 +010016if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000017 finish
18endif
19
Bram Moolenaarb6b046b2011-12-30 13:11:27 +010020let s:cpo_save = &cpo
21set cpo&vim
22
Bram Moolenaar6be7f872012-01-20 21:08:56 +010023" Choose fortran_dialect using the priority:
Bram Moolenaar256972a2015-12-29 19:10:25 +010024" source file directive > buffer-local value > global value > file extension
25" first try using directive in first three lines of file
Bram Moolenaar6be7f872012-01-20 21:08:56 +010026let b:fortran_retype = getline(1)." ".getline(2)." ".getline(3)
27if b:fortran_retype =~? '\<fortran_dialect\s*=\s*F\>'
28 let b:fortran_dialect = "F"
29elseif b:fortran_retype =~? '\<fortran_dialect\s*=\s*f08\>'
30 let b:fortran_dialect = "f08"
31elseif !exists("b:fortran_dialect")
32 if exists("g:fortran_dialect") && g:fortran_dialect =~# '\<F\|f08\>'
33 " try global variable
34 let b:fortran_dialect = g:fortran_dialect
35 else " nothing found, so use default
36 let b:fortran_dialect = "f08"
Bram Moolenaar071d4272004-06-13 20:20:40 +000037 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +000038endif
Bram Moolenaar6be7f872012-01-20 21:08:56 +010039unlet! b:fortran_retype
40" make sure buffer-local value is not invalid
41if b:fortran_dialect !~# '\<F\|f08\>'
42 let b:fortran_dialect = "f08"
Bram Moolenaar071d4272004-06-13 20:20:40 +000043endif
44
45" Choose between fixed and free source form if this hasn't been done yet
46if !exists("b:fortran_fixed_source")
Bram Moolenaar6be7f872012-01-20 21:08:56 +010047 if b:fortran_dialect == "F"
48 " F requires free source form
Bram Moolenaar071d4272004-06-13 20:20:40 +000049 let b:fortran_fixed_source = 0
Bram Moolenaar071d4272004-06-13 20:20:40 +000050 elseif exists("fortran_free_source")
Bram Moolenaar6be7f872012-01-20 21:08:56 +010051 " User guarantees free source form for all fortran files
Bram Moolenaar071d4272004-06-13 20:20:40 +000052 let b:fortran_fixed_source = 0
53 elseif exists("fortran_fixed_source")
Bram Moolenaar6be7f872012-01-20 21:08:56 +010054 " User guarantees fixed source form for all fortran files
Bram Moolenaar071d4272004-06-13 20:20:40 +000055 let b:fortran_fixed_source = 1
Bram Moolenaar256972a2015-12-29 19:10:25 +010056 elseif expand("%:e") ==? "f\<90\|95\|03\|08\>"
57 " Free-form file extension defaults as in Intel ifort, gcc(gfortran), NAG, Pathscale, and Cray compilers
58 let b:fortran_fixed_source = 0
59 elseif expand("%:e") ==? "f\|f77\|for"
60 " Fixed-form file extension defaults
61 let b:fortran_fixed_source = 1
Bram Moolenaar071d4272004-06-13 20:20:40 +000062 else
Bram Moolenaar6be7f872012-01-20 21:08:56 +010063 " Modern fortran still allows both free and fixed source form.
Bram Moolenaar071d4272004-06-13 20:20:40 +000064 " Assume fixed source form unless signs of free source form
Bram Moolenaarc88ebf72010-07-22 22:30:23 +020065 " are detected in the first five columns of the first s:lmax lines.
Bram Moolenaar071d4272004-06-13 20:20:40 +000066 " Detection becomes more accurate and time-consuming if more lines
67 " are checked. Increase the limit below if you keep lots of comments at
68 " the very top of each file and you have a fast computer.
Bram Moolenaarc88ebf72010-07-22 22:30:23 +020069 let s:lmax = 500
70 if ( s:lmax > line("$") )
71 let s:lmax = line("$")
Bram Moolenaar071d4272004-06-13 20:20:40 +000072 endif
73 let b:fortran_fixed_source = 1
Bram Moolenaarc88ebf72010-07-22 22:30:23 +020074 let s:ln=1
75 while s:ln <= s:lmax
76 let s:test = strpart(getline(s:ln),0,5)
77 if s:test !~ '^[Cc*]' && s:test !~ '^ *[!#]' && s:test =~ '[^ 0-9\t]' && s:test !~ '^[ 0-9]*\t'
Bram Moolenaar256972a2015-12-29 19:10:25 +010078 let b:fortran_fixed_source = 0
79 break
Bram Moolenaar071d4272004-06-13 20:20:40 +000080 endif
Bram Moolenaarc88ebf72010-07-22 22:30:23 +020081 let s:ln = s:ln + 1
Bram Moolenaar071d4272004-06-13 20:20:40 +000082 endwhile
Bram Moolenaarc88ebf72010-07-22 22:30:23 +020083 unlet! s:lmax s:ln s:test
Bram Moolenaar071d4272004-06-13 20:20:40 +000084 endif
85endif
86
87syn case ignore
88
Bram Moolenaar6be7f872012-01-20 21:08:56 +010089if b:fortran_fixed_source == 1
90 syn match fortranConstructName "^\s\{6,}\zs\a\w*\ze\s*:"
91else
92 syn match fortranConstructName "^\s*\zs\a\w*\ze\s*:"
93endif
94if exists("fortran_more_precise")
95 syn match fortranConstructName "\(\<end\s*do\s\+\)\@<=\a\w*"
96 syn match fortranConstructName "\(\<end\s*if\s\+\)\@<=\a\w*"
97 syn match fortranConstructName "\(\<end\s*select\s\+\)\@<=\a\w*"
Bram Moolenaar071d4272004-06-13 20:20:40 +000098endif
99
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100100syn match fortranUnitHeader "\<end\>"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000101syn match fortranType "\<character\>"
102syn match fortranType "\<complex\>"
103syn match fortranType "\<integer\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000104syn keyword fortranType intrinsic
105syn match fortranType "\<implicit\>"
106syn keyword fortranStructure dimension
107syn keyword fortranStorageClass parameter save
108syn match fortranUnitHeader "\<subroutine\>"
109syn keyword fortranCall call
110syn match fortranUnitHeader "\<function\>"
111syn match fortranUnitHeader "\<program\>"
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200112syn match fortranUnitHeader "\<block\>"
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000113syn keyword fortranKeyword return stop
Bram Moolenaar071d4272004-06-13 20:20:40 +0000114syn keyword fortranConditional else then
115syn match fortranConditional "\<if\>"
Bram Moolenaar6ee8d892012-01-10 14:55:01 +0100116syn match fortranConditionalOb "\<if\s*(.*)\s*\d\+\s*,\s*\d\+\s*,\s*\d\+\s*$"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000117syn match fortranRepeat "\<do\>"
118
119syn keyword fortranTodo contained todo fixme
120
121"Catch errors caused by too many right parentheses
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000122syn region fortranParen transparent start="(" end=")" contains=ALLBUT,fortranParenError,@fortranCommentGroup,cIncluded,@spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000123syn match fortranParenError ")"
124
125syn match fortranOperator "\.\s*n\=eqv\s*\."
126syn match fortranOperator "\.\s*\(and\|or\|not\)\s*\."
127syn match fortranOperator "\(+\|-\|/\|\*\)"
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100128syn match fortranTypeOb "\<character\s*\*"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000129
130syn match fortranBoolean "\.\s*\(true\|false\)\s*\."
131
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000132syn keyword fortranReadWrite backspace close endfile inquire open print read rewind write
Bram Moolenaar071d4272004-06-13 20:20:40 +0000133
134"If tabs are allowed then the left margin checks do not work
135if exists("fortran_have_tabs")
136 syn match fortranTab "\t" transparent
137else
138 syn match fortranTab "\t"
139endif
140
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000141syn keyword fortranIO access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit
Bram Moolenaar071d4272004-06-13 20:20:40 +0000142
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100143syn keyword fortranIntrinsicR 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000144
145" Intrinsics provided by some vendors
Bram Moolenaar6ee8d892012-01-10 14:55:01 +0100146syn keyword fortranExtraIntrinsic algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000147
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100148syn keyword fortranIntrinsic 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
149syn match fortranIntrinsic "\<len\s*[(,]"me=s+3
150syn match fortranIntrinsic "\<real\s*("me=s+4
Bram Moolenaar071d4272004-06-13 20:20:40 +0000151syn match fortranType "\<implicit\s\+real"
152syn match fortranType "^\s*real\>"
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100153syn match fortranIntrinsic "\<logical\s*("me=s+7
Bram Moolenaar071d4272004-06-13 20:20:40 +0000154syn match fortranType "\<implicit\s\+logical"
155syn match fortranType "^\s*logical\>"
156
157"Numbers of various sorts
158" Integers
159syn match fortranNumber display "\<\d\+\(_\a\w*\)\=\>"
160" floating point number, without a decimal point
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100161syn match fortranFloatIll display "\<\d\+[deq][-+]\=\d\+\(_\a\w*\)\=\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000162" floating point number, starting with a decimal point
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100163syn match fortranFloatIll display "\.\d\+\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000164" floating point number, no digits after decimal
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100165syn match fortranFloatIll display "\<\d\+\.\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000166" floating point number, D or Q exponents
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100167syn match fortranFloatIll display "\<\d\+\.\d\+\([dq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000168" floating point number
169syn match fortranFloat display "\<\d\+\.\d\+\(e[-+]\=\d\+\)\=\(_\a\w*\)\=\>"
170" Numbers in formats
171syn match fortranFormatSpec display "\d*f\d\+\.\d\+"
172syn match fortranFormatSpec display "\d*e[sn]\=\d\+\.\d\+\(e\d+\>\)\="
173syn match fortranFormatSpec display "\d*\(d\|q\|g\)\d\+\.\d\+\(e\d+\)\="
174syn match fortranFormatSpec display "\d\+x\>"
175" The next match cannot be used because it would pick up identifiers as well
176" syn match fortranFormatSpec display "\<\(a\|i\)\d\+"
177
178" Numbers as labels
179syn match fortranLabelNumber display "^\d\{1,5}\s"me=e-1
180syn match fortranLabelNumber display "^ \d\{1,4}\s"ms=s+1,me=e-1
181syn match fortranLabelNumber display "^ \d\{1,3}\s"ms=s+2,me=e-1
182syn match fortranLabelNumber display "^ \d\d\=\s"ms=s+3,me=e-1
183syn match fortranLabelNumber display "^ \d\s"ms=s+4,me=e-1
184
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100185if exists("fortran_more_precise")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000186 " Numbers as targets
187 syn match fortranTarget display "\(\<if\s*(.\+)\s*\)\@<=\(\d\+\s*,\s*\)\{2}\d\+\>"
188 syn match fortranTarget display "\(\<do\s\+\)\@<=\d\+\>"
189 syn match fortranTarget display "\(\<go\s*to\s*(\=\)\@<=\(\d\+\s*,\s*\)*\d\+\>"
190endif
191
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100192syn keyword fortranTypeR external
193syn keyword fortranIOR format
194syn match fortranKeywordR "\<continue\>"
Bram Moolenaare06c1882010-07-21 22:05:20 +0200195syn match fortranKeyword "^\s*\d\+\s\+continue\>"
Bram Moolenaar6ee8d892012-01-10 14:55:01 +0100196syn match fortranKeyword "\<go\s*to\>"
197syn match fortranKeywordDel "\<go\s*to\ze\s\+.*,\s*(.*$"
198syn match fortranKeywordOb "\<go\s*to\ze\s*(\d\+.*$"
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100199syn region fortranStringR start=+'+ end=+'+ contains=fortranContinueMark,fortranLeftMargin,fortranSerialNumber
200syn keyword fortranIntrinsicR dim lge lgt lle llt mod
Bram Moolenaar6ee8d892012-01-10 14:55:01 +0100201syn keyword fortranKeywordDel assign pause
Bram Moolenaar071d4272004-06-13 20:20:40 +0000202
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100203syn match fortranType "\<type\>"
204syn keyword fortranType none
Bram Moolenaar071d4272004-06-13 20:20:40 +0000205
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100206syn keyword fortranStructure private public intent optional
207syn keyword fortranStructure pointer target allocatable
208syn keyword fortranStorageClass in out
209syn match fortranStorageClass "\<kind\s*="me=s+4
210syn match fortranStorageClass "\<len\s*="me=s+3
Bram Moolenaar071d4272004-06-13 20:20:40 +0000211
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100212syn match fortranUnitHeader "\<module\>"
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200213syn match fortranUnitHeader "\<submodule\>"
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100214syn keyword fortranUnitHeader use only contains
215syn keyword fortranUnitHeader result operator assignment
216syn match fortranUnitHeader "\<interface\>"
217syn match fortranUnitHeader "\<recursive\>"
218syn keyword fortranKeyword allocate deallocate nullify cycle exit
219syn match fortranConditional "\<select\>"
220syn keyword fortranConditional case default where elsewhere
Bram Moolenaar071d4272004-06-13 20:20:40 +0000221
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100222syn match fortranOperator "\(\(>\|<\)=\=\|==\|/=\|=\)"
223syn match fortranOperator "=>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000224
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100225syn region fortranString start=+"+ end=+"+ contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
226syn keyword fortranIO pad position action delim readwrite
227syn keyword fortranIO eor advance nml
Bram Moolenaar071d4272004-06-13 20:20:40 +0000228
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100229syn keyword fortranIntrinsic 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
230syn keyword fortranIntrinsic scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify
231syn match fortranIntrinsic "\<not\>\(\s*\.\)\@!"me=s+3
232syn match fortranIntrinsic "\<kind\>\s*[(,]"me=s+4
Bram Moolenaar071d4272004-06-13 20:20:40 +0000233
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100234syn match fortranUnitHeader "\<end\s*function"
235syn match fortranUnitHeader "\<end\s*interface"
236syn match fortranUnitHeader "\<end\s*module"
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200237syn match fortranUnitHeader "\<end\s*submodule"
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100238syn match fortranUnitHeader "\<end\s*program"
239syn match fortranUnitHeader "\<end\s*subroutine"
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200240syn match fortranUnitHeader "\<end\s*block"
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100241syn match fortranRepeat "\<end\s*do"
242syn match fortranConditional "\<end\s*where"
243syn match fortranConditional "\<select\s*case"
244syn match fortranConditional "\<end\s*select"
245syn match fortranType "\<end\s*type"
246syn match fortranType "\<in\s*out"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000247
Bram Moolenaar30b65812012-07-12 22:01:11 +0200248syn keyword fortranType procedure
249syn match fortranType "\<module\ze\s\+procedure\>"
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100250syn keyword fortranIOR namelist
251syn keyword fortranConditionalR while
252syn keyword fortranIntrinsicR achar iachar transfer
Bram Moolenaar071d4272004-06-13 20:20:40 +0000253
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100254syn keyword fortranInclude include
255syn keyword fortranStorageClassR sequence
Bram Moolenaar071d4272004-06-13 20:20:40 +0000256
257syn match fortranConditional "\<end\s*if"
258syn match fortranIO contains=fortranOperator "\<e\(nd\|rr\)\s*=\s*\d\+"
259syn match fortranConditional "\<else\s*if"
260
Bram Moolenaar6ee8d892012-01-10 14:55:01 +0100261syn keyword fortranUnitHeaderOb entry
Bram Moolenaar071d4272004-06-13 20:20:40 +0000262syn match fortranTypeR display "double\s\+precision"
263syn match fortranTypeR display "double\s\+complex"
264syn match fortranUnitHeaderR display "block\s\+data"
265syn keyword fortranStorageClassR common equivalence data
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100266syn keyword fortranIntrinsicR dble dprod
267syn match fortranOperatorR "\.\s*[gl][et]\s*\."
268syn match fortranOperatorR "\.\s*\(eq\|ne\)\s*\."
Bram Moolenaar071d4272004-06-13 20:20:40 +0000269
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100270syn keyword fortranRepeat forall
271syn match fortranRepeat "\<end\s*forall"
272syn keyword fortranIntrinsic null cpu_time
273syn match fortranType "\<elemental\>"
274syn match fortranType "\<pure\>"
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200275syn match fortranType "\<impure\>"
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100276if exists("fortran_more_precise")
277 syn match fortranConstructName "\(\<end\s*forall\s\+\)\@<=\a\w*\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000278endif
279
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100280if b:fortran_dialect == "f08"
Bram Moolenaare06c1882010-07-21 22:05:20 +0200281 " F2003
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100282 syn keyword fortranIntrinsic 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
Bram Moolenaare06c1882010-07-21 22:05:20 +0200283 " ISO_C_binding
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100284 syn keyword fortranConstant c_null_char c_alert c_backspace c_form_feed c_new_line c_carriage_return c_horizontal_tab c_vertical_tab
285 syn keyword fortranConstant 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
286 syn keyword fortranIntrinsic iso_c_binding c_loc c_funloc c_associated c_f_pointer c_f_procpointer
287 syn keyword fortranType c_ptr c_funptr
Bram Moolenaare06c1882010-07-21 22:05:20 +0200288 " ISO_Fortran_env
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100289 syn keyword fortranConstant iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit
Bram Moolenaare06c1882010-07-21 22:05:20 +0200290 " IEEE_arithmetic
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100291 syn keyword fortranIntrinsic ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode
Bram Moolenaare06c1882010-07-21 22:05:20 +0200292
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100293 syn keyword fortranReadWrite flush wait
294 syn keyword fortranIO decimal round iomsg
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200295 syn keyword fortranType asynchronous nopass non_overridable pass protected volatile extends import
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100296 syn keyword fortranType non_intrinsic value bind deferred generic final enumerator
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200297 syn match fortranType "\<abstract\>"
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100298 syn match fortranType "\<class\>"
299 syn match fortranType "\<associate\>"
300 syn match fortranType "\<end\s*associate"
301 syn match fortranType "\<enum\s*,\s*bind\s*(\s*c\s*)"
302 syn match fortranType "\<end\s*enum"
303 syn match fortranConditional "\<select\s*type"
304 syn match fortranConditional "\<type\s*is\>"
305 syn match fortranConditional "\<class\s*is\>"
306 syn match fortranUnitHeader "\<abstract\s*interface\>"
307 syn match fortranOperator "\([\|]\)"
Bram Moolenaare06c1882010-07-21 22:05:20 +0200308
309 " F2008
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100310 syn keyword fortranIntrinsic acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2
311 syn keyword fortranIntrinsic atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits
312 syn keyword fortranIntrinsic 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
313 syn keyword fortranIO newunit
314 syn keyword fortranType contiguous
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200315 syn keyword fortranRepeat concurrent
Bram Moolenaar8a94d872015-01-25 13:02:57 +0100316
317" CUDA fortran
318 syn match fortranTypeCUDA "\<attributes\>"
319 syn keyword fortranTypeCUDA host global device value
320 syn keyword fortranTypeCUDA shared constant pinned texture
321 syn keyword fortranTypeCUDA dim1 dim2 dim3 dim4
322 syn keyword fortranTypeCUDA cudadeviceprop cuda_count_kind cuda_stream_kind
323 syn keyword fortranTypeCUDA cudaEvent cudaFuncAttributes cudaArrayPtr
324 syn keyword fortranTypeCUDA cudaSymbol cudaChannelFormatDesc cudaPitchedPtr
325 syn keyword fortranTypeCUDA cudaExtent cudaMemcpy3DParms
326 syn keyword fortranTypeCUDA cudaFuncCachePreferNone cudaFuncCachePreferShared
327 syn keyword fortranTypeCUDA cudaFuncCachePreferL1 cudaLimitStackSize
328 syn keyword fortranTypeCUDA cudaLimitPrintfSize cudaLimitMallocHeapSize
329 syn keyword fortranTypeCUDA cudaSharedMemBankSizeDefault cudaSharedMemBankSizeFourByte cudaSharedMemBankSizeEightByte
330 syn keyword fortranTypeCUDA cudaEventDefault cudaEventBlockingSync cudaEventDisableTiming
331 syn keyword fortranTypeCUDA cudaMemcpyHostToDevice cudaMemcpyDeviceToHost
332 syn keyword fortranTypeCUDA cudaMemcpyDeviceToDevice
333 syn keyword fortranTypeCUDA cudaErrorNotReady cudaSuccess cudaErrorInvalidValue
334 syn keyword fortranTypeCUDA c_devptr
335
336 syn match fortranStringCUDA "blockidx%[xyz]"
337 syn match fortranStringCUDA "blockdim%[xyz]"
338 syn match fortranStringCUDA "griddim%[xyz]"
339 syn match fortranStringCUDA "threadidx%[xyz]"
340
341 syn keyword fortranIntrinsicCUDA warpsize syncthreads syncthreads_and syncthreads_count syncthreads_or threadfence threadfence_block threadfence_system gpu_time allthreads anythread ballot
342 syn keyword fortranIntrinsicCUDA atomicadd atomicsub atomicmax atomicmin atomicand atomicor atomicxor atomicexch atomicinc atomicdec atomiccas sizeof __shfl __shfl_up __shfl_down __shfl_xor
343 syn keyword fortranIntrinsicCUDA cudaChooseDevice cudaDeviceGetCacheConfig cudaDeviceGetLimit cudaDeviceGetSharedMemConfig cudaDeviceReset cudaDeviceSetCacheConfig cudaDeviceSetLimit cudaDeviceSetSharedMemConfig cudaDeviceSynchronize cudaGetDevice cudaGetDeviceCount cudaGetDeviceProperties cudaSetDevice cudaSetDeviceFlags cudaSetValidDevices
344 syn keyword fortranIntrinsicCUDA cudaThreadExit cudaThreadSynchronize cudaGetLastError cudaGetErrorString cudaPeekAtLastError cudaStreamCreate cudaStreamDestroy cudaStreamQuery cudaStreamSynchronize cudaStreamWaitEvent cudaEventCreate cudaEventCreateWithFlags cudaEventDestroy cudaEventElapsedTime cudaEventQuery cudaEventRecord cudaEventSynchronize
345 syn keyword fortranIntrinsicCUDA cudaFuncGetAttributes cudaFuncSetCacheConfig cudaFuncSetSharedMemConfig cudaSetDoubleForDevice cudaSetDoubleForHost cudaFree cudaFreeArray cudaFreeHost cudaGetSymbolAddress cudaGetSymbolSize
346 syn keyword fortranIntrinsicCUDA cudaHostAlloc cudaHostGetDevicePointer cudaHostGetFlags cudaHostRegister cudaHostUnregister cudaMalloc cudaMallocArray cudaMallocHost cudaMallocPitch cudaMalloc3D cudaMalloc3DArray
347 syn keyword fortranIntrinsicCUDA cudaMemcpy cudaMemcpyArraytoArray cudaMemcpyAsync cudaMemcpyFromArray cudaMemcpyFromSymbol cudaMemcpyFromSymbolAsync cudaMemcpyPeer cudaMemcpyPeerAsync cudaMemcpyToArray cudaMemcpyToSymbol cudaMemcpyToSymbolAsync cudaMemcpy2D cudaMemcpy2DArrayToArray cudaMemcpy2DAsync cudaMemcpy2DFromArray cudaMemcpy2DToArray cudaMemcpy3D cudaMemcpy3DAsync
348 syn keyword fortranIntrinsicCUDA cudaMemGetInfo cudaMemset cudaMemset2D cudaMemset3D cudaDeviceCanAccessPeer cudaDeviceDisablePeerAccess cudaDeviceEnablePeerAccess cudaPointerGetAttributes cudaDriverGetVersion cudaRuntimeGetVersion
349
350 syn region none matchgroup=fortranType start="<<<" end=">>>" contains=ALLBUT,none
Bram Moolenaare06c1882010-07-21 22:05:20 +0200351endif
352
Bram Moolenaar071d4272004-06-13 20:20:40 +0000353syn cluster fortranCommentGroup contains=fortranTodo
354
355if (b:fortran_fixed_source == 1)
356 if !exists("fortran_have_tabs")
357 "Flag items beyond column 72
358 syn match fortranSerialNumber excludenl "^.\{73,}$"lc=72
359 "Flag left margin errors
360 syn match fortranLabelError "^.\{-,4}[^0-9 ]" contains=fortranTab
361 syn match fortranLabelError "^.\{4}\d\S"
362 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100363 syn match fortranComment excludenl "^[!c*].*$" contains=@fortranCommentGroup,@spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000364 syn match fortranLeftMargin transparent "^ \{5}"
365 syn match fortranContinueMark display "^.\{5}\S"lc=5
366else
367 syn match fortranContinueMark display "&"
368endif
369
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100370syn match fortranComment excludenl "!.*$" contains=@fortranCommentGroup,@spell
Bram Moolenaar3e496b02016-09-25 22:11:48 +0200371syn match fortranOpenMP excludenl "^\s*!\$\(OMP\)\=&\=\s.*$"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000372
373"cpp is often used with Fortran
374syn match cPreProc "^\s*#\s*\(define\|ifdef\)\>.*"
375syn match cPreProc "^\s*#\s*\(elif\|if\)\>.*"
376syn match cPreProc "^\s*#\s*\(ifndef\|undef\)\>.*"
377syn match cPreCondit "^\s*#\s*\(else\|endif\)\>.*"
378syn region cIncluded contained start=+"[^(]+ skip=+\\\\\|\\"+ end=+"+ contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
379syn match cIncluded contained "<[^>]*>"
380syn match cInclude "^\s*#\s*include\>\s*["<]" contains=cIncluded
381
382"Synchronising limits assume that comment and continuation lines are not mixed
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000383if exists("fortran_fold") || exists("fortran_more_precise")
384 syn sync fromstart
385elseif (b:fortran_fixed_source == 0)
Bram Moolenaare06c1882010-07-21 22:05:20 +0200386 syn sync linecont "&" minlines=30
Bram Moolenaar071d4272004-06-13 20:20:40 +0000387else
Bram Moolenaare06c1882010-07-21 22:05:20 +0200388 syn sync minlines=30
Bram Moolenaar071d4272004-06-13 20:20:40 +0000389endif
390
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100391if exists("fortran_fold")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000392
Bram Moolenaar071d4272004-06-13 20:20:40 +0000393 if (b:fortran_fixed_source == 1)
394 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
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200395 syn region fortranModule transparent fold keepend start="^\s*submodule\s\+(\a\w*\s*\(:\a\w*\s*\)*)\s*\z\(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\(submodule\(\s\+\z1\>\)\=\|$\)" contains=ALLBUT,fortranProgram,fortranModule
Bram Moolenaar071d4272004-06-13 20:20:40 +0000396 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
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200397 syn region fortranFunction transparent fold keepend extend start="^\s*\(elemental \|pure \|impure \|module \|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
398 syn region fortranSubroutine transparent fold keepend extend start="^\s*\(elemental \|pure \|impure \|module \|recursive \)\=\s*subroutine\s\+\z(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\($\|subroutine\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule
Bram Moolenaare06c1882010-07-21 22:05:20 +0200399 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
Bram Moolenaarc0514bf2016-11-17 14:50:09 +0100400 syn region fortranAssociate transparent fold keepend start="^\s*\<associate\s\+" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*associate" contains=ALLBUT,fortranProgram,fortranModule,fortranSubroutine,fortranFunction
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200401 syn region fortranInterface transparent fold keepend extend start="^\s*\(abstract \)\=\s*interface\>" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*interface\>" contains=ALLBUT,fortranProgram,fortranModule,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock
402 syn region fortranTypeDef transparent fold keepend extend start="^\s*type\s*\(,\s*\(public\|private\|abstract\)\)\=\s*::" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*type\>" contains=ALLBUT,fortranProgram,fortranModule,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock,fortranInterface
Bram Moolenaar071d4272004-06-13 20:20:40 +0000403 else
404 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
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200405 syn region fortranModule transparent fold keepend start="^\s*submodule\s\+(\a\w*\s*\(:\a\w*\s*\)*)\s*\z\(\a\w*\)" skip="^\s*[!#].*$" excludenl end="\<end\s*\(submodule\(\s\+\z1\>\)\=\|$\)" contains=ALLBUT,fortranProgram,fortranModule
Bram Moolenaar071d4272004-06-13 20:20:40 +0000406 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
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200407 syn region fortranFunction transparent fold keepend extend start="^\s*\(elemental \|pure \|impure \|module \|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
408 syn region fortranSubroutine transparent fold keepend extend start="^\s*\(elemental \|pure \|impure \|module \|recursive \)\=\s*subroutine\s\+\z(\a\w*\)" skip="^\s*[!#].*$" excludenl end="\<end\s*\($\|subroutine\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule
Bram Moolenaare06c1882010-07-21 22:05:20 +0200409 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
Bram Moolenaarc0514bf2016-11-17 14:50:09 +0100410 syn region fortranAssociate transparent fold keepend start="^\s*\<associate\s\+" skip="^\s*[!#].*$" excludenl end="\<end\s*associate" contains=ALLBUT,fortranProgram,fortranModule,fortranSubroutine,fortranFunction
Bram Moolenaare4a3bcf2016-08-26 19:52:37 +0200411 syn region fortranInterface transparent fold keepend extend start="^\s*\(abstract \)\=\s*interface\>" skip="^\s*[!#].*$" excludenl end="\<end\s*interface\>" contains=ALLBUT,fortranProgram,fortranModule,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock
412 syn region fortranTypeDef transparent fold keepend extend start="^\s*type\s*\(,\s*\(public\|private\|abstract\)\)\=\s*::" skip="^\s*[!#].*$" excludenl end="\<end\s*type\>" contains=ALLBUT,fortranProgram,fortranModule,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock,fortranInterface
Bram Moolenaar071d4272004-06-13 20:20:40 +0000413 endif
414
415 if exists("fortran_fold_conditionals")
416 if (b:fortran_fixed_source == 1)
417 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
418 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
419 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
Bram Moolenaarc0514bf2016-11-17 14:50:09 +0100420 syn region fortranCase transparent fold keepend extend start="\<select\s*\(case\|type\)\>" skip="^\([!c*]\|\s*#\).*$" end="\<end\s*select\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
Bram Moolenaar071d4272004-06-13 20:20:40 +0000421 else
422 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
423 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
Bram Moolenaardae8d212016-02-27 22:40:16 +0100424 syn region fortranIfBlock transparent fold keepend extend start="\(\<e\(nd\|lse\)\s\+\)\@<!\<if\s*(\(.\|&\s*\n\)\+)\(\s\|&\s*\n\)*then\>" skip="^\s*[!#].*$" end="\<end\s*if\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
Bram Moolenaarc0514bf2016-11-17 14:50:09 +0100425 syn region fortranCase transparent fold keepend extend start="\<select\s*\(case\|type\)\>" skip="^\s*[!#].*$" end="\<end\s*select\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
Bram Moolenaar071d4272004-06-13 20:20:40 +0000426 endif
427 endif
428
429 if exists("fortran_fold_multilinecomments")
430 if (b:fortran_fixed_source == 1)
431 syn match fortranMultiLineComments transparent fold "\(^[!c*].*\(\n\|\%$\)\)\{4,}" contains=ALLBUT,fortranMultiCommentLines
432 else
433 syn match fortranMultiLineComments transparent fold "\(^\s*!.*\(\n\|\%$\)\)\{4,}" contains=ALLBUT,fortranMultiCommentLines
434 endif
435 endif
436endif
437
438" Define the default highlighting.
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100439" The default highlighting differs for each dialect.
440" Transparent groups:
441" fortranParen, fortranLeftMargin
442" fortranProgram, fortranModule, fortranSubroutine, fortranFunction,
443" fortranBlockData
444" fortran77Loop, fortran90Loop, fortranIfBlock, fortranCase
445" fortranMultiCommentLines
446hi def link fortranKeyword Keyword
447hi def link fortranConstructName Identifier
448hi def link fortranConditional Conditional
449hi def link fortranRepeat Repeat
450hi def link fortranTodo Todo
451hi def link fortranContinueMark Special
452hi def link fortranString String
453hi def link fortranNumber Number
454hi def link fortranOperator Operator
455hi def link fortranBoolean Boolean
456hi def link fortranLabelError Error
457hi def link fortranObsolete Todo
458hi def link fortranType Type
459hi def link fortranStructure Type
460hi def link fortranStorageClass StorageClass
461hi def link fortranCall Function
462hi def link fortranUnitHeader fortranPreCondit
463hi def link fortranReadWrite Keyword
464hi def link fortranIO Keyword
465hi def link fortranIntrinsic Function
466hi def link fortranConstant Constant
Bram Moolenaar071d4272004-06-13 20:20:40 +0000467
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100468" To stop deleted & obsolescent features being highlighted as Todo items,
469" comment out the next 5 lines and uncomment the 5 lines after that
470hi def link fortranUnitHeaderOb fortranObsolete
471hi def link fortranKeywordOb fortranObsolete
472hi def link fortranConditionalOb fortranObsolete
473hi def link fortranTypeOb fortranObsolete
474hi def link fortranKeywordDel fortranObsolete
475"hi def link fortranUnitHeaderOb fortranUnitHeader
476"hi def link fortranKeywordOb fortranKeyword
477"hi def link fortranConditionalOb fortranConditional
478"hi def link fortranTypeOb fortranType
479"hi def link fortranKeywordDel fortranKeyword
Bram Moolenaar071d4272004-06-13 20:20:40 +0000480
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100481if b:fortran_dialect == "F"
482 hi! def link fortranIntrinsicR fortranObsolete
483 hi! def link fortranUnitHeaderR fortranObsolete
484 hi! def link fortranTypeR fortranObsolete
485 hi! def link fortranStorageClassR fortranObsolete
486 hi! def link fortranOperatorR fortranObsolete
487 hi! def link fortranInclude fortranObsolete
488 hi! def link fortranLabelNumber fortranObsolete
489 hi! def link fortranTarget fortranObsolete
490 hi! def link fortranFloatIll fortranObsolete
491 hi! def link fortranIOR fortranObsolete
492 hi! def link fortranKeywordR fortranObsolete
493 hi! def link fortranStringR fortranObsolete
494 hi! def link fortranConditionalR fortranObsolete
495else
496 hi! def link fortranIntrinsicR fortranIntrinsic
497 hi! def link fortranUnitHeaderR fortranPreCondit
498 hi! def link fortranTypeR fortranType
499 hi! def link fortranStorageClassR fortranStorageClass
500 hi! def link fortranOperatorR fortranOperator
501 hi! def link fortranInclude Include
502 hi! def link fortranLabelNumber Special
503 hi! def link fortranTarget Special
504 hi! def link fortranFloatIll fortranFloat
505 hi! def link fortranIOR fortranIO
506 hi! def link fortranKeywordR fortranKeyword
507 hi! def link fortranStringR fortranString
508 hi! def link fortranConditionalR fortranConditional
Bram Moolenaar071d4272004-06-13 20:20:40 +0000509endif
510
Bram Moolenaar8a94d872015-01-25 13:02:57 +0100511" CUDA
512hi def link fortranIntrinsicCUDA fortranIntrinsic
513hi def link fortranTypeCUDA fortranType
514hi def link fortranStringCUDA fortranString
515
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100516hi def link fortranFormatSpec Identifier
517hi def link fortranFloat Float
518hi def link fortranPreCondit PreCondit
519hi def link cIncluded fortranString
520hi def link cInclude Include
521hi def link cPreProc PreProc
522hi def link cPreCondit PreCondit
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200523hi def link fortranOpenMP PreProc
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100524hi def link fortranParenError Error
525hi def link fortranComment Comment
526hi def link fortranSerialNumber Todo
527hi def link fortranTab Error
528
529" Uncomment the next line if you use extra intrinsics provided by vendors
530"hi def link fortranExtraIntrinsic Function
531
Bram Moolenaar071d4272004-06-13 20:20:40 +0000532let b:current_syntax = "fortran"
533
Bram Moolenaarb6b046b2011-12-30 13:11:27 +0100534let &cpo = s:cpo_save
535unlet s:cpo_save
Bram Moolenaar071d4272004-06-13 20:20:40 +0000536" vim: ts=8 tw=132