aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/autoload/gzip.vim6
-rw-r--r--runtime/doc/autocmd.txt17
-rw-r--r--runtime/doc/cmdline.txt5
-rw-r--r--runtime/doc/editing.txt3
-rw-r--r--runtime/doc/eval.txt4
-rw-r--r--runtime/doc/index.txt4
-rw-r--r--runtime/doc/options.txt2
-rw-r--r--runtime/doc/syntax.txt9
-rw-r--r--runtime/ftplugin/mf.vim64
-rw-r--r--runtime/ftplugin/mp.vim67
-rw-r--r--runtime/indent/fortran.vim12
-rw-r--r--runtime/indent/mf.vim6
-rw-r--r--runtime/indent/mp.vim482
-rw-r--r--runtime/syntax/debsources.vim4
-rw-r--r--runtime/syntax/mf.vim371
-rw-r--r--runtime/syntax/mp.vim828
16 files changed, 1465 insertions, 419 deletions
diff --git a/runtime/autoload/gzip.vim b/runtime/autoload/gzip.vim
index a6b4605b06..e4adec0947 100644
--- a/runtime/autoload/gzip.vim
+++ b/runtime/autoload/gzip.vim
@@ -1,6 +1,6 @@
" Vim autoload file for editing compressed files.
" Maintainer: Bram Moolenaar <Bram@vim.org>
-" Last Change: 2014 Nov 05
+" Last Change: 2016 Sep 28
" These functions are used by the gzip plugin.
@@ -63,6 +63,9 @@ fun gzip#read(cmd)
" set 'modifiable'
let ma_save = &ma
setlocal ma
+ " set 'write'
+ let write_save = &write
+ set write
" Reset 'foldenable', otherwise line numbers get adjusted.
if has("folding")
let fen_save = &fen
@@ -127,6 +130,7 @@ fun gzip#read(cmd)
let &pm = pm_save
let &cpo = cpo_save
let &l:ma = ma_save
+ let &write = write_save
if has("folding")
let &l:fen = fen_save
endif
diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
index b27a1a8763..f783438fc9 100644
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -76,11 +76,15 @@ exception is that "<sfile>" is expanded when the autocmd is defined. Example:
Here Vim expands <sfile> to the name of the file containing this line.
-When your vimrc file is sourced twice, the autocommands will appear twice.
-To avoid this, put this command in your vimrc file, before defining
-autocommands: >
+`:autocmd` adds to the list of autocommands regardless of whether they are
+already present. When your .vimrc file is sourced twice, the autocommands
+will appear twice. To avoid this, define your autocommands in a group, so
+that you can easily clear them: >
- :autocmd! " Remove ALL autocommands for the current group.
+ augroup vimrc
+ autocmd! " Remove all vimrc autocommands
+ au BufNewFile,BufRead *.html so <sfile>:h/html.vim
+ augroup END
If you don't want to remove all autocommands, you can instead use a variable
to ensure that Vim includes the autocommands only once: >
@@ -127,8 +131,13 @@ prompt. When one command outputs two messages this can happen anyway.
:au[tocmd]! [group] {event}
Remove ALL autocommands for {event}.
+ Warning: You should not do this without a group for
+ |BufRead| and other common events, it can break
+ plugins, syntax highlighting, etc.
:au[tocmd]! [group] Remove ALL autocommands.
+ Warning: You should normally not do this without a
+ group, it breaks plugins, syntax highlighting, etc.
When the [group] argument is not given, Vim uses the current group (as defined
with ":augroup"); otherwise, Vim uses the group defined with [group].
diff --git a/runtime/doc/cmdline.txt b/runtime/doc/cmdline.txt
index 7277e1d22e..3e041c3b62 100644
--- a/runtime/doc/cmdline.txt
+++ b/runtime/doc/cmdline.txt
@@ -219,9 +219,10 @@ CTRL-Y When there is a modeless selection, copy the selection into
the clipboard. |modeless-selection|
If there is no selection CTRL-Y is inserted as a character.
-CTRL-J *c_CTRL-J* *c_<NL>* *c_<CR>* *c_CR*
+CTRL-M or CTRL-J *c_CTRL-M* *c_CTRL-J* *c_<NL>* *c_<CR>* *c_CR*
<CR> or <NL> start entered command
- *c_<Esc>* *c_Esc*
+
+CTRL-[ *c_CTRL-[* *c_<Esc>* *c_Esc*
<Esc> When typed and 'x' not present in 'cpoptions', quit
Command-line mode without executing. In macros or when 'x'
present in 'cpoptions', start entered command.
diff --git a/runtime/doc/editing.txt b/runtime/doc/editing.txt
index 57458b7b81..7007a89611 100644
--- a/runtime/doc/editing.txt
+++ b/runtime/doc/editing.txt
@@ -160,7 +160,8 @@ start editing another file, Vim will refuse this. In order to overrule this
protection, add a '!' to the command. The changes will then be lost. For
example: ":q" will not work if the buffer was changed, but ":q!" will. To see
whether the buffer was changed use the "CTRL-G" command. The message includes
-the string "[Modified]" if the buffer has been changed.
+the string "[Modified]" if the buffer has been changed, or "+" if the 'm' flag
+is in 'shortmess'.
If you want to automatically save the changes without asking, switch on the
'autowriteall' option. 'autowrite' is the associated Vi-compatible option
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 19c1f0c23d..2d6c6ee3a0 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1241,7 +1241,7 @@ Examples for using a lambda expression with |sort()|, |map()| and |filter()|: >
:echo sort([3,7,2,1,4], {a, b -> a - b})
< [1, 2, 3, 4, 7]
-The lambda expression is also useful for Channel, Job and timer: >
+The lambda expression is also useful for jobs and timers: >
:let timer = timer_start(500,
\ {-> execute("echo 'Handler called'", "")},
\ {'repeat': 3})
@@ -3518,7 +3518,7 @@ filter({expr1}, {expr2}) *filter()*
call filter(myList, {idx, val -> idx * val <= 42})
< If you do not use "val" you can leave it out: >
call filter(myList, {idx -> idx % 2 == 1})
-
+<
The operation is done in-place. If you want a |List| or
|Dictionary| to remain unmodified make a copy first: >
:let l = filter(copy(mylist), 'v:val =~ "KEEP"')
diff --git a/runtime/doc/index.txt b/runtime/doc/index.txt
index 7267a45d41..16e9d4a64d 100644
--- a/runtime/doc/index.txt
+++ b/runtime/doc/index.txt
@@ -1000,7 +1000,7 @@ tag command action in Command-line editing mode ~
|c_CTRL-L| CTRL-L do completion on the pattern in front of the
cursor and insert the longest common part
|c_<CR>| <CR> execute entered command
-|c_<CR>| CTRL-M same as <CR>
+|c_CTRL-M| CTRL-M same as <CR>
|c_CTRL-N| CTRL-N after using 'wildchar' with multiple matches:
go to next match, otherwise: same as <Down>
CTRL-O not used
@@ -1024,7 +1024,7 @@ tag command action in Command-line editing mode ~
CTRL-Y copy (yank) modeless selection
CTRL-Z not used (reserved for suspend)
|c_<Esc>| <Esc> abandon command-line without executing it
-|c_<Esc>| CTRL-[ same as <Esc>
+|c_CTRL-[| CTRL-[ same as <Esc>
|c_CTRL-\_CTRL-N| CTRL-\ CTRL-N go to Normal mode, abandon command-line
|c_CTRL-\_CTRL-G| CTRL-\ CTRL-G go to mode specified with 'insertmode',
abandon command-line
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 7ca6612225..b0b47cc243 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -10,7 +10,7 @@ Options *options*
2. Automatically setting options |auto-setting|
3. Options summary |option-summary|
-For an overview of options see help.txt |option-list|.
+For an overview of options see quickref.txt |option-list|.
Vim has a number of internal variables and switches which can be set to
achieve special effects. These options come in three forms:
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index e3da736489..1ee35e19dd 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -3555,7 +3555,11 @@ DEFINING KEYWORDS *:syn-keyword*
DEFINING MATCHES *:syn-match*
-:sy[ntax] match {group-name} [{options}] [excludenl] {pattern} [{options}]
+:sy[ntax] match {group-name} [{options}]
+ [excludenl]
+ [keepend]
+ {pattern}
+ [{options}]
This defines one match.
@@ -3564,6 +3568,9 @@ DEFINING MATCHES *:syn-match*
[excludenl] Don't make a pattern with the end-of-line "$"
extend a containing match or region. Must be
given before the pattern. |:syn-excludenl|
+ keepend Don't allow contained matches to go past a
+ match with the end pattern. See
+ |:syn-keepend|.
{pattern} The search pattern that defines the match.
See |:syn-pattern| below.
Note that the pattern may match more than one
diff --git a/runtime/ftplugin/mf.vim b/runtime/ftplugin/mf.vim
index fd1d3ce646..fa567368ea 100644
--- a/runtime/ftplugin/mf.vim
+++ b/runtime/ftplugin/mf.vim
@@ -1,7 +1,8 @@
" Vim filetype plugin file
-" Language: MetaFont
-" Maintainer: Nikolai Weibull <now@bitwi.se>
-" Latest Revision: 2008-07-09
+" Language: METAFONT
+" Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
+" Former Maintainers: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2016 Oct 1
if exists("b:did_ftplugin")
finish
@@ -11,9 +12,62 @@ let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
-let b:undo_ftplugin = "setl com< cms< fo<"
+let b:undo_ftplugin = "setl com< cms< fo< sua< inc< def< ofu<"
+ \ . "| unlet! b:match_ignorecase b:match_words b:match_skip"
-setlocal comments=:% commentstring=%\ %s formatoptions-=t formatoptions+=croql
+setlocal comments=:% commentstring=%\ %s formatoptions-=t formatoptions+=cjroql2
+setlocal suffixesadd=.mf
+let &l:include = '\<input\>'
+let &l:define = '\<\%(let\|newinternal\|interim\|def\|vardef\)\>\|\<\%(primary\|secondary\|tertiary\)def\>\s*[^ .]\+'
+setlocal omnifunc=syntaxcomplete#Complete
+let g:omni_syntax_group_include_mf = 'mf\w\+'
+let g:omni_syntax_group_exclude_mf = 'mfTodoComment'
+
+let s:mp_regex = {
+ \ 'beginsection' : '^\s*\%(\%(\|var\|primary\|secondary\|tertiary\)def\|beginchar\|beginlogochar\)\>',
+ \ 'endsection' : '^\s*\%(enddef\|endchar\|endlogochar\)\>',
+ \ 'beginblock' : '^\s*\%(begingroup\|if\|for\%(\|suffixes\|ever\)\)\>',
+ \ 'endblock' : '^\s*\%(endgroup\|fi\|endfor\)\>'
+ \ }
+
+function! s:move_around(count, what, flags, visual)
+ if a:visual
+ exe "normal! gv"
+ endif
+ call search(s:mp_regex[a:what], a:flags.'s') " 's' sets previous context mark
+ for i in range(2, a:count)
+ call search(s:mp_regex[a:what], a:flags)
+ endfor
+endfunction
+
+
+" Move around macros.
+nnoremap <silent><buffer> [[ :<C-U>call <SID>move_around(v:count1, "beginsection", "bW", v:false) <CR>
+vnoremap <silent><buffer> [[ :<C-U>call <SID>move_around(v:count1, "beginsection", "bW", v:true) <CR>
+nnoremap <silent><buffer> ]] :<C-U>call <SID>move_around(v:count1, "beginsection", "W", v:false) <CR>
+vnoremap <silent><buffer> ]] :<C-U>call <SID>move_around(v:count1, "beginsection", "W", v:true) <CR>
+nnoremap <silent><buffer> [] :<C-U>call <SID>move_around(v:count1, "endsection", "bW", v:false) <CR>
+vnoremap <silent><buffer> [] :<C-U>call <SID>move_around(v:count1, "endsection", "bW", v:true) <CR>
+nnoremap <silent><buffer> ][ :<C-U>call <SID>move_around(v:count1, "endsection", "W", v:false) <CR>
+vnoremap <silent><buffer> ][ :<C-U>call <SID>move_around(v:count1, "endsection", "W", v:true) <CR>
+nnoremap <silent><buffer> [{ :<C-U>call <SID>move_around(v:count1, "beginblock", "bW", v:false) <CR>
+vnoremap <silent><buffer> [{ :<C-U>call <SID>move_around(v:count1, "beginblock", "bW", v:true) <CR>
+nnoremap <silent><buffer> ]} :<C-U>call <SID>move_around(v:count1, "endblock", "W", v:false) <CR>
+vnoremap <silent><buffer> ]} :<C-U>call <SID>move_around(v:count1, "endblock", "W", v:true) <CR>
+
+if exists("loaded_matchit")
+ let b:match_ignorecase = 0
+ let b:match_words =
+ \ '\<if\>:\<else\%[if]\>:\<fi\>,' .
+ \ '\<for\%(\|suffixes\|ever\)\>:\<exit\%(if\|unless\)\>:\<endfor\>,' .
+ \ '\<\%(\|var\|primary\|secondary\|tertiary\)def\>:\<enddef\>,' .
+ \ '\<begingroup\>:\<endgroup\>,' .
+ \ '\<beginchar\>:\<endchar\>' .
+ \ '\<beginlogochar\>:\<endlogochar\>'
+ " Ignore comments and strings
+ let b:match_skip = 'synIDattr(synID(line("."), col("."), 1), "name")
+ \ =~# "mf\\(Comment\\|String\\)$"'
+endif
let &cpo = s:cpo_save
unlet s:cpo_save
diff --git a/runtime/ftplugin/mp.vim b/runtime/ftplugin/mp.vim
index 316fa9bb64..a3c9af342b 100644
--- a/runtime/ftplugin/mp.vim
+++ b/runtime/ftplugin/mp.vim
@@ -1,7 +1,8 @@
" Vim filetype plugin file
-" Language: MetaPost
-" Maintainer: Nikolai Weibull <now@bitwi.se>
-" Latest Revision: 2008-07-09
+" Language: MetaPost
+" Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
+" Former Maintainers: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2016 Oct 1
if exists("b:did_ftplugin")
finish
@@ -11,9 +12,16 @@ let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
-let b:undo_ftplugin = "setl com< cms< fo<"
+let b:undo_ftplugin = "setl com< cms< fo< sua< inc< def< ofu<"
+ \ . "| unlet! b:match_ignorecase b:match_words b:match_skip"
-setlocal comments=:% commentstring=%\ %s formatoptions-=t formatoptions+=croql
+setlocal comments=:% commentstring=%\ %s formatoptions-=t formatoptions+=cjroql2
+setlocal suffixesadd=.mp,.mpiv
+let &l:include = '\<\%(input\|loadmodule\)\>' " loadmodule is in MetaFun
+let &l:define = '\<\%(let\|newinternal\|interim\|def\|vardef\)\>\|\<\%(primary\|secondary\|tertiary\)def\>\s*[^ .]\+'
+setlocal omnifunc=syntaxcomplete#Complete
+let g:omni_syntax_group_include_mp = 'mf\w\+,mp\w\+'
+let g:omni_syntax_group_exclude_mp = 'mfTodoComment'
if exists(":FixBeginfigs") != 2
command -nargs=0 FixBeginfigs call s:fix_beginfigs()
@@ -24,5 +32,54 @@ if exists(":FixBeginfigs") != 2
endfunction
endif
+let s:mp_regex = {
+ \ 'beginsection' : '^\s*\%(\%(\|var\|primary\|secondary\|tertiary\)def\|begin\%(fig\|char\|logochar\|glyph\|graph\)\)\>',
+ \ 'endsection' : '^\s*\%(enddef\|end\%(fig\|char\|logochar\|glyph\|graph\)\)\>',
+ \ 'beginblock' : '^\s*\%(begingroup\|if\|for\%(\|suffixes\|ever\)\)\>',
+ \ 'endblock' : '^\s*\%(endgroup\|fi\|endfor\)\>'
+ \ }
+
+function! s:move_around(count, what, flags, visual)
+ if a:visual
+ exe "normal! gv"
+ endif
+ call search(s:mp_regex[a:what], a:flags.'s') " 's' sets previous context mark
+ for i in range(2, a:count)
+ call search(s:mp_regex[a:what], a:flags)
+ endfor
+endfunction
+
+
+" Move around macros.
+nnoremap <silent><buffer> [[ :<C-U>call <SID>move_around(v:count1, "beginsection", "bW", v:false) <CR>
+vnoremap <silent><buffer> [[ :<C-U>call <SID>move_around(v:count1, "beginsection", "bW", v:true) <CR>
+nnoremap <silent><buffer> ]] :<C-U>call <SID>move_around(v:count1, "beginsection", "W", v:false) <CR>
+vnoremap <silent><buffer> ]] :<C-U>call <SID>move_around(v:count1, "beginsection", "W", v:true) <CR>
+nnoremap <silent><buffer> [] :<C-U>call <SID>move_around(v:count1, "endsection", "bW", v:false) <CR>
+vnoremap <silent><buffer> [] :<C-U>call <SID>move_around(v:count1, "endsection", "bW", v:true) <CR>
+nnoremap <silent><buffer> ][ :<C-U>call <SID>move_around(v:count1, "endsection", "W", v:false) <CR>
+vnoremap <silent><buffer> ][ :<C-U>call <SID>move_around(v:count1, "endsection", "W", v:true) <CR>
+nnoremap <silent><buffer> [{ :<C-U>call <SID>move_around(v:count1, "beginblock", "bW", v:false) <CR>
+vnoremap <silent><buffer> [{ :<C-U>call <SID>move_around(v:count1, "beginblock", "bW", v:true) <CR>
+nnoremap <silent><buffer> ]} :<C-U>call <SID>move_around(v:count1, "endblock", "W", v:false) <CR>
+vnoremap <silent><buffer> ]} :<C-U>call <SID>move_around(v:count1, "endblock", "W", v:true) <CR>
+
+if exists("loaded_matchit")
+ let b:match_ignorecase = 0
+ let b:match_words =
+ \ '\<if\>:\<else\%[if]\>:\<fi\>,' .
+ \ '\<for\%(\|suffixes\|ever\)\>:\<exit\%(if\|unless\)\>:\<endfor\>,' .
+ \ '\<\%(\|var\|primary\|secondary\|tertiary\)def\>:\<enddef\>,' .
+ \ '\<beginfig\>:\<endfig\>,' .
+ \ '\<begingroup\>:\<endgroup\>,' .
+ \ '\<beginchar\>:\<endchar\>' .
+ \ '\<beginlogochar\>:\<endlogochar\>' .
+ \ '\<beginglyph\>:\<endglyph\>' .
+ \ '\<begingraph\>:\<endgraph\>'
+ " Ignore comments and strings
+ let b:match_skip = 'synIDattr(synID(line("."), col("."), 1), "name")
+ \ =~# "^mf\\%(Comment\\|String\\|\\)$\\|^mpTeXinsert$"'
+endif
+
let &cpo = s:cpo_save
unlet s:cpo_save
diff --git a/runtime/indent/fortran.vim b/runtime/indent/fortran.vim
index 00cced4c9c..c9bee78a6e 100644
--- a/runtime/indent/fortran.vim
+++ b/runtime/indent/fortran.vim
@@ -1,11 +1,12 @@
" Vim indent file
" Language: Fortran 2008 (and older: Fortran 2003, 95, 90, and 77)
-" Version: 0.45
-" Last Change: 2016 Aug. 29
+" Version: 0.46
+" Last Change: 2016 Sep. 27
" Maintainer: Ajit J. Thakkar <ajit@unb.ca>; <http://www2.unb.ca/~ajit/>
" Usage: For instructions, do :help fortran-indent from Vim
" Credits:
-" Useful suggestions were made by: Albert Oliver Serra and Takuya Fujiwara.
+" Useful suggestions were made, in chronological order, by:
+" Albert Oliver Serra, Takuya Fujiwara and Philipp Edelmann.
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
@@ -121,7 +122,8 @@ function FortranGetIndent(lnum)
let prefix='\(\(pure\|impure\|elemental\|recursive\)\s\+\)\{,2}'
let type='\(\(integer\|real\|double\s\+precision\|complex\|logical'
\.'\|character\|type\|class\)\s*\S*\s\+\)\='
- if prevstat =~? '^\s*\(module\|contains\/submodule\|program\)\>'
+ if prevstat =~? '^\s*\(contains\|submodule\|program\)\>'
+ \ ||prevstat =~? '^\s*'.'module\>\(\s*\procedure\)\@!'
\ ||prevstat =~? '^\s*'.prefix.'subroutine\>'
\ ||prevstat =~? '^\s*'.prefix.type.'function\>'
\ ||prevstat =~? '^\s*'.type.prefix.'function\>'
@@ -129,7 +131,7 @@ function FortranGetIndent(lnum)
endif
if getline(v:lnum) =~? '^\s*contains\>'
\ ||getline(v:lnum)=~? '^\s*end\s*'
- \ .'\(function\|subroutine\|module\/submodule\|program\)\>'
+ \ .'\(function\|subroutine\|module\|submodule\|program\)\>'
let ind = ind - shiftwidth()
endif
endif
diff --git a/runtime/indent/mf.vim b/runtime/indent/mf.vim
new file mode 100644
index 0000000000..88737f4e9f
--- /dev/null
+++ b/runtime/indent/mf.vim
@@ -0,0 +1,6 @@
+" METAFONT indent file
+" Language: METAFONT
+" Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
+" Last Change: 2016 Oct 1
+
+runtime! indent/mp.vim
diff --git a/runtime/indent/mp.vim b/runtime/indent/mp.vim
index a118eb8b60..c9639efed3 100644
--- a/runtime/indent/mp.vim
+++ b/runtime/indent/mp.vim
@@ -1,56 +1,19 @@
" MetaPost indent file
-" Language: MetaPost
-" Maintainer: Eugene Minkovskii <emin@mccme.ru>
-" Last Change: 2012 May 18
-" Version: 0.1
-" ==========================================================================
-
-" Identation Rules: {{{1
-" First of all, MetaPost language don't expect any identation rules.
-" This screept need for you only if you (not MetaPost) need to do
-" exactly code. If you don't need to use indentation, see
-" :help filetype-indent-off
-"
-" Note: Every rules of identation in MetaPost or TeX languages (and in some
-" other of course) is very subjective. I can release only my vision of this
-" promlem.
-"
-" ..........................................................................
-" Example of correct (by me) identation {{{2
-" shiftwidth=4
-" ==========================================================================
-" for i=0 upto 99:
-" z[i] = (0,1u) rotated (i*360/100);
-" endfor
-" draw z0 -- z10 -- z20
-" withpen ... % <- 2sw because breaked line
-" withcolor ...; % <- same as previous
-" draw z0 for i=1 upto 99:
-" -- z[i] % <- 1sw from left end of 'for' satement
-" endfor withpen ... % <- 0sw from left end of 'for' satement
-" withcolor ...; % <- 2sw because breaked line
-" draw if One: % <- This is internal if (like 'for' above)
-" one
-" elsif Other:
-" other
-" fi withpen ...;
-" if one: % <- This is external if
-" draw one;
-" elseif other:
-" draw other;
-" fi
-" draw z0; draw z1;
-" }}}
-" }}}
+" Language: MetaPost
+" Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
+" Former Maintainers: Eugene Minkovskii <emin@mccme.ru>
+" Last Change: 2016 Oct 01
+" Version: 0.2
-" Only load this indent file when no other was loaded.
if exists("b:did_indent")
finish
endif
let b:did_indent = 1
setlocal indentexpr=GetMetaPostIndent()
-setlocal indentkeys+=;,<:>,=if,=for,=def,=end,=else,=fi
+setlocal indentkeys+==end,=else,=fi,=fill,0),0]
+
+let b:undo_indent = "setl indentkeys< indentexpr<"
" Only define the function once.
if exists("*GetMetaPostIndent")
@@ -59,151 +22,332 @@ endif
let s:keepcpo= &cpo
set cpo&vim
-" Auxiliary Definitions: {{{1
-function! MetaNextNonblankNoncomment(pos)
- " Like nextnonblank() but ignore comment lines
- let tmp = nextnonblank(a:pos)
- while tmp && getline(tmp) =~ '^\s*%'
- let tmp = nextnonblank(tmp+1)
+function GetMetaPostIndent()
+ let ignorecase_save = &ignorecase
+ try
+ let &ignorecase = 0
+ return GetMetaPostIndentIntern()
+ finally
+ let &ignorecase = ignorecase_save
+ endtry
+endfunc
+
+" Regexps {{{
+" Note: the next three variables are made global so that a user may add
+" further keywords.
+"
+" Example:
+"
+" Put these in ~/.vim/after/indent/mp.vim
+"
+" let g:mp_open_tag .= '\|\<begintest\>'
+" let g:mp_close_tag .= '\|\<endtest\>'
+
+" Expressions starting indented blocks
+let g:mp_open_tag = ''
+ \ . '\<if\>'
+ \ . '\|\<else\%[if]\>'
+ \ . '\|\<for\%(\|ever\|suffixes\)\>'
+ \ . '\|\<begingroup\>'
+ \ . '\|\<\%(\|var\|primary\|secondary\|tertiary\)def\>'
+ \ . '\|^\s*\<begin\%(fig\|graph\|glyph\|char\|logochar\)\>'
+ \ . '\|[([{]'
+
+" Expressions ending indented blocks
+let g:mp_close_tag = ''
+ \ . '\<fi\>'
+ \ . '\|\<else\%[if]\>'
+ \ . '\|\<end\%(\|for\|group\|def\|fig\|char\|logochar\|glyph\|graph\)\>'
+ \ . '\|[)\]}]'
+
+" Statements that may span multiple lines and are ended by a semicolon. To
+" keep this list short, statements that are unlikely to be very long or are
+" not very common (e.g., keywords like `interim` or `showtoken`) are not
+" included.
+"
+" The regex for assignments and equations (the last branch) is tricky, because
+" it must not match things like `for i :=`, `if a=b`, `def...=`, etc... It is
+" not perfect, but it works reasonably well.
+let g:mp_statement = ''
+ \ . '\<\%(\|un\|cut\)draw\>'
+ \ . '\|\<\%(\|un\)fill\%[draw]\>'
+ \ . '\|\<draw\%(dbl\)\=arrow\>'
+ \ . '\|\<clip\>'
+ \ . '\|\<addto\>'
+ \ . '\|\<save\>'
+ \ . '\|\<setbounds\>'
+ \ . '\|\<message\>'
+ \ . '\|\<errmessage\>'
+ \ . '\|\<errhelp\>'
+ \ . '\|\<fontmapline\>'
+ \ . '\|\<pickup\>'
+ \ . '\|\<show\>'
+ \ . '\|\<special\>'
+ \ . '\|\<write\>'
+ \ . '\|\%(^\|;\)\%([^;=]*\%('.g:mp_open_tag.'\)\)\@!.\{-}:\=='
+
+" A line ends with zero or more spaces, possibly followed by a comment.
+let s:eol = '\s*\%($\|%\)'
+" }}}
+
+" Auxiliary functions {{{
+" Returns 1 if (0-based) position immediately preceding `pos` in `line` is
+" inside a string or a comment; returns 0 otherwise.
+
+" This is the function that is called more often when indenting, so it is
+" critical that it is efficient. The method we use is significantly faster
+" than using syntax attributes, and more general (it does not require
+" syntax_items). It is also faster than using a single regex matching an even
+" number of quotes. It helps that MetaPost strings cannot span more than one
+" line and cannot contain escaped quotes.
+function! s:CommentOrString(line, pos)
+ let in_string = 0
+ let q = stridx(a:line, '"')
+ let c = stridx(a:line, '%')
+ while q >= 0 && q < a:pos
+ if c >= 0 && c < q
+ if in_string " Find next percent symbol
+ let c = stridx(a:line, '%', q + 1)
+ else " Inside comment
+ return 1
+ endif
+ endif
+ let in_string = 1 - in_string
+ let q = stridx(a:line, '"', q + 1) " Find next quote
endwhile
- return tmp
+ return in_string || (c >= 0 && c <= a:pos)
endfunction
-function! MetaPrevNonblankNoncomment(pos)
- " Like prevnonblank() but ignore comment lines
- let tmp = prevnonblank(a:pos)
- while tmp && getline(tmp) =~ '^\s*%'
- let tmp = prevnonblank(tmp-1)
+" Find the first non-comment non-blank line before the current line. Skip also
+" verbatimtex/btex... etex blocks.
+function! s:PrevNonBlankNonComment(lnum)
+ let l:lnum = prevnonblank(a:lnum - 1)
+ while getline(l:lnum) =~# '^\s*%' ||
+ \ synIDattr(synID(a:lnum, 1, 1), "name") =~# '^mpTeXinsert$\|^tex\|^Delimiter'
+ let l:lnum = prevnonblank(l:lnum - 1)
endwhile
- return tmp
+ return l:lnum
endfunction
-function! MetaSearchNoncomment(pattern, ...)
- " Like search() but ignore commented areas
- if a:0
- let flags = a:1
- elseif &wrapscan
- let flags = "w"
- else
- let flags = "W"
- endif
- let cl = line(".")
- let cc = col(".")
- let tmp = search(a:pattern, flags)
- while tmp && synIDattr(synID(line("."), col("."), 1), "name") =~
- \ 'm[fp]\(Comment\|TeXinsert\|String\)'
- let tmp = search(a:pattern, flags)
+" Returns true if the last tag appearing in the line is an open tag; returns
+" false otherwise.
+function! s:LastTagIsOpen(line)
+ let o = s:LastValidMatchEnd(a:line, g:mp_open_tag, 0)
+ if o == - 1 | return v:false | endif
+ return s:LastValidMatchEnd(a:line, g:mp_close_tag, o) < 0
+endfunction
+
+" A simple, efficient and quite effective heuristics is used to test whether
+" a line should cause the next line to be indented: count the "opening tags"
+" (if, for, def, ...) in the line, count the "closing tags" (endif, endfor,
+" ...) in the line, and compute the difference. We call the result the
+" "weight" of the line. If the weight is positive, then the next line should
+" most likely be indented. Note that `else` and `elseif` are both opening and
+" closing tags, so they "cancel out" in almost all cases, the only exception
+" being a leading `else[if]`, which is counted as an opening tag, but not as
+" a closing tag (so that, for instance, a line containing a single `else:`
+" will have weight equal to one, not zero). We do not treat a trailing
+" `else[if]` in any special way, because lines ending with an open tag are
+" dealt with separately before this function is called (see
+" GetMetaPostIndentIntern()).
+"
+" Example:
+"
+" forsuffixes $=a,b: if x.$ = y.$ : draw else: fill fi
+" % This line will be indented because |{forsuffixes,if,else}| > |{else,fi}| (3 > 2)
+" endfor
+
+function! s:Weight(line)
+ let [o, i] = [0, s:ValidMatchEnd(a:line, g:mp_open_tag, 0)]
+ while i > 0
+ let o += 1
+ let i = s:ValidMatchEnd(a:line, g:mp_open_tag, i)
+ endwhile
+ let [c, i] = [0, matchend(a:line, '^\s*\<else\%[if]\>')] " Skip a leading else[if]
+ let i = s:ValidMatchEnd(a:line, g:mp_close_tag, i)
+ while i > 0
+ let c += 1
+ let i = s:ValidMatchEnd(a:line, g:mp_close_tag, i)
+ endwhile
+ return o - c
+endfunction
+
+" Similar to matchend(), but skips strings and comments.
+" line: a String
+function! s:ValidMatchEnd(line, pat, start)
+ let i = matchend(a:line, a:pat, a:start)
+ while i > 0 && s:CommentOrString(a:line, i)
+ let i = matchend(a:line, a:pat, i)
+ endwhile
+ return i
+endfunction
+
+" Like s:ValidMatchEnd(), but returns the end position of the last (i.e.,
+" rightmost) match.
+function! s:LastValidMatchEnd(line, pat, start)
+ let last_found = -1
+ let i = matchend(a:line, a:pat, a:start)
+ while i > 0
+ if !s:CommentOrString(a:line, i)
+ let last_found = i
+ endif
+ let i = matchend(a:line, a:pat, i)
endwhile
- if !tmp
- call cursor(cl,cc)
+ return last_found
+endfunction
+
+function! s:DecreaseIndentOnClosingTag(curr_indent)
+ let cur_text = getline(v:lnum)
+ if cur_text =~# '^\s*\%('.g:mp_close_tag.'\)'
+ return max([a:curr_indent - shiftwidth(), 0])
endif
- return tmp
+ return a:curr_indent
endfunction
" }}}
-function! GetMetaPostIndent()
- " not indent in comment ???
- if synIDattr(synID(line("."), col("."), 1), "name") =~
- \ 'm[fp]\(Comment\|TeXinsert\|String\)'
- return -1
- endif
- " Some RegExps: {{{1
- " end_of_item: all of end by ';'
- " + all of end by :endfor, :enddef, :endfig, :endgroup, :fi
- " + all of start by :beginfig(num), :begingroup
- " + all of start by :for, :if, :else, :elseif and end by ':'
- " + all of start by :def, :vardef and end by '='
- let end_of_item = '\(' .
- \ ';\|' .
- \ '\<\(end\(for\|def\|fig\|group\)\|fi\)\>\|' .
- \ '\<begin\(group\>\|fig\s*(\s*\d\+\s*)\)\|' .
- \ '\<\(for\|if\|else\(if\)\=\)\>.\+:\|' .
- \ '\<\(var\)\=def\>.\+=' . '\)'
- " }}}
- " Save: current position {{{1
- let cl = line (".")
- let cc = col (".")
- let cs = getline(".")
- " if it is :beginfig or :endfig use zero indent
- if cs =~ '^\s*\(begin\|end\)fig\>'
- return 0
- endif
- " }}}
- " Initialise: ind variable {{{1
- " search previous item not in current line
- let p_semicol_l = MetaSearchNoncomment(end_of_item,"bW")
- while p_semicol_l == cl
- let p_semicol_l = MetaSearchNoncomment(end_of_item,"bW")
- endwhile
- " if this is first item in program use zero indent
- if !p_semicol_l
+" Main function {{{
+"
+" Note: Every rule of indentation in MetaPost is very subjective. We might get
+" creative, but things get murky very soon (there are too many corner cases).
+" So, we provide a means for the user to decide what to do when this script
+" doesn't get it. We use a simple idea: use '%>', '%<' and '%=' to explicitly
+" control indentation. The '<' and '>' symbols may be repeated many times
+" (e.g., '%>>' will cause the next line to be indented twice).
+"
+" By using '%>...', '%<...' and '%=', the indentation the user wants is
+" preserved by commands like gg=G, even if it does not follow the rules of
+" this script.
+"
+" Example:
+"
+" shiftwidth=4
+" def foo =
+" makepen(subpath(T-n,t) of r %>
+" shifted .5down %>
+" --subpath(t,T) of r shifted .5up -- cycle) %<<
+" withcolor black
+" enddef
+"
+" The default indentation of the previous example would be:
+"
+" def foo =
+" makepen(subpath(T-n,t) of r
+" shifted .5down
+" --subpath(t,T) of r shifted .5up -- cycle)
+" withcolor black
+" enddef
+"
+" Personally, I prefer the latter, but anyway...
+function! GetMetaPostIndentIntern()
+
+ " This is the reference line relative to which the current line is indented
+ " (but see below).
+ let lnum = s:PrevNonBlankNonComment(v:lnum)
+
+ " At the start of the file use zero indent.
+ if lnum == 0
return 0
endif
- " if this is multiline item, remember first indent
- if MetaNextNonblankNoncomment(p_semicol_l+1) < cl
- let ind = indent(MetaNextNonblankNoncomment(p_semicol_l+1))
- " else --- search pre-previous item for search first line in previous item
- else
- " search pre-previous item not in current line
- let pp_semicol_l = MetaSearchNoncomment(end_of_item,"bW")
- while pp_semicol_l == p_semicol_l
- let pp_semicol_l = MetaSearchNoncomment(end_of_item,"bW")
- endwhile
- " if we find pre-previous item, remember indent of previous item
- " else --- remember zero
- if pp_semicol_l
- let ind = indent(MetaNextNonblankNoncomment(line(".")+1))
- else
- let ind = 0
+
+ let prev_text = getline(lnum)
+
+ " User-defined overrides take precedence over anything else.
+ " See above for an example.
+ let j = match(prev_text, '%[<>=]')
+ if j > 0
+ let i = strlen(matchstr(prev_text, '%>\+', j)) - 1
+ if i > 0
+ return indent(lnum) + i * shiftwidth()
+ endif
+
+ let i = strlen(matchstr(prev_text, '%<\+', j)) - 1
+ if i > 0
+ return max([indent(lnum) - i * shiftwidth(), 0])
+ endif
+
+ if match(prev_text, '%=', j)
+ return indent(lnum)
endif
endif
- " }}}
- " Increase Indent: {{{1
- " if it is an internal/external :for or :if statements {{{2
- let pnn_s = getline(MetaPrevNonblankNoncomment(cl-1))
- if pnn_s =~ '\<\(for\|if\)\>.\+:\s*\($\|%\)'
- let ind = match(pnn_s, '\<\(for\|if\)\>.\+:\s*\($\|%\)') + &sw
- " }}}
- " if it is a :def, :vardef, :beginfig, :begingroup, :else, :elseif {{{2
- elseif pnn_s =~ '^\s*\(' .
- \ '\(var\)\=def\|' .
- \ 'begin\(group\|fig\s*(\s*\d\+\s*)\)\|' .
- \ 'else\(if\)\=' . '\)\>'
- let ind = ind + &sw
- " }}}
- " if it is a broken line {{{2
- elseif pnn_s !~ end_of_item.'\s*\($\|%\)'
- let ind = ind + (2 * &sw)
+
+ " If the reference line ends with an open tag, indent.
+ "
+ " Example:
+ "
+ " if c:
+ " 0
+ " else:
+ " 1
+ " fi if c2: % Note that this line has weight equal to zero.
+ " ... % This line will be indented
+ if s:LastTagIsOpen(prev_text)
+ return s:DecreaseIndentOnClosingTag(indent(lnum) + shiftwidth())
+ endif
+
+ " Lines with a positive weight are unbalanced and should likely be indented.
+ "
+ " Example:
+ "
+ " def f = enddef for i = 1 upto 5: if x[i] > 0: 1 else: 2 fi
+ " ... % This line will be indented (because of the unterminated `for`)
+ if s:Weight(prev_text) > 0
+ return s:DecreaseIndentOnClosingTag(indent(lnum) + shiftwidth())
endif
- " }}}
- " }}}
- " Decrease Indent: {{{1
- " if this is :endfor or :enddef statements {{{2
- " this is correct because :def cannot be inside :for
- if cs =~ '\<end\(for\|def\)\=\>'
- call MetaSearchNoncomment('\<for\>.\+:\s*\($\|%\)' . '\|' .
- \ '^\s*\(var\)\=def\>',"bW")
- if col(".") > 1
- let ind = col(".") - 1
+
+ " Unterminated statements cause indentation to kick in.
+ "
+ " Example:
+ "
+ " draw unitsquare
+ " withcolor black; % This line is indented because of `draw`.
+ " x := a + b + c
+ " + d + e; % This line is indented because of `:=`.
+ "
+ let i = s:LastValidMatchEnd(prev_text, g:mp_statement, 0)
+ if i >= 0 " Does the line contain a statement?
+ if s:ValidMatchEnd(prev_text, ';', i) < 0 " Is the statement unterminated?
+ return indent(lnum) + shiftwidth()
else
- let ind = indent(".")
+ return s:DecreaseIndentOnClosingTag(indent(lnum))
endif
- " }}}
- " if this is :fi, :else, :elseif statements {{{2
- elseif cs =~ '\<\(else\(if\)\=\|fi\)\>'
- call MetaSearchNoncomment('\<if\>.\+:\s*\($\|%\)',"bW")
- let ind = col(".") - 1
- " }}}
- " if this is :endgroup statement {{{2
- elseif cs =~ '^\s*endgroup\>'
- let ind = ind - &sw
endif
- " }}}
- " }}}
- return ind
+ " Deal with the special case of a statement spanning multiple lines. If the
+ " current reference line L ends with a semicolon, search backwards for
+ " another semicolon or a statement keyword. If the latter is found first,
+ " its line is used as the reference line for indenting the current line
+ " instead of L.
+ "
+ " Example:
+ "
+ " if cond:
+ " draw if a: z0 else: z1 fi
+ " shifted S
+ " scaled T; % L
+ "
+ " for i = 1 upto 3: % <-- Current line: this gets the same indent as `draw ...`
+ "
+ " NOTE: we get here if and only if L does not contain a statement (among
+ " those listed in g:mp_statement).
+ if s:ValidMatchEnd(prev_text, ';'.s:eol, 0) >= 0 " L ends with a semicolon
+ let stm_lnum = s:PrevNonBlankNonComment(lnum)
+ while stm_lnum > 0
+ let prev_text = getline(stm_lnum)
+ let sc_pos = s:LastValidMatchEnd(prev_text, ';', 0)
+ let stm_pos = s:ValidMatchEnd(prev_text, g:mp_statement, sc_pos)
+ if stm_pos > sc_pos
+ let lnum = stm_lnum
+ break
+ elseif sc_pos > stm_pos
+ break
+ endif
+ let stm_lnum = s:PrevNonBlankNonComment(stm_lnum)
+ endwhile
+ endif
+
+ return s:DecreaseIndentOnClosingTag(indent(lnum))
endfunction
-"
+" }}}
let &cpo = s:keepcpo
unlet s:keepcpo
diff --git a/runtime/syntax/debsources.vim b/runtime/syntax/debsources.vim
index 232e727e81..2777944971 100644
--- a/runtime/syntax/debsources.vim
+++ b/runtime/syntax/debsources.vim
@@ -2,7 +2,7 @@
" Language: Debian sources.list
" Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
" Former Maintainer: Matthijs Mohlmann <matthijs@cacholong.nl>
-" Last Change: 2016 Aug 30
+" Last Change: 2016 Sep 27
" URL: https://anonscm.debian.org/cgit/pkg-vim/vim.git/plain/runtime/syntax/debsources.vim
" Standard syntax initialization
@@ -39,7 +39,7 @@ let s:unsupported = [
let &cpo=s:cpo
" Match uri's
-syn match debsourcesUri +\(http://\|ftp://\|[rs]sh://\|debtorrent://\|\(cdrom\|copy\|file\):\)[^' <>"]\++
+syn match debsourcesUri +\(https\?://\|ftp://\|[rs]sh://\|debtorrent://\|\(cdrom\|copy\|file\):\)[^' <>"]\++
exe 'syn match debsourcesDistrKeyword +\([[:alnum:]_./]*\)\('. join(s:supported, '\|'). '\)\([-[:alnum:]_./]*\)+'
exe 'syn match debsourcesUnsupportedDistrKeyword +\([[:alnum:]_./]*\)\('. join(s:unsupported, '\|') .'\)\([-[:alnum:]_./]*\)+'
diff --git a/runtime/syntax/mf.vim b/runtime/syntax/mf.vim
index 5f600e2ebe..3589e4db3c 100644
--- a/runtime/syntax/mf.vim
+++ b/runtime/syntax/mf.vim
@@ -1,184 +1,295 @@
" Vim syntax file
-" Language: Metafont
-" Maintainer: Andreas Scherer <andreas.scherer@pobox.com>
-" Last Change: April 25, 2001
+" Language: METAFONT
+" Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
+" Former Maintainers: Andreas Scherer <andreas.scherer@pobox.com>
+" Last Change: 2016 Oct 1
-" quit when a syntax file was already loaded
if exists("b:current_syntax")
finish
endif
-" Metafont 'primitives' as defined in chapter 25 of 'The METAFONTbook'
+syn iskeyword @,_
+
+" METAFONT 'primitives' as defined in chapter 25 of 'The METAFONTbook'
" Page 210: 'boolean expressions'
-syn keyword mfBoolExp true false known unknown odd charexists not and or
+syn keyword mfBoolExp and charexists false known not odd or true unknown
" Page 210: 'numeric expression'
-syn keyword mfNumExp normaldeviate length ASCII oct hex angle turningnumber
-syn keyword mfNumExp totalweight directiontime xpart ypart xxpart xypart
-syn keyword mfNumExp yxpart yypart sqrt sind cosd mlog mexp floor
-syn keyword mfNumExp uniformdeviate
+syn keyword mfNumExp ASCII angle cosd directiontime floor hex length
+syn keyword mfNumExp mexp mlog normaldeviate oct sind sqrt totalweight
+syn keyword mfNumExp turningnumber uniformdeviate xpart xxpart xypart
+syn keyword mfNumExp ypart yxpart yypart
" Page 211: 'internal quantities'
-syn keyword mfInternal tracingtitles tracingequations tracingcapsules
-syn keyword mfInternal tracingchoices tracingspecs tracingpens
-syn keyword mfInternal tracingcommands tracingrestores tracingmacros
-syn keyword mfInternal tracingedges tracingoutput tracingonline tracingstats
-syn keyword mfInternal pausing showstopping fontmaking proofing
-syn keyword mfInternal turningcheck warningcheck smoothing autorounding
-syn keyword mfInternal granularity fillin year month day time
-syn keyword mfInternal charcode charext charwd charht chardp charic
-syn keyword mfInternal chardx chardy designsize hppp vppp xoffset yoffset
-syn keyword mfInternal boundarychar
+syn keyword mfInternal autorounding boundarychar charcode chardp chardx
+syn keyword mfInternal chardy charext charht charic charwd day designsize
+syn keyword mfInternal fillin fontmaking granularity hppp jobname month
+syn keyword mfInternal pausing proofing showstopping smoothing time
+syn keyword mfInternal tracingcapsules tracingchoices tracingcommands
+syn keyword mfInternal tracingedges tracingequations tracingmacros
+syn keyword mfInternal tracingonline tracingoutput tracingpens
+syn keyword mfInternal tracingrestores tracingspecs tracingstats
+syn keyword mfInternal tracingtitles turningcheck vppp warningcheck
+syn keyword mfInternal xoffset year yoffset
" Page 212: 'pair expressions'
-syn keyword mfPairExp point of precontrol postcontrol penoffset rotated
-syn keyword mfPairExp scaled shifted slanted transformed xscaled yscaled
-syn keyword mfPairExp zscaled
+syn keyword mfPairExp of penoffset point postcontrol precontrol rotated
+syn keyword mfPairExp scaled shifted slanted transformed xscaled yscaled
+syn keyword mfPairExp zscaled
" Page 213: 'path expressions'
-syn keyword mfPathExp makepath reverse subpath curl tension atleast
-syn keyword mfPathExp controls cycle
+syn keyword mfPathExp atleast controls curl cycle makepath reverse
+syn keyword mfPathExp subpath tension
" Page 214: 'pen expressions'
-syn keyword mfPenExp nullpen pencircle makepen
+syn keyword mfPenExp makepen nullpen pencircle
-" Page 214: 'picutre expressions'
-syn keyword mfPicExp nullpicture
+" Page 214: 'picture expressions'
+syn keyword mfPicExp nullpicture
" Page 214: 'string expressions'
-syn keyword mfStringExp jobname readstring str char decimal substring
+syn keyword mfStringExp char decimal readstring str substring
" Page 217: 'commands and statements'
-syn keyword mfCommand end dump save interim newinternal randomseed let
-syn keyword mfCommand delimiters outer everyjob show showvariable showtoken
-syn keyword mfCommand showdependencies showstats message errmessage errhelp
-syn keyword mfCommand batchmode nonstopmode scrollmode errorstopmode
-syn keyword mfCommand addto also contour doublepath withpen withweight cull
-syn keyword mfCommand keeping dropping display inwindow openwindow at from to
-syn keyword mfCommand shipout special numspecial
+syn keyword mfCommand addto also at batchmode contour cull delimiters
+syn keyword mfCommand display doublepath dropping dump end errhelp
+syn keyword mfCommand errmessage errorstopmode everyjob from interim
+syn keyword mfCommand inwindow keeping let message newinternal
+syn keyword mfCommand nonstopmode numspecial openwindow outer randomseed
+syn keyword mfCommand save scrollmode shipout show showdependencies
+syn keyword mfCommand showstats showtoken showvariable special to withpen
+syn keyword mfCommand withweight
" Page 56: 'types'
-syn keyword mfType boolean numeric pair path pen picture string transform
+syn keyword mfType boolean numeric pair path pen picture string
+syn keyword mfType transform
" Page 155: 'grouping'
-syn keyword mfStatement begingroup endgroup
+syn keyword mfStatement begingroup endgroup
" Page 165: 'definitions'
-syn keyword mfDefinition enddef def expr suffix text primary secondary
-syn keyword mfDefinition tertiary vardef primarydef secondarydef tertiarydef
+syn keyword mfDefinition def enddef expr primary primarydef secondary
+syn keyword mfDefinition secondarydef suffix tertiary tertiarydef text
+syn keyword mfDefinition vardef
" Page 169: 'conditions and loops'
-syn keyword mfCondition if fi else elseif endfor for forsuffixes forever
-syn keyword mfCondition step until exitif
+syn keyword mfCondition else elseif endfor exitif fi for forever
+syn keyword mfCondition forsuffixes if step until
" Other primitives listed in the index
-syn keyword mfPrimitive charlist endinput expandafter extensible
-syn keyword mfPrimitive fontdimen headerbyte inner input intersectiontimes
-syn keyword mfPrimitive kern ligtable quote scantokens skipto
+syn keyword mfPrimitive charlist endinput expandafter extensible fontdimen
+syn keyword mfPrimitive headerbyte inner input intersectiontimes kern
+syn keyword mfPrimitive ligtable quote scantokens skipto
+
+" Implicit suffix parameters
+syn match mfSuffixParam "@#\|#@\|@"
+
+" These are just tags, but given their special status, we
+" highlight them as variables
+syn keyword mfVariable x y
" Keywords defined by plain.mf (defined on pp.262-278)
-if !exists("plain_mf_macros")
- let plain_mf_macros = 1 " Set this to '0' if your source gets too colourful
- " metapost.vim does so to turn off Metafont macros
+if get(g:, "plain_mf_macros", 1)
+ syn keyword mfDef addto_currentpicture beginchar capsule_def
+ syn keyword mfDef change_width clear_pen_memory clearit clearpen
+ syn keyword mfDef clearxy culldraw cullit cutdraw
+ syn keyword mfDef define_blacker_pixels define_corrected_pixels
+ syn keyword mfDef define_good_x_pixels define_good_y_pixels
+ syn keyword mfDef define_horizontal_corrected_pixels define_pixels
+ syn keyword mfDef define_whole_blacker_pixels define_whole_pixels
+ syn keyword mfDef define_whole_vertical_blacker_pixels
+ syn keyword mfDef define_whole_vertical_pixels downto draw drawdot
+ syn keyword mfDef endchar erase exitunless fill filldraw fix_units
+ syn keyword mfDef flex font_coding_scheme font_extra_space
+ syn keyword mfDef font_identifier font_normal_shrink
+ syn keyword mfDef font_normal_space font_normal_stretch font_quad
+ syn keyword mfDef font_size font_slant font_x_height gfcorners gobble
+ syn keyword mfDef hide imagerules interact italcorr killtext
+ syn keyword mfDef loggingall lowres_fix makebox makegrid maketicks
+ syn keyword mfDef mode_def mode_setup nodisplays notransforms numtok
+ syn keyword mfDef openit penrazor pensquare penstroke pickup
+ syn keyword mfDef proofoffset proofrule range reflectedabout
+ syn keyword mfDef rotatedaround screenchars screenrule screenstrokes
+ syn keyword mfDef shipit showit smode stop superellipse takepower
+ syn keyword mfDef tracingall tracingnone undraw undrawdot unfill
+ syn keyword mfDef unfilldraw upto z
+ syn match mfDef "???"
+ syn keyword mfVardef bot byte ceiling counterclockwise cutoff decr dir
+ syn keyword mfVardef direction directionpoint grayfont hround incr
+ syn keyword mfVardef interpath inverse labelfont labels lft magstep
+ " Note: nodot is not a vardef, it is used as in makelabel.lft.nodot("5",z5)
+ " (METAFONT only)
+ syn keyword mfVardef makelabel max min nodot penlabels penpos
+ syn keyword mfVardef proofrulethickness round rt savepen slantfont solve
+ syn keyword mfVardef tensepath titlefont top unitvector vround whatever
+ syn match mpVardef "\<good\.\%(x\|y\|lft\|rt\|top\|bot\)\>"
+ syn keyword mfPrimaryDef div dotprod gobbled mod
+ syn keyword mfSecondaryDef intersectionpoint
+ syn keyword mfTertiaryDef softjoin thru
+ syn keyword mfNewInternal blacker currentwindow displaying eps epsilon
+ syn keyword mfNewInternal infinity join_radius number_of_modes o_correction
+ syn keyword mfNewInternal pen_bot pen_lft pen_rt pen_top pixels_per_inch
+ syn keyword mfNewInternal screen_cols screen_rows tolerance
+ " Predefined constants
+ syn keyword mfConstant base_name base_version blankpicture ditto down
+ syn keyword mfConstant fullcircle halfcircle identity left lowres origin
+ syn keyword mfConstant penspeck proof quartercircle right rulepen smoke
+ syn keyword mfConstant unitpixel unitsquare up
+ " Other predefined variables
+ syn keyword mfVariable aspect_ratio currentpen extra_beginchar
+ syn keyword mfVariable extra_endchar currentpen_path currentpicture
+ syn keyword mfVariable currenttransform d extra_setup h localfont mag mode
+ syn keyword mfVariable mode_name w
+ " let statements:
+ syn keyword mfnumExp abs
+ syn keyword mfPairExp rotatedabout
+ syn keyword mfCommand bye relax
endif
-if plain_mf_macros
- syn keyword mfMacro abs addto_currentpicture aspect_ratio base_name
- syn keyword mfMacro base_version beginchar blacker blankpicture bot bye byte
- syn keyword mfMacro capsule_def ceiling change_width clear_pen_memory clearit
- syn keyword mfMacro clearpen clearxy counterclockwise culldraw cullit
- syn keyword mfMacro currentpen currentpen_path currentpicture
- syn keyword mfMacro currenttransform currentwindow cutdraw cutoff d decr
- syn keyword mfMacro define_blacker_pixels define_corrected_pixels
- syn keyword mfMacro define_good_x_pixels define_good_y_pixels
- syn keyword mfMacro define_horizontal_corrected_pixels define_pixels
- syn keyword mfMacro define_whole_blacker_pixels define_whole_pixels
- syn keyword mfMacro define_whole_vertical_blacker_pixels
- syn keyword mfMacro define_whole_vertical_pixels dir direction directionpoint
- syn keyword mfMacro displaying ditto div dotprod down downto draw drawdot
- syn keyword mfMacro endchar eps epsilon extra_beginchar extra_endchar
- syn keyword mfMacro extra_setup erase exitunless fill filldraw fix_units flex
- syn keyword mfMacro font_coding_scheme font_extra_space font_identifier
- syn keyword mfMacro font_normal_shrink font_normal_space font_normal_stretch
- syn keyword mfMacro font_quad font_setup font_size font_slant font_x_height
- syn keyword mfMacro fullcircle generate gfcorners gobble gobbled grayfont h
- syn keyword mfMacro halfcircle hide hround identity image_rules incr infinity
- syn keyword mfMacro interact interpath intersectionpoint inverse italcorr
- syn keyword mfMacro join_radius killtext labelfont labels left lft localfont
- syn keyword mfMacro loggingall lowres lowres_fix mag magstep makebox makegrid
- syn keyword mfMacro makelabel maketicks max min mod mode mode_def mode_name
- syn keyword mfMacro mode_setup nodisplays notransforms number_of_modes numtok
- syn keyword mfMacro o_correction openit origin pen_bot pen_lft pen_rt pen_top
- syn keyword mfMacro penlabels penpos penrazor penspeck pensquare penstroke
- syn keyword mfMacro pickup pixels_per_inch proof proofoffset proofrule
- syn keyword mfMacro proofrulethickness quartercircle range reflectedabout
- syn keyword mfMacro relax right rotatedabout rotatedaround round rt rulepen
- syn keyword mfMacro savepen screenchars screen_rows screen_cols screenrule
- syn keyword mfMacro screenstrokes shipit showit slantfont smode smoke softjoin
- syn keyword mfMacro solve stop superellipse takepower tensepath titlefont
- syn keyword mfMacro tolerance top tracingall tracingnone undraw undrawdot
- syn keyword mfMacro unfill unfilldraw unitpixel unitsquare unitvector up upto
- syn keyword mfMacro vround w whatever
+
+" By default, METAFONT loads modes.mf, too
+if get(g:, "plain_mf_modes", 1)
+ syn keyword mfConstant APSSixMed AgfaFourZeroZero AgfaThreeFourZeroZero
+ syn keyword mfConstant AtariNineFive AtariNineSix AtariSLMEightZeroFour
+ syn keyword mfConstant AtariSMOneTwoFour CItohEightFiveOneZero
+ syn keyword mfConstant CItohThreeOneZero CanonBJCSixZeroZero CanonCX
+ syn keyword mfConstant CanonEX CanonLBPLX CanonLBPTen CanonSX ChelgraphIBX
+ syn keyword mfConstant CompugraphicEightSixZeroZero
+ syn keyword mfConstant CompugraphicNineSixZeroZero DD DEClarge DECsmall
+ syn keyword mfConstant DataDiscNew EightThree EpsonAction
+ syn keyword mfConstant EpsonLQFiveZeroZeroLo EpsonLQFiveZeroZeroMed
+ syn keyword mfConstant EpsonMXFX EpsonSQEightSevenZero EpsonStylusPro
+ syn keyword mfConstant EpsonStylusProHigh EpsonStylusProLow
+ syn keyword mfConstant EpsonStylusProMed FourFour GThreefax HPDeskJet
+ syn keyword mfConstant HPLaserJetIIISi IBMFourTwoFiveZero IBMFourTwoOneSix
+ syn keyword mfConstant IBMFourTwoThreeZero IBMFourZeroOneNine
+ syn keyword mfConstant IBMFourZeroThreeNine IBMFourZeroTwoNine
+ syn keyword mfConstant IBMProPrinter IBMSixOneFiveFour IBMSixSixSevenZero
+ syn keyword mfConstant IBMThreeEightOneTwo IBMThreeEightTwoZero
+ syn keyword mfConstant IBMThreeOneNineThree IBMThreeOneSevenNine
+ syn keyword mfConstant IBMUlfHolleberg LASevenFive LNOthreR LNOthree
+ syn keyword mfConstant LNZeroOne LNZeroThree LPSFourZero LPSTwoZero
+ syn keyword mfConstant LexmarkFourZeroThreeNine LexmarkOptraR
+ syn keyword mfConstant LexmarkOptraS LinotypeLThreeThreeZero
+ syn keyword mfConstant LinotypeOneZeroZero LinotypeOneZeroZeroLo
+ syn keyword mfConstant LinotypeThreeZeroZeroHi MacTrueSize NeXTprinter
+ syn keyword mfConstant NeXTscreen NecTwoZeroOne Newgen NineOne
+ syn keyword mfConstant OCESixSevenFiveZeroPS OneTwoZero OneZeroZero
+ syn keyword mfConstant PrintwareSevenTwoZeroIQ Prism QMSOneSevenTwoFive
+ syn keyword mfConstant QMSOneSevenZeroZero QMSTwoFourTwoFive RicohA
+ syn keyword mfConstant RicohFortyEighty RicohFourZeroEightZero RicohLP
+ syn keyword mfConstant SparcPrinter StarNLOneZero VAXstation VTSix
+ syn keyword mfConstant VarityperFiveZeroSixZeroW
+ syn keyword mfConstant VarityperFourThreeZeroZeroHi
+ syn keyword mfConstant VarityperFourThreeZeroZeroLo
+ syn keyword mfConstant VarityperFourTwoZeroZero VarityperSixZeroZero
+ syn keyword mfConstant XeroxDocutech XeroxEightSevenNineZero
+ syn keyword mfConstant XeroxFourZeroFiveZero XeroxNineSevenZeroZero
+ syn keyword mfConstant XeroxPhaserSixTwoZeroZeroDP XeroxThreeSevenZeroZero
+ syn keyword mfConstant Xerox_world agfafzz agfatfzz amiga aps apssixhi
+ syn keyword mfConstant aselect atariezf atarinf atarins atariotf bitgraph
+ syn keyword mfConstant bjtenex bjtzzex bjtzzl bjtzzs boise canonbjc
+ syn keyword mfConstant canonex canonlbp cg cgl cgnszz citohtoz corona crs
+ syn keyword mfConstant cthreeten cx datadisc declarge decsmall deskjet
+ syn keyword mfConstant docutech dover dp dpdfezzz eighthre elvira epscszz
+ syn keyword mfConstant epsdraft epsdrft epsdrftl epsfast epsfastl epshi
+ syn keyword mfConstant epslo epsmed epsmedl epson epsonact epsonfx epsonl
+ syn keyword mfConstant epsonlo epsonlol epsonlq epsonsq epstylus epstylwr
+ syn keyword mfConstant epstyplo epstypmd epstypml epstypro epswlo epswlol
+ syn keyword mfConstant esphi fourfour gpx gtfax gtfaxhi gtfaxl gtfaxlo
+ syn keyword mfConstant gtfaxlol help hifax highfax hplaser hprugged ibm_a
+ syn keyword mfConstant ibmd ibmega ibmegal ibmfzon ibmfztn ibmpp ibmppl
+ syn keyword mfConstant ibmsoff ibmteot ibmtetz ibmtont ibmtosn ibmtosnl
+ syn keyword mfConstant ibmvga ibx imagen imagewriter itoh itohl itohtoz
+ syn keyword mfConstant itohtozl iw jetiiisi kyocera laserjet laserjetfive
+ syn keyword mfConstant laserjetfivemp laserjetfour laserjetfourthousand
+ syn keyword mfConstant laserjetfourzerozerozero laserjethi laserjetlo
+ syn keyword mfConstant laserjettwoonezerozero
+ syn keyword mfConstant laserjettwoonezerozerofastres lasermaster
+ syn keyword mfConstant laserwriter lasf lexmarkr lexmarks lexmarku
+ syn keyword mfConstant linohalf linohi linolo linolttz linoone linosuper
+ syn keyword mfConstant linothree linothreelo linotzzh ljfive ljfivemp
+ syn keyword mfConstant ljfour ljfzzz ljfzzzfr ljlo ljtozz ljtozzfr lmaster
+ syn keyword mfConstant lnotr lnzo lps lpstz lqhires lqlores lqmed lqmedl
+ syn keyword mfConstant lqmedres lview lviewl lwpro macmag mactrue modes_mf
+ syn keyword mfConstant ncd nec nechi neclm nectzo newdd newddl nexthi
+ syn keyword mfConstant nextscreen nextscrn nineone nullmode ocessfz
+ syn keyword mfConstant okidata okidatal okifourten okifte okihi onetz
+ syn keyword mfConstant onezz pcprevw pcscreen phaser phaserfs phasertf
+ syn keyword mfConstant phasertfl phasertl pixpt printware prntware
+ syn keyword mfConstant proprinter qms qmsesz qmsostf qmsoszz qmstftf ricoh
+ syn keyword mfConstant ricoha ricohlp ricohsp sherpa sparcptr starnlt
+ syn keyword mfConstant starnltl styletwo stylewr stylewri stylewriter sun
+ syn keyword mfConstant supre swtwo toshiba ultre varityper vs vtftzz
+ syn keyword mfConstant vtftzzhi vtftzzlo vtfzszw vtszz xpstzz xpstzzl
+ syn keyword mfConstant xrxesnz xrxfzfz xrxnszz xrxtszz
+ syn keyword mfDef BCPL_string coding_scheme font_face_byte
+ syn keyword mfDef font_family landscape
+ syn keyword mfDef mode_extra_info mode_help mode_param
+ syn keyword mfNewInternal blacker_min
endif
" Some other basic macro names, e.g., from cmbase, logo, etc.
-if !exists("other_mf_macros")
- let other_mf_macros = 1 " Set this to '0' if your code gets too colourful
- " metapost.vim does so to turn off Metafont macros
-endif
-if other_mf_macros
- syn keyword mfMacro beginlogochar
+if get(g:, "other_mf_macros", 1)
+ syn keyword mfDef beginlogochar
+ syn keyword mfDef font_setup
+ syn keyword mfPrimitive generate
endif
" Numeric tokens
-syn match mfNumeric "[-]\=\d\+"
-syn match mfNumeric "[-]\=\.\d\+"
-syn match mfNumeric "[-]\=\d\+\.\d\+"
-
-" Metafont lengths
-syn match mfLength "\<\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\>"
-syn match mfLength "\<[-]\=\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\=\>"
-syn match mfLength "\<[-]\=\.\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\=\>"
-syn match mfLength "\<[-]\=\d\+\.\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\=\>"
+syn match mfNumeric "[-]\=\d\+"
+syn match mfNumeric "[-]\=\.\d\+"
+syn match mfNumeric "[-]\=\d\+\.\d\+"
-" Metafont coordinates and points
-syn match mfCoord "\<[xy]\d\+\>"
-syn match mfPoint "\<z\d\+\>"
+" METAFONT lengths
+syn match mfLength "\<\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\>"
+syn match mfLength "[-]\=\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\="
+syn match mfLength "[-]\=\.\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\="
+syn match mfLength "[-]\=\d\+\.\d\+\(bp\|cc\|cm\|dd\|in\|mm\|pc\|pt\)\#\="
" String constants
-syn region mfString start=+"+ end=+"+
+syn match mfOpenString /"[^"]*/
+syn region mfString oneline keepend start=+"+ end=+"+
" Comments:
-syn match mfComment "%.*$"
+syn keyword mfTodoComment contained TODO FIXME XXX DEBUG NOTE
+syn match mfComment "%.*$" contains=mfTodoComment,@Spell
" synchronizing
syn sync maxlines=50
" Define the default highlighting
-" Only when an item doesn't have highlighting yet
-
-hi def link mfBoolExp Statement
-hi def link mfNumExp Statement
-hi def link mfInternal Identifier
-hi def link mfPairExp Statement
-hi def link mfPathExp Statement
-hi def link mfPenExp Statement
-hi def link mfPicExp Statement
-hi def link mfStringExp Statement
-hi def link mfCommand Statement
-hi def link mfType Type
-hi def link mfStatement Statement
-hi def link mfDefinition Statement
-hi def link mfCondition Conditional
-hi def link mfPrimitive Statement
-hi def link mfMacro Macro
-hi def link mfCoord Identifier
-hi def link mfPoint Identifier
-hi def link mfNumeric Number
-hi def link mfLength Number
-hi def link mfComment Comment
-hi def link mfString String
-
+hi def link mfBoolExp Statement
+hi def link mfNumExp Statement
+hi def link mfPairExp Statement
+hi def link mfPathExp Statement
+hi def link mfPenExp Statement
+hi def link mfPicExp Statement
+hi def link mfStringExp Statement
+hi def link mfInternal Identifier
+hi def link mfCommand Statement
+hi def link mfType Type
+hi def link mfStatement Statement
+hi def link mfDefinition Statement
+hi def link mfCondition Conditional
+hi def link mfPrimitive Statement
+hi def link mfDef Function
+hi def link mfVardef mfDef
+hi def link mfPrimaryDef mfDef
+hi def link mfSecondaryDef mfDef
+hi def link mfTertiaryDef mfDef
+hi def link mfCoord Identifier
+hi def link mfPoint Identifier
+hi def link mfNumeric Number
+hi def link mfLength Number
+hi def link mfComment Comment
+hi def link mfString String
+hi def link mfOpenString Todo
+hi def link mfSuffixParam Label
+hi def link mfNewInternal mfInternal
+hi def link mfVariable Identifier
+hi def link mfConstant Constant
+hi def link mfTodoComment Todo
let b:current_syntax = "mf"
-" vim: ts=8
+" vim:sw=2
diff --git a/runtime/syntax/mp.vim b/runtime/syntax/mp.vim
index 3966b69a03..95723d0d97 100644
--- a/runtime/syntax/mp.vim
+++ b/runtime/syntax/mp.vim
@@ -1,115 +1,765 @@
" Vim syntax file
-" Language: MetaPost
-" Maintainer: Andreas Scherer <andreas.scherer@pobox.com>
-" Last Change: April 30, 2001
+" Language: MetaPost
+" Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
+" Former Maintainers: Andreas Scherer <andreas.scherer@pobox.com>
+" Last Change: 2016 Oct 01
-" quit when a syntax file was already loaded
if exists("b:current_syntax")
finish
endif
-let plain_mf_macros = 0 " plain.mf has no special meaning for MetaPost
-let other_mf_macros = 0 " cmbase.mf, logo.mf, ... neither
+let s:cpo_sav = &cpo
+set cpo&vim
-" Read the Metafont syntax to start with
+if exists("g:plain_mf_macros")
+ let s:plain_mf_macros = g:plain_mf_macros
+endif
+if exists("g:plain_mf_modes")
+ let s:plain_mf_modes = g:plain_mf_modes
+endif
+if exists("g:other_mf_macros")
+ let s:other_mf_macros = g:other_mf_macros
+endif
+
+let g:plain_mf_macros = 0 " plain.mf has no special meaning for MetaPost
+let g:plain_mf_modes = 0 " No METAFONT modes
+let g:other_mf_macros = 0 " cmbase.mf, logo.mf, ... neither
+
+" Read the METAFONT syntax to start with
runtime! syntax/mf.vim
+unlet b:current_syntax " Necessary for syn include below
+
+" Restore the value of existing global variables
+if exists("s:plain_mf_macros")
+ let g:plain_mf_macros = s:plain_mf_macros
+else
+ unlet g:plain_mf_macros
+endif
+if exists("s:plain_mf_modes")
+ let g:plain_mf_modes = s:plain_mf_modes
+else
+ unlet g:plain_mf_modes
+endif
+if exists("s:other_mf_macros")
+ let g:other_mf_macros = s:other_mf_macros
+else
+ unlet g:other_mf_macros
+endif
-" MetaPost has TeX inserts for typeset labels
-" verbatimtex, btex, and etex will be treated as keywords
-syn match mpTeXbegin "\(verbatimtex\|btex\)"
-syn match mpTeXend "etex"
-syn region mpTeXinsert start="\(verbatimtex\|btex\)"hs=e+1 end="etex"he=s-1 contains=mpTeXbegin,mpTeXend keepend
+" Use TeX highlighting inside verbatimtex/btex... etex
+syn include @MPTeX syntax/tex.vim
+unlet b:current_syntax
+" These are defined as keywords rather than using matchgroup
+" in order to make them available to syntaxcomplete.
+syn keyword mpTeXdelim btex etex verbatimtex contained
+syn region mpTeXinsert
+ \ start=/\<verbatimtex\>\|\<btex\>/rs=e+1
+ \ end=/\<etex\>/re=s-1 keepend
+ \ contains=@MPTeX,mpTeXdelim
-" MetaPost primitives not found in Metafont
-syn keyword mpInternal bluepart clip color dashed fontsize greenpart infont
-syn keyword mpInternal linecap linejoin llcorner lrcorner miterlimit mpxbreak
-syn keyword mpInternal prologues redpart setbounds tracinglostchars
-syn keyword mpInternal truecorners ulcorner urcorner withcolor
+" iskeyword must be set after the syn include above, because tex.vim sets `syn
+" iskeyword`. Note that keywords do not contain numbers (numbers are
+" subscripts)
+syntax iskeyword @,_
-" Metafont primitives not found in MetaPost
-syn keyword notDefined autorounding chardx chardy fillin granularity hppp
-syn keyword notDefined proofing smoothing tracingedges tracingpens
-syn keyword notDefined turningcheck vppp xoffset yoffset
+" MetaPost primitives not found in METAFONT
+syn keyword mpBoolExp bounded clipped filled stroked textual arclength
+syn keyword mpNumExp arctime blackpart bluepart colormodel cyanpart
+syn keyword mpNumExp fontsize greenpart greypart magentapart redpart
+syn keyword mpPairExp yellowpart llcorner lrcorner ulcorner urcorner
+" envelope is seemingly undocumented, but it exists since mpost 1.003.
+" The syntax is: envelope <polygonal pen> of <path primary>. For example,
+" path p;
+" p := envelope pensquare of (up--left);
+" (Thanks to Daniel H. Luecking for the example!)
+syn keyword mpPathExp envelope pathpart
+syn keyword mpPenExp penpart
+syn keyword mpPicExp dashpart glyph infont
+syn keyword mpStringExp fontpart readfrom textpart
+syn keyword mpType cmykcolor color rgbcolor
+" Other MetaPost primitives listed in the manual
+syn keyword mpPrimitive mpxbreak within
+" Internal quantities not found in METAFONT
+" (Table 6 in MetaPost: A User's Manual)
+syn keyword mpInternal defaultcolormodel hour minute linecap linejoin
+syn keyword mpInternal miterlimit mpprocset mpversion numberprecision
+syn keyword mpInternal numbersystem outputfilename outputformat
+syn keyword mpInternal outputformatoptions outputtemplate prologues
+syn keyword mpInternal restoreclipcolor tracinglostchars troffmode
+syn keyword mpInternal truecorners
+" List of commands not found in METAFONT (from MetaPost: A User's Manual)
+syn keyword mpCommand clip closefrom dashed filenametemplate fontmapfile
+syn keyword mpCommand fontmapline setbounds withcmykcolor withcolor
+syn keyword mpCommand withgreyscale withoutcolor withpostscript
+syn keyword mpCommand withprescript withrgbcolor write
+" METAFONT internal variables not found in MetaPost
+syn keyword notDefined autorounding chardx chardy fillin granularity
+syn keyword notDefined proofing smoothing tracingedges tracingpens
+syn keyword notDefined turningcheck xoffset yoffset
+" Suffix defined only in METAFONT:
+syn keyword notDefined nodot
+" Other not implemented primitives (see MetaPost: A User's Manual, §C.1)
+syn keyword notDefined cull display openwindow numspecial totalweight
+syn keyword notDefined withweight
" Keywords defined by plain.mp
-if !exists("plain_mp_macros")
- let plain_mp_macros = 1 " Set this to '0' if your source gets too colourful
-endif
-if plain_mp_macros
- syn keyword mpMacro ahangle ahlength background bbox bboxmargin beginfig
- syn keyword mpMacro beveled black blue buildcycle butt center cutafter
- syn keyword mpMacro cutbefore cuttings dashpattern defaultfont defaultpen
- syn keyword mpMacro defaultscale dotlabel dotlabels drawarrow drawdblarrow
- syn keyword mpMacro drawoptions endfig evenly extra_beginfig extra_endfig
- syn keyword mpMacro green label labeloffset mitered red rounded squared
- syn keyword mpMacro thelabel white base_name base_version
- syn keyword mpMacro upto downto exitunless relax gobble gobbled
- syn keyword mpMacro interact loggingall tracingall tracingnone
- syn keyword mpMacro eps epsilon infinity right left up down origin
- syn keyword mpMacro quartercircle halfcircle fullcircle unitsquare identity
- syn keyword mpMacro blankpicture withdots ditto EOF pensquare penrazor
- syn keyword mpMacro penspeck whatever abs round ceiling byte dir unitvector
- syn keyword mpMacro inverse counterclockwise tensepath mod div dotprod
- syn keyword mpMacro takepower direction directionpoint intersectionpoint
- syn keyword mpMacro softjoin incr decr reflectedabout rotatedaround
- syn keyword mpMacro rotatedabout min max flex superellipse interpath
- syn keyword mpMacro magstep currentpen currentpen_path currentpicture
- syn keyword mpMacro fill draw filldraw drawdot unfill undraw unfilldraw
- syn keyword mpMacro undrawdot erase cutdraw image pickup numeric_pickup
- syn keyword mpMacro pen_lft pen_rt pen_top pen_bot savepen clearpen
- syn keyword mpMacro clear_pen_memory lft rt top bot ulft urt llft lrt
- syn keyword mpMacro penpos penstroke arrowhead makelabel labels penlabel
- syn keyword mpMacro range numtok thru clearxy clearit clearpen pickup
- syn keyword mpMacro shipit bye hide stop solve
+if get(g:, "plain_mp_macros", 1) || get(g:, "mp_metafun_macros", 0)
+ syn keyword mpDef beginfig clear_pen_memory clearit clearpen clearpen
+ syn keyword mpDef clearxy colorpart cutdraw downto draw drawarrow
+ syn keyword mpDef drawdblarrow drawdot drawoptions endfig erase
+ syn keyword mpDef exitunless fill filldraw flex gobble hide interact
+ syn keyword mpDef label loggingall makelabel numtok penstroke pickup
+ syn keyword mpDef range reflectedabout rotatedaround shipit
+ syn keyword mpDef stop superellipse takepower tracingall tracingnone
+ syn keyword mpDef undraw undrawdot unfill unfilldraw upto
+ syn match mpDef "???"
+ syn keyword mpVardef arrowhead bbox bot buildcycle byte ceiling center
+ syn keyword mpVardef counterclockwise decr dir direction directionpoint
+ syn keyword mpVardef dotlabel dotlabels image incr interpath inverse
+ syn keyword mpVardef labels lft magstep max min penlabels penpos round
+ syn keyword mpVardef rt savepen solve tensepath thelabel top unitvector
+ syn keyword mpVardef whatever z
+ syn keyword mpPrimaryDef div dotprod gobbled mod
+ syn keyword mpSecondaryDef intersectionpoint
+ syn keyword mpTertiaryDef cutafter cutbefore softjoin thru
+ syn keyword mpNewInternal ahangle ahlength bboxmargin beveled butt defaultpen
+ syn keyword mpNewInternal defaultscale dotlabeldiam eps epsilon infinity
+ syn keyword mpNewInternal join_radius labeloffset mitered pen_bot pen_lft
+ syn keyword mpNewInternal pen_rt pen_top rounded squared tolerance
+ " Predefined constants
+ syn keyword mpConstant EOF background base_name base_version black
+ syn keyword mpConstant blankpicture blue ditto down evenly fullcircle
+ syn keyword mpConstant green halfcircle identity left origin penrazor
+ syn keyword mpConstant penspeck pensquare quartercircle red right
+ syn keyword mpConstant unitsquare up white withdots
+ " Other predefined variables
+ syn keyword mpVariable currentpen currentpen_path currentpicture cuttings
+ syn keyword mpVariable defaultfont extra_beginfig extra_endfig
+ syn match mpVariable /\<\%(laboff\|labxf\|labyf\)\>/
+ syn match mpVariable /\<\%(laboff\|labxf\|labyf\)\.\%(lft\|rt\|bot\|top\|ulft\|urt\|llft\|lrt\)\>/
+ " let statements:
+ syn keyword mpnumExp abs
+ syn keyword mpDef rotatedabout
+ syn keyword mpCommand bye relax
+ " on and off are not technically keywords, but it is nice to highlight them
+ " inside dashpattern().
+ syn keyword mpOnOff off on contained
+ syn keyword mpDash dashpattern contained
+ syn region mpDashPattern
+ \ start="dashpattern\s*"
+ \ end=")"he=e-1
+ \ contains=mfNumeric,mfLength,mpOnOff,mpDash
endif
" Keywords defined by mfplain.mp
-if !exists("mfplain_mp_macros")
- let mfplain_mp_macros = 0 " Set this to '1' to include these macro names
-endif
-if mfplain_mp_macros
- syn keyword mpMacro beginchar blacker capsule_def change_width
- syn keyword mpMacro define_blacker_pixels define_corrected_pixels
- syn keyword mpMacro define_good_x_pixels define_good_y_pixels
- syn keyword mpMacro define_horizontal_corrected_pixels
- syn keyword mpMacro define_pixels define_whole_blacker_pixels
- syn keyword mpMacro define_whole_vertical_blacker_pixels
- syn keyword mpMacro define_whole_vertical_pixels endchar
- syn keyword mpMacro extra_beginchar extra_endchar extra_setup
- syn keyword mpMacro font_coding_scheme font_extra_space font_identifier
- syn keyword mpMacro font_normal_shrink font_normal_space
- syn keyword mpMacro font_normal_stretch font_quad font_size
- syn keyword mpMacro font_slant font_x_height italcorr labelfont
- syn keyword mpMacro makebox makegrid maketicks mode_def mode_setup
- syn keyword mpMacro o_correction proofrule proofrulethickness rulepen smode
-
+if get(g:, "mfplain_mp_macros", 0)
+ syn keyword mpDef beginchar capsule_def change_width
+ syn keyword mpDef define_blacker_pixels define_corrected_pixels
+ syn keyword mpDef define_good_x_pixels define_good_y_pixels
+ syn keyword mpDef define_horizontal_corrected_pixels define_pixels
+ syn keyword mpDef define_whole_blacker_pixels define_whole_pixels
+ syn keyword mpDef define_whole_vertical_blacker_pixels
+ syn keyword mpDef define_whole_vertical_pixels endchar
+ syn keyword mpDef font_coding_scheme font_extra_space font_identifier
+ syn keyword mpDef font_normal_shrink font_normal_space
+ syn keyword mpDef font_normal_stretch font_quad font_size font_slant
+ syn keyword mpDef font_x_height italcorr labelfont lowres_fix makebox
+ syn keyword mpDef makegrid maketicks mode_def mode_setup proofrule
+ syn keyword mpDef smode
+ syn keyword mpVardef hround proofrulethickness vround
+ syn keyword mpNewInternal blacker o_correction
+ syn keyword mpVariable extra_beginchar extra_endchar extra_setup rulepen
" plus some no-ops, also from mfplain.mp
- syn keyword mpMacro cullit currenttransform gfcorners grayfont hround
- syn keyword mpMacro imagerules lowres_fix nodisplays notransforms openit
- syn keyword mpMacro proofoffset screenchars screenrule screenstrokes
- syn keyword mpMacro showit slantfont titlefont unitpixel vround
+ syn keyword mpDef cull cullit gfcorners imagerules nodisplays
+ syn keyword mpDef notransforms openit proofoffset screenchars
+ syn keyword mpDef screenrule screenstrokes showit
+ syn keyword mpVardef grayfont slantfont titlefont
+ syn keyword mpVariable currenttransform
+ syn keyword mpConstant unitpixel
+ " These are not listed in the MetaPost manual, and some are ignored by
+ " MetaPost, but are nonetheless defined in mfplain.mp
+ syn keyword mpDef killtext
+ syn match mpVardef "\<good\.\%(x\|y\|lft\|rt\|top\|bot\)\>"
+ syn keyword mpVariable aspect_ratio localfont mag mode mode_name
+ syn keyword mpVariable proofcolor
+ syn keyword mpConstant lowres proof smoke
+ syn keyword mpNewInternal autorounding bp_per_pixel granularity
+ syn keyword mpNewInternal number_of_modes proofing smoothing turningcheck
endif
-" Keywords defined by other macro packages, e.g., boxes.mp
-if !exists("other_mp_macros")
- let other_mp_macros = 1 " Set this to '0' if your source gets too colourful
-endif
-if other_mp_macros
- syn keyword mpMacro circmargin defaultdx defaultdy
- syn keyword mpMacro boxit boxjoin bpath circleit drawboxed drawboxes
- syn keyword mpMacro drawunboxed fixpos fixsize pic
+" Keywords defined by all base macro packages:
+" - (r)boxes.mp
+" - format.mp
+" - graph.mp
+" - marith.mp
+" - sarith.mp
+" - string.mp
+" - TEX.mp
+if get(g:, "other_mp_macros", 1)
+ " boxes and rboxes
+ syn keyword mpDef boxjoin drawboxed drawboxes drawunboxed
+ syn keyword mpNewInternal circmargin defaultdx defaultdy rbox_radius
+ syn keyword mpVardef boxit bpath circleit fixpos fixsize generic_declare
+ syn keyword mpVardef generic_redeclare generisize pic rboxit str_prefix
+ " format
+ syn keyword mpVardef Mformat format init_numbers roundd
+ syn keyword mpVariable Fe_base Fe_plus
+ syn keyword mpConstant Ten_to
+ " graph
+ syn keyword mpDef Gfor Gxyscale OUT auto begingraph endgraph gdata
+ syn keyword mpDef gdraw gdrawarrow gdrawdblarrow gfill plot
+ syn keyword mpVardef augment autogrid frame gdotlabel glabel grid itick
+ syn keyword mpVardef otick
+ syn keyword mpVardef Mreadpath setcoords setrange
+ syn keyword mpNewInternal Gmarks Gminlog Gpaths linear log
+ syn keyword mpVariable Autoform Gemarks Glmarks Gumarks
+ syn keyword mpConstant Gtemplate
+ syn match mpVariable /Gmargin\.\%(low\|high\)/
+ " marith
+ syn keyword mpVardef Mabs Meform Mexp Mexp_str Mlog Mlog_Str Mlog_str
+ syn keyword mpPrimaryDef Mdiv Mmul
+ syn keyword mpSecondaryDef Madd Msub
+ syn keyword mpTertiaryDef Mleq
+ syn keyword mpNewInternal Mten Mzero
+ " sarith
+ syn keyword mpVardef Sabs Scvnum
+ syn keyword mpPrimaryDef Sdiv Smul
+ syn keyword mpSecondaryDef Sadd Ssub
+ syn keyword mpTertiaryDef Sleq Sneq
+ " string
+ syn keyword mpVardef cspan isdigit loptok
+ " TEX
+ syn keyword mpVardef TEX TEXPOST TEXPRE
endif
-" Define the default highlighting
-" Only when an item doesn't have highlighting yet
+" Up to date as of 23-Sep-2016.
+if get(g:, "mp_metafun_macros", 0)
+ " These keywords have been added manually.
+ syn keyword mpPrimitive runscript
+
+ " The following MetaFun keywords have been extracted automatically from
+ " ConTeXt source code. They include all "public" macros (where a macro is
+ " considered public if and only if it does not start with _, mfun_, mlib_, or
+ " do_, and it does not end with _), all "public" unsaved variables, and all
+ " `let` statements.
-hi def link mpTeXinsert String
-hi def link mpTeXbegin Statement
-hi def link mpTeXend Statement
-hi def link mpInternal mfInternal
-hi def link mpMacro Macro
+ " mp-abck.mpiv
+ syn keyword mpDef abck_grid_line anchor_box box_found boxfilloptions
+ syn keyword mpDef boxgridoptions boxlineoptions draw_multi_pars
+ syn keyword mpDef draw_multi_side draw_multi_side_path freeze_box
+ syn keyword mpDef initialize_box initialize_box_pos
+ syn keyword mpDef multi_side_draw_options show_multi_kind
+ syn keyword mpDef show_multi_pars
+ syn keyword mpVardef abck_baseline_grid abck_draw_path abck_graphic_grid
+ syn keyword mpVariable boxdashtype boxfilloffset boxfilltype
+ syn keyword mpVariable boxgriddirection boxgriddistance boxgridshift
+ syn keyword mpVariable boxgridtype boxgridwidth boxlineoffset
+ syn keyword mpVariable boxlineradius boxlinetype boxlinewidth multikind
+ syn keyword mpConstant context_abck
+ " mp-apos.mpiv
+ syn keyword mpDef anch_sidebars_draw boxfilloptions boxlineoptions
+ syn keyword mpDef connect_positions
+ syn keyword mpConstant context_apos
+ " mp-asnc.mpiv
+ syn keyword mpDef FlushSyncTasks ProcessSyncTask ResetSyncTasks
+ syn keyword mpDef SetSyncColor SetSyncThreshold SyncTask
+ syn keyword mpVardef PrepareSyncTasks SyncBox TheSyncColor
+ syn keyword mpVardef TheSyncThreshold
+ syn keyword mpVariable CurrentSyncClass NOfSyncPaths SyncColor
+ syn keyword mpVariable SyncLeftOffset SyncPaths SyncTasks SyncThreshold
+ syn keyword mpVariable SyncThresholdMethod SyncWidth
+ syn keyword mpConstant context_asnc
+ " mp-back.mpiv
+ syn keyword mpDef some_double_back some_hash
+ syn keyword mpVariable back_nillcolor
+ syn keyword mpConstant context_back
+ " mp-bare.mpiv
+ syn keyword mpVardef colordecimals rawtextext
+ syn keyword mpPrimaryDef infont
+ syn keyword mpConstant context_bare
+ " mp-base.mpiv
+ " This is essentially plain.mp with only a few keywords added
+ syn keyword mpNumExp graypart
+ syn keyword mpType graycolor greycolor
+ syn keyword mpConstant cyan magenta yellow
+ " mp-butt.mpiv
+ syn keyword mpDef predefinedbutton some_button
+ syn keyword mpConstant context_butt
+ " mp-char.mpiv
+ syn keyword mpDef flow_begin_chart flow_begin_sub_chart
+ syn keyword mpDef flow_chart_draw_comment flow_chart_draw_exit
+ syn keyword mpDef flow_chart_draw_label flow_chart_draw_text
+ syn keyword mpDef flow_clip_chart flow_collapse_points
+ syn keyword mpDef flow_connect_bottom_bottom flow_connect_bottom_left
+ syn keyword mpDef flow_connect_bottom_right flow_connect_bottom_top
+ syn keyword mpDef flow_connect_left_bottom flow_connect_left_left
+ syn keyword mpDef flow_connect_left_right flow_connect_left_top
+ syn keyword mpDef flow_connect_right_bottom flow_connect_right_left
+ syn keyword mpDef flow_connect_right_right flow_connect_right_top
+ syn keyword mpDef flow_connect_top_bottom flow_connect_top_left
+ syn keyword mpDef flow_connect_top_right flow_connect_top_top
+ syn keyword mpDef flow_draw_connection flow_draw_connection_point
+ syn keyword mpDef flow_draw_midpoint flow_draw_shape
+ syn keyword mpDef flow_draw_test_area flow_draw_test_shape
+ syn keyword mpDef flow_draw_test_shapes flow_end_chart
+ syn keyword mpDef flow_end_sub_chart flow_flush_connections
+ syn keyword mpDef flow_flush_picture flow_flush_pictures
+ syn keyword mpDef flow_flush_shape flow_flush_shapes
+ syn keyword mpDef flow_initialize_grid flow_new_chart flow_new_shape
+ syn keyword mpDef flow_scaled_to_grid flow_show_connection
+ syn keyword mpDef flow_show_connections flow_show_shapes
+ syn keyword mpDef flow_xy_offset flow_y_pos
+ syn keyword mpVardef flow_connection_path flow_down_on_grid
+ syn keyword mpVardef flow_down_to_grid flow_i_point flow_left_on_grid
+ syn keyword mpVardef flow_left_to_grid flow_offset
+ syn keyword mpVardef flow_points_initialized flow_right_on_grid
+ syn keyword mpVardef flow_right_to_grid flow_smooth_connection
+ syn keyword mpVardef flow_trim_points flow_trimmed flow_up_on_grid
+ syn keyword mpVardef flow_up_to_grid flow_valid_connection
+ syn keyword mpVardef flow_x_on_grid flow_xy_bottom flow_xy_left
+ syn keyword mpVardef flow_xy_on_grid flow_xy_right flow_xy_top
+ syn keyword mpVardef flow_y_on_grid
+ syn keyword mpVariable flow_arrowtip flow_chart_background_color
+ syn keyword mpVariable flow_chart_offset flow_comment_offset
+ syn keyword mpVariable flow_connection_arrow_size
+ syn keyword mpVariable flow_connection_dash_size
+ syn keyword mpVariable flow_connection_line_color
+ syn keyword mpVariable flow_connection_line_width
+ syn keyword mpVariable flow_connection_smooth_size flow_connections
+ syn keyword mpVariable flow_cpath flow_dash_pattern flow_dashline
+ syn keyword mpVariable flow_exit_offset flow_forcevalid flow_grid_height
+ syn keyword mpVariable flow_grid_width flow_label_offset flow_max_x
+ syn keyword mpVariable flow_max_y flow_peepshape flow_reverse_connection
+ syn keyword mpVariable flow_reverse_y flow_shape_action flow_shape_archive
+ syn keyword mpVariable flow_shape_decision flow_shape_down
+ syn keyword mpVariable flow_shape_fill_color flow_shape_height
+ syn keyword mpVariable flow_shape_left flow_shape_line_color
+ syn keyword mpVariable flow_shape_line_width flow_shape_loop
+ syn keyword mpVariable flow_shape_multidocument flow_shape_node
+ syn keyword mpVariable flow_shape_procedure flow_shape_product
+ syn keyword mpVariable flow_shape_right flow_shape_singledocument
+ syn keyword mpVariable flow_shape_subprocedure flow_shape_up
+ syn keyword mpVariable flow_shape_wait flow_shape_width
+ syn keyword mpVariable flow_show_all_points flow_show_con_points
+ syn keyword mpVariable flow_show_mid_points flow_showcrossing flow_smooth
+ syn keyword mpVariable flow_touchshape flow_xypoint flow_zfactor
+ syn keyword mpConstant context_flow
+ " mp-chem.mpiv
+ syn keyword mpDef chem_init_all chem_reset chem_start_structure
+ syn keyword mpDef chem_transformed
+ syn keyword mpVardef chem_ad chem_adj chem_align chem_arrow chem_au
+ syn keyword mpVardef chem_b chem_bb chem_bd chem_bw chem_c chem_cc
+ syn keyword mpVardef chem_ccd chem_cd chem_crz chem_cz chem_dash chem_db
+ syn keyword mpVardef chem_diff chem_dir chem_do chem_dr chem_draw
+ syn keyword mpVardef chem_drawarrow chem_eb chem_ed chem_ep chem_er
+ syn keyword mpVardef chem_es chem_et chem_fill chem_hb chem_init_some
+ syn keyword mpVardef chem_label chem_ldb chem_ldd chem_line chem_lr
+ syn keyword mpVardef chem_lrb chem_lrbd chem_lrd chem_lrh chem_lrn
+ syn keyword mpVardef chem_lrt chem_lrz chem_lsr chem_lsub chem_mark
+ syn keyword mpVardef chem_marked chem_mid chem_mids chem_midz chem_mir
+ syn keyword mpVardef chem_mov chem_move chem_number chem_oe chem_off
+ syn keyword mpVardef chem_pb chem_pe chem_r chem_r_fragment chem_rb
+ syn keyword mpVardef chem_rbd chem_rd chem_rdb chem_rdd chem_restore
+ syn keyword mpVardef chem_rh chem_rm chem_rn chem_rot chem_rr chem_rrb
+ syn keyword mpVardef chem_rrbd chem_rrd chem_rrh chem_rrn chem_rrt
+ syn keyword mpVardef chem_rrz chem_rsr chem_rsub chem_rt chem_rz chem_s
+ syn keyword mpVardef chem_save chem_sb chem_sd chem_set chem_sr chem_ss
+ syn keyword mpVardef chem_start_component chem_stop_component
+ syn keyword mpVardef chem_stop_structure chem_sub chem_symbol chem_tb
+ syn keyword mpVardef chem_text chem_z chem_zln chem_zlt chem_zn chem_zrn
+ syn keyword mpVardef chem_zrt chem_zt
+ syn keyword mpVariable chem_mark_pair chem_stack_mirror chem_stack_origin
+ syn keyword mpVariable chem_stack_p chem_stack_previous
+ syn keyword mpVariable chem_stack_rotation chem_trace_boundingbox
+ syn keyword mpVariable chem_trace_nesting chem_trace_text
+ syn keyword mpConstant context_chem
+ " mp-core.mpiv
+ syn keyword mpDef FlushSyncTasks ProcessSyncTask
+ syn keyword mpDef RegisterLocalTextArea RegisterPlainTextArea
+ syn keyword mpDef RegisterRegionTextArea RegisterTextArea
+ syn keyword mpDef ResetLocalTextArea ResetSyncTasks ResetTextAreas
+ syn keyword mpDef SaveTextAreas SetSyncColor SetSyncThreshold
+ syn keyword mpDef SyncTask anchor_box box_found boxfilloptions
+ syn keyword mpDef boxgridoptions boxlineoptions collapse_multi_pars
+ syn keyword mpDef draw_box draw_multi_pars draw_par freeze_box
+ syn keyword mpDef initialize_area initialize_area_par initialize_box
+ syn keyword mpDef initialize_box_pos initialize_par
+ syn keyword mpDef prepare_multi_pars relocate_multipars save_multipar
+ syn keyword mpDef set_par_line_height show_multi_pars show_par
+ syn keyword mpDef simplify_multi_pars sort_multi_pars
+ syn keyword mpVardef InsideSavedTextArea InsideSomeSavedTextArea
+ syn keyword mpVardef InsideSomeTextArea InsideTextArea PrepareSyncTasks
+ syn keyword mpVardef SyncBox TextAreaH TextAreaW TextAreaWH TextAreaX
+ syn keyword mpVardef TextAreaXY TextAreaY TheSyncColor TheSyncThreshold
+ syn keyword mpVardef baseline_grid graphic_grid multi_par_at_top
+ syn keyword mpVariable CurrentSyncClass NOfSavedTextAreas
+ syn keyword mpVariable NOfSavedTextColumns NOfSyncPaths NOfTextAreas
+ syn keyword mpVariable NOfTextColumns PlainTextArea RegionTextArea
+ syn keyword mpVariable SavedTextColumns SyncColor SyncLeftOffset SyncPaths
+ syn keyword mpVariable SyncTasks SyncThreshold SyncThresholdMethod
+ syn keyword mpVariable SyncWidth TextAreas TextColumns
+ syn keyword mpVariable auto_multi_par_hsize boxdashtype boxfilloffset
+ syn keyword mpVariable boxfilltype boxgriddirection boxgriddistance
+ syn keyword mpVariable boxgridshift boxgridtype boxgridwidth boxlineradius
+ syn keyword mpVariable boxlinetype boxlinewidth check_multi_par_chain
+ syn keyword mpVariable compensate_multi_par_topskip
+ syn keyword mpVariable enable_multi_par_fallback force_multi_par_chain
+ syn keyword mpVariable ignore_multi_par_page last_multi_par_shift lefthang
+ syn keyword mpVariable local_multi_par_area multi_column_first_page_hack
+ syn keyword mpVariable multi_par_pages multiloc multilocs multipar
+ syn keyword mpVariable multipars multiref multirefs nofmultipars
+ syn keyword mpVariable obey_multi_par_hang obey_multi_par_more
+ syn keyword mpVariable one_piece_multi_par par_hang_after par_hang_indent
+ syn keyword mpVariable par_indent par_left_skip par_line_height
+ syn keyword mpVariable par_right_skip par_start_pos par_stop_pos
+ syn keyword mpVariable par_strut_depth par_strut_height ppos righthang
+ syn keyword mpVariable snap_multi_par_tops somehang span_multi_column_pars
+ syn keyword mpVariable use_multi_par_region
+ syn keyword mpConstant context_core
+ syn keyword LET anchor_area anchor_par draw_area
+ " mp-cows.mpiv
+ syn keyword mpConstant context_cows cow
+ " mp-crop.mpiv
+ syn keyword mpDef page_marks_add_color page_marks_add_lines
+ syn keyword mpDef page_marks_add_marking page_marks_add_number
+ syn keyword mpVardef crop_color crop_gray crop_marks_cmyk
+ syn keyword mpVardef crop_marks_cmykrgb crop_marks_gray crop_marks_lines
+ syn keyword mpVariable crop_colors more page
+ syn keyword mpConstant context_crop
+ " mp-figs.mpiv
+ syn keyword mpDef naturalfigure registerfigure
+ syn keyword mpVardef figuredimensions figureheight figuresize
+ syn keyword mpVardef figurewidth
+ syn keyword mpConstant context_figs
+ " mp-fobg.mpiv
+ syn keyword mpDef DrawFoFrame
+ syn keyword mpVardef equalpaths
+ syn keyword mpPrimaryDef inset outset
+ syn keyword mpVariable FoBackground FoBackgroundColor FoFrame FoLineColor
+ syn keyword mpVariable FoLineStyle FoLineWidth FoSplit
+ syn keyword mpConstant FoAll FoBottom FoDash FoDotted FoDouble FoGroove
+ syn keyword mpConstant FoHidden FoInset FoLeft FoMedium FoNoColor FoNone
+ syn keyword mpConstant FoOutset FoRidge FoRight FoSolid FoThick FoThin
+ syn keyword mpConstant FoTop context_fobg
+ " mp-form.mpiv
+ syn keyword mpConstant context_form
+ " mp-func.mpiv
+ syn keyword mpDef constructedfunction constructedpairs
+ syn keyword mpDef constructedpath curvedfunction curvedpairs
+ syn keyword mpDef curvedpath function pathconnectors straightfunction
+ syn keyword mpDef straightpairs straightpath
+ syn keyword mpConstant context_func
+ " mp-grap.mpiv
+ syn keyword mpDef Gfor OUT auto begingraph circles crosses diamonds
+ syn keyword mpDef downtriangles endgraph gdata gdraw gdrawarrow
+ syn keyword mpDef gdrawdblarrow gfill graph_addto
+ syn keyword mpDef graph_addto_currentpicture graph_comma
+ syn keyword mpDef graph_coordinate_multiplication graph_draw
+ syn keyword mpDef graph_draw_label graph_errorbar_text graph_fill
+ syn keyword mpDef graph_generate_exponents
+ syn keyword mpDef graph_generate_label_position
+ syn keyword mpDef graph_generate_numbers graph_label_location
+ syn keyword mpDef graph_scan_mark graph_scan_marks graph_setbounds
+ syn keyword mpDef graph_suffix graph_tick_label
+ syn keyword mpDef graph_with_pen_and_color graph_withlist
+ syn keyword mpDef graph_xyscale lefttriangles makefunctionpath plot
+ syn keyword mpDef plotsymbol points rainbow righttriangles smoothpath
+ syn keyword mpDef squares stars uptriangles witherrorbars
+ syn keyword mpVardef addtopath augment autogrid constant_fit
+ syn keyword mpVardef constant_function det escaped_format exp
+ syn keyword mpVardef exponential_fit exponential_function format
+ syn keyword mpVardef formatted frame functionpath gaussian_fit
+ syn keyword mpVardef gaussian_function gdotlabel glabel graph_Feform
+ syn keyword mpVardef graph_Meform graph_arrowhead_extent graph_bounds
+ syn keyword mpVardef graph_clear_bounds
+ syn keyword mpVardef graph_convert_user_path_to_internal graph_cspan
+ syn keyword mpVardef graph_draw_arrowhead graph_error graph_errorbars
+ syn keyword mpVardef graph_exp graph_factor_and_exponent_to_string
+ syn keyword mpVardef graph_gridline_picture graph_is_null
+ syn keyword mpVardef graph_label_convert_user_to_internal graph_loptok
+ syn keyword mpVardef graph_match_exponents graph_mlog
+ syn keyword mpVardef graph_modified_exponent_ypart graph_pair_adjust
+ syn keyword mpVardef graph_picture_conversion graph_post_draw
+ syn keyword mpVardef graph_read_line graph_readpath graph_remap
+ syn keyword mpVardef graph_scan_path graph_select_exponent_mark
+ syn keyword mpVardef graph_select_mark graph_set_bounds
+ syn keyword mpVardef graph_set_default_bounds graph_shapesize
+ syn keyword mpVardef graph_stash_label graph_tick_mark_spacing
+ syn keyword mpVardef graph_unknown_pair_bbox grid isdigit itick
+ syn keyword mpVardef linear_fit linear_function ln logten lorentzian_fit
+ syn keyword mpVardef lorentzian_function otick polynomial_fit
+ syn keyword mpVardef polynomial_function power_law_fit
+ syn keyword mpVardef power_law_function powten setcoords setrange
+ syn keyword mpVardef sortpath strfmt tick varfmt
+ syn keyword mpNewInternal Mzero doubleinfinity graph_log_minimum
+ syn keyword mpNewInternal graph_minimum_number_of_marks largestmantissa
+ syn keyword mpNewInternal linear lntwo log mlogten singleinfinity
+ syn keyword mpVariable Autoform determinant fit_chi_squared
+ syn keyword mpVariable graph_errorbar_picture graph_exp_marks
+ syn keyword mpVariable graph_frame_pair_a graph_frame_pair_b
+ syn keyword mpVariable graph_lin_marks graph_log_marks graph_modified_bias
+ syn keyword mpVariable graph_modified_higher graph_modified_lower
+ syn keyword mpVariable graph_shape r_s resistance_color resistance_name
+ syn keyword mpConstant context_grap
+ " mp-grid.mpiv
+ syn keyword mpDef hlingrid hloggrid vlingrid vloggrid
+ syn keyword mpVardef hlinlabel hlintext hlogtext linlin linlinpath
+ syn keyword mpVardef linlog linlogpath loglin loglinpath loglog
+ syn keyword mpVardef loglogpath processpath vlinlabel vlintext vlogtext
+ syn keyword mpVariable fmt_initialize fmt_pictures fmt_precision
+ syn keyword mpVariable fmt_separator fmt_zerocheck grid_eps
+ syn keyword mpConstant context_grid
+ " mp-grph.mpiv
+ syn keyword mpDef beginfig begingraphictextfig data_mpo_file
+ syn keyword mpDef data_mpy_file doloadfigure draw endfig
+ syn keyword mpDef endgraphictextfig fill fixedplace graphictext
+ syn keyword mpDef loadfigure new_graphictext normalwithshade number
+ syn keyword mpDef old_graphictext outlinefill protectgraphicmacros
+ syn keyword mpDef resetfig reversefill withdrawcolor withfillcolor
+ syn keyword mpDef withshade
+ syn keyword mpVariable currentgraphictext figureshift
+ syn keyword mpConstant context_grph
+ " mp-idea.mpiv
+ syn keyword mpVardef bcomponent ccomponent gcomponent mcomponent
+ syn keyword mpVardef rcomponent somecolor ycomponent
+ " mp-luas.mpiv
+ syn keyword mpDef luacall message
+ syn keyword mpVardef MP lua lualist
+ syn keyword mpConstant context_luas
+ " mp-mlib.mpiv
+ syn keyword mpDef autoalign bitmapimage circular_shade cmyk comment
+ syn keyword mpDef defineshade eofill eofillup externalfigure figure
+ syn keyword mpDef fillup label linear_shade multitonecolor namedcolor
+ syn keyword mpDef nofill onlayer passarrayvariable passvariable
+ syn keyword mpDef plain_label register resolvedcolor scantokens
+ syn keyword mpDef set_circular_vector set_linear_vector shaded
+ syn keyword mpDef spotcolor startpassingvariable stoppassingvariable
+ syn keyword mpDef thelabel transparent[] usemetafunlabels
+ syn keyword mpDef useplainlabels withcircularshade withlinearshade
+ syn keyword mpDef withmask withproperties withshadecenter
+ syn keyword mpDef withshadecolors withshadedirection withshadedomain
+ syn keyword mpDef withshadefactor withshadefraction withshadeorigin
+ syn keyword mpDef withshaderadius withshadestep withshadetransform
+ syn keyword mpDef withshadevector withtransparency
+ syn keyword mpVardef anchored checkbounds checkedbounds
+ syn keyword mpVardef define_circular_shade define_linear_shade dotlabel
+ syn keyword mpVardef escaped_format fmttext fontsize format formatted
+ syn keyword mpVardef installlabel onetimefmttext onetimetextext
+ syn keyword mpVardef outlinetext plain_thelabel properties rawfmttext
+ syn keyword mpVardef rawtexbox rawtextext rule strfmt strut texbox
+ syn keyword mpVardef textext thefmttext thelabel thetexbox thetextext
+ syn keyword mpVardef tostring transparency_alternative_to_number
+ syn keyword mpVardef validtexbox varfmt verbatim
+ syn keyword mpPrimaryDef asgroup infont normalinfont shadedinto
+ syn keyword mpPrimaryDef shownshadecenter shownshadedirection
+ syn keyword mpPrimaryDef shownshadeorigin shownshadevector withshade
+ syn keyword mpPrimaryDef withshademethod
+ syn keyword mpNewInternal colorburntransparent colordodgetransparent
+ syn keyword mpNewInternal colortransparent darkentransparent
+ syn keyword mpNewInternal differencetransparent exclusiontransparent
+ syn keyword mpNewInternal hardlighttransparent huetransparent
+ syn keyword mpNewInternal lightentransparent luminositytransparent
+ syn keyword mpNewInternal multiplytransparent normaltransparent
+ syn keyword mpNewInternal overlaytransparent saturationtransparent
+ syn keyword mpNewInternal screentransparent shadefactor softlighttransparent
+ syn keyword mpNewInternal textextoffset
+ syn keyword mpType property transparency
+ syn keyword mpVariable currentoutlinetext shadeddown shadedleft
+ syn keyword mpVariable shadedright shadedup shadeoffset trace_shades
+ syn keyword mpConstant context_mlib
+ " mp-page.mpiv
+ syn keyword mpDef BoundCoverAreas BoundPageAreas Enlarged FakeRule
+ syn keyword mpDef FakeWord LoadPageState OverlayBox RuleColor
+ syn keyword mpDef SetAreaVariables SetPageArea SetPageBackPage
+ syn keyword mpDef SetPageCoverPage SetPageField SetPageFrontPage
+ syn keyword mpDef SetPageHsize SetPageHstep SetPageLocation
+ syn keyword mpDef SetPagePage SetPageSpine SetPageVariables
+ syn keyword mpDef SetPageVsize SetPageVstep StartCover StartPage
+ syn keyword mpDef StopCover StopPage SwapPageState innerenlarged
+ syn keyword mpDef llEnlarged lrEnlarged outerenlarged ulEnlarged
+ syn keyword mpDef urEnlarged
+ syn keyword mpVardef BackPageHeight BackPageWidth BackSpace BaseLineSkip
+ syn keyword mpVardef BodyFontSize BottomDistance BottomHeight
+ syn keyword mpVardef BottomSpace CoverHeight CoverWidth CurrentColumn
+ syn keyword mpVardef CurrentHeight CurrentWidth CutSpace EmWidth
+ syn keyword mpVardef ExHeight FooterDistance FooterHeight
+ syn keyword mpVardef FrontPageHeight FrontPageWidth HSize HeaderDistance
+ syn keyword mpVardef HeaderHeight InPageBody InnerEdgeDistance
+ syn keyword mpVardef InnerEdgeWidth InnerMarginDistance InnerMarginWidth
+ syn keyword mpVardef InnerSpaceWidth LastPageNumber LayoutColumnDistance
+ syn keyword mpVardef LayoutColumnWidth LayoutColumns LeftEdgeDistance
+ syn keyword mpVardef LeftEdgeWidth LeftMarginDistance LeftMarginWidth
+ syn keyword mpVardef LineHeight MakeupHeight MakeupWidth NOfColumns
+ syn keyword mpVardef NOfPages OnOddPage OnRightPage OuterEdgeDistance
+ syn keyword mpVardef OuterEdgeWidth OuterMarginDistance OuterMarginWidth
+ syn keyword mpVardef OuterSpaceWidth OverlayDepth OverlayHeight
+ syn keyword mpVardef OverlayLineWidth OverlayOffset OverlayWidth
+ syn keyword mpVardef PageDepth PageFraction PageNumber PageOffset
+ syn keyword mpVardef PaperBleed PaperHeight PaperWidth PrintPaperHeight
+ syn keyword mpVardef PrintPaperWidth RealPageNumber RightEdgeDistance
+ syn keyword mpVardef RightEdgeWidth RightMarginDistance RightMarginWidth
+ syn keyword mpVardef SpineHeight SpineWidth StrutDepth StrutHeight
+ syn keyword mpVardef TextHeight TextWidth TopDistance TopHeight TopSkip
+ syn keyword mpVardef TopSpace VSize defaultcolormodel
+ syn keyword mpVariable Area BackPage CoverPage CurrentLayout Field
+ syn keyword mpVariable FrontPage HorPos Hsize Hstep Location Page
+ syn keyword mpVariable PageStateAvailable RuleDepth RuleDirection
+ syn keyword mpVariable RuleFactor RuleH RuleHeight RuleOffset RuleOption
+ syn keyword mpVariable RuleThickness RuleV RuleWidth Spine VerPos Vsize
+ syn keyword mpVariable Vstep
+ syn keyword mpConstant context_page
+ " mp-shap.mpiv
+ syn keyword mpDef drawline drawshape some_shape
+ syn keyword mpDef start_predefined_shape_definition
+ syn keyword mpDef stop_predefined_shape_definition
+ syn keyword mpVardef drawpredefinedline drawpredefinedshape
+ syn keyword mpVardef some_shape_path
+ syn keyword mpVariable predefined_shapes predefined_shapes_xradius
+ syn keyword mpVariable predefined_shapes_xxradius
+ syn keyword mpVariable predefined_shapes_yradius
+ syn keyword mpVariable predefined_shapes_yyradius
+ syn keyword mpConstant context_shap
+ " mp-step.mpiv
+ syn keyword mpDef initialize_step_variables midbottomboundary
+ syn keyword mpDef midtopboundary step_begin_cell step_begin_chart
+ syn keyword mpDef step_cell_ali step_cell_bot step_cell_top
+ syn keyword mpDef step_cells step_end_cell step_end_chart
+ syn keyword mpDef step_text_bot step_text_mid step_text_top
+ syn keyword mpDef step_texts
+ syn keyword mpVariable cell_distance_x cell_distance_y cell_fill_color
+ syn keyword mpVariable cell_line_color cell_line_width cell_offset
+ syn keyword mpVariable chart_align chart_category chart_vertical
+ syn keyword mpVariable line_distance line_height line_line_color
+ syn keyword mpVariable line_line_width line_offset nofcells
+ syn keyword mpVariable text_distance_set text_fill_color text_line_color
+ syn keyword mpVariable text_line_width text_offset
+ syn keyword mpConstant context_cell
+ " mp-symb.mpiv
+ syn keyword mpDef finishglyph prepareglyph
+ syn keyword mpConstant lefttriangle midbar onebar righttriangle sidebar
+ syn keyword mpConstant sublefttriangle subrighttriangle twobar
+ " mp-text.mpiv
+ syn keyword mpDef build_parshape
+ syn keyword mpVardef found_point
+ syn keyword mpVariable trace_parshape
+ syn keyword mpConstant context_text
+ " mp-tool.mpiv
+ syn keyword mpCommand dump
+ syn keyword mpDef addbackground b_color beginglyph break centerarrow
+ syn keyword mpDef clearxy condition data_mpd_file detaileddraw
+ syn keyword mpDef detailpaths dowithpath draw drawboundary
+ syn keyword mpDef drawboundingbox drawcontrollines drawcontrolpoints
+ syn keyword mpDef drawfill draworigin drawpath drawpathonly
+ syn keyword mpDef drawpathwithpoints drawpoint drawpointlabels
+ syn keyword mpDef drawpoints drawticks drawwholepath drawxticks
+ syn keyword mpDef drawyticks endglyph fill finishsavingdata g_color
+ syn keyword mpDef inner_boundingbox job_name leftarrow loadmodule
+ syn keyword mpDef midarrowhead naturalizepaths newboolean newcolor
+ syn keyword mpDef newnumeric newpair newpath newpicture newstring
+ syn keyword mpDef newtransform normalcolors normaldraw normalfill
+ syn keyword mpDef normalwithcolor outer_boundingbox pop_boundingbox
+ syn keyword mpDef popboundingbox popcurrentpicture push_boundingbox
+ syn keyword mpDef pushboundingbox pushcurrentpicture r_color readfile
+ syn keyword mpDef recolor redraw refill register_dirty_chars
+ syn keyword mpDef remapcolor remapcolors remappedcolor reprocess
+ syn keyword mpDef resetarrows resetcolormap resetdrawoptions
+ syn keyword mpDef resolvedcolor restroke retext rightarrow savedata
+ syn keyword mpDef saveoptions scale_currentpicture set_ahlength
+ syn keyword mpDef set_grid showgrid startplaincompatibility
+ syn keyword mpDef startsavingdata stopplaincompatibility
+ syn keyword mpDef stopsavingdata stripe_path_a stripe_path_n undashed
+ syn keyword mpDef undrawfill untext visualizeddraw visualizedfill
+ syn keyword mpDef visualizepaths withcolor withgray
+ syn keyword mpDef xscale_currentpicture xshifted
+ syn keyword mpDef xyscale_currentpicture yscale_currentpicture
+ syn keyword mpDef yshifted
+ syn keyword mpVardef acos acosh anglebetween area arrowhead
+ syn keyword mpVardef arrowheadonpath arrowpath asciistring asin asinh
+ syn keyword mpVardef atan basiccolors bbheight bbwidth bcomponent
+ syn keyword mpVardef blackcolor bottomboundary boundingbox c_phantom
+ syn keyword mpVardef ccomponent center cleanstring colorcircle
+ syn keyword mpVardef colordecimals colordecimalslist colorlike colorpart
+ syn keyword mpVardef colortype complementary complemented copylist cos
+ syn keyword mpVardef cosh cot cotd curved ddddecimal dddecimal ddecimal
+ syn keyword mpVardef decorated drawarrowpath epsed exp freedotlabel
+ syn keyword mpVardef freelabel gcomponent getunstringed grayed greyed
+ syn keyword mpVardef hsvtorgb infinite innerboundingbox interpolated inv
+ syn keyword mpVardef invcos inverted invsin invtan laddered leftboundary
+ syn keyword mpVardef leftpath leftrightpath listsize listtocurves
+ syn keyword mpVardef listtolines ln log mcomponent new_on_grid
+ syn keyword mpVardef outerboundingbox paired pen_size penpoint phantom
+ syn keyword mpVardef pointarrow pow punked rangepath rcomponent
+ syn keyword mpVardef redecorated repathed rightboundary rightpath
+ syn keyword mpVardef rotation roundedsquare set_inner_boundingbox
+ syn keyword mpVardef set_outer_boundingbox setunstringed shapedlist
+ syn keyword mpVardef simplified sin sinh sortlist sqr straightpath tan
+ syn keyword mpVardef tand tanh tensecircle thefreelabel topboundary
+ syn keyword mpVardef tripled undecorated unitvector unspiked unstringed
+ syn keyword mpVardef whitecolor ycomponent
+ syn keyword mpPrimaryDef along blownup bottomenlarged cornered crossed
+ syn keyword mpPrimaryDef enlarged enlonged leftenlarged llenlarged llmoved
+ syn keyword mpPrimaryDef lrenlarged lrmoved on paralleled randomized
+ syn keyword mpPrimaryDef randomizedcontrols randomshifted rightenlarged
+ syn keyword mpPrimaryDef shortened sized smoothed snapped softened squeezed
+ syn keyword mpPrimaryDef stretched superellipsed topenlarged ulenlarged
+ syn keyword mpPrimaryDef ulmoved uncolored urenlarged urmoved xsized
+ syn keyword mpPrimaryDef xstretched xyscaled xysized ysized ystretched zmod
+ syn keyword mpSecondaryDef anglestriped intersection_point numberstriped
+ syn keyword mpSecondaryDef peepholed
+ syn keyword mpTertiaryDef cutends
+ syn keyword mpNewInternal ahdimple ahvariant anglelength anglemethod
+ syn keyword mpNewInternal angleoffset charscale cmykcolormodel graycolormodel
+ syn keyword mpNewInternal greycolormodel maxdimensions metapostversion
+ syn keyword mpNewInternal nocolormodel rgbcolormodel striped_normal_inner
+ syn keyword mpNewInternal striped_normal_outer striped_reverse_inner
+ syn keyword mpNewInternal striped_reverse_outer
+ syn keyword mpType grayscale greyscale quadruplet triplet
+ syn keyword mpVariable ahfactor collapse_data color_map drawoptionsfactor
+ syn keyword mpVariable freedotlabelsize freelabeloffset grid grid_full
+ syn keyword mpVariable grid_h grid_left grid_nx grid_ny grid_w grid_x
+ syn keyword mpVariable grid_y intersection_found originlength
+ syn keyword mpVariable plain_compatibility_data pointlabelfont
+ syn keyword mpVariable pointlabelscale refillbackground savingdata
+ syn keyword mpVariable savingdatadone swappointlabels ticklength tickstep
+ syn keyword mpConstant CRLF DQUOTE PERCENT SPACE bcircle context_tool crlf
+ syn keyword mpConstant darkblue darkcyan darkgray darkgreen darkmagenta
+ syn keyword mpConstant darkred darkyellow downtriangle dquote freesquare
+ syn keyword mpConstant fulldiamond fullsquare fulltriangle lcircle
+ syn keyword mpConstant lefttriangle lightgray llcircle lltriangle lrcircle
+ syn keyword mpConstant lrtriangle mpversion nocolor noline oddly
+ syn keyword mpConstant originpath percent rcircle righttriangle space
+ syn keyword mpConstant tcircle triangle ulcircle ultriangle unitcircle
+ syn keyword mpConstant unitdiamond unittriangle uptriangle urcircle
+ syn keyword mpConstant urtriangle
+endif " MetaFun macros
+" Define the default highlighting
+hi def link mpTeXdelim mpPrimitive
+hi def link mpBoolExp mfBoolExp
+hi def link mpNumExp mfNumExp
+hi def link mpPairExp mfPairExp
+hi def link mpPathExp mfPathExp
+hi def link mpPenExp mfPenExp
+hi def link mpPicExp mfPicExp
+hi def link mpStringExp mfStringExp
+hi def link mpInternal mfInternal
+hi def link mpCommand mfCommand
+hi def link mpType mfType
+hi def link mpPrimitive mfPrimitive
+hi def link mpDef mfDef
+hi def link mpVardef mpDef
+hi def link mpPrimaryDef mpDef
+hi def link mpSecondaryDef mpDef
+hi def link mpTertiaryDef mpDef
+hi def link mpNewInternal mpInternal
+hi def link mpVariable mfVariable
+hi def link mpConstant mfConstant
+hi def link mpOnOff mpPrimitive
+hi def link mpDash mpPrimitive
let b:current_syntax = "mp"
-" vim: ts=8
+let &cpo = s:cpo_sav
+unlet! s:cpo_sav
+
+" vim:sw=2