1071d4279SBram Moolenaar" Vim syntax file 2256972a9SBram Moolenaar" Language: Fortran 2008 (and older: Fortran 2003, 95, 90, and 77) 3*130cbfc3SBram Moolenaar" Version: (v104) 2021 April 06 48a94d873SBram Moolenaar" Maintainer: Ajit J. Thakkar <[email protected]>; <http://www2.unb.ca/~ajit/> 5e06c188bSBram Moolenaar" Usage: For instructions, do :help fortran-syntax from Vim 6071d4279SBram Moolenaar" Credits: 74f4d51a9SBram Moolenaar" Version 0.1 for Fortran 95 was created in April 2000 by Ajit Thakkar from an 84f4d51a9SBram Moolenaar" older Fortran 77 syntax file by Mario Eusebio and Preben Guldberg. 90c0734d5SBram Moolenaar" Since then, useful suggestions and contributions have been made, in order, by: 10dae8d21dSBram Moolenaar" Andrej Panjkov, Bram Moolenaar, Thomas Olsen, Michael Sternberg, Christian Reile, 11*130cbfc3SBram Moolenaar" Walter Dieudonne, Alexander Wagner, Roman Bertle, Charles Rendleman, 12e4a3bcf2SBram Moolenaar" Andrew Griffiths, Joe Krahn, Hendrik Merx, Matt Thompson, Jan Hermann, 13*130cbfc3SBram Moolenaar" Stefano Zaghi, Vishnu V. Krishnan, Judicael Grasset, Takuma Yoshida, 14*130cbfc3SBram Moolenaar" Eisuke Kawashima, Andre Chalella, and Fritz Reese. 15071d4279SBram Moolenaar 166be7f873SBram Moolenaarif exists("b:current_syntax") 17071d4279SBram Moolenaar finish 18071d4279SBram Moolenaarendif 19071d4279SBram Moolenaar 20b6b046b2SBram Moolenaarlet s:cpo_save = &cpo 21b6b046b2SBram Moolenaarset cpo&vim 22b6b046b2SBram Moolenaar 236be7f873SBram Moolenaar" Choose fortran_dialect using the priority: 24256972a9SBram Moolenaar" source file directive > buffer-local value > global value > file extension 25256972a9SBram Moolenaar" first try using directive in first three lines of file 26071d4279SBram Moolenaarlet b:fortran_retype = getline(1)." ".getline(2)." ".getline(3) 276be7f873SBram Moolenaarif b:fortran_retype =~? '\<fortran_dialect\s*=\s*F\>' 28071d4279SBram Moolenaar let b:fortran_dialect = "F" 296be7f873SBram Moolenaarelseif b:fortran_retype =~? '\<fortran_dialect\s*=\s*f08\>' 306be7f873SBram Moolenaar let b:fortran_dialect = "f08" 316be7f873SBram Moolenaarelseif !exists("b:fortran_dialect") 326be7f873SBram Moolenaar if exists("g:fortran_dialect") && g:fortran_dialect =~# '\<F\|f08\>' 336be7f873SBram Moolenaar " try global variable 346be7f873SBram Moolenaar let b:fortran_dialect = g:fortran_dialect 356be7f873SBram Moolenaar else " nothing found, so use default 366be7f873SBram Moolenaar let b:fortran_dialect = "f08" 37071d4279SBram Moolenaar endif 386be7f873SBram Moolenaarendif 396be7f873SBram Moolenaarunlet! b:fortran_retype 406be7f873SBram Moolenaar" make sure buffer-local value is not invalid 416be7f873SBram Moolenaarif b:fortran_dialect !~# '\<F\|f08\>' 426be7f873SBram Moolenaar let b:fortran_dialect = "f08" 43071d4279SBram Moolenaarendif 44071d4279SBram Moolenaar 45071d4279SBram Moolenaar" Choose between fixed and free source form if this hasn't been done yet 46071d4279SBram Moolenaarif !exists("b:fortran_fixed_source") 476be7f873SBram Moolenaar if b:fortran_dialect == "F" 486be7f873SBram Moolenaar " F requires free source form 49071d4279SBram Moolenaar let b:fortran_fixed_source = 0 50071d4279SBram Moolenaar elseif exists("fortran_free_source") 516be7f873SBram Moolenaar " User guarantees free source form for all fortran files 52071d4279SBram Moolenaar let b:fortran_fixed_source = 0 53071d4279SBram Moolenaar elseif exists("fortran_fixed_source") 546be7f873SBram Moolenaar " User guarantees fixed source form for all fortran files 55071d4279SBram Moolenaar let b:fortran_fixed_source = 1 562c7f8c57SBram Moolenaar elseif expand("%:e") =~? '^f\%(90\|95\|03\|08\)$' 57256972a9SBram Moolenaar " Free-form file extension defaults as in Intel ifort, gcc(gfortran), NAG, Pathscale, and Cray compilers 58256972a9SBram Moolenaar let b:fortran_fixed_source = 0 592c7f8c57SBram Moolenaar elseif expand("%:e") =~? '^\%(f\|f77\|for\)$' 60256972a9SBram Moolenaar " Fixed-form file extension defaults 61256972a9SBram Moolenaar let b:fortran_fixed_source = 1 62071d4279SBram Moolenaar else 636be7f873SBram Moolenaar " Modern fortran still allows both free and fixed source form. 64071d4279SBram Moolenaar " Assume fixed source form unless signs of free source form 65c88ebf7fSBram Moolenaar " are detected in the first five columns of the first s:lmax lines. 66071d4279SBram Moolenaar " Detection becomes more accurate and time-consuming if more lines 67071d4279SBram Moolenaar " are checked. Increase the limit below if you keep lots of comments at 68071d4279SBram Moolenaar " the very top of each file and you have a fast computer. 69c88ebf7fSBram Moolenaar let s:lmax = 500 70c88ebf7fSBram Moolenaar if ( s:lmax > line("$") ) 71c88ebf7fSBram Moolenaar let s:lmax = line("$") 72071d4279SBram Moolenaar endif 73071d4279SBram Moolenaar let b:fortran_fixed_source = 1 74c88ebf7fSBram Moolenaar let s:ln=1 75c88ebf7fSBram Moolenaar while s:ln <= s:lmax 76c88ebf7fSBram Moolenaar let s:test = strpart(getline(s:ln),0,5) 77c88ebf7fSBram Moolenaar if s:test !~ '^[Cc*]' && s:test !~ '^ *[!#]' && s:test =~ '[^ 0-9\t]' && s:test !~ '^[ 0-9]*\t' 78071d4279SBram Moolenaar let b:fortran_fixed_source = 0 79071d4279SBram Moolenaar break 80071d4279SBram Moolenaar endif 81c88ebf7fSBram Moolenaar let s:ln = s:ln + 1 82071d4279SBram Moolenaar endwhile 83c88ebf7fSBram Moolenaar unlet! s:lmax s:ln s:test 84071d4279SBram Moolenaar endif 85071d4279SBram Moolenaarendif 86071d4279SBram Moolenaar 87071d4279SBram Moolenaarsyn case ignore 88071d4279SBram Moolenaar 89071d4279SBram Moolenaarif b:fortran_fixed_source == 1 90071d4279SBram Moolenaar syn match fortranConstructName "^\s\{6,}\zs\a\w*\ze\s*:" 91071d4279SBram Moolenaarelse 92071d4279SBram Moolenaar syn match fortranConstructName "^\s*\zs\a\w*\ze\s*:" 93071d4279SBram Moolenaarendif 94071d4279SBram Moolenaarif exists("fortran_more_precise") 950c0734d5SBram Moolenaar syn match fortranConstructName "\(\<end\s*do\s\+\)\@11<=\a\w*" 960c0734d5SBram Moolenaar syn match fortranConstructName "\(\<end\s*if\s\+\)\@11<=\a\w*" 970c0734d5SBram Moolenaar syn match fortranConstructName "\(\<end\s*select\s\+\)\@15<=\a\w*" 98071d4279SBram Moolenaarendif 99071d4279SBram Moolenaar 100071d4279SBram Moolenaarsyn match fortranUnitHeader "\<end\>" 101910f66f9SBram Moolenaarsyn match fortranType "\<character\>" 102910f66f9SBram Moolenaarsyn match fortranType "\<complex\>" 103910f66f9SBram Moolenaarsyn match fortranType "\<integer\>" 1044f4d51a9SBram Moolenaarsyn match fortranType "\<real\>" 1054f4d51a9SBram Moolenaarsyn match fortranType "\<logical\>" 106071d4279SBram Moolenaarsyn keyword fortranType intrinsic 107071d4279SBram Moolenaarsyn match fortranType "\<implicit\>" 108071d4279SBram Moolenaarsyn keyword fortranStructure dimension 109071d4279SBram Moolenaarsyn keyword fortranStorageClass parameter save 110071d4279SBram Moolenaarsyn match fortranUnitHeader "\<subroutine\>" 111071d4279SBram Moolenaarsyn keyword fortranCall call 112071d4279SBram Moolenaarsyn match fortranUnitHeader "\<function\>" 113071d4279SBram Moolenaarsyn match fortranUnitHeader "\<program\>" 114e4a3bcf2SBram Moolenaarsyn match fortranUnitHeader "\<block\>" 115910f66f9SBram Moolenaarsyn keyword fortranKeyword return stop 116071d4279SBram Moolenaarsyn keyword fortranConditional else then 117071d4279SBram Moolenaarsyn match fortranConditional "\<if\>" 1186ee8d89cSBram Moolenaarsyn match fortranConditionalOb "\<if\s*(.*)\s*\d\+\s*,\s*\d\+\s*,\s*\d\+\s*$" 119071d4279SBram Moolenaarsyn match fortranRepeat "\<do\>" 120071d4279SBram Moolenaar 121071d4279SBram Moolenaarsyn keyword fortranTodo contained todo fixme 122071d4279SBram Moolenaar 123071d4279SBram Moolenaar"Catch errors caused by too many right parentheses 124910f66f9SBram Moolenaarsyn region fortranParen transparent start="(" end=")" contains=ALLBUT,fortranParenError,@fortranCommentGroup,cIncluded,@spell 125071d4279SBram Moolenaarsyn match fortranParenError ")" 126071d4279SBram Moolenaar 127071d4279SBram Moolenaarsyn match fortranOperator "\.\s*n\=eqv\s*\." 128071d4279SBram Moolenaarsyn match fortranOperator "\.\s*\(and\|or\|not\)\s*\." 129071d4279SBram Moolenaarsyn match fortranOperator "\(+\|-\|/\|\*\)" 1306be7f873SBram Moolenaarsyn match fortranTypeOb "\<character\s*\*" 131071d4279SBram Moolenaar 132071d4279SBram Moolenaarsyn match fortranBoolean "\.\s*\(true\|false\)\s*\." 133071d4279SBram Moolenaar 134910f66f9SBram Moolenaarsyn keyword fortranReadWrite backspace close endfile inquire open print read rewind write 135071d4279SBram Moolenaar 136071d4279SBram Moolenaar"If tabs are allowed then the left margin checks do not work 137071d4279SBram Moolenaarif exists("fortran_have_tabs") 138071d4279SBram Moolenaar syn match fortranTab "\t" transparent 139071d4279SBram Moolenaarelse 140071d4279SBram Moolenaar syn match fortranTab "\t" 141071d4279SBram Moolenaarendif 142071d4279SBram Moolenaar 143910f66f9SBram Moolenaarsyn keyword fortranIO access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit 144071d4279SBram Moolenaar 1456be7f873SBram Moolenaarsyn 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 146071d4279SBram Moolenaar 147071d4279SBram Moolenaar" Intrinsics provided by some vendors 1486ee8d89cSBram Moolenaarsyn 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 149071d4279SBram Moolenaar 1506be7f873SBram Moolenaarsyn 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 1516be7f873SBram Moolenaarsyn match fortranIntrinsic "\<len\s*[(,]"me=s+3 1526be7f873SBram Moolenaarsyn match fortranIntrinsic "\<real\s*("me=s+4 1536be7f873SBram Moolenaarsyn match fortranIntrinsic "\<logical\s*("me=s+7 1544f4d51a9SBram Moolenaarsyn match fortranType "\<implicit\s\+real\>" 1554f4d51a9SBram Moolenaarsyn match fortranType "\<implicit\s\+logical\>" 156071d4279SBram Moolenaar 157071d4279SBram Moolenaar"Numbers of various sorts 158071d4279SBram Moolenaar" Integers 159071d4279SBram Moolenaarsyn match fortranNumber display "\<\d\+\(_\a\w*\)\=\>" 160071d4279SBram Moolenaar" floating point number, without a decimal point 1616be7f873SBram Moolenaarsyn match fortranFloatIll display "\<\d\+[deq][-+]\=\d\+\(_\a\w*\)\=\>" 162071d4279SBram Moolenaar" floating point number, starting with a decimal point 1636be7f873SBram Moolenaarsyn match fortranFloatIll display "\.\d\+\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>" 164071d4279SBram Moolenaar" floating point number, no digits after decimal 1656be7f873SBram Moolenaarsyn match fortranFloatIll display "\<\d\+\.\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>" 166071d4279SBram Moolenaar" floating point number, D or Q exponents 1676be7f873SBram Moolenaarsyn match fortranFloatIll display "\<\d\+\.\d\+\([dq][-+]\=\d\+\)\=\(_\a\w*\)\=\>" 168071d4279SBram Moolenaar" floating point number 169071d4279SBram Moolenaarsyn match fortranFloat display "\<\d\+\.\d\+\(e[-+]\=\d\+\)\=\(_\a\w*\)\=\>" 1704f4d51a9SBram Moolenaar" binary number 1714f4d51a9SBram Moolenaarsyn match fortranBinary display "b["'][01]\+["']" 1724f4d51a9SBram Moolenaar" octal number 1734f4d51a9SBram Moolenaarsyn match fortranOctal display "o["'][0-7]\+["']" 1744f4d51a9SBram Moolenaar" hexadecimal number 1754f4d51a9SBram Moolenaarsyn match fortranHex display "z["'][0-9A-F]\+["']" 176071d4279SBram Moolenaar" Numbers in formats 177071d4279SBram Moolenaarsyn match fortranFormatSpec display "\d*f\d\+\.\d\+" 178071d4279SBram Moolenaarsyn match fortranFormatSpec display "\d*e[sn]\=\d\+\.\d\+\(e\d+\>\)\=" 179071d4279SBram Moolenaarsyn match fortranFormatSpec display "\d*\(d\|q\|g\)\d\+\.\d\+\(e\d+\)\=" 180071d4279SBram Moolenaarsyn match fortranFormatSpec display "\d\+x\>" 181071d4279SBram Moolenaar" The next match cannot be used because it would pick up identifiers as well 182071d4279SBram Moolenaar" syn match fortranFormatSpec display "\<\(a\|i\)\d\+" 183071d4279SBram Moolenaar 184071d4279SBram Moolenaar" Numbers as labels 185071d4279SBram Moolenaarsyn match fortranLabelNumber display "^\d\{1,5}\s"me=e-1 186071d4279SBram Moolenaarsyn match fortranLabelNumber display "^ \d\{1,4}\s"ms=s+1,me=e-1 187071d4279SBram Moolenaarsyn match fortranLabelNumber display "^ \d\{1,3}\s"ms=s+2,me=e-1 188071d4279SBram Moolenaarsyn match fortranLabelNumber display "^ \d\d\=\s"ms=s+3,me=e-1 189071d4279SBram Moolenaarsyn match fortranLabelNumber display "^ \d\s"ms=s+4,me=e-1 190071d4279SBram Moolenaar 1916be7f873SBram Moolenaarif exists("fortran_more_precise") 192071d4279SBram Moolenaar " Numbers as targets 193071d4279SBram Moolenaar syn match fortranTarget display "\(\<if\s*(.\+)\s*\)\@<=\(\d\+\s*,\s*\)\{2}\d\+\>" 194560979edSBram Moolenaar syn match fortranTarget display "\(\<do\s\+\)\@11<=\d\+\>" 195560979edSBram Moolenaar syn match fortranTarget display "\(\<go\s*to\s*(\=\)\@11<=\(\d\+\s*,\s*\)*\d\+\>" 196071d4279SBram Moolenaarendif 197071d4279SBram Moolenaar 1986be7f873SBram Moolenaarsyn keyword fortranTypeR external 1996be7f873SBram Moolenaarsyn keyword fortranIOR format 2006be7f873SBram Moolenaarsyn match fortranKeywordR "\<continue\>" 201e06c188bSBram Moolenaarsyn match fortranKeyword "^\s*\d\+\s\+continue\>" 2026ee8d89cSBram Moolenaarsyn match fortranKeyword "\<go\s*to\>" 2036ee8d89cSBram Moolenaarsyn match fortranKeywordDel "\<go\s*to\ze\s\+.*,\s*(.*$" 2046ee8d89cSBram Moolenaarsyn match fortranKeywordOb "\<go\s*to\ze\s*(\d\+.*$" 2056be7f873SBram Moolenaarsyn region fortranStringR start=+'+ end=+'+ contains=fortranContinueMark,fortranLeftMargin,fortranSerialNumber 2066be7f873SBram Moolenaarsyn keyword fortranIntrinsicR dim lge lgt lle llt mod 2076ee8d89cSBram Moolenaarsyn keyword fortranKeywordDel assign pause 208071d4279SBram Moolenaar 209910f66f9SBram Moolenaarsyn match fortranType "\<type\>" 210910f66f9SBram Moolenaarsyn keyword fortranType none 211071d4279SBram Moolenaar 212071d4279SBram Moolenaarsyn keyword fortranStructure private public intent optional 213071d4279SBram Moolenaarsyn keyword fortranStructure pointer target allocatable 214071d4279SBram Moolenaarsyn keyword fortranStorageClass in out 215071d4279SBram Moolenaarsyn match fortranStorageClass "\<kind\s*="me=s+4 216071d4279SBram Moolenaarsyn match fortranStorageClass "\<len\s*="me=s+3 217071d4279SBram Moolenaar 218071d4279SBram Moolenaarsyn match fortranUnitHeader "\<module\>" 219e4a3bcf2SBram Moolenaarsyn match fortranUnitHeader "\<submodule\>" 220071d4279SBram Moolenaarsyn keyword fortranUnitHeader use only contains 221071d4279SBram Moolenaarsyn keyword fortranUnitHeader result operator assignment 222071d4279SBram Moolenaarsyn match fortranUnitHeader "\<interface\>" 223910f66f9SBram Moolenaarsyn keyword fortranKeyword allocate deallocate nullify cycle exit 224071d4279SBram Moolenaarsyn match fortranConditional "\<select\>" 225071d4279SBram Moolenaarsyn keyword fortranConditional case default where elsewhere 226071d4279SBram Moolenaar 227071d4279SBram Moolenaarsyn match fortranOperator "\(\(>\|<\)=\=\|==\|/=\|=\)" 228071d4279SBram Moolenaarsyn match fortranOperator "=>" 229071d4279SBram Moolenaar 230071d4279SBram Moolenaarsyn region fortranString start=+"+ end=+"+ contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber 231071d4279SBram Moolenaarsyn keyword fortranIO pad position action delim readwrite 232071d4279SBram Moolenaarsyn keyword fortranIO eor advance nml 233071d4279SBram Moolenaar 2346be7f873SBram Moolenaarsyn 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 2356be7f873SBram Moolenaarsyn 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 2366be7f873SBram Moolenaarsyn match fortranIntrinsic "\<not\>\(\s*\.\)\@!"me=s+3 2376be7f873SBram Moolenaarsyn match fortranIntrinsic "\<kind\>\s*[(,]"me=s+4 238071d4279SBram Moolenaar 239071d4279SBram Moolenaarsyn match fortranUnitHeader "\<end\s*function" 240071d4279SBram Moolenaarsyn match fortranUnitHeader "\<end\s*interface" 241071d4279SBram Moolenaarsyn match fortranUnitHeader "\<end\s*module" 242e4a3bcf2SBram Moolenaarsyn match fortranUnitHeader "\<end\s*submodule" 243071d4279SBram Moolenaarsyn match fortranUnitHeader "\<end\s*program" 244071d4279SBram Moolenaarsyn match fortranUnitHeader "\<end\s*subroutine" 245e4a3bcf2SBram Moolenaarsyn match fortranUnitHeader "\<end\s*block" 246071d4279SBram Moolenaarsyn match fortranRepeat "\<end\s*do" 247071d4279SBram Moolenaarsyn match fortranConditional "\<end\s*where" 248071d4279SBram Moolenaarsyn match fortranConditional "\<select\s*case" 249071d4279SBram Moolenaarsyn match fortranConditional "\<end\s*select" 250071d4279SBram Moolenaarsyn match fortranType "\<end\s*type" 251071d4279SBram Moolenaarsyn match fortranType "\<in\s*out" 252071d4279SBram Moolenaar 253b6b046b2SBram Moolenaarsyn keyword fortranType procedure 25430b65817SBram Moolenaarsyn match fortranType "\<module\ze\s\+procedure\>" 2556be7f873SBram Moolenaarsyn keyword fortranIOR namelist 2566be7f873SBram Moolenaarsyn keyword fortranConditionalR while 2576be7f873SBram Moolenaarsyn keyword fortranIntrinsicR achar iachar transfer 258071d4279SBram Moolenaar 259071d4279SBram Moolenaarsyn keyword fortranInclude include 2606be7f873SBram Moolenaarsyn keyword fortranStorageClassR sequence 261071d4279SBram Moolenaar 262071d4279SBram Moolenaarsyn match fortranConditional "\<end\s*if" 263071d4279SBram Moolenaarsyn match fortranIO contains=fortranOperator "\<e\(nd\|rr\)\s*=\s*\d\+" 264071d4279SBram Moolenaarsyn match fortranConditional "\<else\s*if" 265071d4279SBram Moolenaar 2666ee8d89cSBram Moolenaarsyn keyword fortranUnitHeaderOb entry 267071d4279SBram Moolenaarsyn match fortranTypeR display "double\s\+precision" 268071d4279SBram Moolenaarsyn match fortranTypeR display "double\s\+complex" 269071d4279SBram Moolenaarsyn match fortranUnitHeaderR display "block\s\+data" 270071d4279SBram Moolenaarsyn keyword fortranStorageClassR common equivalence data 2716be7f873SBram Moolenaarsyn keyword fortranIntrinsicR dble dprod 2726be7f873SBram Moolenaarsyn match fortranOperatorR "\.\s*[gl][et]\s*\." 2736be7f873SBram Moolenaarsyn match fortranOperatorR "\.\s*\(eq\|ne\)\s*\." 274071d4279SBram Moolenaar 275071d4279SBram Moolenaarsyn keyword fortranRepeat forall 276071d4279SBram Moolenaarsyn match fortranRepeat "\<end\s*forall" 2776be7f873SBram Moolenaarsyn keyword fortranIntrinsic null cpu_time 278071d4279SBram Moolenaarsyn match fortranType "\<elemental\>" 279071d4279SBram Moolenaarsyn match fortranType "\<pure\>" 280e4a3bcf2SBram Moolenaarsyn match fortranType "\<impure\>" 2814f4d51a9SBram Moolenaarsyn match fortranType "\<recursive\>" 282071d4279SBram Moolenaarif exists("fortran_more_precise") 283560979edSBram Moolenaar syn match fortranConstructName "\(\<end\s*forall\s\+\)\@15<=\a\w*\>" 284071d4279SBram Moolenaarendif 285071d4279SBram Moolenaar 2866be7f873SBram Moolenaarif b:fortran_dialect == "f08" 287e06c188bSBram Moolenaar " F2003 2886be7f873SBram Moolenaar 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 289e06c188bSBram Moolenaar " ISO_C_binding 2906be7f873SBram Moolenaar 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 2916be7f873SBram Moolenaar 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 2926be7f873SBram Moolenaar syn keyword fortranIntrinsic iso_c_binding c_loc c_funloc c_associated c_f_pointer c_f_procpointer 2936be7f873SBram Moolenaar syn keyword fortranType c_ptr c_funptr 294e06c188bSBram Moolenaar " ISO_Fortran_env 2956be7f873SBram Moolenaar 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 296e06c188bSBram Moolenaar " IEEE_arithmetic 2976be7f873SBram Moolenaar syn keyword fortranIntrinsic ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode 298e06c188bSBram Moolenaar 2996be7f873SBram Moolenaar syn keyword fortranReadWrite flush wait 3006be7f873SBram Moolenaar syn keyword fortranIO decimal round iomsg 301e4a3bcf2SBram Moolenaar syn keyword fortranType asynchronous nopass non_overridable pass protected volatile extends import 3026be7f873SBram Moolenaar syn keyword fortranType non_intrinsic value bind deferred generic final enumerator 303e4a3bcf2SBram Moolenaar syn match fortranType "\<abstract\>" 3046be7f873SBram Moolenaar syn match fortranType "\<class\>" 3056be7f873SBram Moolenaar syn match fortranType "\<associate\>" 3066be7f873SBram Moolenaar syn match fortranType "\<end\s*associate" 3076be7f873SBram Moolenaar syn match fortranType "\<enum\s*,\s*bind\s*(\s*c\s*)" 3086be7f873SBram Moolenaar syn match fortranType "\<end\s*enum" 3096be7f873SBram Moolenaar syn match fortranConditional "\<select\s*type" 3106be7f873SBram Moolenaar syn match fortranConditional "\<type\s*is\>" 3116be7f873SBram Moolenaar syn match fortranConditional "\<class\s*is\>" 3126be7f873SBram Moolenaar syn match fortranUnitHeader "\<abstract\s*interface\>" 3136be7f873SBram Moolenaar syn match fortranOperator "\([\|]\)" 314e06c188bSBram Moolenaar 315e06c188bSBram Moolenaar " F2008 3166be7f873SBram Moolenaar 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 3176be7f873SBram Moolenaar syn keyword fortranIntrinsic atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits 3186be7f873SBram Moolenaar 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 3196be7f873SBram Moolenaar syn keyword fortranIO newunit 3206be7f873SBram Moolenaar syn keyword fortranType contiguous 321e4a3bcf2SBram Moolenaar syn keyword fortranRepeat concurrent 3228a94d873SBram Moolenaar 3238a94d873SBram Moolenaar" CUDA fortran 3248a94d873SBram Moolenaar syn match fortranTypeCUDA "\<attributes\>" 3258a94d873SBram Moolenaar syn keyword fortranTypeCUDA host global device value 3268a94d873SBram Moolenaar syn keyword fortranTypeCUDA shared constant pinned texture 3278a94d873SBram Moolenaar syn keyword fortranTypeCUDA dim1 dim2 dim3 dim4 3288a94d873SBram Moolenaar syn keyword fortranTypeCUDA cudadeviceprop cuda_count_kind cuda_stream_kind 3298a94d873SBram Moolenaar syn keyword fortranTypeCUDA cudaEvent cudaFuncAttributes cudaArrayPtr 3308a94d873SBram Moolenaar syn keyword fortranTypeCUDA cudaSymbol cudaChannelFormatDesc cudaPitchedPtr 3318a94d873SBram Moolenaar syn keyword fortranTypeCUDA cudaExtent cudaMemcpy3DParms 3328a94d873SBram Moolenaar syn keyword fortranTypeCUDA cudaFuncCachePreferNone cudaFuncCachePreferShared 3338a94d873SBram Moolenaar syn keyword fortranTypeCUDA cudaFuncCachePreferL1 cudaLimitStackSize 3348a94d873SBram Moolenaar syn keyword fortranTypeCUDA cudaLimitPrintfSize cudaLimitMallocHeapSize 3358a94d873SBram Moolenaar syn keyword fortranTypeCUDA cudaSharedMemBankSizeDefault cudaSharedMemBankSizeFourByte cudaSharedMemBankSizeEightByte 3368a94d873SBram Moolenaar syn keyword fortranTypeCUDA cudaEventDefault cudaEventBlockingSync cudaEventDisableTiming 3378a94d873SBram Moolenaar syn keyword fortranTypeCUDA cudaMemcpyHostToDevice cudaMemcpyDeviceToHost 3388a94d873SBram Moolenaar syn keyword fortranTypeCUDA cudaMemcpyDeviceToDevice 3398a94d873SBram Moolenaar syn keyword fortranTypeCUDA cudaErrorNotReady cudaSuccess cudaErrorInvalidValue 3408a94d873SBram Moolenaar syn keyword fortranTypeCUDA c_devptr 3418a94d873SBram Moolenaar 3428a94d873SBram Moolenaar syn match fortranStringCUDA "blockidx%[xyz]" 3438a94d873SBram Moolenaar syn match fortranStringCUDA "blockdim%[xyz]" 3448a94d873SBram Moolenaar syn match fortranStringCUDA "griddim%[xyz]" 3458a94d873SBram Moolenaar syn match fortranStringCUDA "threadidx%[xyz]" 3468a94d873SBram Moolenaar 3478a94d873SBram Moolenaar syn keyword fortranIntrinsicCUDA warpsize syncthreads syncthreads_and syncthreads_count syncthreads_or threadfence threadfence_block threadfence_system gpu_time allthreads anythread ballot 3488a94d873SBram Moolenaar syn keyword fortranIntrinsicCUDA atomicadd atomicsub atomicmax atomicmin atomicand atomicor atomicxor atomicexch atomicinc atomicdec atomiccas sizeof __shfl __shfl_up __shfl_down __shfl_xor 3498a94d873SBram Moolenaar syn keyword fortranIntrinsicCUDA cudaChooseDevice cudaDeviceGetCacheConfig cudaDeviceGetLimit cudaDeviceGetSharedMemConfig cudaDeviceReset cudaDeviceSetCacheConfig cudaDeviceSetLimit cudaDeviceSetSharedMemConfig cudaDeviceSynchronize cudaGetDevice cudaGetDeviceCount cudaGetDeviceProperties cudaSetDevice cudaSetDeviceFlags cudaSetValidDevices 3508a94d873SBram Moolenaar syn keyword fortranIntrinsicCUDA cudaThreadExit cudaThreadSynchronize cudaGetLastError cudaGetErrorString cudaPeekAtLastError cudaStreamCreate cudaStreamDestroy cudaStreamQuery cudaStreamSynchronize cudaStreamWaitEvent cudaEventCreate cudaEventCreateWithFlags cudaEventDestroy cudaEventElapsedTime cudaEventQuery cudaEventRecord cudaEventSynchronize 3518a94d873SBram Moolenaar syn keyword fortranIntrinsicCUDA cudaFuncGetAttributes cudaFuncSetCacheConfig cudaFuncSetSharedMemConfig cudaSetDoubleForDevice cudaSetDoubleForHost cudaFree cudaFreeArray cudaFreeHost cudaGetSymbolAddress cudaGetSymbolSize 3528a94d873SBram Moolenaar syn keyword fortranIntrinsicCUDA cudaHostAlloc cudaHostGetDevicePointer cudaHostGetFlags cudaHostRegister cudaHostUnregister cudaMalloc cudaMallocArray cudaMallocHost cudaMallocPitch cudaMalloc3D cudaMalloc3DArray 3538a94d873SBram Moolenaar syn keyword fortranIntrinsicCUDA cudaMemcpy cudaMemcpyArraytoArray cudaMemcpyAsync cudaMemcpyFromArray cudaMemcpyFromSymbol cudaMemcpyFromSymbolAsync cudaMemcpyPeer cudaMemcpyPeerAsync cudaMemcpyToArray cudaMemcpyToSymbol cudaMemcpyToSymbolAsync cudaMemcpy2D cudaMemcpy2DArrayToArray cudaMemcpy2DAsync cudaMemcpy2DFromArray cudaMemcpy2DToArray cudaMemcpy3D cudaMemcpy3DAsync 3548a94d873SBram Moolenaar syn keyword fortranIntrinsicCUDA cudaMemGetInfo cudaMemset cudaMemset2D cudaMemset3D cudaDeviceCanAccessPeer cudaDeviceDisablePeerAccess cudaDeviceEnablePeerAccess cudaPointerGetAttributes cudaDriverGetVersion cudaRuntimeGetVersion 3558a94d873SBram Moolenaar 3568a94d873SBram Moolenaar syn region none matchgroup=fortranType start="<<<" end=">>>" contains=ALLBUT,none 357e06c188bSBram Moolenaarendif 358e06c188bSBram Moolenaar 359071d4279SBram Moolenaarsyn cluster fortranCommentGroup contains=fortranTodo 360071d4279SBram Moolenaar 361071d4279SBram Moolenaarif (b:fortran_fixed_source == 1) 362071d4279SBram Moolenaar if !exists("fortran_have_tabs") 363*130cbfc3SBram Moolenaar " Fixed format requires a textwidth of 72 for code, 364*130cbfc3SBram Moolenaar " but some vendor extensions allow longer lines 365*130cbfc3SBram Moolenaar if exists("fortran_extended_line_length") 366*130cbfc3SBram Moolenaar syn match fortranSerialNumber excludenl "^.\{133,}$"lc=132 367*130cbfc3SBram Moolenaar elseif exists("fortran_cardimage_line_length") 368*130cbfc3SBram Moolenaar syn match fortranSerialNumber excludenl "^.\{81,}$"lc=80 369*130cbfc3SBram Moolenaar else 370071d4279SBram Moolenaar syn match fortranSerialNumber excludenl "^.\{73,}$"lc=72 371*130cbfc3SBram Moolenaar endif 372071d4279SBram Moolenaar "Flag left margin errors 373071d4279SBram Moolenaar syn match fortranLabelError "^.\{-,4}[^0-9 ]" contains=fortranTab 374071d4279SBram Moolenaar syn match fortranLabelError "^.\{4}\d\S" 375071d4279SBram Moolenaar endif 3765c73622aSBram Moolenaar syn match fortranComment excludenl "^[!c*].*$" contains=@fortranCommentGroup,@spell 377071d4279SBram Moolenaar syn match fortranLeftMargin transparent "^ \{5}" 378071d4279SBram Moolenaar syn match fortranContinueMark display "^.\{5}\S"lc=5 379071d4279SBram Moolenaarelse 380071d4279SBram Moolenaar syn match fortranContinueMark display "&" 381071d4279SBram Moolenaarendif 382071d4279SBram Moolenaar 383910f66f9SBram Moolenaarsyn match fortranComment excludenl "!.*$" contains=@fortranCommentGroup,@spell 3843e496b0eSBram Moolenaarsyn match fortranOpenMP excludenl "^\s*!\$\(OMP\)\=&\=\s.*$" 385071d4279SBram Moolenaar 386071d4279SBram Moolenaar"cpp is often used with Fortran 387071d4279SBram Moolenaarsyn match cPreProc "^\s*#\s*\(define\|ifdef\)\>.*" 388071d4279SBram Moolenaarsyn match cPreProc "^\s*#\s*\(elif\|if\)\>.*" 389071d4279SBram Moolenaarsyn match cPreProc "^\s*#\s*\(ifndef\|undef\)\>.*" 390071d4279SBram Moolenaarsyn match cPreCondit "^\s*#\s*\(else\|endif\)\>.*" 3910c0734d5SBram Moolenaarsyn region cIncluded contained start=+"[^("]+ skip=+\\\\\|\\"+ end=+"+ contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber 3920c0734d5SBram Moolenaar"syn region cIncluded contained start=+"[^("]+ skip=+\\\\\|\\"+ end=+"+ 393071d4279SBram Moolenaarsyn match cIncluded contained "<[^>]*>" 394071d4279SBram Moolenaarsyn match cInclude "^\s*#\s*include\>\s*["<]" contains=cIncluded 395071d4279SBram Moolenaar 396071d4279SBram Moolenaar"Synchronising limits assume that comment and continuation lines are not mixed 397910f66f9SBram Moolenaarif exists("fortran_fold") || exists("fortran_more_precise") 398910f66f9SBram Moolenaar syn sync fromstart 399910f66f9SBram Moolenaarelseif (b:fortran_fixed_source == 0) 400e06c188bSBram Moolenaar syn sync linecont "&" minlines=30 401071d4279SBram Moolenaarelse 402e06c188bSBram Moolenaar syn sync minlines=30 403071d4279SBram Moolenaarendif 404071d4279SBram Moolenaar 4056be7f873SBram Moolenaarif exists("fortran_fold") 406071d4279SBram Moolenaar 407071d4279SBram Moolenaar if (b:fortran_fixed_source == 1) 408071d4279SBram Moolenaar 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 409e4a3bcf2SBram Moolenaar 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 410071d4279SBram Moolenaar 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 411e4a3bcf2SBram Moolenaar 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 412e4a3bcf2SBram Moolenaar 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 413e06c188bSBram Moolenaar 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 414c0514bf4SBram Moolenaar syn region fortranAssociate transparent fold keepend start="^\s*\<associate\s\+" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*associate" contains=ALLBUT,fortranProgram,fortranModule,fortranSubroutine,fortranFunction 415e4a3bcf2SBram Moolenaar 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 416e4a3bcf2SBram Moolenaar 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 417071d4279SBram Moolenaar else 418071d4279SBram Moolenaar 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 419e4a3bcf2SBram Moolenaar 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 420071d4279SBram Moolenaar 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 421e4a3bcf2SBram Moolenaar 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 422e4a3bcf2SBram Moolenaar 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 423e06c188bSBram Moolenaar 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 424c0514bf4SBram Moolenaar syn region fortranAssociate transparent fold keepend start="^\s*\<associate\s\+" skip="^\s*[!#].*$" excludenl end="\<end\s*associate" contains=ALLBUT,fortranProgram,fortranModule,fortranSubroutine,fortranFunction 425e4a3bcf2SBram Moolenaar 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 426e4a3bcf2SBram Moolenaar 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 427071d4279SBram Moolenaar endif 428071d4279SBram Moolenaar 429071d4279SBram Moolenaar if exists("fortran_fold_conditionals") 430071d4279SBram Moolenaar if (b:fortran_fixed_source == 1) 431071d4279SBram Moolenaar 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 432071d4279SBram Moolenaar 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 433071d4279SBram Moolenaar 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 434c0514bf4SBram Moolenaar 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 435071d4279SBram Moolenaar else 436071d4279SBram Moolenaar 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 437071d4279SBram Moolenaar 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 438dae8d21dSBram Moolenaar 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 439c0514bf4SBram Moolenaar 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 440071d4279SBram Moolenaar endif 441071d4279SBram Moolenaar endif 442071d4279SBram Moolenaar 443071d4279SBram Moolenaar if exists("fortran_fold_multilinecomments") 444071d4279SBram Moolenaar if (b:fortran_fixed_source == 1) 445071d4279SBram Moolenaar syn match fortranMultiLineComments transparent fold "\(^[!c*].*\(\n\|\%$\)\)\{4,}" contains=ALLBUT,fortranMultiCommentLines 446071d4279SBram Moolenaar else 447071d4279SBram Moolenaar syn match fortranMultiLineComments transparent fold "\(^\s*!.*\(\n\|\%$\)\)\{4,}" contains=ALLBUT,fortranMultiCommentLines 448071d4279SBram Moolenaar endif 449071d4279SBram Moolenaar endif 450071d4279SBram Moolenaarendif 451071d4279SBram Moolenaar 452071d4279SBram Moolenaar" Define the default highlighting. 453071d4279SBram Moolenaar" The default highlighting differs for each dialect. 454071d4279SBram Moolenaar" Transparent groups: 455071d4279SBram Moolenaar" fortranParen, fortranLeftMargin 456071d4279SBram Moolenaar" fortranProgram, fortranModule, fortranSubroutine, fortranFunction, 457071d4279SBram Moolenaar" fortranBlockData 458071d4279SBram Moolenaar" fortran77Loop, fortran90Loop, fortranIfBlock, fortranCase 459071d4279SBram Moolenaar" fortranMultiCommentLines 4606be7f873SBram Moolenaarhi def link fortranKeyword Keyword 4616be7f873SBram Moolenaarhi def link fortranConstructName Identifier 4626be7f873SBram Moolenaarhi def link fortranConditional Conditional 4636be7f873SBram Moolenaarhi def link fortranRepeat Repeat 4646be7f873SBram Moolenaarhi def link fortranTodo Todo 4656be7f873SBram Moolenaarhi def link fortranContinueMark Special 4666be7f873SBram Moolenaarhi def link fortranString String 4676be7f873SBram Moolenaarhi def link fortranNumber Number 4684f4d51a9SBram Moolenaarhi def link fortranBinary Number 4694f4d51a9SBram Moolenaarhi def link fortranOctal Number 4704f4d51a9SBram Moolenaarhi def link fortranHex Number 4716be7f873SBram Moolenaarhi def link fortranOperator Operator 4726be7f873SBram Moolenaarhi def link fortranBoolean Boolean 4736be7f873SBram Moolenaarhi def link fortranLabelError Error 4746be7f873SBram Moolenaarhi def link fortranObsolete Todo 4756be7f873SBram Moolenaarhi def link fortranType Type 4766be7f873SBram Moolenaarhi def link fortranStructure Type 4776be7f873SBram Moolenaarhi def link fortranStorageClass StorageClass 4786be7f873SBram Moolenaarhi def link fortranCall Function 4796be7f873SBram Moolenaarhi def link fortranUnitHeader fortranPreCondit 4806be7f873SBram Moolenaarhi def link fortranReadWrite Keyword 4816be7f873SBram Moolenaarhi def link fortranIO Keyword 4826be7f873SBram Moolenaarhi def link fortranIntrinsic Function 4836be7f873SBram Moolenaarhi def link fortranConstant Constant 4846be7f873SBram Moolenaar 4856be7f873SBram Moolenaar" To stop deleted & obsolescent features being highlighted as Todo items, 4866be7f873SBram Moolenaar" comment out the next 5 lines and uncomment the 5 lines after that 4876be7f873SBram Moolenaarhi def link fortranUnitHeaderOb fortranObsolete 4886be7f873SBram Moolenaarhi def link fortranKeywordOb fortranObsolete 4896be7f873SBram Moolenaarhi def link fortranConditionalOb fortranObsolete 4906be7f873SBram Moolenaarhi def link fortranTypeOb fortranObsolete 4916be7f873SBram Moolenaarhi def link fortranKeywordDel fortranObsolete 4926be7f873SBram Moolenaar"hi def link fortranUnitHeaderOb fortranUnitHeader 4936be7f873SBram Moolenaar"hi def link fortranKeywordOb fortranKeyword 4946be7f873SBram Moolenaar"hi def link fortranConditionalOb fortranConditional 4956be7f873SBram Moolenaar"hi def link fortranTypeOb fortranType 4966be7f873SBram Moolenaar"hi def link fortranKeywordDel fortranKeyword 4976be7f873SBram Moolenaar 4986be7f873SBram Moolenaarif b:fortran_dialect == "F" 4996be7f873SBram Moolenaar hi! def link fortranIntrinsicR fortranObsolete 5006be7f873SBram Moolenaar hi! def link fortranUnitHeaderR fortranObsolete 5016be7f873SBram Moolenaar hi! def link fortranTypeR fortranObsolete 5026be7f873SBram Moolenaar hi! def link fortranStorageClassR fortranObsolete 5036be7f873SBram Moolenaar hi! def link fortranOperatorR fortranObsolete 5046be7f873SBram Moolenaar hi! def link fortranInclude fortranObsolete 5056be7f873SBram Moolenaar hi! def link fortranLabelNumber fortranObsolete 5066be7f873SBram Moolenaar hi! def link fortranTarget fortranObsolete 5076be7f873SBram Moolenaar hi! def link fortranFloatIll fortranObsolete 5086be7f873SBram Moolenaar hi! def link fortranIOR fortranObsolete 5096be7f873SBram Moolenaar hi! def link fortranKeywordR fortranObsolete 5106be7f873SBram Moolenaar hi! def link fortranStringR fortranObsolete 5116be7f873SBram Moolenaar hi! def link fortranConditionalR fortranObsolete 512e06c188bSBram Moolenaarelse 5136be7f873SBram Moolenaar hi! def link fortranIntrinsicR fortranIntrinsic 5146be7f873SBram Moolenaar hi! def link fortranUnitHeaderR fortranPreCondit 5156be7f873SBram Moolenaar hi! def link fortranTypeR fortranType 5166be7f873SBram Moolenaar hi! def link fortranStorageClassR fortranStorageClass 5176be7f873SBram Moolenaar hi! def link fortranOperatorR fortranOperator 5186be7f873SBram Moolenaar hi! def link fortranInclude Include 5196be7f873SBram Moolenaar hi! def link fortranLabelNumber Special 5206be7f873SBram Moolenaar hi! def link fortranTarget Special 5216be7f873SBram Moolenaar hi! def link fortranFloatIll fortranFloat 5226be7f873SBram Moolenaar hi! def link fortranIOR fortranIO 5236be7f873SBram Moolenaar hi! def link fortranKeywordR fortranKeyword 5246be7f873SBram Moolenaar hi! def link fortranStringR fortranString 5256be7f873SBram Moolenaar hi! def link fortranConditionalR fortranConditional 5266ee8d89cSBram Moolenaarendif 5276ee8d89cSBram Moolenaar 5288a94d873SBram Moolenaar" CUDA 5298a94d873SBram Moolenaarhi def link fortranIntrinsicCUDA fortranIntrinsic 5308a94d873SBram Moolenaarhi def link fortranTypeCUDA fortranType 5318a94d873SBram Moolenaarhi def link fortranStringCUDA fortranString 5328a94d873SBram Moolenaar 5336be7f873SBram Moolenaarhi def link fortranFormatSpec Identifier 5346be7f873SBram Moolenaarhi def link fortranFloat Float 5356be7f873SBram Moolenaarhi def link fortranPreCondit PreCondit 5366be7f873SBram Moolenaarhi def link cIncluded fortranString 5376be7f873SBram Moolenaarhi def link cInclude Include 5386be7f873SBram Moolenaarhi def link cPreProc PreProc 5396be7f873SBram Moolenaarhi def link cPreCondit PreCondit 54089bcfda6SBram Moolenaarhi def link fortranOpenMP PreProc 5416be7f873SBram Moolenaarhi def link fortranParenError Error 5426be7f873SBram Moolenaarhi def link fortranComment Comment 5436be7f873SBram Moolenaarhi def link fortranSerialNumber Todo 5446be7f873SBram Moolenaarhi def link fortranTab Error 545071d4279SBram Moolenaar 5466be7f873SBram Moolenaar" Uncomment the next line if you use extra intrinsics provided by vendors 5476be7f873SBram Moolenaar"hi def link fortranExtraIntrinsic Function 548071d4279SBram Moolenaar 549071d4279SBram Moolenaarlet b:current_syntax = "fortran" 550071d4279SBram Moolenaar 551b6b046b2SBram Moolenaarlet &cpo = s:cpo_save 552b6b046b2SBram Moolenaarunlet s:cpo_save 553071d4279SBram Moolenaar" vim: ts=8 tw=132 554