| " 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 |