diff options
-rw-r--r-- | runtime/autoload/gzip.vim | 6 | ||||
-rw-r--r-- | runtime/doc/autocmd.txt | 17 | ||||
-rw-r--r-- | runtime/doc/cmdline.txt | 5 | ||||
-rw-r--r-- | runtime/doc/editing.txt | 3 | ||||
-rw-r--r-- | runtime/doc/eval.txt | 4 | ||||
-rw-r--r-- | runtime/doc/index.txt | 4 | ||||
-rw-r--r-- | runtime/doc/options.txt | 2 | ||||
-rw-r--r-- | runtime/doc/syntax.txt | 9 | ||||
-rw-r--r-- | runtime/ftplugin/mf.vim | 64 | ||||
-rw-r--r-- | runtime/ftplugin/mp.vim | 67 | ||||
-rw-r--r-- | runtime/indent/fortran.vim | 12 | ||||
-rw-r--r-- | runtime/indent/mf.vim | 6 | ||||
-rw-r--r-- | runtime/indent/mp.vim | 482 | ||||
-rw-r--r-- | runtime/syntax/debsources.vim | 4 | ||||
-rw-r--r-- | runtime/syntax/mf.vim | 371 | ||||
-rw-r--r-- | runtime/syntax/mp.vim | 828 |
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 |