Mercurial > vim
view runtime/indent/astro.vim @ 35042:efef66876fb4
Added tag v9.1.0370 for changeset e671080ef0e2e8d92a05044905761b1414755cf5
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 25 Apr 2024 21:30:12 +0200 |
parents | bd8383fa678a |
children |
line wrap: on
line source
" Vim indent file (experimental). " Language: Astro " Author: Wuelner MartÃnez <wuelner.martinez@outlook.com> " Maintainer: Wuelner MartÃnez <wuelner.martinez@outlook.com> " URL: https://github.com/wuelnerdotexe/vim-astro " Last Change: 2022 Aug 07 " Based On: Evan Lecklider's vim-svelte " Changes: See https://github.com/evanleck/vim-svelte " Credits: See vim-svelte on github " Only load this indent file when no other was loaded yet. if exists('b:did_indent') finish endif let b:html_indent_script1 = 'inc' let b:html_indent_style1 = 'inc' " Embedded HTML indent. runtime! indent/html.vim let s:html_indent = &l:indentexpr unlet b:did_indent let b:did_indent = 1 setlocal indentexpr=GetAstroIndent() setlocal indentkeys=<>>,/,0{,{,},0},0),0],0\,<<>,,!^F,*<Return>,o,O,e,; let b:undo_indent = 'setl inde< indk<' " Only define the function once. if exists('*GetAstroIndent') finish endif let s:cpoptions_save = &cpoptions setlocal cpoptions&vim function! GetAstroIndent() let l:current_line_number = v:lnum if l:current_line_number == 0 return 0 endif let l:current_line = getline(l:current_line_number) if l:current_line =~ '^\s*</\?\(script\|style\)' return 0 endif let l:previous_line_number = prevnonblank(l:current_line_number - 1) let l:previous_line = getline(l:previous_line_number) let l:previous_line_indent = indent(l:previous_line_number) if l:previous_line =~ '^\s*</\?\(script\|style\)' return l:previous_line_indent + shiftwidth() endif execute 'let l:indent = ' . s:html_indent if searchpair('<style>', '', '</style>', 'bW') && \ l:previous_line =~ ';$' && l:current_line !~ '}' return l:previous_line_indent endif if synID(l:previous_line_number, match( \ l:previous_line, '\S' \ ) + 1, 0) == hlID('htmlTag') && synID(l:current_line_number, match( \ l:current_line, '\S' \ ) + 1, 0) != hlID('htmlEndTag') let l:indents_match = l:indent == l:previous_line_indent let l:previous_closes = l:previous_line =~ '/>$' if l:indents_match && \ !l:previous_closes && l:previous_line =~ '<\(\u\|\l\+:\l\+\)' return l:previous_line_indent + shiftwidth() elseif !l:indents_match && l:previous_closes return l:previous_line_indent endif endif return l:indent endfunction let &cpoptions = s:cpoptions_save unlet s:cpoptions_save " vim: ts=8