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