From 80dda6892612de8405744b549aa2c2578a82a1b5 Mon Sep 17 00:00:00 2001 From: "Justin M. Keyes" Date: Mon, 29 Jul 2019 01:58:17 +0200 Subject: vim-patch:ba3ff539303c Update runtime files https://github.com/vim/vim/commit/ba3ff539303c7bb6e46a6802dce3c7b2e55284e0 --- runtime/indent/xml.vim | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'runtime/indent/xml.vim') diff --git a/runtime/indent/xml.vim b/runtime/indent/xml.vim index dcafb467a6..7afcc89b7f 100644 --- a/runtime/indent/xml.vim +++ b/runtime/indent/xml.vim @@ -2,7 +2,9 @@ " Repository: https://github.com/chrisbra/vim-xml-ftplugin " Maintainer: Christian Brabandt " Previous Maintainer: Johannes Zellner -" Last Change: 20180724 - Correctly indent xml comments https://github.com/vim/vim/issues/3200 +" Last Change: 20181022 - Do not overwrite indentkeys setting +" https://github.com/chrisbra/vim-xml-ftplugin/issues/1 +" 20180724 - Correctly indent xml comments https://github.com/vim/vim/issues/3200 " Notes: 1) does not indent pure non-xml code (e.g. embedded scripts) " 2) will be confused by unbalanced tags in comments " or CDATA sections. @@ -19,7 +21,7 @@ set cpo&vim " [-- local settings (must come before aborting the script) --] setlocal indentexpr=XmlIndentGet(v:lnum,1) -setlocal indentkeys=o,O,*,<>>,<<>,/,{,} +setlocal indentkeys=o,O,*,<>>,<<>,/,{,},!^F if !exists('b:xml_indent_open') let b:xml_indent_open = '.\{-}<\a' -- cgit From aa680f6acb84b876584cbe5c958d50c692154c75 Mon Sep 17 00:00:00 2001 From: "Justin M. Keyes" Date: Mon, 29 Jul 2019 02:42:51 +0200 Subject: vim-patch:9d87a37ee9d8 Update runtime files. https://github.com/vim/vim/commit/9d87a37ee9d87f5bdbc779bc940d5f1e6f055d0a --- runtime/indent/xml.vim | 116 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 77 insertions(+), 39 deletions(-) (limited to 'runtime/indent/xml.vim') diff --git a/runtime/indent/xml.vim b/runtime/indent/xml.vim index 7afcc89b7f..bc64aacfe1 100644 --- a/runtime/indent/xml.vim +++ b/runtime/indent/xml.vim @@ -1,15 +1,21 @@ -" Language: xml -" Repository: https://github.com/chrisbra/vim-xml-ftplugin -" Maintainer: Christian Brabandt -" Previous Maintainer: Johannes Zellner -" Last Change: 20181022 - Do not overwrite indentkeys setting -" https://github.com/chrisbra/vim-xml-ftplugin/issues/1 -" 20180724 - Correctly indent xml comments https://github.com/vim/vim/issues/3200 -" Notes: 1) does not indent pure non-xml code (e.g. embedded scripts) -" 2) will be confused by unbalanced tags in comments -" or CDATA sections. -" 2009-05-26 patch by Nikolai Weibull -" TODO: implement pre-like tags, see xml_indent_open / xml_indent_close +" Language: xml +" Repository: https://github.com/chrisbra/vim-xml-ftplugin +" Last Changed: Dec 07th, 2018 +" Maintainer: Christian Brabandt +" Previous Maintainer: Johannes Zellner +" Last Change: +" 20181116 - Fix indentation when tags start with a colon or an underscore +" https://github.com/vim/vim/pull/926 +" 20181022 - Do not overwrite indentkeys setting +" https://github.com/chrisbra/vim-xml-ftplugin/issues/1 +" 20180724 - Correctly indent xml comments https://github.com/vim/vim/issues/3200 +" +" Notes: +" 1) does not indent pure non-xml code (e.g. embedded scripts) +" 2) will be confused by unbalanced tags in comments +" or CDATA sections. +" 2009-05-26 patch by Nikolai Weibull +" TODO: implement pre-like tags, see xml_indent_open / xml_indent_close " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -20,11 +26,12 @@ let s:keepcpo= &cpo set cpo&vim " [-- local settings (must come before aborting the script) --] +" Attention: Parameter use_syntax_check is used by the docbk.vim indent script setlocal indentexpr=XmlIndentGet(v:lnum,1) setlocal indentkeys=o,O,*,<>>,<<>,/,{,},!^F if !exists('b:xml_indent_open') - let b:xml_indent_open = '.\{-}<\a' + let b:xml_indent_open = '.\{-}<[:A-Z_a-z]' " pre tag, e.g.
" let b:xml_indent_open = '.\{-}<[/]\@!\(address\)\@!' endif @@ -40,7 +47,7 @@ unlet s:keepcpo " [-- finish, if the function already exists --] if exists('*XmlIndentGet') - finish + finish endif let s:keepcpo= &cpo @@ -53,13 +60,13 @@ endfun " [-- check if it's xml --] fun! XmlIndentSynCheck(lnum) - if '' != &syntax - let syn1 = synIDattr(synID(a:lnum, 1, 1), 'name') - let syn2 = synIDattr(synID(a:lnum, strlen(getline(a:lnum)) - 1, 1), 'name') - if '' != syn1 && syn1 !~ 'xml' && '' != syn2 && syn2 !~ 'xml' - " don't indent pure non-xml code - return 0 - endif + if &syntax != '' + let syn1 = synIDattr(synID(a:lnum, 1, 1), 'name') + let syn2 = synIDattr(synID(a:lnum, strlen(getline(a:lnum)) - 1, 1), 'name') + if syn1 != '' && syn1 !~ 'xml' && syn2 != '' && syn2 !~ 'xml' + " don't indent pure non-xml code + return 0 + endif endif return 1 endfun @@ -68,41 +75,72 @@ endfun fun! XmlIndentSum(lnum, style, add) let line = getline(a:lnum) if a:style == match(line, '^\s*XmlIndentWithPattern(line, b:xml_indent_open) - \ - XmlIndentWithPattern(line, b:xml_indent_close) - \ - XmlIndentWithPattern(line, '.\{-}/>'))) + a:add + return (shiftwidth() * + \ (XmlIndentWithPattern(line, b:xml_indent_open) + \ - XmlIndentWithPattern(line, b:xml_indent_close) + \ - XmlIndentWithPattern(line, '.\{-}/>'))) + a:add else - return a:add + return a:add endif endfun +" Main indent function fun! XmlIndentGet(lnum, use_syntax_check) " Find a non-empty line above the current line. - let lnum = prevnonblank(a:lnum - 1) + let plnum = prevnonblank(a:lnum - 1) + " Find previous line with a tag (regardless whether open or closed) + let ptag = search('.\{-}<[/:A-Z_a-z]', 'bnw') " Hit the start of the file, use zero indent. - if lnum == 0 - return 0 + if plnum == 0 + return 0 endif + let syn_name = '' if a:use_syntax_check - let check_lnum = XmlIndentSynCheck(lnum) - let check_alnum = XmlIndentSynCheck(a:lnum) - if 0 == check_lnum || 0 == check_alnum - return indent(a:lnum) - elseif -1 == check_lnum || -1 == check_alnum - return -1 - endif + let check_lnum = XmlIndentSynCheck(plnum) + let check_alnum = XmlIndentSynCheck(a:lnum) + if check_lnum == 0 || check_alnum == 0 + return indent(a:lnum) + endif + let syn_name = synIDattr(synID(a:lnum, strlen(getline(a:lnum)) - 1, 1), 'name') endif - let ind = XmlIndentSum(lnum, -1, indent(lnum)) - let ind = XmlIndentSum(a:lnum, 0, ind) + if syn_name =~ 'Comment' + return XmlIndentComment(a:lnum) + endif + " Get indent from previous tag line + let ind = XmlIndentSum(ptag, -1, indent(ptag)) + " Determine indent from current line + let ind = XmlIndentSum(a:lnum, 0, ind) return ind endfun +" return indent for a commented line, +" the middle part might be indented on additional level +func! XmlIndentComment(lnum) + let ptagopen = search(b:xml_indent_open, 'bnw') + let ptagclose = search(b:xml_indent_close, 'bnw') + if getline(a:lnum) =~ '' + " end of comment, same as start of comment + return indent(search('