Update runtime files

This commit is contained in:
Bram Moolenaar
2022-08-26 18:01:12 +01:00
parent 2ee347fbc0
commit 7dd543246a
31 changed files with 730 additions and 367 deletions

View File

@ -4,7 +4,7 @@
" Maintainer: Original maintainer Steven Vertigan <steven@vertigan.wattle.id.au>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Updated: Fri Aug 5 12:25:12 2022
" Last Updated: Tue 23 Aug 2022 16:50:34 MSK
" Generated by Colortemplate v2.2.0
@ -13,7 +13,7 @@ set background=dark
hi clear
let g:colors_name = 'blue'
let s:t_Co = exists('&t_Co') ? (&t_Co ?? 0) : -1
let s:t_Co = exists('&t_Co') && !has('gui_running') ? (&t_Co ?? 0) : -1
if (has('termguicolors') && &termguicolors) || has('gui_running')
let g:terminal_ansi_colors = ['#000000', '#cd0000', '#00cd00', '#cdcd00', '#0000ee', '#cd00cd', '#00cdcd', '#e5e5e5', '#7f7f7f', '#ff0000', '#00ff00', '#ffff00', '#5c5cff', '#ff00ff', '#00ffff', '#ffffff']

View File

@ -4,7 +4,7 @@
" Maintainer: Original author Bohdan Vlasyuk <bohdan@vstu.edu.ua>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Updated: Mon Aug 8 15:21:06 2022
" Last Updated: Tue 23 Aug 2022 16:50:35 MSK
" Generated by Colortemplate v2.2.0
@ -13,7 +13,7 @@ set background=dark
hi clear
let g:colors_name = 'darkblue'
let s:t_Co = exists('&t_Co') ? (&t_Co ?? 0) : -1
let s:t_Co = exists('&t_Co') && !has('gui_running') ? (&t_Co ?? 0) : -1
if (has('termguicolors') && &termguicolors) || has('gui_running')
let g:terminal_ansi_colors = ['#000000', '#8b0000', '#90f020', '#ffa500', '#00008b', '#8b008b', '#008b8b', '#c0c0c0', '#808080', '#ffa0a0', '#90f020', '#ffff60', '#0030ff', '#ff00ff', '#90fff0', '#ffffff']

View File

@ -4,7 +4,7 @@
" Maintainer: Original maintainer David Schweikert <david@schweikert.ch>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Updated: Mon Aug 8 15:21:07 2022
" Last Updated: Tue 23 Aug 2022 16:50:36 MSK
" Generated by Colortemplate v2.2.0
@ -13,7 +13,7 @@ set background=light
hi clear
let g:colors_name = 'delek'
let s:t_Co = exists('&t_Co') ? (&t_Co ?? 0) : -1
let s:t_Co = exists('&t_Co') && !has('gui_running') ? (&t_Co ?? 0) : -1
if (has('termguicolors') && &termguicolors) || has('gui_running')
let g:terminal_ansi_colors = ['#ffffff', '#0000ff', '#00cd00', '#cd00cd', '#008b8b', '#0000ff', '#ff1493', '#bcbcbc', '#ee0000', '#0000ff', '#00cd00', '#cd00cd', '#008b8b', '#0000ff', '#ff1493', '#000000']

View File

@ -4,7 +4,7 @@
" Maintainer: Original maintainer Hans Fugal <hans@fugal.net>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Updated: Mon Aug 8 15:21:08 2022
" Last Updated: Tue 23 Aug 2022 16:50:37 MSK
" Generated by Colortemplate v2.2.0
@ -13,7 +13,7 @@ set background=dark
hi clear
let g:colors_name = 'desert'
let s:t_Co = exists('&t_Co') ? (&t_Co ?? 0) : -1
let s:t_Co = exists('&t_Co') && !has('gui_running') ? (&t_Co ?? 0) : -1
if (has('termguicolors') && &termguicolors) || has('gui_running')
let g:terminal_ansi_colors = ['#7f7f8c', '#cd5c5c', '#9acd32', '#bdb76b', '#75a0ff', '#eeee00', '#cd853f', '#666666', '#8a7f7f', '#ff0000', '#89fb98', '#f0e68c', '#6dceeb', '#ffde9b', '#ffa0a0', '#c2bfa5']

View File

@ -3,7 +3,7 @@
" Maintainer: original maintainer Ron Aaron <ron@ronware.org>
" Website: https://www.github.com/vim/colorschemes
" License: Same as Vim
" Last Updated: Mon Aug 8 15:21:08 2022
" Last Updated: Tue 23 Aug 2022 16:50:37 MSK
" Generated by Colortemplate v2.2.0
@ -12,7 +12,7 @@ set background=dark
hi clear
let g:colors_name = 'elflord'
let s:t_Co = exists('&t_Co') ? (&t_Co ?? 0) : -1
let s:t_Co = exists('&t_Co') && !has('gui_running') ? (&t_Co ?? 0) : -1
hi! link Terminal Normal
hi! link Boolean Constant

View File

@ -4,7 +4,7 @@
" Maintainer: Original maintainer Steven Vertigan <steven@vertigan.wattle.id.au>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Updated: Mon Aug 8 15:21:09 2022
" Last Updated: Tue 23 Aug 2022 16:50:38 MSK
" Generated by Colortemplate v2.2.0
@ -13,7 +13,7 @@ set background=dark
hi clear
let g:colors_name = 'evening'
let s:t_Co = exists('&t_Co') ? (&t_Co ?? 0) : -1
let s:t_Co = exists('&t_Co') && !has('gui_running') ? (&t_Co ?? 0) : -1
if (has('termguicolors') && &termguicolors) || has('gui_running')
let g:terminal_ansi_colors = ['#000000', '#ffa500', '#2e8b57', '#ffff00', '#006faf', '#8b008b', '#008b8b', '#bebebe', '#4d4d4d', '#ff5f5f', '#00ff00', '#ffff60', '#0087ff', '#ff80ff', '#00ffff', '#ffffff']

View File

@ -4,7 +4,7 @@
" Maintainer: Maxim Kim <habamax@gmail.com>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Updated: Mon Aug 8 15:21:10 2022
" Last Updated: Tue 23 Aug 2022 16:50:38 MSK
" Generated by Colortemplate v2.2.0
@ -13,7 +13,7 @@ set background=dark
hi clear
let g:colors_name = 'habamax'
let s:t_Co = exists('&t_Co') ? (&t_Co ?? 0) : -1
let s:t_Co = exists('&t_Co') && !has('gui_running') ? (&t_Co ?? 0) : -1
if (has('termguicolors') && &termguicolors) || has('gui_running')
let g:terminal_ansi_colors = ['#1c1c1c', '#d75f5f', '#87af87', '#afaf87', '#5f87af', '#af87af', '#5f8787', '#9e9e9e', '#767676', '#d7875f', '#afd7af', '#d7d787', '#87afd7', '#d7afd7', '#87afaf', '#bcbcbc']

View File

@ -4,7 +4,7 @@
" Maintainer: Original maintainer Shian Lee.
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Updated: Mon Aug 8 15:21:11 2022
" Last Updated: Tue 23 Aug 2022 16:50:39 MSK
" Generated by Colortemplate v2.2.0
@ -13,7 +13,7 @@ set background=dark
hi clear
let g:colors_name = 'industry'
let s:t_Co = exists('&t_Co') ? (&t_Co ?? 0) : -1
let s:t_Co = exists('&t_Co') && !has('gui_running') ? (&t_Co ?? 0) : -1
if (has('termguicolors') && &termguicolors) || has('gui_running')
let g:terminal_ansi_colors = ['#303030', '#870000', '#5fd75f', '#afaf00', '#87afff', '#af00af', '#00afaf', '#6c6c6c', '#444444', '#ff0000', '#00ff00', '#ffff00', '#005fff', '#ff00ff', '#00ffff', '#ffffff']

View File

@ -3,7 +3,7 @@
" Maintainer: original maintainer Ron Aaron <ron@ronware.org>
" Website: https://www.github.com/vim/colorschemes
" License: Same as Vim
" Last Updated: Mon Aug 8 15:21:12 2022
" Last Updated: Tue 23 Aug 2022 16:50:39 MSK
" Generated by Colortemplate v2.2.0
@ -12,7 +12,7 @@ set background=dark
hi clear
let g:colors_name = 'koehler'
let s:t_Co = exists('&t_Co') ? (&t_Co ?? 0) : -1
let s:t_Co = exists('&t_Co') && !has('gui_running') ? (&t_Co ?? 0) : -1
hi! link Terminal Normal
hi! link Boolean Constant

View File

@ -4,14 +4,14 @@
" Maintainer: Maxim Kim <habamax@gmail.com>
" Website: https://www.github.com/vim/colorschemes
" License: Vim License (see `:help license`)
" Last Updated: Thu Aug 18 14:36:32 2022
" Last Updated: Tue 23 Aug 2022 16:50:40 MSK
" Generated by Colortemplate v2.2.0
hi clear
let g:colors_name = 'lunaperche'
let s:t_Co = exists('&t_Co') ? (&t_Co ?? 0) : -1
let s:t_Co = exists('&t_Co') && !has('gui_running') ? (&t_Co ?? 0) : -1
hi! link helpVim Title
hi! link helpHeader Title

View File

@ -4,7 +4,7 @@
" Maintainer: Original maintainer Bram Moolenaar <Bram@vim.org>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Updated: Mon Aug 8 15:21:13 2022
" Last Updated: Tue 23 Aug 2022 16:50:41 MSK
" Generated by Colortemplate v2.2.0
@ -13,7 +13,7 @@ set background=light
hi clear
let g:colors_name = 'morning'
let s:t_Co = exists('&t_Co') ? (&t_Co ?? 0) : -1
let s:t_Co = exists('&t_Co') && !has('gui_running') ? (&t_Co ?? 0) : -1
if (has('termguicolors') && &termguicolors) || has('gui_running')
let g:terminal_ansi_colors = ['#e4e4e4', '#a52a2a', '#ff00ff', '#6a0dad', '#008787', '#2e8b57', '#6a5acd', '#bcbcbc', '#0000ff', '#a52a2a', '#ff00ff', '#6a0dad', '#008787', '#2e8b57', '#6a5acd', '#000000']

View File

@ -4,7 +4,7 @@
" Maintainer: Original maintainer Ron Aaron <ron@ronware.org>.
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Updated: Mon Aug 8 15:21:14 2022
" Last Updated: Tue 23 Aug 2022 16:50:41 MSK
" Generated by Colortemplate v2.2.0
@ -13,7 +13,7 @@ set background=dark
hi clear
let g:colors_name = 'murphy'
let s:t_Co = exists('&t_Co') ? (&t_Co ?? 0) : -1
let s:t_Co = exists('&t_Co') && !has('gui_running') ? (&t_Co ?? 0) : -1
if (has('termguicolors') && &termguicolors) || has('gui_running')
let g:terminal_ansi_colors = ['#303030', '#ffa700', '#005f00', '#ffd7af', '#87afff', '#ffafaf', '#00afaf', '#bcbcbc', '#444444', '#ff0000', '#00875f', '#ffff00', '#005fff', '#ff00ff', '#00ffff', '#ffffff']

View File

@ -3,7 +3,7 @@
" Maintainer: Original maintainerRon Aaron <ron@ronware.org>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Updated: Mon Aug 8 15:21:15 2022
" Last Updated: Tue 23 Aug 2022 16:50:42 MSK
" Generated by Colortemplate v2.2.0
@ -12,7 +12,7 @@ set background=dark
hi clear
let g:colors_name = 'pablo'
let s:t_Co = exists('&t_Co') ? (&t_Co ?? 0) : -1
let s:t_Co = exists('&t_Co') && !has('gui_running') ? (&t_Co ?? 0) : -1
if (has('termguicolors') && &termguicolors) || has('gui_running')
let g:terminal_ansi_colors = ['#000000', '#cd0000', '#00cd00', '#cdcd00', '#0000ee', '#cd00cd', '#00cdcd', '#e5e5e5', '#7f7f7f', '#ff0000', '#00ff00', '#ffff00', '#5c5cff', '#ff00ff', '#00ffff', '#ffffff']

View File

@ -4,7 +4,7 @@
" Maintainer: Original maintainer David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Updated: Mon Aug 8 15:21:16 2022
" Last Updated: Tue 23 Aug 2022 16:50:42 MSK
" Generated by Colortemplate v2.2.0
@ -13,7 +13,7 @@ set background=light
hi clear
let g:colors_name = 'peachpuff'
let s:t_Co = exists('&t_Co') ? (&t_Co ?? 0) : -1
let s:t_Co = exists('&t_Co') && !has('gui_running') ? (&t_Co ?? 0) : -1
if (has('termguicolors') && &termguicolors) || has('gui_running')
let g:terminal_ansi_colors = ['#ffdab9', '#a52a2a', '#c00058', '#cd00cd', '#008b8b', '#2e8b57', '#6a5acd', '#737373', '#406090', '#a52a2a', '#c00058', '#cd00cd', '#008b8b', '#2e8b57', '#6a5acd', '#000000']

View File

@ -4,14 +4,14 @@
" Maintainer: neutaaaaan <neutaaaaan-gh@protonmail.com>
" Website: https://github.com/vim/colorschemes
" License: Vim License (see `:help license`)`
" Last Updated: 2022-08-14 15:17:11
" Last Updated: Tue 23 Aug 2022 16:50:43 MSK
" Generated by Colortemplate v2.2.0
hi clear
let g:colors_name = 'quiet'
let s:t_Co = exists('&t_Co') ? (&t_Co ?? 0) : -1
let s:t_Co = exists('&t_Co') && !has('gui_running') ? (&t_Co ?? 0) : -1
hi! link Terminal Normal
hi! link StatusLineTerm StatusLine

View File

@ -3,7 +3,7 @@
" Maintainer: original maintainer Ron Aaron <ron@ronware.org>
" Website: https://www.github.com/vim/colorschemes
" License: Same as Vim
" Last Updated: Mon Aug 8 15:21:18 2022
" Last Updated: Tue 23 Aug 2022 16:50:45 MSK
" Generated by Colortemplate v2.2.0
@ -12,7 +12,7 @@ set background=dark
hi clear
let g:colors_name = 'ron'
let s:t_Co = exists('&t_Co') ? (&t_Co ?? 0) : -1
let s:t_Co = exists('&t_Co') && !has('gui_running') ? (&t_Co ?? 0) : -1
hi! link Terminal Normal
hi! link Boolean Constant

View File

@ -4,7 +4,7 @@
" Maintainer: Original maintainer is Yasuhiro Matsumoto <mattn@mail.goo.ne.jp>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Updated: Mon Aug 8 15:21:19 2022
" Last Updated: Tue 23 Aug 2022 16:50:46 MSK
" Generated by Colortemplate v2.2.0
@ -13,7 +13,7 @@ set background=light
hi clear
let g:colors_name = 'shine'
let s:t_Co = exists('&t_Co') ? (&t_Co ?? 0) : -1
let s:t_Co = exists('&t_Co') && !has('gui_running') ? (&t_Co ?? 0) : -1
if (has('termguicolors') && &termguicolors) || has('gui_running')
let g:terminal_ansi_colors = ['#000000', '#8b0000', '#006400', '#ffff00', '#00008b', '#6a0dad', '#008b8b', '#dadada', '#767676', '#ffafaf', '#90ee90', '#ffff60', '#add8e6', '#ff00ff', '#00ffff', '#ffffff']

View File

@ -4,7 +4,7 @@
" Maintainer: Original maintainer Ralph Amissah <ralph@amissah.com>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Updated: Tue Aug 16 08:11:08 2022
" Last Updated: Tue 23 Aug 2022 16:50:46 MSK
" Generated by Colortemplate v2.2.0
@ -13,7 +13,7 @@ set background=dark
hi clear
let g:colors_name = 'slate'
let s:t_Co = exists('&t_Co') ? (&t_Co ?? 0) : -1
let s:t_Co = exists('&t_Co') && !has('gui_running') ? (&t_Co ?? 0) : -1
if (has('termguicolors') && &termguicolors) || has('gui_running')
let g:terminal_ansi_colors = ['#000000', '#cd0000', '#00cd00', '#cdcd00', '#0000ee', '#cd00cd', '#00cdcd', '#e5e5e5', '#7f7f7f', '#ff0000', '#00ff00', '#ffff00', '#5c5cff', '#ff00ff', '#00ffff', '#ffffff']

View File

@ -4,7 +4,7 @@
" Maintainer: Original maintainer Thorsten Maerz <info@netztorte.de>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Updated: Mon Aug 8 15:21:22 2022
" Last Updated: Tue 23 Aug 2022 16:50:47 MSK
" Generated by Colortemplate v2.2.0
@ -13,7 +13,7 @@ set background=dark
hi clear
let g:colors_name = 'torte'
let s:t_Co = exists('&t_Co') ? (&t_Co ?? 0) : -1
let s:t_Co = exists('&t_Co') && !has('gui_running') ? (&t_Co ?? 0) : -1
if (has('termguicolors') && &termguicolors) || has('gui_running')
let g:terminal_ansi_colors = ['#000000', '#cd0000', '#00cd00', '#cdcd00', '#0000ee', '#cd00cd', '#00cdcd', '#e5e5e5', '#7f7f7f', '#ff0000', '#00ff00', '#ffff00', '#5c5cff', '#ff00ff', '#00ffff', '#ffffff']

View File

@ -4,7 +4,7 @@
" Maintainer: Original maintainer Ron Aaron <ron@ronware.org>
" Website: https://github.com/vim/colorschemes
" License: Same as Vim
" Last Updated: Mon Aug 8 15:21:23 2022
" Last Updated: Tue 23 Aug 2022 16:50:48 MSK
" Generated by Colortemplate v2.2.0
@ -13,7 +13,7 @@ set background=light
hi clear
let g:colors_name = 'zellner'
let s:t_Co = exists('&t_Co') ? (&t_Co ?? 0) : -1
let s:t_Co = exists('&t_Co') && !has('gui_running') ? (&t_Co ?? 0) : -1
if (has('termguicolors') && &termguicolors) || has('gui_running')
let g:terminal_ansi_colors = ['#ffffff', '#a52a2a', '#ff00ff', '#a020f0', '#0000ff', '#0000ff', '#ff00ff', '#a9a9a9', '#ff0000', '#a52a2a', '#ff00ff', '#a020f0', '#0000ff', '#0000ff', '#ff00ff', '#000000']

View File

@ -31,6 +31,8 @@ DOCS = \
filetype.txt \
fold.txt \
ft_ada.txt \
ft_context.txt \
ft_mp.txt \
ft_ps1.txt \
ft_raku.txt \
ft_rust.txt \
@ -180,6 +182,8 @@ HTMLS = \
filetype.html \
fold.html \
ft_ada.html \
ft_context.html \
ft_mp.html \
ft_ps1.html \
ft_raku.html \
ft_rust.html \

152
runtime/doc/ft_context.txt Normal file
View File

@ -0,0 +1,152 @@
*ft_context.txt* For Vim version 9.0. Last change: 2022 Aug 12
This is the documentation for the ConTeXt filetype plugin.
NOTE: the plugin requires +vim9script.
==============================================================================
CONTENTS *context.vim* *ft-context*
1. Introduction |ft-context-intro|
2. Commands |ft-context-commands|
3. Settings |ft-context-settings|
4. Mappings |ft-context-mappings|
==============================================================================
*ft-context-intro*
Introduction ~
ConTeXt, similarly to LaTeX, is a macro-based typesetting system built on TeX:
>
https://wiki.contextgarden.net
https://wiki.contextgarden.net/Vim
<
The ConTeXt plugin provides syntax highlighting, completion and support for
typesetting ConTeXt documents. The recommended way to typeset a document is to
use |:ConTeXt|. This will invoke the `mtxrun` script that is found in $PATH.
For more fine grained control over the command and its environment, you may
invoke `context.Typeset()` directly (or `context#Typeset()` from legacy Vim
script). For instance, if you have installed a version of ConTeXt in
`~/context`, you may define a function to use it (you may put the following
code in `~/.vim/after/ftplugin/context.vim`) similar to the following:
>
import autoload 'context.vim'
def MyConTeXt()
const env = {'PATH':
printf("%s/context/tex/texmf-<os>-<arch>/bin:%s", $HOME, $PATH)}
context.Typeset("%", env)
enddef
<
and perhaps use it with a mapping:
>
nnoremap <silent><buffer><leader>t <scriptcmd>MyConTeXt()<cr>
<
`context.Typeset()` accepts a third optional argument to specify a custom
typesetting command. Such argument must be a function that takes a path and
returns the command as a List. For example:
>
def ConTeXtCustomCommand(path: string): list<string>
return ['mtxrun', '--script', 'context', '--nonstopmode, path]
enddef
context.ConTeXtTypeset("%", v:none, ConTeXtCustomCommand)
<
Large projects are often organized as a root document and various chapter
files. When editing a chapter file, it is convenient to invoke |:ConTeXt|
directly on it, rather than having to switch to the root file. A "magic line"
can be added at the beginning of each chapter file, which specifies the
relative path to the root file. For instance:
>
% !TEX root = ../MyRoot.tex
<
Vim searches for the magic line in the first ten lines of the current buffer:
if it is found, the document specified by that line is typeset rather than the
one in the current buffer. The root document does not have to be opened in
Vim.
To extend completion and syntax highlighting, you may generate supporting
files using ConTeXt and add them to your configuration. If you configuration
resides in `~/.vim`, you may use these commands:
>
mkdir -p ~/.vim/syntax/shared
cd ~/.vim/syntax/shared
mtxrun --script interface --vim
<
The last command will create the following syntax files:
- `context-data-context.vim`;
- `context-data-interfaces.vim`;
- `context-data-metafun.vim`;
- `context-data-tex.vim`.
The same command can be used to update those syntax files.
*ft-context-commands*
Commands ~
*:ConTeXt*
Start a background |job| to typeset the document in the current buffer. The
command accepts an optional buffer's name, if you want to typeset a document
that is in a different buffer.
*:ConTeXtLog*
Edit the log file corresponding to the source in the current buffer.
*:ConTeXtJobsStatus*
Echo the number of jobs currently running in the background.
*:ConTeXtStopJobs*
Stop all the ConTeXt jobs currently running in the background.
*ft-context-settings*
Settings ~
*'b:context_ignore_makefile'*
*'g:context_ignore_makefile'*
`make` can be used to (synchronously) typeset a document. If a Makefile exists
and this option is not set, standard `make` is used. If this option is set,
`mtxrun` is invoked instead, even if a Makefile exists.
>
g:context_ignore_makefile = 0
<
NOTE: before using `make`, set the working directory of the buffer to the
directory of the file to be typeset.
*'b:context_include'*
*'g:context_include'*
Dictionary of filetype/GROUP pairs for which syntax highlighting should be
activated between \startGROUP and \stopGROUP. The default is to highlight XML
between `\startXML` and `\stopXML`.
>
g:context_include = {'xml': 'XML'}
NOTE: Lua and MetaPost are always highlighted within the respective blocks.
*'g:no_context_maps'*
When set, do not define any mappings.
>
g:no_context_maps = 0
<
*ft-context-mappings*
Mappings ~
tp "reflow TeX paragraph".
i$ "inside inline math block".
a$ "around inline math block".
]] [count] start of sections forward.
[[ [count] start of sections backward.
][ [count] end sections forward.
[] [count] end of sections backward.
]} [count] end of blocks (\stop..., \setup...,
\define...) forward.
[{ [count] begin of blocks (\start..., \setup...,
\define...) backward.
vim:tw=78:sw=4:ts=8:noet:ft=help:norl:

151
runtime/doc/ft_mp.txt Normal file
View File

@ -0,0 +1,151 @@
*ft_mp.txt* For Vim version 9.0. Last change: 2022 Aug 12
This is the documentation for the METAFONT and MetaPost filetype plugins.
Unless otherwise specified, the commands, settings and mappings defined below
apply equally to both filetypes.
NOTE: the plugin requires +vim9script.
==============================================================================
CONTENTS *mp.vim* *ft-metapost*
*mf.vim* *ft-metafont*
1. Introduction |ft-metapost-intro|
2. Commands |ft-metapost-commands|
3. Settings |ft-metapost-settings|
4. Mappings |ft-metapost-mappings|
==============================================================================
*ft-metapost-intro*
*ft-metafont-intro*
Introduction ~
This filetype plugin provides extensive support for editing METAFONT and
MetaPost documents, including syntax coloring, indentation, and completion.
Defining indentation rules for METAFONT and MetaPost code is tricky and
somewhat subjective, because the syntax is quite liberal. The plugin uses some
heuristics that work well most of the time, but in particular cases you may
want to to override the automatic rules, so that the manually defined
indentation is preserved by commands like `gg=G`.
This can be achieved by appending `%>`, `%<`, `%=` or `%!` to a line to
explicitly control the indentation of the next line. The `<` and `>` symbols
may be repeated many times: for instance, `%>>` will cause the next line to be
indented twice. Of course, `%<` means that the next line should be
de-indented; `%=` sets the indentation of the next line to be equal to the
indentation of the current line; and `%!` means that the indentation of the
next line should not change from whatever it has been manually set.
For example, this is the default indentation of a simple macro:
>
def foo =
makepen(
subpath(T-n,t) of r
shifted .5down
--subpath(t,T) of r shifted .5up -- cycle
)
withcolor black
enddef
<
By adding the special comments, the indentation can be adjusted arbitrarily:
>
def foo =
makepen(
subpath(T-n,t) of r %>
shifted .5down %>
--subpath(t,T) of r shifted .5up -- cycle %<<<
)
withcolor black
enddef
<
*ft-metapost-commands*
Commands ~
*:FixBeginfigs*
Renumber beginfig() blocks in the current buffer so that the n-th figure has
number n. MetaPost only.
*ft-metapost-settings*
*ft-metafont-settings*
Settings ~
*'g:mf_other_macros'*
Highlight some other basic macro names, e.g., from cmbase, logo, etc. This is
set to 1 by default in METAFONT buffers, and it is set to 0 by default in
MetaPost buffers.
*'g:mf_plain_macros'*
Highlight keywords defined by plain.mf. This is set to 1 by default in
METAFONT buffers, and it is set to 0 by default in MetaPost buffers.
*'g:mf_plain_modes'*
Highlight keywords defined by modes.mf. This is set to 1 by default in
METAFONT buffers, and it is set to 0 by default in MetaPost buffers.
*'g:mp_close_tag'*
Define additional keywords that end indented blocks. For instance, if you
define:
>
g:mp_end_tag = ['\<endfoo\>']
<
any line starting with `endfoo` will be de-indented compared to its previous
line.
>
g:mp_close_tag = []
<
*'b:mp_metafun'*
*'g:mp_metafun'*
If set to 1, highlight ConTeXt's MetaFun keywords. MetaPost only.
>
g:mp_metafun = 0
<
*'g:mp_mfplain_macros'*
Highlight keywords defined by mfplain.mp. MetaPost only.
>
g:mp_mfplain_macros = 1
<
*'g:mp_open_tag'*
Define additional keywords that start indented blocks. For instance, if you
define:
>
g:mp_open_tag = ['\<beginfoo\>']
<
the line following `beginfoo` will be indented.
>
g:mp_open_tag = []
<
*'g:mp_other_macros'*
Highlight keywords defined by all base macro packages (boxes, rboxes, format,
graph, marith, sarith, string, TEX). This option affects only MetaPost
buffers.
>
g:mp_other_macros = 1
<
*'g:mp_plain_macros'*
Highlight keywords defined by plain.mp. MetaPost only.
>
g:mp_plain_macros = 1
<
*'g:no_mp_maps'*
*'g:no_mf_maps'*
When set, do not define any mapping in buffers with the corresponding
filetype.
>
g:no_mp_maps = 0
g:no_mf_maps = 0
<
*ft-metapost-mappings*
*ft-metafont-mappings*
Mappings ~
]] [count] vardefs, macros or figures forward.
[[ [count] vardefs, macros or figures backward.
][ [count] end of vardefs, macros or figures forward.
[] [count] end of vardefs, macros or figures backward.
]} [count] end of blocks (fi, endfor, endgroup) forward.
[{ [count] begin of blocks (if, for, begingroup) backward.
vim:tw=78:sw=4:ts=8:noet:ft=help:norl:

View File

@ -69,6 +69,9 @@ $quote eval.txt /*$quote*
'autowriteall' options.txt /*'autowriteall'*
'aw' options.txt /*'aw'*
'awa' options.txt /*'awa'*
'b:context_ignore_makefile' ft_context.txt /*'b:context_ignore_makefile'*
'b:context_include' ft_context.txt /*'b:context_include'*
'b:mp_metafun' ft_mp.txt /*'b:mp_metafun'*
'background' options.txt /*'background'*
'backspace' options.txt /*'backspace'*
'backup' options.txt /*'backup'*
@ -299,6 +302,20 @@ $quote eval.txt /*$quote*
'fs' options.txt /*'fs'*
'fsync' options.txt /*'fsync'*
'ft' options.txt /*'ft'*
'g:context_ignore_makefile' ft_context.txt /*'g:context_ignore_makefile'*
'g:context_include' ft_context.txt /*'g:context_include'*
'g:mf_other_macros' ft_mp.txt /*'g:mf_other_macros'*
'g:mf_plain_macros' ft_mp.txt /*'g:mf_plain_macros'*
'g:mf_plain_modes' ft_mp.txt /*'g:mf_plain_modes'*
'g:mp_close_tag' ft_mp.txt /*'g:mp_close_tag'*
'g:mp_metafun' ft_mp.txt /*'g:mp_metafun'*
'g:mp_mfplain_macros' ft_mp.txt /*'g:mp_mfplain_macros'*
'g:mp_open_tag' ft_mp.txt /*'g:mp_open_tag'*
'g:mp_other_macros' ft_mp.txt /*'g:mp_other_macros'*
'g:mp_plain_macros' ft_mp.txt /*'g:mp_plain_macros'*
'g:no_context_maps' ft_context.txt /*'g:no_context_maps'*
'g:no_mf_maps' ft_mp.txt /*'g:no_mf_maps'*
'g:no_mp_maps' ft_mp.txt /*'g:no_mp_maps'*
'gcr' options.txt /*'gcr'*
'gd' options.txt /*'gd'*
'gdefault' options.txt /*'gdefault'*
@ -1301,7 +1318,6 @@ $quote eval.txt /*$quote*
+balloon_eval various.txt /*+balloon_eval*
+balloon_eval_term various.txt /*+balloon_eval_term*
+browse various.txt /*+browse*
+builtin_terms various.txt /*+builtin_terms*
+byte_offset various.txt /*+byte_offset*
+channel various.txt /*+channel*
+cindent various.txt /*+cindent*
@ -2036,12 +2052,17 @@ $quote eval.txt /*$quote*
:Cfilter quickfix.txt /*:Cfilter*
:Clear terminal.txt /*:Clear*
:CompilerSet usr_51.txt /*:CompilerSet*
:ConTeXt ft_context.txt /*:ConTeXt*
:ConTeXtJobsStatus ft_context.txt /*:ConTeXtJobsStatus*
:ConTeXtLog ft_context.txt /*:ConTeXtLog*
:ConTeXtStopJobs ft_context.txt /*:ConTeXtStopJobs*
:Continue terminal.txt /*:Continue*
:DiffOrig diff.txt /*:DiffOrig*
:DoMatchParen pi_paren.txt /*:DoMatchParen*
:Evaluate terminal.txt /*:Evaluate*
:Explore pi_netrw.txt /*:Explore*
:Finish terminal.txt /*:Finish*
:FixBeginfigs ft_mp.txt /*:FixBeginfigs*
:GLVS pi_getscript.txt /*:GLVS*
:Gdb terminal.txt /*:Gdb*
:GetLatestVimScripts_dat pi_getscript.txt /*:GetLatestVimScripts_dat*
@ -6293,6 +6314,7 @@ conceal syntax.txt /*conceal*
confirm() builtin.txt /*confirm()*
connection-refused message.txt /*connection-refused*
console-menus gui.txt /*console-menus*
context.vim ft_context.txt /*context.vim*
control intro.txt /*control*
conversion-server mbyte.txt /*conversion-server*
convert-to-HTML syntax.txt /*convert-to-HTML*
@ -6937,6 +6959,11 @@ ft-clojure-indent indent.txt /*ft-clojure-indent*
ft-clojure-syntax syntax.txt /*ft-clojure-syntax*
ft-cobol-syntax syntax.txt /*ft-cobol-syntax*
ft-coldfusion-syntax syntax.txt /*ft-coldfusion-syntax*
ft-context ft_context.txt /*ft-context*
ft-context-commands ft_context.txt /*ft-context-commands*
ft-context-intro ft_context.txt /*ft-context-intro*
ft-context-mappings ft_context.txt /*ft-context-mappings*
ft-context-settings ft_context.txt /*ft-context-settings*
ft-cpp-syntax syntax.txt /*ft-cpp-syntax*
ft-csh-syntax syntax.txt /*ft-csh-syntax*
ft-css-omni insert.txt /*ft-css-omni*
@ -6996,6 +7023,15 @@ ft-markdown-syntax syntax.txt /*ft-markdown-syntax*
ft-masm-syntax syntax.txt /*ft-masm-syntax*
ft-mathematica-syntax syntax.txt /*ft-mathematica-syntax*
ft-matlab-indent indent.txt /*ft-matlab-indent*
ft-metafont ft_mp.txt /*ft-metafont*
ft-metafont-intro ft_mp.txt /*ft-metafont-intro*
ft-metafont-mappings ft_mp.txt /*ft-metafont-mappings*
ft-metafont-settings ft_mp.txt /*ft-metafont-settings*
ft-metapost ft_mp.txt /*ft-metapost*
ft-metapost-commands ft_mp.txt /*ft-metapost-commands*
ft-metapost-intro ft_mp.txt /*ft-metapost-intro*
ft-metapost-mappings ft_mp.txt /*ft-metapost-mappings*
ft-metapost-settings ft_mp.txt /*ft-metapost-settings*
ft-mma-syntax syntax.txt /*ft-mma-syntax*
ft-moo-syntax syntax.txt /*ft-moo-syntax*
ft-msql-syntax syntax.txt /*ft-msql-syntax*
@ -7074,6 +7110,8 @@ ft-yaml-syntax syntax.txt /*ft-yaml-syntax*
ft-zimbu-plugin filetype.txt /*ft-zimbu-plugin*
ft-zsh-syntax syntax.txt /*ft-zsh-syntax*
ft_ada.txt ft_ada.txt /*ft_ada.txt*
ft_context.txt ft_context.txt /*ft_context.txt*
ft_mp.txt ft_mp.txt /*ft_mp.txt*
ft_ps1.txt ft_ps1.txt /*ft_ps1.txt*
ft_raku.txt ft_raku.txt /*ft_raku.txt*
ft_rust.txt ft_rust.txt /*ft_rust.txt*
@ -8320,6 +8358,7 @@ message.txt message.txt /*message.txt*
messages message.txt /*messages*
meta intro.txt /*meta*
method eval.txt /*method*
mf.vim ft_mp.txt /*mf.vim*
min() builtin.txt /*min()*
missing-options vi_diff.txt /*missing-options*
mkdir() builtin.txt /*mkdir()*
@ -8353,6 +8392,7 @@ mouse_lnum-variable eval.txt /*mouse_lnum-variable*
mouse_win-variable eval.txt /*mouse_win-variable*
mouse_winid-variable eval.txt /*mouse_winid-variable*
movement intro.txt /*movement*
mp.vim ft_mp.txt /*mp.vim*
ms-dos os_msdos.txt /*ms-dos*
msdos os_msdos.txt /*msdos*
msql.vim syntax.txt /*msql.vim*

View File

@ -46,7 +46,7 @@ TERMCAP defined.
A number of builtin terminals are available. Since patch 9.0.0280 there is no
difference between Vim versions. You can see a list of available builtin
terminals in the error message you get for `:set term=xxx` (when not running
the GUI). Also see |+builtin_terms|.
the GUI). Also see |++builtin_terms|.
If the termcap code is included Vim will try to get the strings for the
terminal you are using from the termcap file and the builtin termcaps. Both

View File

@ -38,6 +38,8 @@ browser use: https://github.com/vim/vim/issues/1234
*known-bugs*
-------------------- Known bugs and current work -----------------------
*.sil detection with FTsil() (lacygoill, Aug 25)
Further Vim9 improvements, possibly after launch:
- Use Vim9 for more runtime files.
- Check performance with callgrind and kcachegrind.
@ -182,6 +184,10 @@ Patches considered for including:
- allow for nesting of timeout, sketch in #10595
- Add setcmdline() #10869
Cleanup:
- Remove OLD_DIGRAPHS ?
- Remove FEAT_FOOTER ?
Add 'splitscroll' #10682 Useful? Any trouble? Null Chilly says it's OK.
suggestion: names instead of numbers for the option value
problem depending on whether window is focused or not

View File

@ -374,7 +374,8 @@ N *+eval* expression evaluation |eval.txt|
T *+ex_extra* always on now, used to be for Vim's extra Ex commands
N *+extra_search* |'hlsearch'| and |'incsearch'| options.
- *+farsi* Removed: |farsi| language
N *+file_in_path* |gf|, |CTRL-W_f| and |<cfile>|
T *+file_in_path* |gf|, |CTRL-W_f| and |<cfile>| Always enabled since
9.0.265
N *+find_in_path* include file searches: |[I|, |:isearch|,
|CTRL-W_CTRL-I|, |:checkpath|, etc.
N *+folding* |folding|

View File

@ -1,36 +1,65 @@
" ConTeXt indent file
" Language: ConTeXt typesetting engine
" Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
" Last Change: 2016 Oct 15
vim9script
# Language: ConTeXt typesetting engine
# Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
# Former Maintainers: Nikolai Weibull <now@bitwi.se>
# Latest Revision: 2022 Aug 12
if exists("b:did_indent")
finish
endif
if !get(b:, 'context_metapost', get(g:, 'context_metapost', 1))
finish
endif
" Load MetaPost indentation script
# Load MetaPost indentation script (this will also set b:did_indent)
runtime! indent/mp.vim
let s:keepcpo= &cpo
set cpo&vim
setlocal indentexpr=ConTeXtIndent()
setlocal indentexpr=GetConTeXtIndent()
b:undo_indent = "setl indentexpr<"
let b:undo_indent = "setl indentexpr<"
def PrevNotComment(l: number): number
var prevlnum = prevnonblank(l)
function! GetConTeXtIndent()
" Use MetaPost rules inside MetaPost graphic environments
while prevlnum > 0 && getline(prevlnum) =~# '^\s*%'
prevlnum = prevnonblank(prevlnum - 1)
endwhile
return prevlnum
enddef
def FindPair(pstart: string, pmid: string, pend: string): number
cursor(v:lnum, 1)
return indent(searchpair(pstart, pmid, pend, 'bWn',
'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))
enddef
def ConTeXtIndent(): number
# Use MetaPost rules inside MetaPost graphic environments
if len(synstack(v:lnum, 1)) > 0 &&
\ synIDattr(synstack(v:lnum, 1)[0], "name") ==# 'contextMPGraphic'
return GetMetaPostIndent()
synIDattr(synstack(v:lnum, 1)[0], "name") ==# 'contextMPGraphic'
return g:MetaPostIndent()
endif
const prevlnum = PrevNotComment(v:lnum - 1)
const prevind = indent(prevlnum)
const prevline = getline(prevlnum)
const currline = getline(v:lnum)
# If the current line starts with ], match indentation.
if currline =~# '^\s*\]'
return FindPair('\[', '', '\]')
endif
# If the current line starts with }, match indentation.
if currline =~# '^\s*}'
return FindPair('{', '', '}')
endif
# If the previous line ends with [ or { (possibly followed by a comment) then indent.
if prevline =~# '[{[]\s*\%(%.*\)\=$'
return prevind + shiftwidth()
endif
return -1
endfunc
enddef
let &cpo = s:keepcpo
unlet s:keepcpo
" vim:sw=2
# vim: sw=2 fdm=marker

View File

@ -1,6 +1,6 @@
" METAFONT indent file
" Language: METAFONT
" Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
" Last Change: 2016 Oct 1
" Latest Revision: 2022 Aug 12
runtime! indent/mp.vim

View File

@ -1,360 +1,320 @@
" MetaPost indent file
" Language: MetaPost
" Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
" Former Maintainers: Eugene Minkovskii <emin@mccme.ru>
" Last Change: 2016 Oct 2, 4:13pm
" Version: 0.2
vim9script
# MetaPost indent file
# Language: MetaPost
# Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
# Former Maintainers: Eugene Minkovskii <emin@mccme.ru>
# Latest Revision: 2022 Aug 12
if exists("b:did_indent")
finish
endif
let b:did_indent = 1
setlocal indentexpr=GetMetaPostIndent()
b:did_indent = 1
setlocal indentexpr=g:MetaPostIndent()
setlocal indentkeys+==end,=else,=fi,=fill,0),0]
setlocal nolisp
setlocal nosmartindent
let b:undo_indent = "setl indentkeys< indentexpr<"
b:undo_indent = "setl indentexpr< indentkeys< lisp< smartindent<"
" Only define the function once.
if exists("*GetMetaPostIndent")
finish
endif
let s:keepcpo= &cpo
set cpo&vim
# Regexps {{{
# Expressions starting indented blocks
const MP_OPEN_TAG = [
'\<if\>',
'\<else\%[if]\>',
'\<for\%(\|ever\|suffixes\)\>',
'\<begingroup\>',
'\<\%(\|var\|primary\|secondary\|tertiary\)def\>',
'^\s*\<begin\%(fig\|graph\|glyph\|char\|logochar\)\>',
'[([{]',
]->extend(get(g:, "mp_open_tag", []))->join('\|')
function GetMetaPostIndent()
let ignorecase_save = &ignorecase
try
let &ignorecase = 0
return GetMetaPostIndentIntern()
finally
let &ignorecase = ignorecase_save
endtry
endfunc
# Expressions ending indented blocks
const MP_CLOSE_TAG = [
'\<fi\>',
'\<else\%[if]\>',
'\<end\%(\|for\|group\|def\|fig\|char\|glyph\|graph\)\>',
'[)\]}]'
]->extend(get(g:, "mp_close_tag", []))->join('\|')
" 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\>'
# 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.
const MP_STATEMENT = [
'\<\%(\|un\|cut\)draw\%(dot\)\=\>',
'\<\%(\|un\)fill\%[draw]\>',
'\<draw\%(dbl\)\=arrow\>',
'\<clip\>',
'\<addto\>',
'\<save\>',
'\<setbounds\>',
'\<message\>',
'\<errmessage\>',
'\<errhelp\>',
'\<fontmapline\>',
'\<pickup\>',
'\<show\>',
'\<special\>',
'\<write\>',
'\%(^\|;\)\%([^;=]*\%(' .. MP_OPEN_TAG .. '\)\)\@!.\{-}:\==',
]->join('\|')
" 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\)\>'
\ . '\|[([{]'
# A line ends with zero or more spaces, possibly followed by a comment.
const EOL = '\s*\%($\|%\)'
# }}}
" Expressions ending indented blocks
let g:mp_close_tag = ''
\ . '\<fi\>'
\ . '\|\<else\%[if]\>'
\ . '\|\<end\%(\|for\|group\|def\|fig\|char\|glyph\|graph\)\>'
\ . '\|[)\]}]'
# Auxiliary functions {{{
# Returns true if (0-based) position immediately preceding `pos` in `line` is
# inside a string or a comment; returns false otherwise.
" 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.'\)\)\@!.\{-}:\=='
# 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.
def IsCommentOrString(line: string, pos: number): bool
var in_string = 0
var q = stridx(line, '"')
var c = stridx(line, '%')
" 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
while q >= 0 && q < 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
if in_string # Find next percent symbol
c = stridx(line, '%', q + 1)
else # Inside comment
return true
endif
endif
let in_string = 1 - in_string
let q = stridx(a:line, '"', q + 1) " Find next quote
in_string = 1 - in_string
q = stridx(line, '"', q + 1) # Find next quote
endwhile
return in_string || (c >= 0 && c <= a:pos)
endfunction
" Find the first non-comment non-blank line before the current line.
function! s:PrevNonBlankNonComment(lnum)
let l:lnum = prevnonblank(a:lnum - 1)
while getline(l:lnum) =~# '^\s*%'
let l:lnum = prevnonblank(l:lnum - 1)
return in_string || (c >= 0 && c <= pos)
enddef
# Find the first non-comment non-blank line before the given line.
def PrevNonBlankNonComment(lnum: number): number
var nr = prevnonblank(lnum - 1)
while getline(nr) =~# '^\s*%'
nr = prevnonblank(nr - 1)
endwhile
return l:lnum
endfunction
return nr
enddef
" 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
# Returns true if the last tag appearing in the line is an open tag; returns
# false otherwise.
def LastTagIsOpen(line: string): bool
var o = LastValidMatchEnd(line, MP_OPEN_TAG, 0)
if o == - 1
return false
endif
return LastValidMatchEnd(line, MP_CLOSE_TAG, o) < 0
enddef
" 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)]
# 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 MetaPostIndent()).
#
# 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
def Weight(line: string): number
var o = 0
var i = ValidMatchEnd(line, MP_OPEN_TAG, 0)
while i > 0
let o += 1
let i = s:ValidMatchEnd(a:line, g:mp_open_tag, i)
o += 1
i = ValidMatchEnd(line, 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)
var c = 0
i = matchend(line, '^\s*\<else\%[if]\>') # Skip a leading else[if]
i = ValidMatchEnd(line, MP_CLOSE_TAG, i)
while i > 0
let c += 1
let i = s:ValidMatchEnd(a:line, g:mp_close_tag, i)
c += 1
i = ValidMatchEnd(line, MP_CLOSE_TAG, i)
endwhile
return o - c
endfunction
enddef
" 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)
# Similar to matchend(), but skips strings and comments.
# line: a String
def ValidMatchEnd(line: string, pat: string, start: number): number
var i = matchend(line, pat, start)
while i > 0 && IsCommentOrString(line, i)
i = matchend(line, pat, i)
endwhile
return i
endfunction
enddef
" 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)
# Like s:ValidMatchEnd(), but returns the end position of the last (i.e.,
# rightmost) match.
def LastValidMatchEnd(line: string, pat: string, start: number): number
var last_found = -1
var i = matchend(line, pat, start)
while i > 0
if !s:CommentOrString(a:line, i)
let last_found = i
if !IsCommentOrString(line, i)
last_found = i
endif
let i = matchend(a:line, a:pat, i)
i = matchend(line, pat, i)
endwhile
return last_found
endfunction
enddef
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])
def DecreaseIndentOnClosingTag(curr_indent: number): number
var cur_text = getline(v:lnum)
if cur_text =~# '^\s*\%(' .. MP_CLOSE_TAG .. '\)'
return max([curr_indent - shiftwidth(), 0])
endif
return a:curr_indent
endfunction
" }}}
return curr_indent
enddef
# }}}
" 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:
"
" 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()
" Do not touch indentation inside verbatimtex/btex.. etex blocks.
# Main function {{{
def g:MetaPostIndent(): number
# Do not touch indentation inside verbatimtex/btex.. etex blocks.
if synIDattr(synID(v:lnum, 1, 1), "name") =~# '^mpTeXinsert$\|^tex\|^Delimiter'
return -1
endif
" 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 a MetaPost block inside ConTeXt, do not touch indentation
if synIDattr(synID(prevnonblank(v:lnum - 1), 1, 1), "name") == "contextBlockDelim"
return -1
endif
" At the start of the file use zero indent.
var lnum = PrevNonBlankNonComment(v:lnum)
# At the start of the file use zero indent.
if lnum == 0
return 0
endif
let prev_text = getline(lnum)
var prev_text = getline(lnum)
" User-defined overrides take precedence over anything else.
" See above for an example.
let j = match(prev_text, '%[<>=]')
# 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).
#
# User-defined overrides take precedence over anything else.
var j = match(prev_text, '%[<>=!]')
if j > 0
let i = strlen(matchstr(prev_text, '%>\+', j)) - 1
var i = strlen(matchstr(prev_text, '%>\+', j)) - 1
if i > 0
return indent(lnum) + i * shiftwidth()
endif
let i = strlen(matchstr(prev_text, '%<\+', j)) - 1
i = strlen(matchstr(prev_text, '%<\+', j)) - 1
if i > 0
return max([indent(lnum) - i * shiftwidth(), 0])
endif
if match(prev_text, '%=', j)
if match(prev_text, '%=', j) > -1
return indent(lnum)
endif
endif
" 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
" 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
return s:DecreaseIndentOnClosingTag(indent(lnum))
if match(prev_text, '%!', j) > -1
return -1
endif
endif
" 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 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)
# 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 LastTagIsOpen(prev_text)
return 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 Weight(prev_text) > 0
return DecreaseIndentOnClosingTag(indent(lnum) + shiftwidth())
endif
# 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 `:=`.
#
var i = LastValidMatchEnd(prev_text, MP_STATEMENT, 0)
if i >= 0 # Does the line contain a statement?
if ValidMatchEnd(prev_text, ';', i) < 0 # Is the statement unterminated?
return indent(lnum) + shiftwidth()
else
return DecreaseIndentOnClosingTag(indent(lnum))
endif
endif
# 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 only if L does not contain a statement (among those
# listed in g:MP_STATEMENT).
if ValidMatchEnd(prev_text, ';' .. EOL, 0) >= 0 # L ends with a semicolon
var stm_lnum = 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)
prev_text = getline(stm_lnum)
var sc_pos = LastValidMatchEnd(prev_text, ';', 0)
var stm_pos = ValidMatchEnd(prev_text, MP_STATEMENT, sc_pos)
if stm_pos > sc_pos
let lnum = stm_lnum
lnum = stm_lnum
break
elseif sc_pos > stm_pos
break
endif
let stm_lnum = s:PrevNonBlankNonComment(stm_lnum)
stm_lnum = PrevNonBlankNonComment(stm_lnum)
endwhile
endif
return s:DecreaseIndentOnClosingTag(indent(lnum))
endfunction
" }}}
return DecreaseIndentOnClosingTag(indent(lnum))
enddef
# }}}
let &cpo = s:keepcpo
unlet s:keepcpo
" vim:sw=2:fdm=marker
# vim: sw=2 fdm=marker

View File

@ -14,8 +14,8 @@
msgid ""
msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-06-16 21:37+0200\n"
"PO-Revision-Date: 2022-06-16 23:00+0100\n"
"POT-Creation-Date: 2022-08-25 09:28+0200\n"
"PO-Revision-Date: 2022-08-25 10:10+0100\n"
"Last-Translator: Antonio Colombo <azc100@gmail.com>\n"
"Language-Team: Italian\n"
"Language: it\n"
@ -384,7 +384,6 @@ msgstr ""
"\n"
"\tImpostata l'ultima volta da "
#.
msgid "&Ok"
msgstr "&OK"
@ -2841,7 +2840,6 @@ msgstr "Compressi %s: %ld di %ld nodi; ne restano %ld (%ld%%)"
msgid "Reading back spell file..."
msgstr "Rilettura file ortografico..."
#.
msgid "Performing soundfolding..."
msgstr "Eseguo soundfolding..."
@ -5088,6 +5086,9 @@ msgstr "E486: Espressione non trovata: %s"
msgid "E487: Argument must be positive"
msgstr "E487: L'argomento dev'essere positivo"
msgid "E487: Argument must be positive: %s"
msgstr "E487: L'argomento dev'essere positivo: %s"
msgid "E488: Trailing characters"
msgstr "E488: Caratteri in più alla fine"
@ -6168,8 +6169,8 @@ msgid "E859: Failed to convert returned python object to a Vim value"
msgstr ""
"E859: Conversione non riuscita dell'oggetto python risultato a un valore vim"
msgid "E860: Need 'id' and 'type' with 'both'"
msgstr "E860: Servono 'id' e 'type' specificando 'both'"
msgid "E860: Need 'id' and 'type' or 'types' with 'both'"
msgstr "E860: Servono 'id' e 'type' o 'types' specificando 'both'"
msgid "E861: Cannot open a second popup with a terminal"
msgstr "E861: Non posso aprire una seconda finestra dinamica con un terminale"
@ -6667,11 +6668,11 @@ msgstr "E1006: %s è usato come argomento"
msgid "E1007: Mandatory argument after optional argument"
msgstr "E1007: Argomento obbligatorio dopo un argomento opzionale"
msgid "E1008: Missing <type>"
msgstr "E1008: Manca <type>"
msgid "E1008: Missing <type> after %s"
msgstr "E1008: Manca <type> dopo %s"
msgid "E1009: Missing > after type"
msgstr "E1009: Manca > dopo tipo"
msgid "E1009: Missing > after type: %s"
msgstr "E1009: Manca > dopo 'type': %s"
msgid "E1010: Type not recognized: %s"
msgstr "E1010: Tipo non riconosciuto: %s"
@ -7556,10 +7557,32 @@ msgstr "E1288: Non riesco ad annullare il gestore del timeout: %s"
msgid "E1289: Could not check for pending SIGALRM: %s"
msgstr "E1289: Non riesco a controllare se in attesa di SIGALRM: %s"
msgid "E1290: substitute nesting too deep"
msgstr "E1290: nidificazione della sostituzione troppo estesa"
msgid "E1291: Invalid argument: %ld"
msgstr "E1291: Argomento non valido: %ld"
msgid "E1292: Command-line window is already open"
msgstr "E1292: Finestra della riga-di-comando già aperta"
msgid "E1293: Cannot use a negative id after adding a textprop with text"
msgstr "E1293: Non posso usare un id negativo dopo aver aggiunto del testo "
"a una 'textprop'"
msgid "E1294: Can only use text_align when column is zero"
msgstr "E1294: Si può usare 'text_align' solo quando la colonna è zero"
msgid "E1295: Cannot specify both 'type' and 'types'"
msgstr "E1295: Non si può specificare sia 'type' che 'types'"
msgid "E1296: Can only use left padding when column is zero"
msgstr "E1296: Si può usare il riempimento a sinistra solo quando la colonna "
"è zero"
msgid "--No lines in buffer--"
msgstr "--File vuoto--"
#.
msgid "search hit TOP, continuing at BOTTOM"
msgstr "raggiunta la CIMA nella ricerca, continuo dal FONDO"
@ -7858,9 +7881,6 @@ msgstr "Edita file di testo"
msgid "Text;editor;"
msgstr "Testo;editor;"
msgid "gvim"
msgstr "gvim"
msgid "Vim"
msgstr "Vim"