Mercurial > vim
diff runtime/indent/context.vim @ 29885:f00c56ee8118
Update runtime files
Commit: https://github.com/vim/vim/commit/7dd543246a4c21c4d5a4242a28076706f5abebd4
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Aug 26 18:01:12 2022 +0100
Update runtime files
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 26 Aug 2022 19:15:05 +0200 |
parents | 07d2b5a3b7cc |
children | d81556766132 |
line wrap: on
line diff
--- 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() + +b:undo_indent = "setl indentexpr<" -setlocal indentexpr=GetConTeXtIndent() +def PrevNotComment(l: number): number + var prevlnum = prevnonblank(l) + + while prevlnum > 0 && getline(prevlnum) =~# '^\s*%' + prevlnum = prevnonblank(prevlnum - 1) + endwhile -let b:undo_indent = "setl indentexpr<" + return prevlnum +enddef -function! GetConTeXtIndent() - " Use MetaPost rules inside MetaPost graphic environments +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