comparison runtime/syntax/fortran.vim @ 2370:454f314d0e61 vim73

Make it possible to load Perl dynamically on Unix. (James Vega)
author Bram Moolenaar <bram@vim.org>
date Wed, 21 Jul 2010 22:05:20 +0200
parents 7bc41231fbc7
children 878562053ba3
comparison
equal deleted inserted replaced
2369:435b5c6a5191 2370:454f314d0e61
1 " Vim syntax file 1 " Vim syntax file
2 " Language: Fortran95 (and Fortran90, Fortran77, F and elf90) 2 " Language: Fortran95 (and Fortran90, Fortran77, F and elf90)
3 " Version: 0.88 3 " Version: 0.89
4 " URL: http://www.unb.ca/chem/ajit/syntax/fortran.vim 4 " URL: http://www.unb.ca/chem/ajit/syntax/fortran.vim
5 " Last Change: 2008 Nov 01 5 " Last Change: 2010 July 21
6 " Maintainer: Ajit J. Thakkar (ajit AT unb.ca); <http://www.unb.ca/chem/ajit/> 6 " Maintainer: Ajit J. Thakkar (ajit AT unb.ca); <http://www.unb.ca/chem/ajit/>
7 " Usage: Do :help fortran-syntax from Vim 7 " Usage: For instructions, do :help fortran-syntax from Vim
8 " Credits: 8 " Credits:
9 " Version 0.1 was based on the fortran 77 syntax file by Mario Eusebio and 9 " Version 0.1 was based on the fortran 77 syntax file by Mario Eusebio and
10 " Preben Guldberg. Useful suggestions were made by: Andrej Panjkov, 10 " Preben Guldberg. Useful suggestions were made by: Andrej Panjkov,
11 " Bram Moolenaar, Thomas Olsen, Michael Sternberg, Christian Reile, 11 " Bram Moolenaar, Thomas Olsen, Michael Sternberg, Christian Reile,
12 " Walter Dieudonné, Alexander Wagner, Roman Bertle, Charles Rendleman, 12 " Walter Dieudonné, Alexander Wagner, Roman Bertle, Charles Rendleman,
13 " and Andrew Griffiths. For instructions on use, do :help fortran from vim 13 " Andrew Griffiths, Joe Krahn, and Hendrik Merx.
14 14
15 " For version 5.x: Clear all syntax items 15 " For version 5.x: Clear all syntax items
16 " For version 6.x: Quit if a syntax file is already loaded 16 " For version 6.x: Quit if a syntax file is already loaded
17 if version < 600 17 if version < 600
18 syntax clear 18 syntax clear
72 " Assume fixed source form unless signs of free source form 72 " Assume fixed source form unless signs of free source form
73 " are detected in the first five columns of the first b:lmax lines. 73 " are detected in the first five columns of the first b:lmax lines.
74 " Detection becomes more accurate and time-consuming if more lines 74 " Detection becomes more accurate and time-consuming if more lines
75 " are checked. Increase the limit below if you keep lots of comments at 75 " are checked. Increase the limit below if you keep lots of comments at
76 " the very top of each file and you have a fast computer. 76 " the very top of each file and you have a fast computer.
77 let b:lmax = 250 77 let b:lmax = 500
78 if ( b:lmax > line("$") ) 78 if ( b:lmax > line("$") )
79 let b:lmax = line("$") 79 let b:lmax = line("$")
80 endif 80 endif
81 let b:fortran_fixed_source = 1 81 let b:fortran_fixed_source = 1
82 let b:ln=1 82 let b:ln=1
83 while b:ln <= b:lmax 83 while b:ln <= b:lmax
84 let b:test = strpart(getline(b:ln),0,5) 84 let b:test = strpart(getline(b:ln),0,5)
85 if b:test[0] !~ '[Cc*!#]' && b:test !~ '^ \+[!#]' && b:test =~ '[^ 0-9\t]' 85 if b:test !~ '^[Cc*]' && b:test !~ '^ *[!#]' && b:test =~ '[^ 0-9\t]' && b:test !~ '^[ 0-9]*\t'
86 let b:fortran_fixed_source = 0 86 let b:fortran_fixed_source = 0
87 break 87 break
88 endif 88 endif
89 let b:ln = b:ln + 1 89 let b:ln = b:ln + 1
90 endwhile 90 endwhile
205 syn match fortranTarget display "\(\<go\s*to\s*(\=\)\@<=\(\d\+\s*,\s*\)*\d\+\>" 205 syn match fortranTarget display "\(\<go\s*to\s*(\=\)\@<=\(\d\+\s*,\s*\)*\d\+\>"
206 endif 206 endif
207 207
208 syn keyword fortranTypeEx external 208 syn keyword fortranTypeEx external
209 syn keyword fortranIOEx format 209 syn keyword fortranIOEx format
210 syn keyword fortranKeywordEx continue 210 syn match fortranKeywordEx "\<continue\>"
211 syn match fortranKeyword "^\s*\d\+\s\+continue\>"
211 syn match fortranKeywordEx "\<go\s*to\>" 212 syn match fortranKeywordEx "\<go\s*to\>"
212 syn region fortranStringEx start=+'+ end=+'+ contains=fortranContinueMark,fortranLeftMargin,fortranSerialNumber 213 syn region fortranStringEx start=+'+ end=+'+ contains=fortranContinueMark,fortranLeftMargin,fortranSerialNumber
213 syn keyword fortran77IntrinsicEx dim lge lgt lle llt mod 214 syn keyword fortran77IntrinsicEx dim lge lgt lle llt mod
214 syn keyword fortranKeywordOb assign pause to 215 syn keyword fortranKeywordOb assign pause to
215 216
288 if exists("fortran_more_precise") 289 if exists("fortran_more_precise")
289 syn match fortranConstructName "\(\<end\s*forall\s\+\)\@<=\a\w*\>" 290 syn match fortranConstructName "\(\<end\s*forall\s\+\)\@<=\a\w*\>"
290 endif 291 endif
291 endif 292 endif
292 293
294 if b:fortran_dialect == "f95"
295 " F2003
296 syn keyword fortran03Intrinsic 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
297 " ISO_C_binding
298 syn keyword fortran03Constant c_null_char c_alert c_backspace c_form_feed c_new_line c_carriage_return c_horizontal_tab c_vertical_tab
299 syn keyword fortran03Constant 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
300 syn keyword fortran03Intrinsic iso_c_binding c_loc c_funloc c_associated c_f_pointer c_f_procpointer
301 syn keyword fortran03Type c_ptr c_funptr
302 " ISO_Fortran_env
303 syn keyword fortran03Constant iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit
304 " IEEE_arithmetic
305 syn keyword fortran03Intrinsic ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode
306
307 syn keyword fortran03ReadWrite flush wait
308 syn keyword fortran03IO decimal round iomsg
309 syn keyword fortran03Type asynchronous nopass non_overridable pass protected volatile abstract extends import
310 syn keyword fortran03Type non_intrinsic value bind deferred generic final enumerator class
311 syn match fortran03Type "\<associate\>"
312 syn match fortran03Type "\<end\s*associate"
313 syn match fortran03Type "\<enum\s*,\s*bind\s*(\s*c\s*)"
314 syn match fortran03Type "\<end\s*enum"
315 syn match fortran03Conditional "\<select\s*type"
316 syn match fortran03Conditional "\<type\s*is\>"
317 syn match fortran03UnitHeader "\<abstract\s*interface\>"
318 syn match fortran03Operator "\([\|]\)"
319
320 " F2008
321 syn keyword fortran08Intrinsic acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2
322 syn keyword fortran08Intrinsic atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits
323 syn keyword fortran08Intrinsic 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
324 syn keyword fortran08IO newunit
325 syn keyword fortran08Type contiguous
326 endif
327
293 syn cluster fortranCommentGroup contains=fortranTodo 328 syn cluster fortranCommentGroup contains=fortranTodo
294 329
295 if (b:fortran_fixed_source == 1) 330 if (b:fortran_fixed_source == 1)
296 if !exists("fortran_have_tabs") 331 if !exists("fortran_have_tabs")
297 "Flag items beyond column 72 332 "Flag items beyond column 72
322 357
323 "Synchronising limits assume that comment and continuation lines are not mixed 358 "Synchronising limits assume that comment and continuation lines are not mixed
324 if exists("fortran_fold") || exists("fortran_more_precise") 359 if exists("fortran_fold") || exists("fortran_more_precise")
325 syn sync fromstart 360 syn sync fromstart
326 elseif (b:fortran_fixed_source == 0) 361 elseif (b:fortran_fixed_source == 0)
327 syn sync linecont "&" minlines=20 362 syn sync linecont "&" minlines=30
328 else 363 else
329 syn sync minlines=20 364 syn sync minlines=30
330 endif 365 endif
331 366
332 if version >= 600 && exists("fortran_fold") 367 if version >= 600 && exists("fortran_fold")
333 368
334 if (b:fortran_fixed_source == 1) 369 if (b:fortran_fixed_source == 1)
335 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 370 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
336 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 371 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
337 syn region fortranFunction transparent fold keepend extend start="^\s*\(elemental \|pure \|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 372 syn region fortranFunction transparent fold keepend extend start="^\s*\(elemental \|pure \|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
338 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 373 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
339 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 374 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
340 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 375 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
376 syn region fortranTypeDef transparent fold keepend extend start="^\s*type\s*\(,\s*\(public\|private\)\)\=\s*::" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*type\>" contains=ALLBUT,fortranProgram,fortranModule,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock
341 else 377 else
342 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 378 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
343 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 379 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
344 syn region fortranFunction transparent fold keepend extend start="^\s*\(elemental \|pure \|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 380 syn region fortranFunction transparent fold keepend extend start="^\s*\(elemental \|pure \|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
345 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 381 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
346 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 382 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
347 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 383 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
384 syn region fortranTypeDef transparent fold keepend extend start="^\s*type\s*\(,\s*\(public\|private\)\)\=\s*::" skip="^\s*[!#].*$" excludenl end="\<end\s*type\>" contains=ALLBUT,fortranProgram,fortranModule,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock
348 endif 385 endif
349 386
350 if exists("fortran_fold_conditionals") 387 if exists("fortran_fold_conditionals")
351 if (b:fortran_fixed_source == 1) 388 if (b:fortran_fixed_source == 1)
352 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 fortran77Loop transparent fold keepend start="\<do\s\+\z(\d\+\)" end="^\s*\z1\>" contains=ALLBUT,fortranUnitHeader,fortranStructure,fortranStorageClass,fortranType,fortranProgram,fortranModule,fortranSubroutine,fortranFunction,fortranBlockData
388 " fortranBlockData 425 " fortranBlockData
389 " fortran77Loop, fortran90Loop, fortranIfBlock, fortranCase 426 " fortran77Loop, fortran90Loop, fortranIfBlock, fortranCase
390 " fortranMultiCommentLines 427 " fortranMultiCommentLines
391 HiLink fortranKeyword Keyword 428 HiLink fortranKeyword Keyword
392 HiLink fortranConstructName Identifier 429 HiLink fortranConstructName Identifier
430 HiLink fortran03Conditional fortranConditional
393 HiLink fortranConditional Conditional 431 HiLink fortranConditional Conditional
394 HiLink fortranRepeat Repeat 432 HiLink fortranRepeat Repeat
395 HiLink fortranTodo Todo 433 HiLink fortranTodo Todo
396 HiLink fortranContinueMark Todo 434 if (b:fortran_fixed_source == 1)
435 HiLink fortranContinueMark Todo
436 else
437 HiLink fortranContinueMark Keyword
438 endif
397 HiLink fortranString String 439 HiLink fortranString String
398 HiLink fortranNumber Number 440 HiLink fortranNumber Number
441 HiLink fortran03Operator fortranOperator
399 HiLink fortranOperator Operator 442 HiLink fortranOperator Operator
400 HiLink fortranBoolean Boolean 443 HiLink fortranBoolean Boolean
401 HiLink fortranLabelError Error 444 HiLink fortranLabelError Error
402 HiLink fortranObsolete Todo 445 HiLink fortranObsolete Todo
446 HiLink fortran03Type fortranType
447 HiLink fortran08Type fortranType
403 HiLink fortranType Type 448 HiLink fortranType Type
404 HiLink fortranStructure Type 449 HiLink fortranStructure Type
405 HiLink fortranStorageClass StorageClass 450 HiLink fortranStorageClass StorageClass
406 HiLink fortranCall fortranUnitHeader 451 HiLink fortranCall Function
452 HiLink fortran03UnitHeader fortranUnitHeader
407 HiLink fortranUnitHeader fortranPreCondit 453 HiLink fortranUnitHeader fortranPreCondit
454 HiLink fortran03ReadWrite fortranReadWrite
408 HiLink fortranReadWrite Keyword 455 HiLink fortranReadWrite Keyword
456 HiLink fortran03IO fortranIO
457 HiLink fortran08IO fortranIO
409 HiLink fortranIO Keyword 458 HiLink fortranIO Keyword
410 HiLink fortran95Intrinsic fortran90Intrinsic 459 HiLink fortran95Intrinsic fortran90Intrinsic
411 HiLink fortran77Intrinsic fortran90Intrinsic 460 HiLink fortran77Intrinsic fortran90Intrinsic
412 HiLink fortran90Intrinsic Function 461 HiLink fortran90Intrinsic Function
462 HiLink fortran03Intrinsic Function
463 HiLink fortran08Intrinsic Function
464 HiLink fortran03Constant Function
413 465
414 if ( b:fortran_dialect == "elf" || b:fortran_dialect == "F" ) 466 if ( b:fortran_dialect == "elf" || b:fortran_dialect == "F" )
415 HiLink fortranKeywordOb fortranObsolete 467 HiLink fortranKeywordOb fortranObsolete
416 HiLink fortran66Intrinsic fortranObsolete 468 HiLink fortran66Intrinsic fortranObsolete
417 HiLink fortran77IntrinsicR fortranObsolete 469 HiLink fortran77IntrinsicR fortranObsolete