forked from aniani/vim
527 lines
25 KiB
VimL
527 lines
25 KiB
VimL
" 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
|