summaryrefslogtreecommitdiff
path: root/runtime/syntax/fortran.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/syntax/fortran.vim')
-rw-r--r--runtime/syntax/fortran.vim526
1 files changed, 526 insertions, 0 deletions
diff --git a/runtime/syntax/fortran.vim b/runtime/syntax/fortran.vim
new file mode 100644
index 000000000..ae1fa8b19
--- /dev/null
+++ b/runtime/syntax/fortran.vim
@@ -0,0 +1,526 @@
+" Vim syntax file
+" Language: Fortran95 (and Fortran90, Fortran77, F and elf90)
+" Version: 0.86
+" URL: http://www.unb.ca/chem/ajit/syntax/fortran.vim
+" Last Change: 2003 Mar. 12
+" Maintainer: Ajit J. Thakkar (ajit AT unb.ca); <http://www.unb.ca/chem/ajit/>
+" Usage: Do :help fortran-syntax from Vim
+" Credits:
+" Version 0.1 was based on the fortran 77 syntax file by Mario Eusebio and
+" Preben Guldberg. Useful suggestions were made by: Andrej Panjkov,
+" Bram Moolenaar, Thomas Olsen, Michael Sternberg, Christian Reile,
+" Walter Dieudonné, Alexander Wagner, Roman Bertle, Charles Rendleman,
+" and Andrew Griffiths. For instructions on use, do :help fortran from vim
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit if a syntax file is already loaded
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" let b:fortran_dialect = fortran_dialect if set correctly by user
+if exists("fortran_dialect")
+ if fortran_dialect =~ '\<\(f\(9[05]\|77\)\|elf\|F\)\>'
+ let b:fortran_dialect = matchstr(fortran_dialect,'\<\(f\(9[05]\|77\)\|elf\|F\)\>')
+ else
+ echohl WarningMsg | echo "Unknown value of fortran_dialect" | echohl None
+ let b:fortran_dialect = "unknown"
+ endif
+else
+ let b:fortran_dialect = "unknown"
+endif
+
+" fortran_dialect not set or set incorrectly by user,
+if b:fortran_dialect == "unknown"
+ " set b:fortran_dialect from directive in first three lines of file
+ let b:fortran_retype = getline(1)." ".getline(2)." ".getline(3)
+ if b:fortran_retype =~ '\<fortran_dialect\s*=\s*F\>'
+ let b:fortran_dialect = "F"
+ elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*elf\>'
+ let b:fortran_dialect = "elf"
+ elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f90\>'
+ let b:fortran_dialect = "f90"
+ elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f95\>'
+ let b:fortran_dialect = "f95"
+ elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f77\>'
+ let b:fortran_dialect = "f77"
+ else
+ " no directive found, so assume f95
+ let b:fortran_dialect = "f95"
+ endif
+ unlet b:fortran_retype
+endif
+
+" Choose between fixed and free source form if this hasn't been done yet
+if !exists("b:fortran_fixed_source")
+ if b:fortran_dialect == "elf" || b:fortran_dialect == "F"
+ " elf and F require free source form
+ let b:fortran_fixed_source = 0
+ elseif b:fortran_dialect == "f77"
+ " f77 requires fixed source form
+ let b:fortran_fixed_source = 1
+ elseif exists("fortran_free_source")
+ " User guarantees free source form for all f90 and f95 files
+ let b:fortran_fixed_source = 0
+ elseif exists("fortran_fixed_source")
+ " User guarantees fixed source form for all f90 and f95 files
+ let b:fortran_fixed_source = 1
+ else
+ " f90 and f95 allow both fixed and free source form.
+ " Assume fixed source form unless signs of free source form
+ " are detected in the first five columns of the first b:lmax lines.
+ " Detection becomes more accurate and time-consuming if more lines
+ " are checked. Increase the limit below if you keep lots of comments at
+ " the very top of each file and you have a fast computer.
+ let b:lmax = 25
+ if ( b:lmax > line("$") )
+ let b:lmax = line("$")
+ endif
+ let b:fortran_fixed_source = 1
+ let b:ln=1
+ while b:ln <= b:lmax
+ let b:test = strpart(getline(b:ln),0,5)
+ if b:test[0] !~ '[Cc*!#]' && b:test !~ '^ \+[!#]' && b:test =~ '[^ 0-9\t]'
+ let b:fortran_fixed_source = 0
+ break
+ endif
+ let b:ln = b:ln + 1
+ endwhile
+ unlet b:lmax b:ln b:test
+ endif
+endif
+
+syn case ignore
+
+if b:fortran_dialect == "f77"
+ syn match fortranIdentifier "\<\a\(\a\|\d\)*\>" contains=fortranSerialNumber
+else
+ syn match fortran90Identifier "\<\a\w*\>" contains=fortranSerialNumber
+ if version >= 600
+ if b:fortran_fixed_source == 1
+ syn match fortranConstructName "^\s\{6,}\zs\a\w*\ze\s*:"
+ else
+ syn match fortranConstructName "^\s*\zs\a\w*\ze\s*:"
+ endif
+ if exists("fortran_more_precise")
+ syn match fortranConstructName "\(\<end\s*do\s\+\)\@<=\a\w*"
+ syn match fortranConstructName "\(\<end\s*if\s\+\)\@<=\a\w*"
+ syn match fortranConstructName "\(\<end\s*select\s\+\)\@<=\a\w*"
+ endif
+ else
+ if b:fortran_fixed_source == 1
+ syn match fortranConstructName "^\s\{6,}\a\w*\s*:"
+ else
+ syn match fortranConstructName "^\s*\a\w*\s*:"
+ endif
+ endif
+endif
+
+syn match fortranUnitHeader "\<end\>"
+
+syn keyword fortranType character complex integer
+syn keyword fortranType intrinsic
+syn match fortranType "\<implicit\>"
+syn keyword fortranStructure dimension
+syn keyword fortranStorageClass parameter save
+syn match fortranUnitHeader "\<subroutine\>"
+syn keyword fortranCall call
+syn match fortranUnitHeader "\<function\>"
+syn match fortranUnitHeader "\<program\>"
+syn keyword fortranStatement return stop
+syn keyword fortranConditional else then
+syn match fortranConditional "\<if\>"
+syn match fortranRepeat "\<do\>"
+
+syn keyword fortranTodo contained todo fixme
+
+"Catch errors caused by too many right parentheses
+syn region fortranParen transparent start="(" end=")" contains=ALLBUT,fortranParenError,@fortranCommentGroup,cIncluded
+syn match fortranParenError ")"
+
+syn match fortranOperator "\.\s*n\=eqv\s*\."
+syn match fortranOperator "\.\s*\(and\|or\|not\)\s*\."
+syn match fortranOperator "\(+\|-\|/\|\*\)"
+
+syn match fortranBoolean "\.\s*\(true\|false\)\s*\."
+
+syn keyword fortranReadWrite backspace close inquire open rewind endfile
+syn keyword fortranReadWrite read write print
+
+"If tabs are allowed then the left margin checks do not work
+if exists("fortran_have_tabs")
+ syn match fortranTab "\t" transparent
+else
+ syn match fortranTab "\t"
+endif
+
+syn keyword fortranIO unit file iostat access blank fmt form
+syn keyword fortranIO recl status exist opened number named name
+syn keyword fortranIO sequential direct rec
+syn keyword fortranIO formatted unformatted nextrec
+
+syn keyword fortran66Intrinsic cabs ccos cexp clog csin csqrt
+syn keyword fortran66Intrinsic dacos dasin datan datan2 dcos dcosh
+syn keyword fortran66Intrinsic ddim dexp dint dlog dlog10 dmod dabs
+syn keyword fortran66Intrinsic dnint dsign dsin dsinh dsqrt dtan
+syn keyword fortran66Intrinsic dtanh iabs idim idnint isign idint ifix
+syn keyword fortran66Intrinsic amax0 amax1 dmax1 max0 max1
+syn keyword fortran66Intrinsic amin0 amin1 dmin1 min0 min1
+syn keyword fortran66Intrinsic amod float sngl alog alog10
+
+" Intrinsics provided by some vendors
+syn keyword fortranExtraIntrinsic cdabs cdcos cdexp cdlog cdsin cdsqrt
+syn keyword fortranExtraIntrinsic cqabs cqcos cqexp cqlog cqsin cqsqrt
+syn keyword fortranExtraIntrinsic qacos qasin qatan qatan2 qcos qcosh
+syn keyword fortranExtraIntrinsic qdim qexp iqint qlog qlog10 qmod qabs
+syn keyword fortranExtraIntrinsic qnint qsign qsin qsinh qsqrt qtan
+syn keyword fortranExtraIntrinsic qtanh qmax1 qmin1
+syn keyword fortranExtraIntrinsic dimag qimag dcmplx qcmplx dconjg qconjg
+syn keyword fortranExtraIntrinsic gamma dgamma qgamma algama dlgama qlgama
+syn keyword fortranExtraIntrinsic erf derf qerf erfc derfc qerfc
+syn keyword fortranExtraIntrinsic dfloat
+
+syn keyword fortran77Intrinsic abs acos aimag aint anint asin atan atan2
+syn keyword fortran77Intrinsic cos sin tan sinh cosh tanh exp log log10
+syn keyword fortran77Intrinsic sign sqrt int cmplx nint min max conjg
+syn keyword fortran77Intrinsic char ichar index
+syn match fortran77Intrinsic "\<len\s*[(,]"me=s+3
+syn match fortran77Intrinsic "\<real\s*("me=s+4
+syn match fortranType "\<implicit\s\+real"
+syn match fortranType "^\s*real\>"
+syn match fortran90Intrinsic "\<logical\s*("me=s+7
+syn match fortranType "\<implicit\s\+logical"
+syn match fortranType "^\s*logical\>"
+
+"Numbers of various sorts
+" Integers
+syn match fortranNumber display "\<\d\+\(_\a\w*\)\=\>"
+" floating point number, without a decimal point
+syn match fortranFloatNoDec display "\<\d\+[deq][-+]\=\d\+\(_\a\w*\)\=\>"
+" floating point number, starting with a decimal point
+syn match fortranFloatIniDec display "\.\d\+\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
+" floating point number, no digits after decimal
+syn match fortranFloatEndDec display "\<\d\+\.\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
+" floating point number, D or Q exponents
+syn match fortranFloatDExp display "\<\d\+\.\d\+\([dq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
+" floating point number
+syn match fortranFloat display "\<\d\+\.\d\+\(e[-+]\=\d\+\)\=\(_\a\w*\)\=\>"
+" Numbers in formats
+syn match fortranFormatSpec display "\d*f\d\+\.\d\+"
+syn match fortranFormatSpec display "\d*e[sn]\=\d\+\.\d\+\(e\d+\>\)\="
+syn match fortranFormatSpec display "\d*\(d\|q\|g\)\d\+\.\d\+\(e\d+\)\="
+syn match fortranFormatSpec display "\d\+x\>"
+" The next match cannot be used because it would pick up identifiers as well
+" syn match fortranFormatSpec display "\<\(a\|i\)\d\+"
+
+" Numbers as labels
+syn match fortranLabelNumber display "^\d\{1,5}\s"me=e-1
+syn match fortranLabelNumber display "^ \d\{1,4}\s"ms=s+1,me=e-1
+syn match fortranLabelNumber display "^ \d\{1,3}\s"ms=s+2,me=e-1
+syn match fortranLabelNumber display "^ \d\d\=\s"ms=s+3,me=e-1
+syn match fortranLabelNumber display "^ \d\s"ms=s+4,me=e-1
+
+if version >= 600 && exists("fortran_more_precise")
+ " Numbers as targets
+ syn match fortranTarget display "\(\<if\s*(.\+)\s*\)\@<=\(\d\+\s*,\s*\)\{2}\d\+\>"
+ syn match fortranTarget display "\(\<do\s\+\)\@<=\d\+\>"
+ syn match fortranTarget display "\(\<go\s*to\s*(\=\)\@<=\(\d\+\s*,\s*\)*\d\+\>"
+endif
+
+syn keyword fortranTypeEx external
+syn keyword fortranIOEx format
+syn keyword fortranStatementEx continue
+syn match fortranStatementEx "\<go\s*to\>"
+syn region fortranStringEx start=+'+ end=+'+ contains=fortranContinueMark,fortranLeftMargin,fortranSerialNumber
+syn keyword fortran77IntrinsicEx dim lge lgt lle llt mod
+syn keyword fortranStatementOb assign pause to
+
+if b:fortran_dialect != "f77"
+
+ syn keyword fortranType type none
+
+ syn keyword fortranStructure private public intent optional
+ syn keyword fortranStructure pointer target allocatable
+ syn keyword fortranStorageClass in out
+ syn match fortranStorageClass "\<kind\s*="me=s+4
+ syn match fortranStorageClass "\<len\s*="me=s+3
+
+ syn match fortranUnitHeader "\<module\>"
+ syn keyword fortranUnitHeader use only contains
+ syn keyword fortranUnitHeader result operator assignment
+ syn match fortranUnitHeader "\<interface\>"
+ syn match fortranUnitHeader "\<recursive\>"
+ syn keyword fortranStatement allocate deallocate nullify cycle exit
+ syn match fortranConditional "\<select\>"
+ syn keyword fortranConditional case default where elsewhere
+
+ syn match fortranOperator "\(\(>\|<\)=\=\|==\|/=\|=\)"
+ syn match fortranOperator "=>"
+
+ syn region fortranString start=+"+ end=+"+ contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
+ syn keyword fortranIO pad position action delim readwrite
+ syn keyword fortranIO eor advance nml
+
+ syn keyword fortran90Intrinsic adjustl adjustr all allocated any
+ syn keyword fortran90Intrinsic associated bit_size btest ceiling
+ syn keyword fortran90Intrinsic count cshift date_and_time
+ syn keyword fortran90Intrinsic digits dot_product eoshift epsilon exponent
+ syn keyword fortran90Intrinsic floor fraction huge iand ibclr ibits ibset ieor
+ syn keyword fortran90Intrinsic ior ishft ishftc lbound len_trim
+ syn keyword fortran90Intrinsic matmul maxexponent maxloc maxval merge
+ syn keyword fortran90Intrinsic minexponent minloc minval modulo mvbits nearest
+ syn keyword fortran90Intrinsic pack present product radix random_number
+ syn match fortran90Intrinsic "\<not\>\(\s*\.\)\@!"me=s+3
+ syn keyword fortran90Intrinsic random_seed range repeat reshape rrspacing scale
+ syn keyword fortran90Intrinsic selected_int_kind selected_real_kind scan
+ syn keyword fortran90Intrinsic shape size spacing spread set_exponent
+ syn keyword fortran90Intrinsic tiny transpose trim ubound unpack verify
+ syn keyword fortran90Intrinsic precision sum system_clock
+ syn match fortran90Intrinsic "\<kind\>\s*[(,]"me=s+4
+
+ syn match fortranUnitHeader "\<end\s*function"
+ syn match fortranUnitHeader "\<end\s*interface"
+ syn match fortranUnitHeader "\<end\s*module"
+ syn match fortranUnitHeader "\<end\s*program"
+ syn match fortranUnitHeader "\<end\s*subroutine"
+ syn match fortranRepeat "\<end\s*do"
+ syn match fortranConditional "\<end\s*where"
+ syn match fortranConditional "\<select\s*case"
+ syn match fortranConditional "\<end\s*select"
+ syn match fortranType "\<end\s*type"
+ syn match fortranType "\<in\s*out"
+
+ syn keyword fortranUnitHeaderEx procedure
+ syn keyword fortranIOEx namelist
+ syn keyword fortranConditionalEx while
+ syn keyword fortran90IntrinsicEx achar iachar transfer
+
+ syn keyword fortranInclude include
+ syn keyword fortran90StorageClassR sequence
+endif
+
+syn match fortranConditional "\<end\s*if"
+syn match fortranIO contains=fortranOperator "\<e\(nd\|rr\)\s*=\s*\d\+"
+syn match fortranConditional "\<else\s*if"
+
+syn keyword fortranUnitHeaderR entry
+syn match fortranTypeR display "double\s\+precision"
+syn match fortranTypeR display "double\s\+complex"
+syn match fortranUnitHeaderR display "block\s\+data"
+syn keyword fortranStorageClassR common equivalence data
+syn keyword fortran77IntrinsicR dble dprod
+syn match fortran77OperatorR "\.\s*[gl][et]\s*\."
+syn match fortran77OperatorR "\.\s*\(eq\|ne\)\s*\."
+
+if b:fortran_dialect == "f95"
+ syn keyword fortranRepeat forall
+ syn match fortranRepeat "\<end\s*forall"
+ syn keyword fortran95Intrinsic null cpu_time
+ syn match fortranType "\<elemental\>"
+ syn match fortranType "\<pure\>"
+ if exists("fortran_more_precise")
+ syn match fortranConstructName "\(\<end\s*forall\s\+\)\@<=\a\w*\>"
+ endif
+endif
+
+syn cluster fortranCommentGroup contains=fortranTodo
+
+if (b:fortran_fixed_source == 1)
+ if !exists("fortran_have_tabs")
+ "Flag items beyond column 72
+ syn match fortranSerialNumber excludenl "^.\{73,}$"lc=72
+ "Flag left margin errors
+ syn match fortranLabelError "^.\{-,4}[^0-9 ]" contains=fortranTab
+ syn match fortranLabelError "^.\{4}\d\S"
+ endif
+ syn match fortranComment excludenl "^[!c*].*$" contains=@fortranCommentGroup
+ syn match fortranLeftMargin transparent "^ \{5}"
+ syn match fortranContinueMark display "^.\{5}\S"lc=5
+else
+ syn match fortranContinueMark display "&"
+endif
+
+if b:fortran_dialect != "f77"
+ syn match fortranComment excludenl "!.*$" contains=@fortranCommentGroup
+endif
+
+"cpp is often used with Fortran
+syn match cPreProc "^\s*#\s*\(define\|ifdef\)\>.*"
+syn match cPreProc "^\s*#\s*\(elif\|if\)\>.*"
+syn match cPreProc "^\s*#\s*\(ifndef\|undef\)\>.*"
+syn match cPreCondit "^\s*#\s*\(else\|endif\)\>.*"
+syn region cIncluded contained start=+"[^(]+ skip=+\\\\\|\\"+ end=+"+ contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
+syn match cIncluded contained "<[^>]*>"
+syn match cInclude "^\s*#\s*include\>\s*["<]" contains=cIncluded
+
+"Synchronising limits assume that comment and continuation lines are not mixed
+if (b:fortran_fixed_source == 0)
+ syn sync linecont "&" maxlines=40
+else
+ syn sync minlines=20
+endif
+
+if version >= 600 && exists("fortran_fold")
+
+ syn sync fromstart
+ if (b:fortran_fixed_source == 1)
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
+ else
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
+ endif
+
+ if exists("fortran_fold_conditionals")
+ if (b:fortran_fixed_source == 1)
+ 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
+ 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
+ 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
+ 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
+ else
+ 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
+ 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
+ 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
+ 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
+ endif
+ endif
+
+ if exists("fortran_fold_multilinecomments")
+ if (b:fortran_fixed_source == 1)
+ syn match fortranMultiLineComments transparent fold "\(^[!c*].*\(\n\|\%$\)\)\{4,}" contains=ALLBUT,fortranMultiCommentLines
+ else
+ syn match fortranMultiLineComments transparent fold "\(^\s*!.*\(\n\|\%$\)\)\{4,}" contains=ALLBUT,fortranMultiCommentLines
+ endif
+ endif
+endif
+
+" Define the default highlighting.
+" For version 5.7 and earlier: only when not done already
+" For version 5.8 and later: only when an item doesn't have highlighting yet
+if version >= 508 || !exists("did_fortran_syn_inits")
+ if version < 508
+ let did_fortran_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ " The default highlighting differs for each dialect.
+ " Transparent groups:
+ " fortranParen, fortranLeftMargin
+ " fortranProgram, fortranModule, fortranSubroutine, fortranFunction,
+ " fortranBlockData
+ " fortran77Loop, fortran90Loop, fortranIfBlock, fortranCase
+ " fortranMultiCommentLines
+ HiLink fortranStatement Statement
+ HiLink fortranConstructName Special
+ HiLink fortranConditional Conditional
+ HiLink fortranRepeat Repeat
+ HiLink fortranTodo Todo
+ HiLink fortranContinueMark Todo
+ HiLink fortranString String
+ HiLink fortranNumber Number
+ HiLink fortranOperator Operator
+ HiLink fortranBoolean Boolean
+ HiLink fortranLabelError Error
+ HiLink fortranObsolete Todo
+ HiLink fortranType Type
+ HiLink fortranStructure Type
+ HiLink fortranStorageClass StorageClass
+ HiLink fortranCall fortranUnitHeader
+ HiLink fortranUnitHeader fortranPreCondit
+ HiLink fortranReadWrite fortran90Intrinsic
+ HiLink fortranIO fortran90Intrinsic
+ HiLink fortran95Intrinsic fortran90Intrinsic
+ HiLink fortran77Intrinsic fortran90Intrinsic
+ HiLink fortran90Intrinsic Special
+
+ if ( b:fortran_dialect == "elf" || b:fortran_dialect == "F" )
+ HiLink fortranStatementOb fortranObsolete
+ HiLink fortran66Intrinsic fortranObsolete
+ HiLink fortran77IntrinsicR fortranObsolete
+ HiLink fortranUnitHeaderR fortranObsolete
+ HiLink fortranTypeR fortranObsolete
+ HiLink fortranStorageClassR fortranObsolete
+ HiLink fortran90StorageClassR fortranObsolete
+ HiLink fortran77OperatorR fortranObsolete
+ HiLink fortranInclude fortranObsolete
+ else
+ HiLink fortranStatementOb Statement
+ HiLink fortran66Intrinsic fortran90Intrinsic
+ HiLink fortran77IntrinsicR fortran90Intrinsic
+ HiLink fortranUnitHeaderR fortranPreCondit
+ HiLink fortranTypeR fortranType
+ HiLink fortranStorageClassR fortranStorageClass
+ HiLink fortran77OperatorR fortranOperator
+ HiLink fortranInclude Include
+ HiLink fortran90StorageClassR fortranStorageClass
+ endif
+
+ if ( b:fortran_dialect == "F" )
+ HiLink fortranLabelNumber fortranObsolete
+ HiLink fortranTarget fortranObsolete
+ HiLink fortranFormatSpec fortranObsolete
+ HiLink fortranFloatDExp fortranObsolete
+ HiLink fortranFloatNoDec fortranObsolete
+ HiLink fortranFloatIniDec fortranObsolete
+ HiLink fortranFloatEndDec fortranObsolete
+ HiLink fortranTypeEx fortranObsolete
+ HiLink fortranIOEx fortranObsolete
+ HiLink fortranStatementEx fortranObsolete
+ HiLink fortranStringEx fortranObsolete
+ HiLink fortran77IntrinsicEx fortranObsolete
+ HiLink fortranUnitHeaderEx fortranObsolete
+ HiLink fortranConditionalEx fortranObsolete
+ HiLink fortran90IntrinsicEx fortranObsolete
+ else
+ HiLink fortranLabelNumber Special
+ HiLink fortranTarget Special
+ HiLink fortranFormatSpec Identifier
+ HiLink fortranFloatDExp fortranFloat
+ HiLink fortranFloatNoDec fortranFloat
+ HiLink fortranFloatIniDec fortranFloat
+ HiLink fortranFloatEndDec fortranFloat
+ HiLink fortranTypeEx fortranType
+ HiLink fortranIOEx fortranIO
+ HiLink fortranStatementEx fortranStatement
+ HiLink fortranStringEx fortranString
+ HiLink fortran77IntrinsicEx fortran90Intrinsic
+ HiLink fortranUnitHeaderEx fortranUnitHeader
+ HiLink fortranConditionalEx fortranConditional
+ HiLink fortran90IntrinsicEx fortran90Intrinsic
+ endif
+
+ HiLink fortranFloat Float
+ HiLink fortran90Identifier fortranIdentifier
+ "Uncomment the next line if you want all fortran variables to be highlighted
+ "HiLink fortranIdentifier Identifier
+ HiLink fortranPreCondit PreCondit
+ HiLink fortranInclude Include
+ HiLink cIncluded fortranString
+ HiLink cInclude Include
+ HiLink cPreProc PreProc
+ HiLink cPreCondit PreCondit
+ HiLink fortranParenError Error
+ HiLink fortranComment Comment
+ HiLink fortranSerialNumber Todo
+ HiLink fortranTab Error
+ " Vendor extensions
+ HiLink fortranExtraIntrinsic Special
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "fortran"
+
+" vim: ts=8 tw=132