summaryrefslogtreecommitdiff
path: root/uvim/runtime/autoload/xmlformat.vim
diff options
context:
space:
mode:
authorMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-03 22:21:25 +0300
committerMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-04 00:23:03 +0300
commit2eae5db069dc171f74cd863487655f6a88e5384d (patch)
tree2d9d05e09978a2a44acbfbb8d651f240df3ca052 /uvim/runtime/autoload/xmlformat.vim
parent473d922faed49241a5d29d9e37dc4819cd512006 (diff)
downloadProject-Tick-2eae5db069dc171f74cd863487655f6a88e5384d.tar.gz
Project-Tick-2eae5db069dc171f74cd863487655f6a88e5384d.zip
NOISSUE rebrand vim to MNV's not Vim
Signed-off-by: Mehmet Samet Duman <yongdohyun@projecttick.org>
Diffstat (limited to 'uvim/runtime/autoload/xmlformat.vim')
-rw-r--r--uvim/runtime/autoload/xmlformat.vim211
1 files changed, 0 insertions, 211 deletions
diff --git a/uvim/runtime/autoload/xmlformat.vim b/uvim/runtime/autoload/xmlformat.vim
deleted file mode 100644
index c541e65755..0000000000
--- a/uvim/runtime/autoload/xmlformat.vim
+++ /dev/null
@@ -1,211 +0,0 @@
-" Vim plugin for formatting XML
-" Last Change: 2023 March 15th
-" Version: 0.3
-" Author: Christian Brabandt <cb@256bit.org>
-" Repository: https://github.com/chrisbra/vim-xml-ftplugin
-" License: VIM License
-" Documentation: see :h xmlformat.txt (TODO!)
-" ---------------------------------------------------------------------
-" Load Once: {{{1
-if exists("g:loaded_xmlformat") || &cp
- finish
-endif
-let g:loaded_xmlformat = 1
-let s:keepcpo = &cpo
-set cpo&vim
-
-" Main function: Format the input {{{1
-func! xmlformat#Format() abort
- " only allow reformatting through the gq command
- " (e.g. Vim is in normal mode)
- if mode() != 'n'
- " do not fall back to internal formatting
- return 0
- endif
- let count_orig = v:count
- let sw = shiftwidth()
- let prev = prevnonblank(v:lnum-1)
- let s:indent = indent(prev)/sw
- let result = []
- let lastitem = prev ? getline(prev) : ''
- let is_xml_decl = 0
- " go through every line, but don't join all content together and join it
- " back. We might lose empty lines
- let list = getline(v:lnum, (v:lnum + count_orig - 1))
- let current = 0
- for line in list
- " Keep empty input lines?
- if empty(line)
- call add(result, '')
- let current += 1
- continue
- elseif line !~# '<[/]\?[^>]*>'
- let nextmatch = match(list, '^\s*$\|<[/]\?[^>]*>', current)
- if nextmatch > -1
- let lineEnd = nextmatch
- else
- let lineEnd = len(list)
- endif
- let line .= ' '. join(list[(current + 1):(lineEnd-1)], " ")
- call remove(list, current+1, lineEnd-1)
- endif
- " split on `>`, but don't split on very first opening <
- " this means, items can be like ['<tag>', 'tag content</tag>']
- for item in split(line, '.\@<=[>]\zs')
- if s:EndTag(item)
- call s:DecreaseIndent()
- call add(result, s:Indent(item))
- elseif s:EmptyTag(lastitem)
- call add(result, s:Indent(item))
- elseif s:StartTag(lastitem) && s:IsTag(item)
- let s:indent += 1
- call add(result, s:Indent(item))
- else
- if !s:IsTag(item)
- " Simply split on '<', if there is one,
- " but reformat according to &textwidth
- let t=split(item, '.<\@=\zs')
-
- " if the content fits well within a single line, add it there
- " so that the output looks like this:
- "
- " <foobar>1</foobar>
- if s:TagContent(lastitem) is# s:TagContent(t[1]) && strlen(result[-1]) + strlen(item) <= s:Textwidth()
- let result[-1] .= item
- let lastitem = t[1]
- continue
- endif
- " t should only contain 2 items, but just be safe here
- if s:IsTag(lastitem)
- let s:indent+=1
- endif
- let result+=s:FormatContent([t[0]])
- if s:EndTag(t[1])
- call s:DecreaseIndent()
- endif
- let result+=s:FormatContent(t[1:])
- if s:IsTag(t[1])
- let lastitem = t[1]
- continue
- endif
- elseif s:IsComment(item)
- let result+=s:FormatContent([item])
- else
- call add(result, s:Indent(item))
- endif
- endif
- let lastitem = item
- endfor
- let current += 1
- endfor
-
- if !empty(result)
- let lastprevline = getline(v:lnum + count_orig)
- let delete_lastline = v:lnum + count_orig - 1 == line('$')
- exe 'silent ' .. v:lnum. ",". (v:lnum + count_orig - 1). 'd'
- call append(v:lnum - 1, result)
- " Might need to remove the last line, if it became empty because of the
- " append() call
- let last = v:lnum + len(result)
- " do not use empty(), it returns true for `empty(0)`
- if getline(last) is '' && lastprevline is '' && delete_lastline
- exe last. 'd'
- endif
- endif
-
- " do not run internal formatter!
- return 0
-endfunc
-" Check if given tag is XML Declaration header {{{1
-func! s:IsXMLDecl(tag) abort
- return a:tag =~? '^\s*<?xml\s\?\%(version="[^"]*"\)\?\s\?\%(encoding="[^"]*"\)\? ?>\s*$'
-endfunc
-" Return tag indented by current level {{{1
-func! s:Indent(item) abort
- return repeat(' ', shiftwidth()*s:indent). s:Trim(a:item)
-endfu
-" Return item trimmed from leading whitespace {{{1
-func! s:Trim(item) abort
- if exists('*trim')
- return trim(a:item)
- else
- return matchstr(a:item, '\S\+.*')
- endif
-endfunc
-" Check if tag is a new opening tag <tag> {{{1
-func! s:StartTag(tag) abort
- let is_comment = s:IsComment(a:tag)
- return a:tag =~? '^\s*<[^/?]' && !is_comment
-endfunc
-" Check if tag is a Comment start {{{1
-func! s:IsComment(tag) abort
- return a:tag =~? '<!--'
-endfunc
-" Remove one level of indentation {{{1
-func! s:DecreaseIndent() abort
- let s:indent = (s:indent > 0 ? s:indent - 1 : 0)
-endfunc
-" Check if tag is a closing tag </tag> {{{1
-func! s:EndTag(tag) abort
- return a:tag =~? '^\s*</'
-endfunc
-" Check that the tag is actually a tag and not {{{1
-" something like "foobar</foobar>"
-func! s:IsTag(tag) abort
- return s:Trim(a:tag)[0] == '<'
-endfunc
-" Check if tag is empty <tag/> {{{1
-func! s:EmptyTag(tag) abort
- return a:tag =~ '/>\s*$'
-endfunc
-func! s:TagContent(tag) abort "{{{1
- " Return content of a tag
- return substitute(a:tag, '^\s*<[/]\?\([^>]*\)>\s*$', '\1', '')
-endfunc
-func! s:Textwidth() abort "{{{1
- " return textwidth (or 80 if not set)
- return &textwidth == 0 ? 80 : &textwidth
-endfunc
-" Format input line according to textwidth {{{1
-func! s:FormatContent(list) abort
- let result=[]
- let limit = s:Textwidth()
- let column=0
- let idx = -1
- let add_indent = 0
- let cnt = 0
- for item in a:list
- for word in split(item, '\s\+\S\+\zs')
- if match(word, '^\s\+$') > -1
- " skip empty words
- continue
- endif
- let column += strdisplaywidth(word, column)
- if match(word, "^\\s*\n\\+\\s*$") > -1
- call add(result, '')
- let idx += 1
- let column = 0
- let add_indent = 1
- elseif column > limit || cnt == 0
- let add = s:Indent(s:Trim(word))
- call add(result, add)
- let column = strdisplaywidth(add)
- let idx += 1
- else
- if add_indent
- let result[idx] = s:Indent(s:Trim(word))
- else
- let result[idx] .= ' '. s:Trim(word)
- endif
- let add_indent = 0
- endif
- let cnt += 1
- endfor
- endfor
- return result
-endfunc
-" Restoration And Modelines: {{{1
-let &cpo= s:keepcpo
-unlet s:keepcpo
-" Modeline {{{1
-" vim: fdm=marker fdl=0 ts=2 et sw=0 sts=-1