diff options
Diffstat (limited to 'runtime/syntax/fortran.vim')
-rw-r--r-- | runtime/syntax/fortran.vim | 526 |
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 |