fortran.vim 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554
  1. " Vim syntax file
  2. " Language: Fortran 2008 (and older: Fortran 2003, 95, 90, and 77)
  3. " Version: (v104) 2021 April 06
  4. " Maintainer: Ajit J. Thakkar <ajit@unb.ca>; <http://www2.unb.ca/~ajit/>
  5. " Usage: For instructions, do :help fortran-syntax from Vim
  6. " Credits:
  7. " Version 0.1 for Fortran 95 was created in April 2000 by Ajit Thakkar from an
  8. " older Fortran 77 syntax file by Mario Eusebio and Preben Guldberg.
  9. " Since then, useful suggestions and contributions have been made, in order, by:
  10. " Andrej Panjkov, Bram Moolenaar, Thomas Olsen, Michael Sternberg, Christian Reile,
  11. " Walter Dieudonne, Alexander Wagner, Roman Bertle, Charles Rendleman,
  12. " Andrew Griffiths, Joe Krahn, Hendrik Merx, Matt Thompson, Jan Hermann,
  13. " Stefano Zaghi, Vishnu V. Krishnan, Judicael Grasset, Takuma Yoshida,
  14. " Eisuke Kawashima, Andre Chalella, and Fritz Reese.
  15. if exists("b:current_syntax")
  16. finish
  17. endif
  18. let s:cpo_save = &cpo
  19. set cpo&vim
  20. " Choose fortran_dialect using the priority:
  21. " source file directive > buffer-local value > global value > file extension
  22. " first try using directive in first three lines of file
  23. let b:fortran_retype = getline(1)." ".getline(2)." ".getline(3)
  24. if b:fortran_retype =~? '\<fortran_dialect\s*=\s*F\>'
  25. let b:fortran_dialect = "F"
  26. elseif b:fortran_retype =~? '\<fortran_dialect\s*=\s*f08\>'
  27. let b:fortran_dialect = "f08"
  28. elseif !exists("b:fortran_dialect")
  29. if exists("g:fortran_dialect") && g:fortran_dialect =~# '\<F\|f08\>'
  30. " try global variable
  31. let b:fortran_dialect = g:fortran_dialect
  32. else " nothing found, so use default
  33. let b:fortran_dialect = "f08"
  34. endif
  35. endif
  36. unlet! b:fortran_retype
  37. " make sure buffer-local value is not invalid
  38. if b:fortran_dialect !~# '\<F\|f08\>'
  39. let b:fortran_dialect = "f08"
  40. endif
  41. " Choose between fixed and free source form if this hasn't been done yet
  42. if !exists("b:fortran_fixed_source")
  43. if b:fortran_dialect == "F"
  44. " F requires free source form
  45. let b:fortran_fixed_source = 0
  46. elseif exists("fortran_free_source")
  47. " User guarantees free source form for all fortran files
  48. let b:fortran_fixed_source = 0
  49. elseif exists("fortran_fixed_source")
  50. " User guarantees fixed source form for all fortran files
  51. let b:fortran_fixed_source = 1
  52. elseif expand("%:e") =~? '^f\%(90\|95\|03\|08\)$'
  53. " Free-form file extension defaults as in Intel ifort, gcc(gfortran), NAG, Pathscale, and Cray compilers
  54. let b:fortran_fixed_source = 0
  55. elseif expand("%:e") =~? '^\%(f\|f77\|for\)$'
  56. " Fixed-form file extension defaults
  57. let b:fortran_fixed_source = 1
  58. else
  59. " Modern fortran still allows both free and fixed source form.
  60. " Assume fixed source form unless signs of free source form
  61. " are detected in the first five columns of the first s:lmax lines.
  62. " Detection becomes more accurate and time-consuming if more lines
  63. " are checked. Increase the limit below if you keep lots of comments at
  64. " the very top of each file and you have a fast computer.
  65. let s:lmax = 500
  66. if ( s:lmax > line("$") )
  67. let s:lmax = line("$")
  68. endif
  69. let b:fortran_fixed_source = 1
  70. let s:ln=1
  71. while s:ln <= s:lmax
  72. let s:test = strpart(getline(s:ln),0,5)
  73. if s:test !~ '^[Cc*]' && s:test !~ '^ *[!#]' && s:test =~ '[^ 0-9\t]' && s:test !~ '^[ 0-9]*\t'
  74. let b:fortran_fixed_source = 0
  75. break
  76. endif
  77. let s:ln = s:ln + 1
  78. endwhile
  79. unlet! s:lmax s:ln s:test
  80. endif
  81. endif
  82. syn case ignore
  83. if b:fortran_fixed_source == 1
  84. syn match fortranConstructName "^\s\{6,}\zs\a\w*\ze\s*:"
  85. else
  86. syn match fortranConstructName "^\s*\zs\a\w*\ze\s*:"
  87. endif
  88. if exists("fortran_more_precise")
  89. syn match fortranConstructName "\(\<end\s*do\s\+\)\@11<=\a\w*"
  90. syn match fortranConstructName "\(\<end\s*if\s\+\)\@11<=\a\w*"
  91. syn match fortranConstructName "\(\<end\s*select\s\+\)\@15<=\a\w*"
  92. endif
  93. syn match fortranUnitHeader "\<end\>"
  94. syn match fortranType "\<character\>"
  95. syn match fortranType "\<complex\>"
  96. syn match fortranType "\<integer\>"
  97. syn match fortranType "\<real\>"
  98. syn match fortranType "\<logical\>"
  99. syn keyword fortranType intrinsic
  100. syn match fortranType "\<implicit\>"
  101. syn keyword fortranStructure dimension
  102. syn keyword fortranStorageClass parameter save
  103. syn match fortranUnitHeader "\<subroutine\>"
  104. syn keyword fortranCall call
  105. syn match fortranUnitHeader "\<function\>"
  106. syn match fortranUnitHeader "\<program\>"
  107. syn match fortranUnitHeader "\<block\>"
  108. syn keyword fortranKeyword return stop
  109. syn keyword fortranConditional else then
  110. syn match fortranConditional "\<if\>"
  111. syn match fortranConditionalOb "\<if\s*(.*)\s*\d\+\s*,\s*\d\+\s*,\s*\d\+\s*$"
  112. syn match fortranRepeat "\<do\>"
  113. syn keyword fortranTodo contained todo fixme
  114. "Catch errors caused by too many right parentheses
  115. syn region fortranParen transparent start="(" end=")" contains=ALLBUT,fortranParenError,@fortranCommentGroup,cIncluded,@spell
  116. syn match fortranParenError ")"
  117. syn match fortranOperator "\.\s*n\=eqv\s*\."
  118. syn match fortranOperator "\.\s*\(and\|or\|not\)\s*\."
  119. syn match fortranOperator "\(+\|-\|/\|\*\)"
  120. syn match fortranTypeOb "\<character\s*\*"
  121. syn match fortranBoolean "\.\s*\(true\|false\)\s*\."
  122. syn keyword fortranReadWrite backspace close endfile inquire open print read rewind write
  123. "If tabs are allowed then the left margin checks do not work
  124. if exists("fortran_have_tabs")
  125. syn match fortranTab "\t" transparent
  126. else
  127. syn match fortranTab "\t"
  128. endif
  129. syn keyword fortranIO access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit
  130. syn keyword fortranIntrinsicR alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl
  131. " Intrinsics provided by some vendors
  132. syn keyword fortranExtraIntrinsic algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh
  133. syn keyword fortranIntrinsic abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh
  134. syn match fortranIntrinsic "\<len\s*[(,]"me=s+3
  135. syn match fortranIntrinsic "\<real\s*("me=s+4
  136. syn match fortranIntrinsic "\<logical\s*("me=s+7
  137. syn match fortranType "\<implicit\s\+real\>"
  138. syn match fortranType "\<implicit\s\+logical\>"
  139. "Numbers of various sorts
  140. " Integers
  141. syn match fortranNumber display "\<\d\+\(_\a\w*\)\=\>"
  142. " floating point number, without a decimal point
  143. syn match fortranFloatIll display "\<\d\+[deq][-+]\=\d\+\(_\a\w*\)\=\>"
  144. " floating point number, starting with a decimal point
  145. syn match fortranFloatIll display "\.\d\+\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
  146. " floating point number, no digits after decimal
  147. syn match fortranFloatIll display "\<\d\+\.\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
  148. " floating point number, D or Q exponents
  149. syn match fortranFloatIll display "\<\d\+\.\d\+\([dq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
  150. " floating point number
  151. syn match fortranFloat display "\<\d\+\.\d\+\(e[-+]\=\d\+\)\=\(_\a\w*\)\=\>"
  152. " binary number
  153. syn match fortranBinary display "b["'][01]\+["']"
  154. " octal number
  155. syn match fortranOctal display "o["'][0-7]\+["']"
  156. " hexadecimal number
  157. syn match fortranHex display "z["'][0-9A-F]\+["']"
  158. " Numbers in formats
  159. syn match fortranFormatSpec display "\d*f\d\+\.\d\+"
  160. syn match fortranFormatSpec display "\d*e[sn]\=\d\+\.\d\+\(e\d+\>\)\="
  161. syn match fortranFormatSpec display "\d*\(d\|q\|g\)\d\+\.\d\+\(e\d+\)\="
  162. syn match fortranFormatSpec display "\d\+x\>"
  163. " The next match cannot be used because it would pick up identifiers as well
  164. " syn match fortranFormatSpec display "\<\(a\|i\)\d\+"
  165. " Numbers as labels
  166. syn match fortranLabelNumber display "^\d\{1,5}\s"me=e-1
  167. syn match fortranLabelNumber display "^ \d\{1,4}\s"ms=s+1,me=e-1
  168. syn match fortranLabelNumber display "^ \d\{1,3}\s"ms=s+2,me=e-1
  169. syn match fortranLabelNumber display "^ \d\d\=\s"ms=s+3,me=e-1
  170. syn match fortranLabelNumber display "^ \d\s"ms=s+4,me=e-1
  171. if exists("fortran_more_precise")
  172. " Numbers as targets
  173. syn match fortranTarget display "\(\<if\s*(.\+)\s*\)\@<=\(\d\+\s*,\s*\)\{2}\d\+\>"
  174. syn match fortranTarget display "\(\<do\s\+\)\@11<=\d\+\>"
  175. syn match fortranTarget display "\(\<go\s*to\s*(\=\)\@11<=\(\d\+\s*,\s*\)*\d\+\>"
  176. endif
  177. syn keyword fortranTypeR external
  178. syn keyword fortranIOR format
  179. syn match fortranKeywordR "\<continue\>"
  180. syn match fortranKeyword "^\s*\d\+\s\+continue\>"
  181. syn match fortranKeyword "\<go\s*to\>"
  182. syn match fortranKeywordDel "\<go\s*to\ze\s\+.*,\s*(.*$"
  183. syn match fortranKeywordOb "\<go\s*to\ze\s*(\d\+.*$"
  184. syn region fortranStringR start=+'+ end=+'+ contains=fortranContinueMark,fortranLeftMargin,fortranSerialNumber
  185. syn keyword fortranIntrinsicR dim lge lgt lle llt mod
  186. syn keyword fortranKeywordDel assign pause
  187. syn match fortranType "\<type\>"
  188. syn keyword fortranType none
  189. syn keyword fortranStructure private public intent optional
  190. syn keyword fortranStructure pointer target allocatable
  191. syn keyword fortranStorageClass in out
  192. syn match fortranStorageClass "\<kind\s*="me=s+4
  193. syn match fortranStorageClass "\<len\s*="me=s+3
  194. syn match fortranUnitHeader "\<module\>"
  195. syn match fortranUnitHeader "\<submodule\>"
  196. syn keyword fortranUnitHeader use only contains
  197. syn keyword fortranUnitHeader result operator assignment
  198. syn match fortranUnitHeader "\<interface\>"
  199. syn keyword fortranKeyword allocate deallocate nullify cycle exit
  200. syn match fortranConditional "\<select\>"
  201. syn keyword fortranConditional case default where elsewhere
  202. syn match fortranOperator "\(\(>\|<\)=\=\|==\|/=\|=\)"
  203. syn match fortranOperator "=>"
  204. syn region fortranString start=+"+ end=+"+ contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
  205. syn keyword fortranIO pad position action delim readwrite
  206. syn keyword fortranIO eor advance nml
  207. syn keyword fortranIntrinsic adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack precision present product radix random_number random_seed range repeat reshape rrspacing
  208. syn keyword fortranIntrinsic scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify
  209. syn match fortranIntrinsic "\<not\>\(\s*\.\)\@!"me=s+3
  210. syn match fortranIntrinsic "\<kind\>\s*[(,]"me=s+4
  211. syn match fortranUnitHeader "\<end\s*function"
  212. syn match fortranUnitHeader "\<end\s*interface"
  213. syn match fortranUnitHeader "\<end\s*module"
  214. syn match fortranUnitHeader "\<end\s*submodule"
  215. syn match fortranUnitHeader "\<end\s*program"
  216. syn match fortranUnitHeader "\<end\s*subroutine"
  217. syn match fortranUnitHeader "\<end\s*block"
  218. syn match fortranRepeat "\<end\s*do"
  219. syn match fortranConditional "\<end\s*where"
  220. syn match fortranConditional "\<select\s*case"
  221. syn match fortranConditional "\<end\s*select"
  222. syn match fortranType "\<end\s*type"
  223. syn match fortranType "\<in\s*out"
  224. syn keyword fortranType procedure
  225. syn match fortranType "\<module\ze\s\+procedure\>"
  226. syn keyword fortranIOR namelist
  227. syn keyword fortranConditionalR while
  228. syn keyword fortranIntrinsicR achar iachar transfer
  229. syn keyword fortranInclude include
  230. syn keyword fortranStorageClassR sequence
  231. syn match fortranConditional "\<end\s*if"
  232. syn match fortranIO contains=fortranOperator "\<e\(nd\|rr\)\s*=\s*\d\+"
  233. syn match fortranConditional "\<else\s*if"
  234. syn keyword fortranUnitHeaderOb entry
  235. syn match fortranTypeR display "double\s\+precision"
  236. syn match fortranTypeR display "double\s\+complex"
  237. syn match fortranUnitHeaderR display "block\s\+data"
  238. syn keyword fortranStorageClassR common equivalence data
  239. syn keyword fortranIntrinsicR dble dprod
  240. syn match fortranOperatorR "\.\s*[gl][et]\s*\."
  241. syn match fortranOperatorR "\.\s*\(eq\|ne\)\s*\."
  242. syn keyword fortranRepeat forall
  243. syn match fortranRepeat "\<end\s*forall"
  244. syn keyword fortranIntrinsic null cpu_time
  245. syn match fortranType "\<elemental\>"
  246. syn match fortranType "\<pure\>"
  247. syn match fortranType "\<impure\>"
  248. syn match fortranType "\<recursive\>"
  249. if exists("fortran_more_precise")
  250. syn match fortranConstructName "\(\<end\s*forall\s\+\)\@15<=\a\w*\>"
  251. endif
  252. if b:fortran_dialect == "f08"
  253. " F2003
  254. syn keyword fortranIntrinsic command_argument_count get_command get_command_argument get_environment_variable is_iostat_end is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of
  255. " ISO_C_binding
  256. syn keyword fortranConstant c_null_char c_alert c_backspace c_form_feed c_new_line c_carriage_return c_horizontal_tab c_vertical_tab
  257. syn keyword fortranConstant c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr
  258. syn keyword fortranIntrinsic iso_c_binding c_loc c_funloc c_associated c_f_pointer c_f_procpointer
  259. syn keyword fortranType c_ptr c_funptr
  260. " ISO_Fortran_env
  261. syn keyword fortranConstant iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit
  262. " IEEE_arithmetic
  263. syn keyword fortranIntrinsic ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode
  264. syn keyword fortranReadWrite flush wait
  265. syn keyword fortranIO decimal round iomsg
  266. syn keyword fortranType asynchronous nopass non_overridable pass protected volatile extends import
  267. syn keyword fortranType non_intrinsic value bind deferred generic final enumerator
  268. syn match fortranType "\<abstract\>"
  269. syn match fortranType "\<class\>"
  270. syn match fortranType "\<associate\>"
  271. syn match fortranType "\<end\s*associate"
  272. syn match fortranType "\<enum\s*,\s*bind\s*(\s*c\s*)"
  273. syn match fortranType "\<end\s*enum"
  274. syn match fortranConditional "\<select\s*type"
  275. syn match fortranConditional "\<type\s*is\>"
  276. syn match fortranConditional "\<class\s*is\>"
  277. syn match fortranUnitHeader "\<abstract\s*interface\>"
  278. syn match fortranOperator "\([\|]\)"
  279. " F2008
  280. syn keyword fortranIntrinsic acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2
  281. syn keyword fortranIntrinsic atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits
  282. syn keyword fortranIntrinsic bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image
  283. syn keyword fortranIO newunit
  284. syn keyword fortranType contiguous
  285. syn keyword fortranRepeat concurrent
  286. " CUDA fortran
  287. syn match fortranTypeCUDA "\<attributes\>"
  288. syn keyword fortranTypeCUDA host global device value
  289. syn keyword fortranTypeCUDA shared constant pinned texture
  290. syn keyword fortranTypeCUDA dim1 dim2 dim3 dim4
  291. syn keyword fortranTypeCUDA cudadeviceprop cuda_count_kind cuda_stream_kind
  292. syn keyword fortranTypeCUDA cudaEvent cudaFuncAttributes cudaArrayPtr
  293. syn keyword fortranTypeCUDA cudaSymbol cudaChannelFormatDesc cudaPitchedPtr
  294. syn keyword fortranTypeCUDA cudaExtent cudaMemcpy3DParms
  295. syn keyword fortranTypeCUDA cudaFuncCachePreferNone cudaFuncCachePreferShared
  296. syn keyword fortranTypeCUDA cudaFuncCachePreferL1 cudaLimitStackSize
  297. syn keyword fortranTypeCUDA cudaLimitPrintfSize cudaLimitMallocHeapSize
  298. syn keyword fortranTypeCUDA cudaSharedMemBankSizeDefault cudaSharedMemBankSizeFourByte cudaSharedMemBankSizeEightByte
  299. syn keyword fortranTypeCUDA cudaEventDefault cudaEventBlockingSync cudaEventDisableTiming
  300. syn keyword fortranTypeCUDA cudaMemcpyHostToDevice cudaMemcpyDeviceToHost
  301. syn keyword fortranTypeCUDA cudaMemcpyDeviceToDevice
  302. syn keyword fortranTypeCUDA cudaErrorNotReady cudaSuccess cudaErrorInvalidValue
  303. syn keyword fortranTypeCUDA c_devptr
  304. syn match fortranStringCUDA "blockidx%[xyz]"
  305. syn match fortranStringCUDA "blockdim%[xyz]"
  306. syn match fortranStringCUDA "griddim%[xyz]"
  307. syn match fortranStringCUDA "threadidx%[xyz]"
  308. syn keyword fortranIntrinsicCUDA warpsize syncthreads syncthreads_and syncthreads_count syncthreads_or threadfence threadfence_block threadfence_system gpu_time allthreads anythread ballot
  309. syn keyword fortranIntrinsicCUDA atomicadd atomicsub atomicmax atomicmin atomicand atomicor atomicxor atomicexch atomicinc atomicdec atomiccas sizeof __shfl __shfl_up __shfl_down __shfl_xor
  310. syn keyword fortranIntrinsicCUDA cudaChooseDevice cudaDeviceGetCacheConfig cudaDeviceGetLimit cudaDeviceGetSharedMemConfig cudaDeviceReset cudaDeviceSetCacheConfig cudaDeviceSetLimit cudaDeviceSetSharedMemConfig cudaDeviceSynchronize cudaGetDevice cudaGetDeviceCount cudaGetDeviceProperties cudaSetDevice cudaSetDeviceFlags cudaSetValidDevices
  311. syn keyword fortranIntrinsicCUDA cudaThreadExit cudaThreadSynchronize cudaGetLastError cudaGetErrorString cudaPeekAtLastError cudaStreamCreate cudaStreamDestroy cudaStreamQuery cudaStreamSynchronize cudaStreamWaitEvent cudaEventCreate cudaEventCreateWithFlags cudaEventDestroy cudaEventElapsedTime cudaEventQuery cudaEventRecord cudaEventSynchronize
  312. syn keyword fortranIntrinsicCUDA cudaFuncGetAttributes cudaFuncSetCacheConfig cudaFuncSetSharedMemConfig cudaSetDoubleForDevice cudaSetDoubleForHost cudaFree cudaFreeArray cudaFreeHost cudaGetSymbolAddress cudaGetSymbolSize
  313. syn keyword fortranIntrinsicCUDA cudaHostAlloc cudaHostGetDevicePointer cudaHostGetFlags cudaHostRegister cudaHostUnregister cudaMalloc cudaMallocArray cudaMallocHost cudaMallocPitch cudaMalloc3D cudaMalloc3DArray
  314. syn keyword fortranIntrinsicCUDA cudaMemcpy cudaMemcpyArraytoArray cudaMemcpyAsync cudaMemcpyFromArray cudaMemcpyFromSymbol cudaMemcpyFromSymbolAsync cudaMemcpyPeer cudaMemcpyPeerAsync cudaMemcpyToArray cudaMemcpyToSymbol cudaMemcpyToSymbolAsync cudaMemcpy2D cudaMemcpy2DArrayToArray cudaMemcpy2DAsync cudaMemcpy2DFromArray cudaMemcpy2DToArray cudaMemcpy3D cudaMemcpy3DAsync
  315. syn keyword fortranIntrinsicCUDA cudaMemGetInfo cudaMemset cudaMemset2D cudaMemset3D cudaDeviceCanAccessPeer cudaDeviceDisablePeerAccess cudaDeviceEnablePeerAccess cudaPointerGetAttributes cudaDriverGetVersion cudaRuntimeGetVersion
  316. syn region none matchgroup=fortranType start="<<<" end=">>>" contains=ALLBUT,none
  317. endif
  318. syn cluster fortranCommentGroup contains=fortranTodo
  319. if (b:fortran_fixed_source == 1)
  320. if !exists("fortran_have_tabs")
  321. " Fixed format requires a textwidth of 72 for code,
  322. " but some vendor extensions allow longer lines
  323. if exists("fortran_extended_line_length")
  324. syn match fortranSerialNumber excludenl "^.\{133,}$"lc=132
  325. elseif exists("fortran_cardimage_line_length")
  326. syn match fortranSerialNumber excludenl "^.\{81,}$"lc=80
  327. else
  328. syn match fortranSerialNumber excludenl "^.\{73,}$"lc=72
  329. endif
  330. "Flag left margin errors
  331. syn match fortranLabelError "^.\{-,4}[^0-9 ]" contains=fortranTab
  332. syn match fortranLabelError "^.\{4}\d\S"
  333. endif
  334. syn match fortranComment excludenl "^[!c*].*$" contains=@fortranCommentGroup,@spell
  335. syn match fortranLeftMargin transparent "^ \{5}"
  336. syn match fortranContinueMark display "^.\{5}\S"lc=5
  337. else
  338. syn match fortranContinueMark display "&"
  339. endif
  340. syn match fortranComment excludenl "!.*$" contains=@fortranCommentGroup,@spell
  341. syn match fortranOpenMP excludenl "^\s*!\$\(OMP\)\=&\=\s.*$"
  342. "cpp is often used with Fortran
  343. syn match cPreProc "^\s*#\s*\(define\|ifdef\)\>.*"
  344. syn match cPreProc "^\s*#\s*\(elif\|if\)\>.*"
  345. syn match cPreProc "^\s*#\s*\(ifndef\|undef\)\>.*"
  346. syn match cPreCondit "^\s*#\s*\(else\|endif\)\>.*"
  347. syn region cIncluded contained start=+"[^("]+ skip=+\\\\\|\\"+ end=+"+ contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
  348. "syn region cIncluded contained start=+"[^("]+ skip=+\\\\\|\\"+ end=+"+
  349. syn match cIncluded contained "<[^>]*>"
  350. syn match cInclude "^\s*#\s*include\>\s*["<]" contains=cIncluded
  351. "Synchronising limits assume that comment and continuation lines are not mixed
  352. if exists("fortran_fold") || exists("fortran_more_precise")
  353. syn sync fromstart
  354. elseif (b:fortran_fixed_source == 0)
  355. syn sync linecont "&" minlines=30
  356. else
  357. syn sync minlines=30
  358. endif
  359. if exists("fortran_fold")
  360. if (b:fortran_fixed_source == 1)
  361. 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
  362. syn region fortranModule transparent fold keepend start="^\s*submodule\s\+(\a\w*\s*\(:\a\w*\s*\)*)\s*\z\(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\(submodule\(\s\+\z1\>\)\=\|$\)" contains=ALLBUT,fortranProgram,fortranModule
  363. 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
  364. syn region fortranFunction transparent fold keepend extend start="^\s*\(elemental \|pure \|impure \|module \|recursive \)\=\s*\(\(\(real \|integer \|logical \|complex \|double \s*precision \)\s*\((\(\s*kind\s*=\)\=\s*\w\+\s*)\)\=\)\|type\s\+(\s*\w\+\s*) \|character \((\(\s*len\s*=\)\=\s*\d\+\s*)\|(\(\s*kind\s*=\)\=\s*\w\+\s*)\)\=\)\=\s*function\s\+\z(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\($\|function\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule
  365. syn region fortranSubroutine transparent fold keepend extend start="^\s*\(elemental \|pure \|impure \|module \|recursive \)\=\s*subroutine\s\+\z(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\($\|subroutine\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule
  366. 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
  367. syn region fortranAssociate transparent fold keepend start="^\s*\<associate\s\+" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*associate" contains=ALLBUT,fortranProgram,fortranModule,fortranSubroutine,fortranFunction
  368. syn region fortranInterface transparent fold keepend extend start="^\s*\(abstract \)\=\s*interface\>" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*interface\>" contains=ALLBUT,fortranProgram,fortranModule,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock
  369. syn region fortranTypeDef transparent fold keepend extend start="^\s*type\s*\(,\s*\(public\|private\|abstract\)\)\=\s*::" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*type\>" contains=ALLBUT,fortranProgram,fortranModule,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock,fortranInterface
  370. else
  371. 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
  372. syn region fortranModule transparent fold keepend start="^\s*submodule\s\+(\a\w*\s*\(:\a\w*\s*\)*)\s*\z\(\a\w*\)" skip="^\s*[!#].*$" excludenl end="\<end\s*\(submodule\(\s\+\z1\>\)\=\|$\)" contains=ALLBUT,fortranProgram,fortranModule
  373. 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
  374. syn region fortranFunction transparent fold keepend extend start="^\s*\(elemental \|pure \|impure \|module \|recursive \)\=\s*\(\(\(real \|integer \|logical \|complex \|double \s*precision \)\s*\((\(\s*kind\s*=\)\=\s*\w\+\s*)\)\=\)\|type\s\+(\s*\w\+\s*) \|character \((\(\s*len\s*=\)\=\s*\d\+\s*)\|(\(\s*kind\s*=\)\=\s*\w\+\s*)\)\=\)\=\s*function\s\+\z(\a\w*\)" skip="^\s*[!#].*$" excludenl end="\<end\s*\($\|function\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule
  375. syn region fortranSubroutine transparent fold keepend extend start="^\s*\(elemental \|pure \|impure \|module \|recursive \)\=\s*subroutine\s\+\z(\a\w*\)" skip="^\s*[!#].*$" excludenl end="\<end\s*\($\|subroutine\(\s\+\z1\>\)\=\)" contains=ALLBUT,fortranProgram,fortranModule
  376. 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
  377. syn region fortranAssociate transparent fold keepend start="^\s*\<associate\s\+" skip="^\s*[!#].*$" excludenl end="\<end\s*associate" contains=ALLBUT,fortranProgram,fortranModule,fortranSubroutine,fortranFunction
  378. syn region fortranInterface transparent fold keepend extend start="^\s*\(abstract \)\=\s*interface\>" skip="^\s*[!#].*$" excludenl end="\<end\s*interface\>" contains=ALLBUT,fortranProgram,fortranModule,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock
  379. syn region fortranTypeDef transparent fold keepend extend start="^\s*type\s*\(,\s*\(public\|private\|abstract\)\)\=\s*::" skip="^\s*[!#].*$" excludenl end="\<end\s*type\>" contains=ALLBUT,fortranProgram,fortranModule,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock,fortranInterface
  380. endif
  381. if exists("fortran_fold_conditionals")
  382. if (b:fortran_fixed_source == 1)
  383. 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
  384. 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
  385. 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
  386. syn region fortranCase transparent fold keepend extend start="\<select\s*\(case\|type\)\>" skip="^\([!c*]\|\s*#\).*$" end="\<end\s*select\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
  387. else
  388. 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
  389. 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
  390. syn region fortranIfBlock transparent fold keepend extend start="\(\<e\(nd\|lse\)\s\+\)\@<!\<if\s*(\(.\|&\s*\n\)\+)\(\s\|&\s*\n\)*then\>" skip="^\s*[!#].*$" end="\<end\s*if\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
  391. syn region fortranCase transparent fold keepend extend start="\<select\s*\(case\|type\)\>" skip="^\s*[!#].*$" end="\<end\s*select\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
  392. endif
  393. endif
  394. if exists("fortran_fold_multilinecomments")
  395. if (b:fortran_fixed_source == 1)
  396. syn match fortranMultiLineComments transparent fold "\(^[!c*].*\(\n\|\%$\)\)\{4,}" contains=ALLBUT,fortranMultiCommentLines
  397. else
  398. syn match fortranMultiLineComments transparent fold "\(^\s*!.*\(\n\|\%$\)\)\{4,}" contains=ALLBUT,fortranMultiCommentLines
  399. endif
  400. endif
  401. endif
  402. " Define the default highlighting.
  403. " The default highlighting differs for each dialect.
  404. " Transparent groups:
  405. " fortranParen, fortranLeftMargin
  406. " fortranProgram, fortranModule, fortranSubroutine, fortranFunction,
  407. " fortranBlockData
  408. " fortran77Loop, fortran90Loop, fortranIfBlock, fortranCase
  409. " fortranMultiCommentLines
  410. hi def link fortranKeyword Keyword
  411. hi def link fortranConstructName Identifier
  412. hi def link fortranConditional Conditional
  413. hi def link fortranRepeat Repeat
  414. hi def link fortranTodo Todo
  415. hi def link fortranContinueMark Special
  416. hi def link fortranString String
  417. hi def link fortranNumber Number
  418. hi def link fortranBinary Number
  419. hi def link fortranOctal Number
  420. hi def link fortranHex Number
  421. hi def link fortranOperator Operator
  422. hi def link fortranBoolean Boolean
  423. hi def link fortranLabelError Error
  424. hi def link fortranObsolete Todo
  425. hi def link fortranType Type
  426. hi def link fortranStructure Type
  427. hi def link fortranStorageClass StorageClass
  428. hi def link fortranCall Function
  429. hi def link fortranUnitHeader fortranPreCondit
  430. hi def link fortranReadWrite Keyword
  431. hi def link fortranIO Keyword
  432. hi def link fortranIntrinsic Function
  433. hi def link fortranConstant Constant
  434. " To stop deleted & obsolescent features being highlighted as Todo items,
  435. " comment out the next 5 lines and uncomment the 5 lines after that
  436. hi def link fortranUnitHeaderOb fortranObsolete
  437. hi def link fortranKeywordOb fortranObsolete
  438. hi def link fortranConditionalOb fortranObsolete
  439. hi def link fortranTypeOb fortranObsolete
  440. hi def link fortranKeywordDel fortranObsolete
  441. "hi def link fortranUnitHeaderOb fortranUnitHeader
  442. "hi def link fortranKeywordOb fortranKeyword
  443. "hi def link fortranConditionalOb fortranConditional
  444. "hi def link fortranTypeOb fortranType
  445. "hi def link fortranKeywordDel fortranKeyword
  446. if b:fortran_dialect == "F"
  447. hi! def link fortranIntrinsicR fortranObsolete
  448. hi! def link fortranUnitHeaderR fortranObsolete
  449. hi! def link fortranTypeR fortranObsolete
  450. hi! def link fortranStorageClassR fortranObsolete
  451. hi! def link fortranOperatorR fortranObsolete
  452. hi! def link fortranInclude fortranObsolete
  453. hi! def link fortranLabelNumber fortranObsolete
  454. hi! def link fortranTarget fortranObsolete
  455. hi! def link fortranFloatIll fortranObsolete
  456. hi! def link fortranIOR fortranObsolete
  457. hi! def link fortranKeywordR fortranObsolete
  458. hi! def link fortranStringR fortranObsolete
  459. hi! def link fortranConditionalR fortranObsolete
  460. else
  461. hi! def link fortranIntrinsicR fortranIntrinsic
  462. hi! def link fortranUnitHeaderR fortranPreCondit
  463. hi! def link fortranTypeR fortranType
  464. hi! def link fortranStorageClassR fortranStorageClass
  465. hi! def link fortranOperatorR fortranOperator
  466. hi! def link fortranInclude Include
  467. hi! def link fortranLabelNumber Special
  468. hi! def link fortranTarget Special
  469. hi! def link fortranFloatIll fortranFloat
  470. hi! def link fortranIOR fortranIO
  471. hi! def link fortranKeywordR fortranKeyword
  472. hi! def link fortranStringR fortranString
  473. hi! def link fortranConditionalR fortranConditional
  474. endif
  475. " CUDA
  476. hi def link fortranIntrinsicCUDA fortranIntrinsic
  477. hi def link fortranTypeCUDA fortranType
  478. hi def link fortranStringCUDA fortranString
  479. hi def link fortranFormatSpec Identifier
  480. hi def link fortranFloat Float
  481. hi def link fortranPreCondit PreCondit
  482. hi def link cIncluded fortranString
  483. hi def link cInclude Include
  484. hi def link cPreProc PreProc
  485. hi def link cPreCondit PreCondit
  486. hi def link fortranOpenMP PreProc
  487. hi def link fortranParenError Error
  488. hi def link fortranComment Comment
  489. hi def link fortranSerialNumber Todo
  490. hi def link fortranTab Error
  491. " Uncomment the next line if you use extra intrinsics provided by vendors
  492. "hi def link fortranExtraIntrinsic Function
  493. let b:current_syntax = "fortran"
  494. let &cpo = s:cpo_save
  495. unlet s:cpo_save
  496. " vim: ts=8 tw=132