runtime(fortran): update syntax and documentation (#13912)

Commit: 
https://github.com/vim/vim/commit/e1ddc2d5875d820b5dcb1423428ce4a01cce3fda
Author: Ajit-Thakkar <142174202+ajit-thak...@users.noreply.github.com>
Date:   Wed Jan 24 15:08:34 2024 -0400

    runtime(fortran): update syntax and documentation 
(https://github.com/vim/vim/issues/13912)
    
    * runtime (doc): update Fortran section
    * runtime(syntax): Complete support for Fortran 2023.
       Minor improvements.
    
    Signed-off-by: Ajit-Thakkar 
<142174202+ajit-thak...@users.noreply.github.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index a2377b567..c4f59aee1 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -1,4 +1,4 @@
-*syntax.txt*   For Vim version 9.1.  Last change: 2024 Jan 23
+*syntax.txt*   For Vim version 9.1.  Last change: 2024 Jan 24
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1594,13 +1594,11 @@ edit F# or Fortran at all, use this in your startup 
vimrc: >
 FORTRAN                                        *fortran.vim* 
*ft-fortran-syntax*
 
 Default highlighting and dialect ~
-Vim highlights according to Fortran 2023 (the most recent standard) by
-default.  This choice should be appropriate for most users most of the time
-because Fortran 2023 is almost a superset of previous versions (Fortran 2018,
-2008, 2003, 95, 90, and 77).  A small number of features new to Fortran 2018
-and Fortran 2023 may have been omitted at present; the transition to Fortran
-2023 will be completed in the near future. A few legacy constructs deleted or
-declared obsolescent in recent Fortran standards are highlighted as todo
+Vim highlights according to Fortran 2023 (the most recent standard). This
+choice should be appropriate for most users most of the time because Fortran
+2023 is almost a superset of previous versions (Fortran 2018, 2008, 2003, 95,
+90, 77, and 66).  A few legacy constructs deleted or declared obsolescent,
+respectively, in recent Fortran standards are highlighted as errors and todo
 items.
 
 The syntax script no longer supports Fortran dialects.  The variable
diff --git a/runtime/syntax/fortran.vim b/runtime/syntax/fortran.vim
index 306fa11cf..34245b30d 100644
--- a/runtime/syntax/fortran.vim
+++ b/runtime/syntax/fortran.vim
@@ -1,6 +1,6 @@
 " Vim syntax file
 " Language:    Fortran 2023 (and Fortran 2018, 2008, 2003, 95, 90, and 77)
-" Version:     (v111) 2024 January 15
+" Version:     (v112) 2024 January 24
 " Maintainers: Ajit J. Thakkar <a...@unb.ca>; <https://ajit.ext.unb.ca/>
 "              Joshua Hollett <j.holl...@uwinnipeg.ca>
 " Usage:       For instructions, do :help fortran-syntax from Vim
@@ -25,7 +25,7 @@ set cpo&vim
 " Choose between fixed and free source form if this hasn't been done yet
 if !exists("b:fortran_fixed_source")
   if exists("fortran_free_source")
-    " User guarantees free source form for all fortran files
+    " User guarantees free source form for all Fortran files
     let b:fortran_fixed_source = 0
   elseif exists("fortran_fixed_source")
     " User guarantees fixed source form for all fortran files
@@ -37,7 +37,7 @@ if !exists("b:fortran_fixed_source")
     " Fixed-form file extension defaults
     let b:fortran_fixed_source = 1
   else
-    " Modern fortran compilers still allow both free and fixed source form.
+    " Modern Fortran compilers still allow both free and fixed source form.
     " Assume fixed source form unless signs of free source form
     " are detected in the first five columns of the first s:lmax lines.
     " Detection becomes more accurate and time-consuming if more lines
@@ -61,6 +61,9 @@ if !exists("b:fortran_fixed_source")
   endif
 endif
 
+" Group names ending in 'Del' and 'Ob', respectively, indicate features 
deleted and obsolescent in Fortran 2018 and later
+" Deleted features are highlighted as errors
+" Obsolescent features are highlighted as todo items
 syn case ignore
 
 if b:fortran_fixed_source == 1
@@ -81,7 +84,7 @@ syn match fortranConstructName          
"\%(\<end\s*associate\s\+\)\@18<= \w*\>
 syn match fortranUnitName               
"\%(\<\%(end\s*\)\?\%(subroutine\|function\|module\|program\|submodule\)\s\+\)\@12<=
 \w*"
 syn match fortranUnitHeader             "\<end\>\ze\s*\%(!.*\)\?$"
 
-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
+syn keyword fortranIntrinsic   abs acos aimag aint anint asin atan atan2 cmplx 
conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt 
tan tanh
 syn keyword fortranIntrinsicR  achar iachar transfer dble dprod dim lge lgt 
lle llt mod
 syn keyword fortranIntrinsic    command_argument_count get_command 
get_command_argument get_environment_variable is_iostat_end is_iostat_eor 
move_alloc new_line same_type_as extends_type_of
 syn keyword fortranIntrinsic    selected_real_kind selected_int_kind 
selected_logical_kind selected_char_kind next previous
@@ -89,9 +92,8 @@ syn keyword fortranIntrinsic    acosh asinh atanh bessel_j0 
bessel_j1 bessel_jn
 syn keyword fortranIntrinsic    adjustl adjustr all allocated any associated 
bit_size btest ceiling cshift date_and_time digits
 syn keyword fortranIntrinsic    dot_product eoshift exponent floor fraction 
iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent 
maxloc merge minexponent minloc
 syn keyword fortranIntrinsic    modulo mvbits nearest pack precision present 
radix random_number random_seed range repeat reshape rrspacing scale scan 
set_exponent shape size spacing
-"syn keyword fortranIntrinsic    count epsilon maxval minval product sum huge 
tiny
 " intrinsic names often used for variables in older Fortran code
-syn match fortranIntrinsic      
'\<\%(count\|epsilon\|maxval\|minval\|product\|sum\|huge\|tiny\)\>\ze\s*('
+syn match fortranIntrinsic      
'\<\%(count\|epsilon\|maxval\|minval\|product\|sum\|huge\|tiny\|char\)\>\ze\s*('
 syn keyword fortranIntrinsic    spread system_clock transpose trim ubound 
unpack verify is_contiguous event_query
 syn keyword fortranIntrinsic    atomic_define atomic_ref execute_command_line 
leadz trailz storage_size merge_bits
 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
@@ -112,29 +114,27 @@ syn keyword fortranIntrinsic    iso_c_binding c_loc 
c_funloc c_sizeof c_associat
 syn keyword fortranIntrinsic    iso_fortran_env compiler_options 
compiler_version
 syn keyword fortranIntrinsic   out_of_range reduce random_init coshape 
get_team team_number split tokenize
 syn keyword fortranIntrinsic    acosd asind atand atan2d cosd sind tand acospi 
asinpi atanpi atan2pi cospi sinpi tanpi
-syn match fortranIntrinsic      "\%(^\s*\|type *is 
*(\s*\)\@12<!\<real\s*("me=s+4
-syn match fortranIntrinsic     "\<logical\s*("me=s+7
-syn match fortranIntrinsic      "\<not\s*("me=s+3
-syn match fortranIntrinsic     "\<len\s*("me=s+3
-syn match fortranIntrinsic     "\<kind\s*("me=s+4
-" obsolescent type-specific intrinsics
+syn match fortranIntrinsic      "\%(^\s*\|type *is *(\s*\)\@12<!\<real\ze\s*("
+syn match fortranIntrinsic      '\<\%(logical\|not\|len\|kind\|rank\)\>\ze\s*('
+" Obsolescent type-specific intrinsics
 syn keyword fortranIntrinsicOb 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
-" Extra intrinsics provided by some vendors
-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
+if exists("fortran_vendor_intrinsics")
+  syn keyword fortranIntrinsicVen      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
+endif
 
 syn keyword fortranType         generic final enumerator import classof typeof
 syn keyword fortranType         c_ptr c_funptr elemental pure impure recursive 
non_recursive simple
-syn match fortranTypeOb         "^\s*\zs\%(character\s*\)\@15<=\*"
-syn match fortranType           
"^\s*\zs\%(implicit\s\+\)\?\%(real\|integer\|logical\|complex\|character\|type\)\>"
+syn match fortranType           
"^\s*\%(implicit\s\+\)\?\%(real\|double\s*precision\|integer\|logical\|complex\|character\|type\)\>"
+syn match fortranTypeOb         "^\s*\%(character\s*\)\@15<=\*"
 syn match fortranType           "^\s*\zsimplicit\s\+none\>"
 syn match fortranType           "\<class\>"
-syn match fortranType           
"\%(\<type\s\+is\s\+[(]\s*\)\@15<=\%(real\|double 
precision\|integer\|logical\|complex\|character\)\>"
+syn match fortranType           
"\%(\<type\s\+is\s\+[(]\s*\)\@15<=\%(real\|double\s*precision\|integer\|logical\|complex\|character\)\>"
 syn match fortranType           "\<\%(end\s*\)\?interface\>"
 syn match fortranType           "\<enum\s*,\s*bind\s*(\s*c\s*)"
 syn match fortranType           "\<end\s*\%(enum\|type\)\>"
 syn match fortranType           "\<\%(end\s*\)\?enumeration\s\+type\>"
 syn match fortranType           "\<\%(end\s*\)\?\%(module\s\+\)\?procedure\>"
-syn match fortranType           "\%(simple \|pure \|impure \|recursive 
\|non-recursive \|elemental \|module \)\@17<=\%(real\|double 
precision\|integer\|logical\|complex\|character\)"
+syn match fortranType           "\%(simple \|pure \|impure \|recursive 
\|non_recursive \|elemental \|module \)\@17<=\%(real\|double 
precision\|integer\|logical\|complex\|character\)"
 syn match fortranTypeR         display "\<double\s*precision\>"
 syn match fortranTypeR         display "\<double\s\+complex\>"
 syn keyword fortranAttribute    value bind deferred contiguous intrinsic 
non_intrinsic
@@ -211,9 +211,9 @@ syn match fortranLabelNumber        display "^  
\zs\d\{1,3}\ze\s"
 syn match fortranLabelNumber   display "^   \zs\d\d\?\ze\s"
 syn match fortranLabelNumber   display "^    \zs\d\ze\s"
 " Numbers as targets
-syn match fortranTarget        display 
"\%(\<if\s*(.\+)\s*\)\@<=\%(\d\+\s*,\s*\)\{2}\d\+\>"
-syn match fortranTarget        display "\%(\<do\s\+\)\@11<=\d\+\>"
-syn match fortranTarget        display 
"\%(\<go\s*to\s*(\?\)\@11<=\%(\d\+\s*,\s*\)*\d\+\>"
+syn match fortranTarget        display 
"\%(\<if\s*(.\+)\s*\)\@<=\%(\d\+\s*,\s*\)\{2}\d\+\>"
+syn match fortranTargetOb      display "\%(\<do\s*,\?\s*\)\@11<=\d\+\>"
+syn match fortranTarget        display 
"\%(\<go\s*to\s*(\?\)\@11<=\%(\d\+\s*,\s*\)*\d\+\>"
 
 syn match fortranBoolean       "\.\s*\%(true\|false\)\s*\."
 
@@ -223,7 +223,8 @@ syn match fortranKeyword    "\<\%(error\s\+\)\?stop\>"
 syn match fortranKeyword       "\<go\s*to\>"
 syn match fortranKeywordDel    "\<go\s*to\ze\s\+.*,\s*(.*$"
 syn match fortranKeywordOb     "\<go\s*to\ze\s*(\d\+.*$"
-syn keyword fortranKeywordDel  assign pause
+syn keyword fortranKeywordDel  pause
+syn match fortranKeywordDel    "assign\s*\d\+\s*to\s\+ \w*"
 
 syn region fortranString       start=+'+ end=+'+       
contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
 syn region fortranString       start=+"+ end=+"+       
contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
@@ -234,12 +235,11 @@ syn keyword fortranIO             pad position action 
delim readwrite eor advance nml newun
 syn match   fortranIO          contains=fortranOperator 
"\<e\%(nd\|rr\)\s*=\s*\d\+"
 
 syn keyword fortranConditional else then where elsewhere
-syn match fortranConditional    "\<if\>"
-syn match fortranConditional    "\<else\s*if\>"
+syn match fortranConditional    "\<\%(else\s*\)\?if\>"
 syn match fortranConditional    "\<\%(end\s*\)\?\%(if\|where\|select\)\>"
-syn match fortranConditional    "\<select\s\+\%(case\|rank\|type\)\>"
-syn match fortranConditional    "\<\%(case\|rank\)\%(\s\+default\)\?\>"
-syn match fortranConditional    "\<class\s\+default\>"
+syn match fortranConditional    "\<select\s*\%(case\|rank\|type\)\>"
+syn match fortranConditional    "\<\%(case\|rank\|class\)\s\+default\>"
+syn match fortranConditional    "^\s*\zs\%(case\|rank\)\ze\s\+("
 syn match fortranConditional    "\<\%(class\|type\)\s\+is\>"
 syn match fortranConditionalDel        
"\<if\s*(.*)\s*\d\+\s*,\s*\d\+\s*,\s*\d\+\s*$"
 
@@ -255,14 +255,12 @@ syn keyword fortranUnitHeaderOb   entry
 syn match fortranUnitHeaderOb  display "\<block\s*data\>"
 
 syn keyword fortranStorageClass                in out inout
-syn match fortranStorageClass           "\<kind\s*="me=s+4
-syn match fortranStorageClass           "\<len\s*="me=s+3
-syn match fortranStorageClass           "^\s*\zsdata\>\%(\s\+ \w*\s*/\)\@="
-syn match fortranStorageClassOb         "^\s*\zscommon\>"
-syn match fortranStorageClassOb         "^\s*\zscommon\>\%(\s*/\)\@="
-syn keyword fortranStorageClassOb      equivalence
-
-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
+syn match fortranStorageClass           '\<\%(kind\|len\)\>\ze\s*='
+syn match fortranStorageClass           "^\s*data\>\ze\%(\s\+ \)\@="
+syn match fortranStorageClassOb         "\<common\>\%(\s*\%(/\| \)\)\@="
+syn match fortranStorageClassOb         "\<equivalence\>\%(\s*(\)\@="
+
+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 
c_ptrdiff_t
 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
 syn keyword fortranConstant             character_storage_size error_unit 
file_storage_size input_unit iostat_end iostat_eor numeric_storage_size 
output_unit stat_failed_image stat_unlocked_failed_image
 syn keyword fortranConstant             int8 int16 int32 int64 real16 real32 
real64 real128 character_kinds integer_kinds logical_kinds real_kinds 
iostat_inquire_internal_unit
@@ -274,7 +272,7 @@ syn keyword fortranConstant             
ieee_positive_subnormal ieee_nearest iee
 syn keyword fortranConstant             ieee_denormal ieee_divide ieee_halting 
ieee_inexact_flag ieee_inf ieee_invalid_flag ieee_nan
 syn keyword fortranConstant             ieee_rounding ieee_sqrt ieee_subnormal 
ieee_underflow_flag
 
-" CUDA fortran
+" CUDA Fortran
 if exists("fortran_CUDA")
   syn match fortranTypeCUDA           "\<attributes\>"
   syn keyword fortranTypeCUDA         host global device
@@ -344,7 +342,6 @@ 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 region    cIncluded               contained start=+"[^("]+ skip=+\\\|\"+ 
end=+"+
 syn match      cIncluded               contained "<[^>]*>"
 syn match      cInclude                "^\s*#\s*include\>\s*["<]" 
contains=cIncluded
 
@@ -372,7 +369,7 @@ if exists("fortran_fold")
     syn region fortranAssociate transparent fold keepend 
start="\<associate\s\+" skip="^\%([!c*]\|\s*#\).*$" excludenl 
end="\<end\s*associate" 
contains=ALLBUT,fortranProgram,fortranModule,fortranSubroutine,fortranFunction
     syn region fortranCritical transparent fold keepend start="\<critical\s\+" 
skip="^\%([!c*]\|\s*#\).*$" excludenl end="\<end\s*critical" 
contains=ALLBUT,fortranProgram,fortranModule,fortranSubroutine,fortranFunction
     syn region fortranTeam transparent fold keepend start="\<change\s\+team\>" 
skip="^\%([!c*]\|\s*#\).*$" excludenl end="\<end\s*team\>" 
contains=ALLBUT,fortranProgram,fortranModule,fortranSubroutine,fortranFunction
-    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
+    syn region fortranInterface transparent fold keepend extend 
start="\<\%(abstract \)\?\s*interface\>" skip="^\%([!c*]\|\s*#\).*$" excludenl 
end="\<end\s*interface\>" 
contains=ALLBUT,fortranProgram,fortranModule,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock
     syn region fortranTypeDef transparent fold keepend extend 
start="^\s*type\s*\%(,\s*\%(abstract\|private\|public\|bind(c)\|extends( 
\w*)\)\)\{0,4}\s*::\s*\z( \w*\)" skip="^\%([!c*]\|\s*#\).*$" excludenl 
end="\<end\s*type\>\%(\s\+\z1\>\)\?" 
contains=ALLBUT,fortranProgram,fortranModule,fortranSubroutine,fortranFunction
     syn region fortranMultiComments fold  start="^\zs[!c*].*\_s*[!c*]" 
skip="^[!c*]"   end='^\ze\s*[^!c*]'
   else
@@ -385,7 +382,7 @@ if exists("fortran_fold")
     syn region fortranAssociate transparent fold keepend start="\<associate\>" 
skip="^\s*[!#].*$" excludenl end="\<end\s*associate\>" 
contains=ALLBUT,fortranProgram,fortranModule,fortranSubroutine,fortranFunction
     syn region fortranCritical transparent fold keepend start="\<critical\>" 
skip="^\s*[!#].*$" excludenl end="\<end\s*critical\>" 
contains=ALLBUT,fortranProgram,fortranModule,fortranSubroutine,fortranFunction
     syn region fortranTeam transparent fold keepend start="\<change\s\+team\>" 
skip="^\s*[!#].*$" excludenl end="\<end\s*team\>" 
contains=ALLBUT,fortranProgram,fortranModule,fortranSubroutine,fortranFunction
-    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
+    syn region fortranInterface transparent fold keepend extend 
start="\<\%(abstract \)\?\s*interface\>" skip="^\s*[!#].*$" excludenl 
end="\<end\s*interface\>" 
contains=ALLBUT,fortranProgram,fortranModule,fortran77Loop,fortranCase,fortran90Loop,fortranIfBlock
     syn region fortranTypeDef transparent fold keepend extend 
start="^\s*type\s*\%(,\s*\%(abstract\|private\|public\|bind(c)\|extends( 
\w*)\)\)\{0,4}\s*::\s*\z( \w*\)" skip="^\s*[!#].*$" excludenl 
end="\<end\s*type\>\%(\s\+\z1\>\)\?" 
contains=ALLBUT,fortranProgram,fortranModule,fortranSubroutine,fortranFunction
     syn region fortranMultiComments fold  start="^\zs\s*!.*\_s*!"      
skip="^\s*!"    end='^\ze\s*[^!]'
   endif
@@ -407,93 +404,68 @@ if exists("fortran_fold")
 endif
 
 " Define the default highlighting.
-hi def link fortranKeyword             Keyword
-hi def link fortranConstructName       Identifier
+hi def link fortranBoolean             Boolean
+hi def link fortranComment                     Comment
+hi def link fortranMultiComments        Comment
+hi def link fortranBlock                Conditional
 hi def link fortranConditional         Conditional
-hi def link fortranRepeat              Repeat
-hi def link fortranTodo                        Todo
-hi def link fortranContinueMark                Special
-hi def link fortranEndStatement                Special
-hi def link fortranString              String
+hi def link fortranConstant            Constant
+hi def link fortranConditionalDel      Error
+hi def link fortranKeywordDel          Error
+hi def link fortranLabelError          Error
+hi def link fortranParenError                  Error
+hi def link fortranTab                 Error
+hi def link fortranFloat                       Float
+hi def link fortranFloatIll             Float
+hi def link fortranCalled               Function
+hi def link fortranIntrinsic            Function
+hi def link fortranIntrinsicCUDA        Function
+hi def link fortranIntrinsicR          Function
+hi def link fortranIntrinsicVen        Function
+hi def link fortranUnitName            Function
+hi def link fortranConstructName       Identifier
+hi def link fortranFormatSpec                  Identifier
+hi def link cInclude                   Include
+hi def link fortranInclude              Include
+hi def link fortranIO                   Keyword
+hi def link fortranIOR                 Keyword
+hi def link fortranImageControl         Keyword
+hi def link fortranKeyword             Keyword
+hi def link fortranReadWrite            Keyword
+hi def link fortranBinary              Number
+hi def link fortranHex                 Number
 hi def link fortranNumber              Number
 hi def link fortranBinary              Number
 hi def link fortranOctal               Number
-hi def link fortranHex                 Number
 hi def link fortranOperator            Operator
-hi def link fortranBoolean             Boolean
-hi def link fortranLabelError          Error
-hi def link fortranObsolescent         Todo
-hi def link fortranType                        Type
-hi def link fortranAttribute           Type
-hi def link fortranBlock                Conditional
-hi def link fortranImageControl         Keyword
-hi def link fortranStorageClass         StorageClass
-hi def link fortranIntrinsic            Function
-hi def link fortranCalled               Function
-hi def link fortranUnitName            Function
+hi def link fortranOperatorR           Operator
+hi def link cPreCondit                 PreCondit
 hi def link fortranUnitHeader           PreCondit
-hi def link fortranReadWrite            Keyword
-hi def link fortranIO                   Keyword
-hi def link fortranConstant            Constant
-
-hi def link fortranInclude              Include
+hi def link fortranOpenMP                      PreProc
+hi def link cPreProc                   PreProc
+hi def link fortranRepeat              Repeat
+hi def link fortranRepeatR             Repeat
+hi def link fortranContinueMark                Special
+hi def link fortranEndStatement                Special
 hi def link fortranLabelNumber          Special
 hi def link fortranTarget               Special
-hi def link fortranFloatIll             Float
-
-hi def link fortranFormatSpec                  Identifier
-hi def link fortranFloat                       Float
-hi def link fortranPreCondit                   PreCondit
-hi def link fortranOpenMP                      PreProc
-hi def link fortranParenError                  Error
-hi def link fortranComment                     Comment
-hi def link fortranMultiComments        Comment
-hi def link fortranSerialNumber                Todo
-hi def link fortranTab                 Error
-
+hi def link fortranStorageClass         StorageClass
 hi def link cIncluded                  String
-hi def link cInclude                   Include
-hi def link cPreProc                   PreProc
-hi def link cPreCondit                 PreCondit
-
-" Redundant features which may one day become obsolescent
-hi def link fortranIntrinsicR          fortranIntrinsic
-hi def link fortranTypeR               fortranType
-hi def link fortranStorageClassR       fortranStorageClass
-hi def link fortranOperatorR           fortranOperator
-hi def link fortranIOR                 fortranIO
-hi def link fortranRepeatR             fortranRepeat
-
-" features deleted or declared obsolescent in Fortran 2023
-if (b:fortran_fixed_source == 1)
-  hi def link fortranUnitHeaderOb      fortranUnitHeader
-  hi def link fortranKeywordOb         fortranKeyword
-  hi def link fortranKeywordDel        fortranKeyword
-  hi def link fortranConditionalDel    fortranConditional
-  hi def link fortranTypeOb            fortranType
-  hi def link fortranStorageClassOb    fortranStorageClass
-  hi def link fortranRepeatOb          fortranRepeat
-  hi def link fortranIntrinsicOb       fortranIntrinsic
-else
-  hi def link fortranUnitHeaderOb      fortranObsolescent
-  hi def link fortranKeywordOb         fortranObsolescent
-  hi def link fortranKeywordDel        fortranObsolescent
-  hi def link fortranConditionalDel    fortranObsolescent
-  hi def link fortranTypeOb            fortranObsolescent
-  hi def link fortranStorageClassOb    fortranObsolescent
-  hi def link fortranRepeatOb          fortranObsolescent
-  hi def link fortranIntrinsicOb       fortranObsolescent
-endif
-
-if exists("fortran_CUDA")
-  hi def link fortranIntrinsicCUDA        fortranIntrinsic
-  hi def link fortranTypeCUDA             fortranType
-  hi def link fortranStringCUDA           fortranString
-endif
-
-if exists("fortran_vendor_intrinsics")
-  hi def link fortranExtraIntrinsic    Function
-endif
+hi def link fortranString              String
+hi def link fortranStringCUDA           String
+hi def link fortranIntrinsicOb         Todo
+hi def link fortranKeywordOb           Todo
+hi def link fortranRepeatOb            Todo
+hi def link fortranSerialNumber                Todo
+hi def link fortranStorageClassOb      Todo
+hi  def link fortranTargetOb           Todo
+hi def link fortranTodo                        Todo
+hi def link fortranTypeOb              Todo
+hi def link fortranUnitHeaderOb        Todo
+hi def link fortranAttribute           Type
+hi def link fortranType                        Type
+hi def link fortranTypeCUDA             Type
+hi def link fortranTypeR               Type
 
 let b:current_syntax = "fortran"
 

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/E1rSiiJ-00BCLs-DA%40256bit.org.

Raspunde prin e-mail lui