diff --git a/runtime/colors/blue.vim b/runtime/colors/blue.vim
index a99ecaa..ba1f68b 100644
--- a/runtime/colors/blue.vim
+++ b/runtime/colors/blue.vim
@@ -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 @@
 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']
diff --git a/runtime/colors/darkblue.vim b/runtime/colors/darkblue.vim
index 358f25b..88a6c41 100644
--- a/runtime/colors/darkblue.vim
+++ b/runtime/colors/darkblue.vim
@@ -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 @@
 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']
diff --git a/runtime/colors/delek.vim b/runtime/colors/delek.vim
index 623b7cd..ebaf12f 100644
--- a/runtime/colors/delek.vim
+++ b/runtime/colors/delek.vim
@@ -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 @@
 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']
diff --git a/runtime/colors/desert.vim b/runtime/colors/desert.vim
index 82a2f1a..152384e 100644
--- a/runtime/colors/desert.vim
+++ b/runtime/colors/desert.vim
@@ -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 @@
 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']
diff --git a/runtime/colors/elflord.vim b/runtime/colors/elflord.vim
index 1d06e93..2cda253 100644
--- a/runtime/colors/elflord.vim
+++ b/runtime/colors/elflord.vim
@@ -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 @@
 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
diff --git a/runtime/colors/evening.vim b/runtime/colors/evening.vim
index cf3afbd..c2043b6 100644
--- a/runtime/colors/evening.vim
+++ b/runtime/colors/evening.vim
@@ -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 @@
 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']
diff --git a/runtime/colors/habamax.vim b/runtime/colors/habamax.vim
index 054152e..ad84f4d 100644
--- a/runtime/colors/habamax.vim
+++ b/runtime/colors/habamax.vim
@@ -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 @@
 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']
diff --git a/runtime/colors/industry.vim b/runtime/colors/industry.vim
index f002a2f..07d15d3 100644
--- a/runtime/colors/industry.vim
+++ b/runtime/colors/industry.vim
@@ -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 @@
 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']
diff --git a/runtime/colors/koehler.vim b/runtime/colors/koehler.vim
index 4ee8927..69b10c6 100644
--- a/runtime/colors/koehler.vim
+++ b/runtime/colors/koehler.vim
@@ -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 @@
 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
diff --git a/runtime/colors/lunaperche.vim b/runtime/colors/lunaperche.vim
index f589c1f..982d93c 100644
--- a/runtime/colors/lunaperche.vim
+++ b/runtime/colors/lunaperche.vim
@@ -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
diff --git a/runtime/colors/morning.vim b/runtime/colors/morning.vim
index 1f055b6..5e6e072 100644
--- a/runtime/colors/morning.vim
+++ b/runtime/colors/morning.vim
@@ -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 @@
 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']
diff --git a/runtime/colors/murphy.vim b/runtime/colors/murphy.vim
index cc38088..c028c23 100644
--- a/runtime/colors/murphy.vim
+++ b/runtime/colors/murphy.vim
@@ -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 @@
 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']
diff --git a/runtime/colors/pablo.vim b/runtime/colors/pablo.vim
index 67e0e03..9489973 100644
--- a/runtime/colors/pablo.vim
+++ b/runtime/colors/pablo.vim
@@ -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 @@
 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']
diff --git a/runtime/colors/peachpuff.vim b/runtime/colors/peachpuff.vim
index 07274f3..1668b68 100644
--- a/runtime/colors/peachpuff.vim
+++ b/runtime/colors/peachpuff.vim
@@ -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 @@
 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']
diff --git a/runtime/colors/quiet.vim b/runtime/colors/quiet.vim
index d949325..6f5be5b 100644
--- a/runtime/colors/quiet.vim
+++ b/runtime/colors/quiet.vim
@@ -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
diff --git a/runtime/colors/ron.vim b/runtime/colors/ron.vim
index 527268f..aeccfce 100644
--- a/runtime/colors/ron.vim
+++ b/runtime/colors/ron.vim
@@ -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 @@
 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
diff --git a/runtime/colors/shine.vim b/runtime/colors/shine.vim
index bee3500..e74b0ae 100644
--- a/runtime/colors/shine.vim
+++ b/runtime/colors/shine.vim
@@ -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 @@
 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']
diff --git a/runtime/colors/slate.vim b/runtime/colors/slate.vim
index e959fa3..584e4b5 100644
--- a/runtime/colors/slate.vim
+++ b/runtime/colors/slate.vim
@@ -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 @@
 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']
diff --git a/runtime/colors/torte.vim b/runtime/colors/torte.vim
index 87b23a3..814e50d 100644
--- a/runtime/colors/torte.vim
+++ b/runtime/colors/torte.vim
@@ -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 @@
 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']
diff --git a/runtime/colors/zellner.vim b/runtime/colors/zellner.vim
index 6f631c2..191dc7e 100644
--- a/runtime/colors/zellner.vim
+++ b/runtime/colors/zellner.vim
@@ -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 @@
 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']
diff --git a/runtime/doc/Makefile b/runtime/doc/Makefile
index 2942e5d..7b8c628 100644
--- a/runtime/doc/Makefile
+++ b/runtime/doc/Makefile
@@ -31,6 +31,8 @@
 	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 @@
 	filetype.html \
 	fold.html \
 	ft_ada.html \
+	ft_context.html \
+	ft_mp.html \
 	ft_ps1.html \
 	ft_raku.html \
 	ft_rust.html \
diff --git a/runtime/doc/ft_context.txt b/runtime/doc/ft_context.txt
new file mode 100644
index 0000000..ba6bd0d
--- /dev/null
+++ b/runtime/doc/ft_context.txt
@@ -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:
diff --git a/runtime/doc/ft_mp.txt b/runtime/doc/ft_mp.txt
new file mode 100644
index 0000000..0c6646f
--- /dev/null
+++ b/runtime/doc/ft_mp.txt
@@ -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:
diff --git a/runtime/doc/tags b/runtime/doc/tags
index 808bd5d..6d882af 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -69,6 +69,9 @@
 '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 @@
 '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 @@
 +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 @@
 :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 @@
 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-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-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-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 @@
 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_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*
diff --git a/runtime/doc/term.txt b/runtime/doc/term.txt
index ae38366..7acfba7 100644
--- a/runtime/doc/term.txt
+++ b/runtime/doc/term.txt
@@ -46,7 +46,7 @@
 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
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index a4f3a28..ea8d2c0 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -38,6 +38,8 @@
 							*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 @@
 - 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
diff --git a/runtime/doc/various.txt b/runtime/doc/various.txt
index fd2dcf0..ac8b4af 100644
--- a/runtime/doc/various.txt
+++ b/runtime/doc/various.txt
@@ -374,7 +374,8 @@
 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|
diff --git a/runtime/indent/context.vim b/runtime/indent/context.vim
index 652479f..762c5c1 100644
--- a/runtime/indent/context.vim
+++ b/runtime/indent/context.vim
@@ -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
diff --git a/runtime/indent/mf.vim b/runtime/indent/mf.vim
index 88737f4..893323d 100644
--- a/runtime/indent/mf.vim
+++ b/runtime/indent/mf.vim
@@ -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
diff --git a/runtime/indent/mp.vim b/runtime/indent/mp.vim
index 86fa253..07873e1 100644
--- a/runtime/indent/mp.vim
+++ b/runtime/indent/mp.vim
@@ -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
