mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			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
 |