]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
Update runtime files
authorBram Moolenaar <Bram@vim.org>
Sun, 2 May 2021 15:19:11 +0000 (17:19 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 2 May 2021 15:19:11 +0000 (17:19 +0200)
20 files changed:
.github/CODEOWNERS
nsis/lang/english.nsi
runtime/autoload/syntaxcomplete.vim
runtime/doc/autocmd.txt
runtime/doc/eval.txt
runtime/doc/gui.txt
runtime/doc/index.txt
runtime/doc/map.txt
runtime/doc/options.txt
runtime/doc/quickfix.txt
runtime/doc/tags
runtime/doc/todo.txt
runtime/doc/usr_02.txt
runtime/doc/vim9.txt
runtime/ftplugin/fpcmake.vim [new file with mode: 0644]
runtime/ftplugin/pascal.vim
runtime/indent/make.vim
runtime/syntax/conf.vim
runtime/syntax/fpcmake.vim [new file with mode: 0644]
runtime/syntax/pascal.vim

index 94491d5657fd67e9f7eeea932f2bda478dca09dc..e4b0aa9fd73379f48e033212cfd099523736264d 100644 (file)
@@ -78,6 +78,7 @@ runtime/ftplugin/css.vim              @dkearns
 runtime/ftplugin/cucumber.vim          @tpope
 runtime/ftplugin/eiffel.vim            @dkearns
 runtime/ftplugin/eruby.vim             @tpope @dkearns
+runtime/ftplugin/fpcmake.vim           @dkearns
 runtime/ftplugin/freebasic.vim         @dkearns
 runtime/ftplugin/git.vim               @tpope
 runtime/ftplugin/gitcommit.vim         @tpope
@@ -98,6 +99,7 @@ runtime/ftplugin/matlab.vim           @cecamp
 runtime/ftplugin/modula3.vim           @dkearns
 runtime/ftplugin/nroff.vim             @a-vrma
 runtime/ftplugin/nsis.vim              @k-takata
+runtime/ftplugin/pascal.vim            @dkearns
 runtime/ftplugin/pdf.vim               @tpope
 runtime/ftplugin/ps1.vim               @heaths
 runtime/ftplugin/ps1xml.vim            @heaths
@@ -157,6 +159,7 @@ runtime/syntax/dtd.vim                      @chrisbra
 runtime/syntax/elmfilt.vim             @cecamp
 runtime/syntax/eruby.vim               @tpope @dkearns
 runtime/syntax/exports.vim             @cecamp
+runtime/syntax/fpcmake.vim             @dkearns
 runtime/syntax/git.vim                 @tpope
 runtime/syntax/gitcommit.vim           @tpope
 runtime/syntax/gitconfig.vim           @tpope
@@ -181,6 +184,7 @@ runtime/syntax/modula3.vim          @dkearns
 runtime/syntax/netrw.vim               @cecamp
 runtime/syntax/nroff.vim               @jmarshall
 runtime/syntax/nsis.vim                        @k-takata
+runtime/syntax/pascal.vim              @dkearns
 runtime/syntax/pdf.vim                 @tpope
 runtime/syntax/php.vim                 @TysonAndre
 runtime/syntax/privoxy.vim             @dkearns
index 6b7aa28304e48696a9eef12c8b1413e9030e1453..218c70a47c9d7908fc8198c142d46bd95e428074 100644 (file)
@@ -24,7 +24,7 @@ LangString ^UninstallCaption ${LANG_ENGLISH} \
 #    "Destination Folder (Must end with $\"vim$\")"
 
 LangString str_show_readme          ${LANG_ENGLISH} \
-    "Show README after installation finish"
+    "Show README after installation finished"
 
 # Install types:
 LangString str_type_typical         ${LANG_ENGLISH} \
index 6ba262b9aa641e558598aac1a19041cd14b1b0e6..396193d8b0203e004fb645f0479049e0d4a829dd 100644 (file)
@@ -1,12 +1,16 @@
 " Vim completion script
 " Language:    All languages, uses existing syntax highlighting rules
 " Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
-" Version:     14.0
-" Last Change: 2020 Dec 30
+" Version:     15.0
+" Last Change: 2021 Apr 27
 " Usage:       For detailed help, ":help ft-syntax-omni"
 
 " History
 "
+" Version 15.0
+"   - SyntaxComplete ignored all buffer specific overrides, always used global
+"     https://github.com/vim/vim/issues/8153
+"
 " Version 14.0
 "   - Fixed issue with single quotes and is_keyword
 "     https://github.com/vim/vim/issues/7463
@@ -42,7 +46,7 @@
 "         let g:omni_syntax_use_single_byte = 1
 "   - This by default will only allow single byte ASCII
 "     characters to be added and an additional check to ensure
-"     the charater is printable (see documentation for isprint).
+"     the character is printable (see documentation for isprint).
 "
 " Version 9.0
 "   - Add the check for cpo.
@@ -90,7 +94,7 @@ endif
 if exists('g:loaded_syntax_completion')
     finish
 endif
-let g:loaded_syntax_completion = 130
+let g:loaded_syntax_completion = 150
 
 " Turn on support for line continuations when creating the script
 let s:cpo_save = &cpo
@@ -145,14 +149,10 @@ let s:prepended  = ''
 " This function is used for the 'omnifunc' option.
 function! syntaxcomplete#Complete(findstart, base)
 
-    " Only display items in the completion window that are at least
-    " this many characters in length
-    if !exists('b:omni_syntax_ignorecase')
-        if exists('g:omni_syntax_ignorecase')
-            let b:omni_syntax_ignorecase = g:omni_syntax_ignorecase
-        else
-            let b:omni_syntax_ignorecase = &ignorecase
-        endif
+    " Allow user to override ignorecase per buffer 
+    let l:omni_syntax_ignorecase = g:omni_syntax_ignorecase
+    if exists('b:omni_syntax_ignorecase')
+        let l:omni_syntax_ignorecase = b:omni_syntax_ignorecase
     endif
 
     if a:findstart
@@ -183,7 +183,6 @@ function! syntaxcomplete#Complete(findstart, base)
     endif
 
     " let base = s:prepended . a:base
-    " let base = s:prepended
     let base = substitute(s:prepended, "'", "''", 'g')
 
     let filetype = substitute(&filetype, '\.', '_', 'g')
@@ -200,13 +199,13 @@ function! syntaxcomplete#Complete(findstart, base)
 
     if base != ''
         " let compstr    = join(compl_list, ' ')
-        " let expr       = (b:omni_syntax_ignorecase==0?'\C':'').'\<\%('.base.'\)\@!\w\+\s*'
+        " let expr       = (l:omni_syntax_ignorecase==0?'\C':'').'\<\%('.base.'\)\@!\w\+\s*'
         " let compstr    = substitute(compstr, expr, '', 'g')
         " let compl_list = split(compstr, '\s\+')
 
         " Filter the list based on the first few characters the user
         " entered
-        let expr = 'v:val '.(g:omni_syntax_ignorecase==1?'=~?':'=~#')." '^".escape(base, '\\/.*$^~[]').".*'"
+        let expr = 'v:val '.(l:omni_syntax_ignorecase==1?'=~?':'=~#')." '^".escape(base, '\\/.*$^~[]').".*'"
         let compl_list = filter(deepcopy(compl_list), expr)
     endif
 
@@ -227,6 +226,26 @@ function! syntaxcomplete#OmniSyntaxList(...)
     endif
 endfunc
 
+function! syntaxcomplete#OmniSyntaxClearCache()
+    let s:cache_name = []
+    let s:cache_list = []
+endfunction
+
+" To retrieve all syntax items regardless of syntax group:
+"     echo OmniSyntaxList( [] )
+" 
+" To retrieve only the syntax items for the sqlOperator syntax group:
+"     echo OmniSyntaxList( ['sqlOperator'] )
+" 
+" To retrieve all syntax items for both the sqlOperator and sqlType groups:
+"     echo OmniSyntaxList( ['sqlOperator', 'sqlType'] )
+" 
+" A regular expression can also be used:
+"     echo OmniSyntaxList( ['sql\w\+'] )
+" 
+" From within a plugin, you would typically assign the output to a List: >
+"     let myKeywords = []
+"     let myKeywords = OmniSyntaxList( ['sqlKeyword'] )
 function! OmniSyntaxList(...)
     let list_parms = []
     if a:0 > 0
@@ -244,37 +263,25 @@ function! OmniSyntaxList(...)
     "     let use_dictionary = a:1
     " endif
 
-    " Only display items in the completion window that are at least
-    " this many characters in length
-    if !exists('b:omni_syntax_use_iskeyword')
-        if exists('g:omni_syntax_use_iskeyword')
-            let b:omni_syntax_use_iskeyword = g:omni_syntax_use_iskeyword
-        else
-            let b:omni_syntax_use_iskeyword = 1
-        endif
-    endif
-
-    " Only display items in the completion window that are at least
-    " this many characters in length
-    if !exists('b:omni_syntax_minimum_length')
-        if exists('g:omni_syntax_minimum_length')
-            let b:omni_syntax_minimum_length = g:omni_syntax_minimum_length
-        else
-            let b:omni_syntax_minimum_length = 0
-        endif
-    endif
-
     let saveL = @l
     let filetype = substitute(&filetype, '\.', '_', 'g')
 
     if empty(list_parms)
+        " Allow user to override per buffer 
+        if exists('g:omni_syntax_group_include_'.filetype)
+            let l:omni_syntax_group_include_{filetype} = g:omni_syntax_group_include_{filetype}
+        endif
+        if exists('b:omni_syntax_group_include_'.filetype)
+            let l:omni_syntax_group_include_{filetype} = b:omni_syntax_group_include_{filetype}
+        endif
+
         " Default the include group to include the requested syntax group
         let syntax_group_include_{filetype} = ''
         " Check if there are any overrides specified for this filetype
-        if exists('g:omni_syntax_group_include_'.filetype)
+        if exists('l:omni_syntax_group_include_'.filetype)
             let syntax_group_include_{filetype} =
-                        \ substitute( g:omni_syntax_group_include_{filetype},'\s\+','','g')
-            let list_parms = split(g:omni_syntax_group_include_{filetype}, ',')
+                        \ substitute( l:omni_syntax_group_include_{filetype},'\s\+','','g')
+            let list_parms = split(l:omni_syntax_group_include_{filetype}, ',')
             if syntax_group_include_{filetype} =~ '\w'
                 let syntax_group_include_{filetype} =
                             \ substitute( syntax_group_include_{filetype},
@@ -329,11 +336,20 @@ function! OmniSyntaxList(...)
     else
         " Default the exclude group to nothing
         let syntax_group_exclude_{filetype} = ''
-        " Check if there are any overrides specified for this filetype
+
+        " Allow user to override per buffer 
         if exists('g:omni_syntax_group_exclude_'.filetype)
+            let l:omni_syntax_group_exclude_{filetype} = g:omni_syntax_group_exclude_{filetype}
+        endif
+        if exists('b:omni_syntax_group_exclude_'.filetype)
+            let l:omni_syntax_group_exclude_{filetype} = b:omni_syntax_group_exclude_{filetype}
+        endif
+
+        " Check if there are any overrides specified for this filetype
+        if exists('l:omni_syntax_group_exclude_'.filetype)
             let syntax_group_exclude_{filetype} =
-                        \ substitute( g:omni_syntax_group_exclude_{filetype},'\s\+','','g')
-            let list_exclude_groups = split(g:omni_syntax_group_exclude_{filetype}, ',')
+                        \ substitute( l:omni_syntax_group_exclude_{filetype},'\s\+','','g')
+            let list_exclude_groups = split(l:omni_syntax_group_exclude_{filetype}, ',')
             if syntax_group_exclude_{filetype} =~ '\w'
                 let syntax_group_exclude_{filetype} =
                             \ substitute( syntax_group_exclude_{filetype},
@@ -529,6 +545,30 @@ endfunction
 
 function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full )
 
+    " Allow user to override iskeyword per buffer 
+    let l:omni_syntax_use_iskeyword = g:omni_syntax_use_iskeyword
+    if exists('b:omni_syntax_use_iskeyword')
+        let l:omni_syntax_use_iskeyword = b:omni_syntax_use_iskeyword
+    endif
+
+    " Allow user to override iskeyword_numeric per buffer 
+    let l:omni_syntax_use_iskeyword_numeric = g:omni_syntax_use_iskeyword_numeric
+    if exists('b:omni_syntax_use_iskeyword_numeric')
+        let l:omni_syntax_use_iskeyword_numeric = b:omni_syntax_use_iskeyword_numeric
+    endif
+
+    " Allow user to override iskeyword_numeric per buffer 
+    let l:omni_syntax_use_single_byte = g:omni_syntax_use_single_byte
+    if exists('b:omni_syntax_use_single_byte')
+        let l:omni_syntax_use_single_byte = b:omni_syntax_use_single_byte
+    endif
+
+    " Allow user to override minimum_length per buffer 
+    let l:omni_syntax_minimum_length = g:omni_syntax_minimum_length
+    if exists('b:omni_syntax_minimum_length')
+        let l:omni_syntax_minimum_length = b:omni_syntax_minimum_length
+    endif
+
     let syn_list = ""
 
     " From the full syntax listing, strip out the portion for the
@@ -647,14 +687,23 @@ function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full )
                     \    syn_list, '\%(^\|\n\)\@<=\s*\(@\w\+\)'
                     \    , "", 'g'
                     \ )
-
-        if b:omni_syntax_use_iskeyword == 0
+        if l:omni_syntax_use_iskeyword == 0
             " There are a number of items which have non-word characters in
             " them, *'T_F1'*.  vim.vim is one such file.
             " This will replace non-word characters with spaces.
+            "   setlocal filetype=forth
+            "   let g:omni_syntax_use_iskeyword = 1
+            "   let g:omni_syntax_use_iskeyword_numeric = 1
+            " You will see entries like
+            "   #>>
+            "   (.local)
+            " These were found doing a grep in vim82\syntax
+            "   grep iskeyword *
+            "   forth.vim:setlocal iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
             let syn_list = substitute( syn_list, '[^0-9A-Za-z_ ]', ' ', 'g' )
         else
-            if g:omni_syntax_use_iskeyword_numeric == 1
+            if l:omni_syntax_use_iskeyword_numeric == 1
                 " iskeyword can contain value like this
                 " 38,42,43,45,47-58,60-62,64-90,97-122,_,+,-,*,/,%,<,=,>,:,$,?,!,@-@,94
                 " Numeric values convert to their ASCII equivalent using the
@@ -674,7 +723,7 @@ function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full )
                         " cycle through each character within the range
                         let [b:start, b:end] = split(item, '-')
                         for range_item in range( b:start, b:end )
-                            if range_item <= 127 || g:omni_syntax_use_single_byte == 0
+                            if range_item <= 127 || l:omni_syntax_use_single_byte == 0
                                 if nr2char(range_item) =~ '\p'
                                     let accepted_chars = accepted_chars . nr2char(range_item)
                                 endif
@@ -682,13 +731,13 @@ function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full )
                         endfor
                     elseif item =~ '^\d\+$'
                         " Only numeric, translate to a character
-                        if item < 127 || g:omni_syntax_use_single_byte == 0
+                        if item < 127 || l:omni_syntax_use_single_byte == 0
                             if nr2char(item) =~ '\p'
                                 let accepted_chars = accepted_chars . nr2char(item)
                             endif
                         endif
                     else
-                        if char2nr(item) < 127 || g:omni_syntax_use_single_byte == 0
+                        if char2nr(item) < 127 || l:omni_syntax_use_single_byte == 0
                             if item =~ '\p'
                                 let accepted_chars = accepted_chars . item
                             endif
@@ -724,9 +773,9 @@ function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full )
             endif
         endif
 
-        if b:omni_syntax_minimum_length > 0
+        if l:omni_syntax_minimum_length > 0
             " If the user specified a minimum length, enforce it
-            let syn_list = substitute(' '.syn_list.' ', ' \S\{,'.b:omni_syntax_minimum_length.'}\ze ', ' ', 'g')
+            let syn_list = substitute(' '.syn_list.' ', ' \S\{,'.l:omni_syntax_minimum_length.'}\ze ', ' ', 'g')
         endif
     else
         let syn_list = ''
@@ -756,5 +805,6 @@ function! OmniSyntaxShowChars(spec)
   endfor
   return join(map(result, 'nr2char(v:val)'), ', ')
 endfunction
+
 let &cpo = s:cpo_save
 unlet s:cpo_save
index 328d6ff6a537898a1c4ca44d088e09fa85acf418..ee2dc562b240d6d1159e67eb88628b36394b85c1 100644 (file)
@@ -1,4 +1,4 @@
-*autocmd.txt*   For Vim version 8.2.  Last change: 2021 Mar 13
+*autocmd.txt*   For Vim version 8.2.  Last change: 2021 Apr 25
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1522,7 +1522,14 @@ option will not cause any commands to be executed.
                        loaded buffer.  The current buffer is done last.
 
                        Note that [fname] is used to select the autocommands,
-                       not the buffers to which they are applied.
+                       not the buffers to which they are applied. Example: >
+                               augroup mine
+                                 autocmd!
+                                 autocmd FileType * echo expand('<amatch>')
+                               augroup END
+                               doautoall mine FileType Loaded-Buffer
+<                      Sourcing this script, you'll see as many
+                       "Loaded-Buffer" echoed as there are loaded buffers.
 
                        Careful: Don't use this for autocommands that delete a
                        buffer, change to another buffer or change the
index 798f58da54e7d3e664e04f3f71419cc16335aad9..920ee10b22c6df79f59506fdbc8f410f906c5bb9 100644 (file)
@@ -1,4 +1,4 @@
-*eval.txt*     For Vim version 8.2.  Last change: 2021 Apr 07
+*eval.txt*     For Vim version 8.2.  Last change: 2021 Apr 24
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1962,6 +1962,9 @@ v:fcs_choice      What should happen after a |FileChangedShell| event was
                The default is empty.  If another (invalid) value is used then
                Vim behaves like it is empty, there is no warning message.
 
+                                       *v:fname* *fname-variable*
+v:fname                The file name set by 'includeexpr'.  Empty otherwise.
+
                                        *v:fname_in* *fname_in-variable*
 v:fname_in     The name of the input file.  Valid while evaluating:
                        option          used for ~
@@ -5775,7 +5778,6 @@ getmousepos()                                             *getmousepos()*
 
                If the mouse is over a popup window then that window is used.
 
-
                When using |getchar()| the Vim variables |v:mouse_lnum|,
                |v:mouse_col| and |v:mouse_winid| also provide these values.
 
@@ -6721,6 +6723,7 @@ islocked({expr})                                  *islocked()* *E786*
 
 <              When {expr} is a variable that does not exist you get an error
                message.  Use |exists()| to check for existence.
+               In Vim9 script it does not work for local variables.
 
                Can also be used as a |method|: >
                        GetName()->islocked()
index ac8febebee3234f905bb57406dd99e3df25d325f..c93a05048055ebf424c3aa0a21a304cc5386c5bb 100644 (file)
@@ -1,4 +1,4 @@
-*gui.txt*       For Vim version 8.2.  Last change: 2020 Sep 28
+*gui.txt*       For Vim version 8.2.  Last change: 2021 May 01
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -620,6 +620,11 @@ expression register: >
 
    :amenu Insert.foobar   "='foobar'<CR>P
 
+The special text <Cmd> begins a "command menu", it executes the command
+directly without changing modes.  Where you might use ":...<CR>" you can
+instead use "<Cmd>...<CR>".  See |<Cmd>| for more info.  Example: >
+       anoremenu File.Next <Cmd>next<CR>
+
 Note that the '<' and 'k' flags in 'cpoptions' also apply here (when
 included they make the <> form and raw key codes not being recognized).
 
index f0e8f30fae44895988a13234b23863d22e3f21e1..57493097b117faf39eb23688a3c68aaaf303bc3c 100644 (file)
@@ -1,4 +1,4 @@
-*index.txt*     For Vim version 8.2.  Last change: 2021 Mar 22
+*index.txt*     For Vim version 8.2.  Last change: 2021 Apr 24
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
index 47e706bc22f8607e1d6dc423db85c3f71bde4bd6..13b2c2efca2b1c8d3529277d62ae386b15624319 100644 (file)
@@ -1,4 +1,4 @@
-*map.txt*       For Vim version 8.2.  Last change: 2021 Mar 17
+*map.txt*       For Vim version 8.2.  Last change: 2021 Apr 23
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -244,9 +244,12 @@ have a look at |maparg()|.
 If the first argument to one of these commands is "<expr>" and it is used to
 define a new mapping or abbreviation, the argument is an expression.  The
 expression is evaluated to obtain the {rhs} that is used.  Example: >
-       :inoremap <expr> . InsertDot()
-The result of the InsertDot() function will be inserted.  It could check the
+       :inoremap <expr> . <SID>InsertDot()
+The result of the s:InsertDot() function will be inserted.  It could check the
 text before the cursor and start omni completion when some condition is met.
+Using a script-local function is preferred, to avoid polluting the global
+namespace.  Use <SID> in the RHS so that the script that the mapping was
+defined in can be found.
 
 For abbreviations |v:char| is set to the character that was typed to trigger
 the abbreviation.  You can use this to decide how to expand the {lhs}.  You
@@ -261,7 +264,7 @@ input. Example: >
          call popup_create(... arguments ...)
          return "\<Ignore>"
        endfunc
-       nnoremap <expr> <F3> <Sid>OpenPopup()
+       nnoremap <expr> <F3> <SID>OpenPopup()
 
 Also, keep in mind that the expression may be evaluated when looking for
 typeahead, before the previous command has been executed.  For example: >
index 266ab46e3f9ef2bf2d4497529a43fe3a8601b087..84969b23f654c1fde6dbcfc905cc8eb2a7e98693 100644 (file)
@@ -1,4 +1,4 @@
-*options.txt*  For Vim version 8.2.  Last change: 2021 Apr 17
+*options.txt*  For Vim version 8.2.  Last change: 2021 Apr 28
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -4564,7 +4564,8 @@ A jump table for the options with a short description can be found at |Q_op|.
        Keywords are used in searching and recognizing with many commands:
        "w", "*", "[i", etc.  It is also used for "\k" in a |pattern|.  See
        'isfname' for a description of the format of this option.  For '@'
-       characters above 255 check the "word" character class.
+       characters above 255 check the "word" character class (any character
+       that is not white space or punctuation).
        For C programs you could use "a-z,A-Z,48-57,_,.,-,>".
        For a help file it is set to all non-blank printable characters except
        '*', '"' and '|' (so that CTRL-] on a command finds the help for that
index ae299879404240d99876a59437280e82dc5acb50..fcade001ae051267071e327b48c22c55d9f5451c 100644 (file)
@@ -1,4 +1,4 @@
-*quickfix.txt*  For Vim version 8.2.  Last change: 2021 Feb 05
+*quickfix.txt*  For Vim version 8.2.  Last change: 2021 Apr 30
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1013,8 +1013,6 @@ commands can be combined to create a NewGrep command: >
                        the error list to the matches.  Files matching
                        'wildignore' are ignored; files in 'suffixes' are
                        searched last.
-                       Without the 'g' flag each line is added only once.
-                       With 'g' every match is added.
 
                        {pattern} is a Vim search pattern.  Instead of
                        enclosing it in / any non-ID character (see
@@ -1026,6 +1024,22 @@ commands can be combined to create a NewGrep command: >
                        If {pattern} is empty (e.g. // is specified), the last
                        used search pattern is used. |last-pattern|
 
+                       Flags:
+                       'g'  Without the 'g' flag each line is added only
+                            once.  With 'g' every match is added.
+
+                       'j'  Without the 'j' flag Vim jumps to the first
+                            match.  With 'j' only the quickfix list is
+                            updated.  With the [!] any changes in the current
+                            buffer are abandoned.
+
+                       'f'  When the 'f' flag is specified, fuzzy string
+                            matching is used to find matching lines. In this
+                            case, {pattern} is treated as a literal string
+                            instead of a regular expression.  See
+                            |matchfuzzy()| for more info about fuzzy
+                            matching.
+
                        |QuickFixCmdPre| and |QuickFixCmdPost| are triggered.
                        A file that is opened for matching may use a buffer
                        number, but it is reused if possible to avoid
@@ -1038,11 +1052,6 @@ commands can be combined to create a NewGrep command: >
                        Useful if you only want to check if there is a match
                        and quit quickly when it's found.
 
-                       Without the 'j' flag Vim jumps to the first match.
-                       With 'j' only the quickfix list is updated.
-                       With the [!] any changes in the current buffer are
-                       abandoned.
-
                        Every second or so the searched file name is displayed
                        to give you an idea of the progress made.
                        Examples: >
index 2af7217cc1b33330318be60bfce6d86d49ef6247..cdaa66417af0173fd12bfe02e96effcbf83bcf57 100644 (file)
@@ -2630,6 +2630,8 @@ $VIM_POSIX        vi_diff.txt     /*$VIM_POSIX*
 :left  change.txt      /*:left*
 :lefta windows.txt     /*:lefta*
 :leftabove     windows.txt     /*:leftabove*
+:leg   vim9.txt        /*:leg*
+:legacy        vim9.txt        /*:legacy*
 :let   eval.txt        /*:let*
 :let%= eval.txt        /*:let%=*
 :let+= eval.txt        /*:let+=*
@@ -6439,6 +6441,7 @@ floating-point-format     eval.txt        /*floating-point-format*
 floating-point-precision       eval.txt        /*floating-point-precision*
 floor()        eval.txt        /*floor()*
 fmod() eval.txt        /*fmod()*
+fname-variable eval.txt        /*fname-variable*
 fname_diff-variable    eval.txt        /*fname_diff-variable*
 fname_in-variable      eval.txt        /*fname_in-variable*
 fname_new-variable     eval.txt        /*fname_new-variable*
@@ -9875,6 +9878,7 @@ v:exiting eval.txt        /*v:exiting*
 v:false        eval.txt        /*v:false*
 v:fcs_choice   eval.txt        /*v:fcs_choice*
 v:fcs_reason   eval.txt        /*v:fcs_reason*
+v:fname        eval.txt        /*v:fname*
 v:fname_diff   eval.txt        /*v:fname_diff*
 v:fname_in     eval.txt        /*v:fname_in*
 v:fname_new    eval.txt        /*v:fname_new*
index 612e28c89e346f11c90d4a39bb5065511280d3f0..955c3f6d9a25480c06bb6880271366a3d596192e 100644 (file)
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 8.2.  Last change: 2021 Apr 21
+*todo.txt*      For Vim version 8.2.  Last change: 2021 Apr 29
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -39,13 +39,6 @@ browser use: https://github.com/vim/vim/issues/1234
 -------------------- Known bugs and current work -----------------------
 
 Vim9 - Make everything work:
-- Compile builtin functions that access local variables:
-    islocked()
-- When evaluating constants for script variables, some functions could work:
-    has('asdf'), len('string')
-  eval_variable().  Should pass the ".xxx" that follows and return that.
-- Make "++nr" work.  "++g:count" doesn't work, thinks it is a range.
-- Reload: How to make sure type of script function hasn't changed?
 - expandcmd() with `=expr` in filename uses legacy expression.
 - eval_expr() in ex_cexpr()
 - eval_expr() call in dbg_parsearg() and debuggy_find()
@@ -64,6 +57,17 @@ Vim9 - Make everything work:
     the type of the list or dict member. (#8092)
 - Allow for using an autoload function name without quotes.  It is then loaded
   (and compiled) right away.  #8124
+- Test more expressions in legacy and Vim9 script, using
+  CheckLegacyAndVim9Success()
+- Test try/catch and throw better, also nested.
+  Test that return inside try/finally jumps to finally and then returns.
+- Test that a function defined inside a :def function is local to that
+  function, g: functions can be defined and script-local functions cannot be
+  defined.
+- Make debugging work - at least per function.  Need to recompile a function
+  to step through it line-by-line?  Evaluate the stack and variables on the
+  stack?
+- Reserve command for future use: :type, :class, :enum
 
 Once Vim9 is stable:
 - Change the help to prefer Vim9 syntax where appropriate
@@ -73,34 +77,17 @@ Once Vim9 is stable:
 - Use Vim9 for runtime files.
     PR #7497 for autoload/ccomplete.vim
 
-Also for Vim9:
+Further Vim9 improvements, possibly after launch:
 - better implementation for partial and tests for that.
-- Make "g:imported = Export.exported" work in Vim9 script.
-- Make Foo.Bar() work to call the dict function. (#5676)
-- Error in any command in "vim9script" aborts sourcing.
-- Find a way to test expressions in legacy and Vim9 script without duplication
-- Test try/catch and throw better, also nested.
-  Test that return inside try/finally jumps to finally and then returns.
-- Test that a function defined inside a :def function is local to that
-  function, g: functions can be defined and script-local functions cannot be
-  defined.
-- compile options that are an expression, e.g. "expr:" in 'spellsuggest',
+- Compile options that are an expression, e.g. "expr:" in 'spellsuggest',
   'foldexpr', 'foldtext', 'printexpr', 'diffexpr', 'patchexpr', 'charconvert',
   'balloonexpr', 'includeexpr', 'indentexpr', 'formatexpr'.
   Give an error if compilation fails. (#7625)
   Use the location where the option was set for deciding whether it's to be
   evaluated in Vim9 script context.
-- implement :type; import type declaration.
-- implement enum;  import enum.
+- implement :type, import type declaration.
+- implement enum,  import enum.
 - Future work: See |vim9-classes|
-       Define the keywords and commands to make sure it will be backwards
-       compatible.
-- Make debugging work - at least per function.  Need to recompile a function
-  to step through it line-by-line?  Evaluate the stack and variables on the
-  stack?
-- List commands when 'verbose' is set or :verbose is used.
-
-Further Vim9 improvements, possibly after launch:
 - For range: make table of first ASCII character with flag to quickly check if
   it can be a Vim9 command. E.g. "+" can, but "." can't.
 - compile get_lambda_tv() in popup_add_timeout()
@@ -108,6 +95,9 @@ Further Vim9 improvements, possibly after launch:
 - Make accessing varargs faster: arg[expr]
        EVAL expr
        LOADVARARG (varargs idx)
+- When evaluating constants for script variables, some functions could work:
+    has(featureName), len(someString)
+- Implement as part of an expression: ++expr, --expr, expr++, expr--.
 
 
 Popup windows:
@@ -1404,9 +1394,6 @@ Patch to make tests pass with EBCDIC. (Owen Leibman, 2016 Apr 10)
 Add ":read :command", to insert the output of an Ex command?
 Can already do it with ":$put =execute('command')".
 
-When repeating the 'confirm' dialog one needs to press Enter. (ds26gte, 2016
-Apr 17)  #762
-
 exists(":tearoff") does not tell you if the command is implemented. (Tony
 Mechelynck)  Perhaps use exists("::tearoff") to check?
 
index 53d6cb5485343e68475d551e5fd46db06991b31b..be77da7848932aa48b0a9cd91115cc277af53ba0 100644 (file)
@@ -1,4 +1,4 @@
-*usr_02.txt*   For Vim version 8.2.  Last change: 2019 Nov 21
+*usr_02.txt*   For Vim version 8.2.  Last change: 2021 Apr 24
 
                     VIM USER MANUAL - by Bram Moolenaar
 
@@ -532,7 +532,7 @@ Summary:                                    *help-summary*  >
 <   for the corresponding flag of the 'cpoptions' settings, substitute <letter>
    by a specific flag, e.g.: >
        :help cpo-;
-<   And for the guioption flags: >
+<   And for the 'guioptions' flags: >
        :help go-<letter>
 
 4) Normal mode commands do not have a prefix. To go to the help page for the
index 0a2ea629523fd4e5d9f765b440865addbd76a8bc..a368af0a5eda05ff1c8b0e219854e8dc1731fa14 100644 (file)
@@ -1,4 +1,4 @@
-*vim9.txt*     For Vim version 8.2.  Last change: 2021 Apr 11
+*vim9.txt*     For Vim version 8.2.  Last change: 2021 Apr 28
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -157,6 +157,11 @@ Compilation is done when any of these is encountered:
                                                        *E1091*
 If compilation fails it is not tried again on the next call, instead this
 error is given: "E1091: Function is not compiled: {name}".
+Compilation will fail when encountering a user command that has not been
+created yet.  In this case you can call `execute()` to invoke it at runtime. >
+       def MyFunc()
+         execute('DefinedLater')
+       enddef
 
 `:def` has no options like `:function` does: "range", "abort", "dict" or
 "closure".  A `:def` function always aborts on an error (unless `:silent!` was
@@ -605,6 +610,44 @@ Notes:
        echo [1, 2]
                [3, 4]
 
+
+White space ~
+
+Vim9 script enforces proper use of white space.  This is no longer allowed: >
+       var name=234    # Error!
+       var name= 234   # Error!
+       var name =234   # Error!
+There must be white space before and after the "=": >
+       var name = 234  # OK
+White space must also be put before the # that starts a comment after a
+command: >
+       var name = 234# Error!
+       var name = 234 # OK
+
+White space is required around most operators.
+
+White space is required in a sublist (list slice) around the ":", except at
+the start and end: >
+       otherlist = mylist[v : count]   # v:count has a different meaning
+       otherlist = mylist[:]           # make a copy of the List
+       otherlist = mylist[v :]
+       otherlist = mylist[: v]
+
+White space is not allowed:
+- Between a function name and the "(": >
+       Func (arg)         # Error!
+       Func
+            \ (arg)       # Error!
+       Func
+             (arg)        # Error!
+       Func(arg)          # OK
+       Func(
+             arg)         # OK
+       Func(
+             arg          # OK
+             )
+
+
 No curly braces expansion ~
 
 |curly-braces-names| cannot be used.
@@ -656,6 +699,17 @@ Comparators ~
 The 'ignorecase' option is not used for comparators that use strings.
 
 
+Abort after error ~
+
+In legacy script, when an error is encountered, Vim continues to execute
+following lines.  This can lead to a long sequence of errors and need to type
+CTRL-C to stop it.  In Vim9 script execution of commands stops at the first
+error.  Example: >
+       vim9script
+       var x = does-not-exist
+       echo 'not executed'
+
+
 For loop ~
 
 Legacy Vim script has some tricks to make a for loop over a list handle
@@ -679,43 +733,6 @@ Generally, you should not change the list that is iterated over.  Make a copy
 first if needed.
 
 
-White space ~
-
-Vim9 script enforces proper use of white space.  This is no longer allowed: >
-       var name=234    # Error!
-       var name= 234   # Error!
-       var name =234   # Error!
-There must be white space before and after the "=": >
-       var name = 234  # OK
-White space must also be put before the # that starts a comment after a
-command: >
-       var name = 234# Error!
-       var name = 234 # OK
-
-White space is required around most operators.
-
-White space is required in a sublist (list slice) around the ":", except at
-the start and end: >
-       otherlist = mylist[v : count]   # v:count has a different meaning
-       otherlist = mylist[:]           # make a copy of the List
-       otherlist = mylist[v :]
-       otherlist = mylist[: v]
-
-White space is not allowed:
-- Between a function name and the "(": >
-       Func (arg)         # Error!
-       Func
-            \ (arg)       # Error!
-       Func
-             (arg)        # Error!
-       Func(arg)          # OK
-       Func(
-             arg)         # OK
-       Func(
-             arg          # OK
-             )
-
-
 Conditions and expressions ~
 
 Conditions and expressions are mostly working like they do in other languages.
diff --git a/runtime/ftplugin/fpcmake.vim b/runtime/ftplugin/fpcmake.vim
new file mode 100644 (file)
index 0000000..8d95083
--- /dev/null
@@ -0,0 +1,25 @@
+" Vim filetype plugin file
+" Language:    Free Pascal Makefile Generator
+" Maintainer:  Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2021 Apr 23
+
+if exists("b:did_ftplugin")
+  finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+runtime! ftplugin/make.vim
+
+if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
+  let b:browsefilter = "Free Pascal Makefile Definition Files (*.fpc)\t*.fpc\n" ..
+                    \ "All Files (*.*)\t*.*\n"
+endif
+
+let b:undo_ftplugin = b:undo_ftplugin .. " | unlet! b:browsefilter"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: nowrap sw=2 sts=2 ts=8 noet:
index 5ff18b9601c401e694aa64c404d061928138cd2c..2de92563aec01502d2ea91c13856e5a148202925 100644 (file)
@@ -1,20 +1,50 @@
 " Vim filetype plugin file
-" Language:    pascal
-" Maintainer:  Dan Sharp <dwsharp at users dot sourceforge dot net>
-" Last Changed: 11 Apr 2011
-" URL:         http://dwsharp.users.sourceforge.net/vim/ftplugin
+" Language:            Pascal
+" Maintainer:          Doug Kearns <dougkearns@gmail.com>
+" Previous Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net>
+" Last Change:         2021 Apr 23
 
 if exists("b:did_ftplugin") | finish | endif
 let b:did_ftplugin = 1
 
+let s:cpo_save = &cpo
+set cpo&vim
+
+set comments=s:(*,m:\ ,e:*),s:{,m:\ ,e:}
+set commentstring={%s}
+
+if exists("pascal_delphi")
+  set comments+=:///
+endif
+
+if !exists("pascal_traditional")
+  set commentstring=//\ %s
+  set comments+=://
+endif
+
+setlocal formatoptions-=t formatoptions+=croql
+
 if exists("loaded_matchit")
-    let b:match_ignorecase = 1 " (pascal is case-insensitive)
+  let b:match_ignorecase = 1 " (Pascal is case-insensitive)
+
+  let b:match_words  = '\<\%(asm\|begin\|case\|\%(\%(=\|packed\)\s*\)\@<=\%(class\|object\)\|\%(=\s*\)\@<=interface\|record\|try\)\>'
+  let b:match_words .= ':\%(^\s*\)\@<=\%(except\|finally\|else\|otherwise\)\>'
+  let b:match_words .= ':\<end\>\.\@!'
+
+  let b:match_words .= ',\<repeat\>:\<until\>'
+  " let b:match_words .= ',\<if\>:\<else\>' " FIXME - else clashing with middle else. It seems like a debatable use anyway.
+  let b:match_words .= ',\<unit\>:\<\%(\%(^\s*\)\@<=interface\|implementation\|initialization\|finalization\)\>:\<end\.'
+endif
 
-    let b:match_words = '\<\%(begin\|case\|record\|object\|try\)\>'
-    let b:match_words .= ':\<^\s*\%(except\|finally\)\>:\<end\>'
-    let b:match_words .= ',\<repeat\>:\<until\>'
-    let b:match_words .= ',\<if\>:\<else\>'
+if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
+  let b:browsefilter = "Pascal Source Files (*.pas *.pp *.inc)\t*.pas;*.pp;*.inc\n" .
+                    \ "All Files (*.*)\t*.*\n"
 endif
 
-" Undo the stuff we changed.
-let b:undo_ftplugin = "unlet! b:match_words"
+let b:undo_ftplugin = "setl fo< cms< com< " ..
+                   \ "| unlet! b:browsefilter b:match_words b:match_ignorecase"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: nowrap sw=2 sts=2 ts=8 noet:
index 66a8a40173ae97693a09cf9b50079c20c3583838..4483efdbd89c2cb2a952b177cab992823403d243 100644 (file)
@@ -20,8 +20,8 @@ let s:comment_rx = '^\s*#'
 let s:rule_rx = '^[^ \t#:][^#:]*:\{1,2}\%([^=:]\|$\)'
 let s:continued_rule_rx = '^[^#:]*:\{1,2}\%([^=:]\|$\)'
 let s:continuation_rx = '\\$'
-let s:assignment_rx = '^\s*\h\w*\s*[+?]\==\s*\zs.*\\$'
-let s:folded_assignment_rx = '^\s*\h\w*\s*[+?]\=='
+let s:assignment_rx = '^\s*\h\w*\s*[+:?]\==\s*\zs.*\\$'
+let s:folded_assignment_rx = '^\s*\h\w*\s*[+:?]\=='
 " TODO: This needs to be a lot more restrictive in what it matches.
 let s:just_inserted_rule_rx = '^\s*[^#:]\+:\{1,2}$'
 let s:conditional_directive_rx = '^ *\%(ifn\=\%(eq\|def\)\|else\)\>'
index 9b8a6361bc4c3a0b59a992f5dafd686c0a2cf90f..6a78ef8c6e9c33a83b5c7cc6107f0a33bb717311 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:    generic configure file
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2005 Jun 20
+" Last Change: 2021 May 01
 
 " Quit when a (custom) syntax file was already loaded
 if exists("b:current_syntax")
@@ -10,8 +10,8 @@ endif
 
 syn keyword    confTodo        contained TODO FIXME XXX
 " Avoid matching "text#text", used in /etc/disktab and /etc/gettytab
-syn match      confComment     "^#.*" contains=confTodo
-syn match      confComment     "\s#.*"ms=s+1 contains=confTodo
+syn match      confComment     "^#.*" contains=confTodo,@Spell
+syn match      confComment     "\s#.*"ms=s+1 contains=confTodo,@Spell
 syn region     confString      start=+"+ skip=+\\\\\|\\"+ end=+"+ oneline
 syn region     confString      start=+'+ skip=+\\\\\|\\'+ end=+'+ oneline
 
diff --git a/runtime/syntax/fpcmake.vim b/runtime/syntax/fpcmake.vim
new file mode 100644 (file)
index 0000000..bbc6f1d
--- /dev/null
@@ -0,0 +1,58 @@
+" Vim syntax file
+" Language:    Free Pascal Makefile Definition Files
+" Maintainer:  Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2021 Apr 23
+
+if exists("b:current_syntax")
+  finish
+endif
+
+runtime! syntax/make.vim
+
+" NOTE: using start-of-line anchored syn-match groups is simpler than other
+"      alternatives when interacting with the sourced make.vim syntax groups
+
+" Sections
+syn region fpcmakeSection matchgroup=fpcmakeSectionDelimiter start="^\s*\[" end="]" contains=fpcmakeSectionName
+
+syn keyword fpcmakeSectionName contained clean compiler default dist install
+syn keyword fpcmakeSectionName contained lib package prerules require rules
+syn keyword fpcmakeSectionName contained shared target
+
+" [clean]
+syn match fpcmakeRule "^\s*\(units\|files\)\>"
+" [compiler]
+syn match fpcmakeRule "^\s*\(options\|version\|unitdir\|librarydir\|objectdir\)\>"
+syn match fpcmakeRule "^\s*\(targetdir\|sourcedir\|unittargetdir\|includedir\)\>"
+" [default]
+syn match fpcmakeRule "^\s*\(cpu\|dir\|fpcdir\|rule\|target\)\>"
+" [dist]
+syn match fpcmakeRule "^\s*\(destdir\|zipname\|ziptarget\)\>"
+" [install]
+syn match fpcmakeRule "^\s*\(basedir\|datadir\|fpcpackage\|files\|prefix\)\>"
+syn match fpcmakeRule "^\s*\(units\)\>"
+" [package]
+syn match fpcmakeRule "^\s*\(name\|version\|main\)\>"
+" [requires]
+syn match fpcmakeRule "^\s*\(fpcmake\|packages\|libc\|nortl\|unitdir\)\>"
+syn match fpcmakeRule "^\s*\(packagedir\|tools\)\>"
+" [shared]
+syn match fpcmakeRule "^\s*\(build\|libname\|libversion\|libunits\)\>"
+" [target]
+syn match fpcmakeRule "^\s*\(dirs\|exampledirs\|examples\|loaders\|programs\)\>"
+syn match fpcmakeRule "^\s*\(rsts\|units\)\>"
+
+" Comments
+syn keyword fpcmakeTodo    TODO FIXME XXX contained
+syn match   fpcmakeComment "#.*" contains=fpcmakeTodo,@Spell
+
+" Default highlighting
+hi def link fpcmakeSectionDelimiter    Delimiter
+hi def link fpcmakeSectionName         Type
+hi def link fpcmakeComment             Comment
+hi def link fpcmakeTodo                        Todo
+hi def link fpcmakeRule                        Identifier
+
+let b:current_syntax = "fpcmake"
+
+" vim: nowrap sw=2 sts=2 ts=8 noet:
index 535efc99d3fb726590c17a75f24249e6052e8acc..3ab5c2e66164899f15c7807b6ebcc71b66f6c62a 100644 (file)
@@ -1,16 +1,16 @@
 " Vim syntax file
-" Language:    Pascal
-" Version: 2.8
-" Last Change: 2004/10/17 17:47:30
-" Maintainer:  Xavier Crégut <xavier.cregut@enseeiht.fr>
-" Previous Maintainer: Mario Eusebio <bio@dq.fct.unl.pt>
+" Language:            Pascal
+" Maintainer:          Doug Kearns <dougkearns@gmail.com>
+" Previous Maintainers:        Xavier Crégut <xavier.cregut@enseeiht.fr>
+"                      Mario Eusebio <bio@dq.fct.unl.pt>
+" Last Change:         2021 Apr 23
 
 " Contributors: Tim Chase <tchase@csc.com>,
-"      Stas Grabois <stsi@vtrails.com>,
-"      Mazen NEIFER <mazen.neifer.2001@supaero.fr>,
-"      Klaus Hast <Klaus.Hast@arcor.net>,
-"      Austin Ziegler <austin@halostatue.ca>,
-"      Markus Koenig <markus@stber-koenig.de>
+"              Stas Grabois <stsi@vtrails.com>,
+"              Mazen NEIFER <mazen.neifer.2001@supaero.fr>,
+"              Klaus Hast <Klaus.Hast@arcor.net>,
+"              Austin Ziegler <austin@halostatue.ca>,
+"              Markus Koenig <markus@stber-koenig.de>
 
 " quit when a syntax file was already loaded
 if exists("b:current_syntax")
@@ -25,10 +25,10 @@ syn keyword pascalBoolean   true false
 syn keyword pascalConditional  if else then
 syn keyword pascalConstant     nil maxint
 syn keyword pascalLabel                case goto label
-syn keyword pascalOperator     and div downto in mod not of or packed with
+syn keyword pascalOperator     and div downto in mod not of or packed
 syn keyword pascalRepeat       do for do repeat while to until
 syn keyword pascalStatement    procedure function
-syn keyword pascalStatement    program begin end const var type
+syn keyword pascalStatement    program begin end const var type with
 syn keyword pascalStruct       record
 syn keyword pascalType         array boolean char integer file pointer real set
 syn keyword pascalType         string text variant
@@ -40,12 +40,12 @@ syn keyword pascalTodo contained    TODO FIXME XXX DEBUG NOTE
     " 20010723az: When wanted, highlight the trailing whitespace -- this is
     " based on c_space_errors; to enable, use "pascal_space_errors".
 if exists("pascal_space_errors")
-    if !exists("pascal_no_trail_space_error")
-        syn match pascalSpaceError "\s\+$"
-    endif
-    if !exists("pascal_no_tab_space_error")
-        syn match pascalSpaceError " \+\t"me=e-1
-    endif
+  if !exists("pascal_no_trail_space_error")
+    syn match pascalSpaceError "\s\+$"
+  endif
+  if !exists("pascal_no_tab_space_error")
+    syn match pascalSpaceError " \+\t"me=e-1
+  endif
 endif
 
 
@@ -98,9 +98,24 @@ if exists("pascal_symbol_operator")
 endif
 
 syn match  pascalNumber                "-\=\<\d\+\>"
+if !exists("pascal_traditional")
+  syn match  pascalHexNumber   "\$\x\+\>"
+endif
+if exists("pascal_fpc")
+  syn match    pascalOctNumber "&\o\+\>"
+  syn match    pascalBinNumber "%[01]\+\>"
+endif
+if exists("pascal_gpc")
+  syn match  pascalExtendedNumber      "\%([2-9]\|[12]\d\|3[0-6]\)#[[:alnum:]]\+\>"
+endif
+
 syn match  pascalFloat         "-\=\<\d\+\.\d\+\>"
 syn match  pascalFloat         "-\=\<\d\+\.\d\+[eE]-\=\d\+\>"
-syn match  pascalHexNumber     "\$[0-9a-fA-F]\+\>"
+
+if !exists("pascal_traditional")
+  " allow leading zeros
+  syn match pascalControlCharacter     "#\%([01]\=\d\=\d\|2[0-4]\d\|25[0-5]\)\>"
+endif
 
 if exists("pascal_no_tabs")
   syn match pascalShowTab "\t"
@@ -142,7 +157,7 @@ if !exists("pascal_traditional")
   syn keyword pascalStatement  interface unit uses
   syn keyword pascalModifier   absolute assembler external far forward inline
   syn keyword pascalModifier   interrupt near virtual 
-  syn keyword pascalAcces      private public 
+  syn keyword pascalAccess     private public strict
   syn keyword pascalStruct     object 
   syn keyword pascalOperator   shl shr xor
 
@@ -157,6 +172,7 @@ if !exists("pascal_traditional")
   syn keyword pascalType       Single Double Extended Comp
   syn keyword pascalType       PChar
 
+  syn keyword pascalPredefined self
 
   if !exists ("pascal_fpc")
     syn keyword pascalPredefined       Result
@@ -166,11 +182,11 @@ if !exists("pascal_traditional")
     syn region pascalComment        start="//" end="$" contains=pascalTodo,pascalSpaceError
     syn keyword pascalStatement        fail otherwise operator
     syn keyword pascalDirective        popstack
-    syn keyword pascalPredefined self
     syn keyword pascalType     ShortString AnsiString WideString
   endif
 
   if exists("pascal_gpc")
+    syn region pascalComment        start="//" end="$" contains=pascalTodo,pascalSpaceError
     syn keyword pascalType     SmallInt
     syn keyword pascalType     AnsiChar
     syn keyword pascalType     PAnsiChar
@@ -178,6 +194,8 @@ if !exists("pascal_traditional")
 
   if exists("pascal_delphi")
     syn region pascalComment   start="//"  end="$" contains=pascalTodo,pascalSpaceError
+    syn region pascalDocumentation     start="///" end="$" contains=pascalTodo,pascalSpaceError
+    syn region pascalDocumentation     start="{!"  end="}" contains=pascalTodo,pascalSpaceError
     syn keyword pascalType     SmallInt Int64
     syn keyword pascalType     Real48 Currency
     syn keyword pascalType     AnsiChar WideChar
@@ -192,11 +210,11 @@ if !exists("pascal_traditional")
     syn keyword pascalStatement        initialization finalization uses exports
     syn keyword pascalStatement        property out resourcestring threadvar
     syn keyword pascalModifier contains
-    syn keyword pascalModifier overridden reintroduce abstract
+    syn keyword pascalModifier overridden reintroduce abstract sealed
     syn keyword pascalModifier override export dynamic name message
     syn keyword pascalModifier dispid index stored default nodefault readonly
     syn keyword pascalModifier writeonly implements overload requires resident
-    syn keyword pascalAcces    protected published automated
+    syn keyword pascalAccess   protected published automated
     syn keyword pascalDirective        register pascal cvar cdecl stdcall safecall
     syn keyword pascalOperator as is
   endif
@@ -319,37 +337,43 @@ endif
 " Define the default highlighting.
 " Only when an item doesn't have highlighting yet
 
-hi def link pascalAcces                pascalStatement
+hi def link pascalAccess               pascalStatement
 hi def link pascalBoolean              Boolean
 hi def link pascalComment              Comment
-hi def link pascalConditional  Conditional
+hi def link pascalDocumentation                Comment
+hi def link pascalConditional          Conditional
 hi def link pascalConstant             Constant
-hi def link pascalDelimiter    Identifier
-hi def link pascalDirective    pascalStatement
-hi def link pascalException    Exception
-hi def link pascalFloat                Float
+hi def link pascalControlCharacter     Character
+hi def link pascalDelimiter            Identifier
+hi def link pascalDirective            pascalStatement
+hi def link pascalException            Exception
+hi def link pascalFloat                        Float
 hi def link pascalFunction             Function
-hi def link pascalLabel                Label
+hi def link pascalLabel                        Label
 hi def link pascalMatrixDelimiter      Identifier
 hi def link pascalModifier             Type
 hi def link pascalNumber               Number
+hi def link pascalExtendedNumber       Number
+hi def link pascalBinNumber            pascalNumber
+hi def link pascalHexNumber            pascalNumber
+hi def link pascalOctNumber            pascalNumber
 hi def link pascalOperator             Operator
-hi def link pascalPredefined   pascalStatement
+hi def link pascalPredefined           pascalStatement
 hi def link pascalPreProc              PreProc
 hi def link pascalRepeat               Repeat
-hi def link pascalSpaceError   Error
-hi def link pascalStatement    Statement
+hi def link pascalSpaceError           Error
+hi def link pascalStatement            Statement
 hi def link pascalString               String
-hi def link pascalStringEscape Special
+hi def link pascalStringEscape         Special
 hi def link pascalStringEscapeGPC      Special
-hi def link pascalStringError  Error
+hi def link pascalStringError          Error
 hi def link pascalStruct               pascalStatement
 hi def link pascalSymbolOperator       pascalOperator
-hi def link pascalTodo         Todo
-hi def link pascalType         Type
-hi def link pascalUnclassified pascalStatement
+hi def link pascalTodo                 Todo
+hi def link pascalType                 Type
+hi def link pascalUnclassified         pascalStatement
 "  hi def link pascalAsm               Assembler
-hi def link pascalError                Error
+hi def link pascalError                        Error
 hi def link pascalAsmKey               pascalStatement
 hi def link pascalShowTab              Error
 
@@ -357,4 +381,4 @@ hi def link pascalShowTab           Error
 
 let b:current_syntax = "pascal"
 
-" vim: ts=8 sw=2
+" vim: nowrap sw=2 sts=2 ts=8 noet: