forked from aniani/vim
updated for version 7.0001
This commit is contained in:
526
runtime/syntax/fortran.vim
Normal file
526
runtime/syntax/fortran.vim
Normal file
@@ -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<6E>, 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
|
Reference in New Issue
Block a user