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