diff options
| author | Adam Stankiewicz <sheerun@sher.pl> | 2017-12-06 13:17:06 +0100 | 
|---|---|---|
| committer | Adam Stankiewicz <sheerun@sher.pl> | 2017-12-06 13:17:06 +0100 | 
| commit | 11f53253ad9fd0cd3e7a44ed9f8c80a4f265b46e (patch) | |
| tree | 08649366f6babad66db065b341691cfac02c2c4a /indent | |
| parent | 9fe009095afdb86f6f771109ac454ccfc5340f31 (diff) | |
| download | vim-polyglot-11f53253ad9fd0cd3e7a44ed9f8c80a4f265b46e.tar.gz vim-polyglot-11f53253ad9fd0cd3e7a44ed9f8c80a4f265b46e.zip | |
Add slime syntax, closes #252v3.2.0
Diffstat (limited to '')
| -rw-r--r-- | indent/fish.vim | 6 | ||||
| -rw-r--r-- | indent/fsharp.vim | 253 | ||||
| -rw-r--r-- | indent/gitconfig.vim | 42 | ||||
| -rw-r--r-- | indent/glsl.vim | 15 | ||||
| -rw-r--r-- | indent/slime.vim | 79 | ||||
| -rw-r--r-- | indent/tex.vim | 140 | 
6 files changed, 395 insertions, 140 deletions
| diff --git a/indent/fish.vim b/indent/fish.vim new file mode 100644 index 00000000..c5f8e50e --- /dev/null +++ b/indent/fish.vim @@ -0,0 +1,6 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fish') == -1 +   +setlocal indentexpr=fish#Indent() +setlocal indentkeys+==end,=else,=case + +endif diff --git a/indent/fsharp.vim b/indent/fsharp.vim new file mode 100644 index 00000000..bdc3e3f9 --- /dev/null +++ b/indent/fsharp.vim @@ -0,0 +1,253 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fsharp') == -1 +   +" Vim indent file +" Language:     FSharp +" Maintainers:  Jean-Francois Yuen   <jfyuen@happycoders.org> +"               Mike Leary           <leary@nwlink.com> +"               Markus Mottl         <markus.mottl@gmail.com> +"               Rudi Grinberg        <rudi.grinberg@gmail.com> +"               Gregor Uhlenheuer    <kongo2002@gmail.com> +" Last Change:  2013 Jun 29 +"               2005 Jun 25 - Fixed multiple bugs due to 'else\nreturn ind' working +"               2005 May 09 - Added an option to not indent OCaml-indents specially (MM) +"               2013 June   - commented textwidth (Marc Weber) +"               2014 August - Ported to F# +"               2014 August - F# specific cleanup +" +" Marc Weber's comment: This file may contain a lot of (very custom) stuff +" which eventually should be moved somewhere else .. + +" Only load this indent file when no other was loaded. + +if exists("b:did_indent") +    finish +endif +let b:did_indent = 1 + +setlocal indentexpr=GetFsharpIndent() +setlocal indentkeys+=0=and,0=class,0=constraint,0=done,0=else,0=end,0=exception,0=external,0=if,0=in,0=include,0=inherit,0=let,0=method,0=open,0=then,0=type,0=val,0=with,0;;,0>\],0\|\],0>},0\|,0},0\],0) + +" Only define the function once. +if exists("*GetFsharpIndent") +    finish +endif + +" Skipping pattern, for comments +function! s:GetLineWithoutFullComment(lnum) +    let lnum = prevnonblank(a:lnum - 1) +    let lline = substitute(getline(lnum), '(\*.*\*)\s*$', '', '') +    while lline =~ '^\s*$' && lnum > 0 +        let lnum = prevnonblank(lnum - 1) +        let lline = substitute(getline(lnum), '(\*.*\*)\s*$', '', '') +    endwhile +    return lnum +endfunction + +" Indent for ';;' to match multiple 'let' +function! s:GetInd(lnum, pat, lim) +    let llet = search(a:pat, 'bW') +    let old = indent(a:lnum) +    while llet > 0 +        let old = indent(llet) +        let nb = s:GetLineWithoutFullComment(llet) +        if getline(nb) =~ a:lim +            return old +        endif +        let llet = search(a:pat, 'bW') +    endwhile +    return old +endfunction + +" Indent pairs +function! s:FindPair(pstart, pmid, pend) +    call search(a:pend, 'bW') +    return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"')) +endfunction + +" Indent 'let' +function! s:FindLet(pstart, pmid, pend) +    call search(a:pend, 'bW') +    return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") =~ "^\\s*let\\>.*=.*\\<in\\s*$" || getline(prevnonblank(".") - 1) =~ s:beflet')) +endfunction + +function! GetFsharpIndent() +    " Find a non-commented line above the current line. +    let lnum = s:GetLineWithoutFullComment(v:lnum) + +    " At the start of the file use zero indent. +    if lnum == 0 +        return 0 +    endif + +    let ind = indent(lnum) +    let lline = substitute(getline(lnum), '(\*.*\*)\s*$', '', '') + +    " " Return single 'shiftwidth' after lines matching: +    " if lline =~ '^\s*|.*->\s*$' +    "     return ind + &sw +    " endif + +    let line = getline(v:lnum) + +    " Indent if current line begins with 'end': +    if line =~ '^\s*end\>' +        return s:FindPair(s:module, '','\<end\>') + +        " Indent if current line begins with 'done' for 'do': +    elseif line =~ '^\s*done\>' +        return s:FindPair('\<do\>', '','\<done\>') + +        " Indent if current line begins with '}' or '>}': +    elseif line =~ '^\s*\(\|>\)}' +        return s:FindPair('{', '','}') + +        " Indent if current line begins with ']', '|]' or '>]': +    elseif line =~ '^\s*\(\||\|>\)\]' +        return s:FindPair('\[', '','\]') + +        " Indent if current line begins with ')': +    elseif line =~ '^\s*)' +        return s:FindPair('(', '',')') + +        " Indent if current line begins with 'let': +    elseif line =~ '^\s*let\>' +        if lline !~ s:lim . '\|' . s:letlim . '\|' . s:beflet +            return s:FindLet(s:type, '','\<let\s*$') +        endif + +        " Indent if current line begins with 'class' or 'type': +    elseif line =~ '^\s*\(class\|type\)\>' +        if lline !~ s:lim . '\|\<and\s*$\|' . s:letlim +            return s:FindLet(s:type, '','\<\(class\|type\)\s*$') +        endif + +        " Indent for pattern matching: +    elseif line =~ '^\s*|' +        if lline !~ '^\s*\(|[^\]]\|\(match\|type\|with\)\>\)\|\<\(function\|private\|with\)\s*$' +            call search('|', 'bW') +            return indent(searchpair('^\s*\(match\|type\)\>\|\<\(function\|private\|with\)\s*$', '', '^\s*|', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") !~ "^\\s*|.*->"')) +        endif + +        " Indent if current line begins with ';;': +    elseif line =~ '^\s*;;' +        if lline !~ ';;\s*$' +            return s:GetInd(v:lnum, s:letpat, s:letlim) +        endif + +        " Indent if current line begins with 'in': +    elseif line =~ '^\s*in\>' +        if lline !~ '^\s*\(let\|and\)\>' +            return s:FindPair('\<let\>', '', '\<in\>') +        endif + +        " Indent if current line begins with 'else': +    elseif line =~ '^\s*else\>' +        if lline !~ '^\s*\(if\|then\)\>' +            return s:FindPair('\<if\>', '', '\<else\>') +        endif + +        " Indent if current line begins with 'then': +    elseif line =~ '^\s*then\>' +        if lline !~ '^\s*\(if\|else\)\>' +            return s:FindPair('\<if\>', '', '\<then\>') +        endif + +        " Indent if current line begins with 'and': +    elseif line =~ '^\s*and\>' +        if lline !~ '^\s*\(and\|let\|type\)\>\|\<end\s*$' +            return ind - &sw +        endif + +        " Indent if current line begins with 'with': +    elseif line =~ '^\s*with\>' +        if lline !~ '^\s*\(match\|try\)\>' +            return s:FindPair('\<\%(match\|try\)\>', '','\<with\>') +        endif + +        " Indent if current line begins with 'exception', 'external', 'include' or +        " 'open': +    elseif line =~ '^\s*\(exception\|external\|include\|open\)\>' +        if lline !~ s:lim . '\|' . s:letlim +            call search(line) +            return indent(search('^\s*\(\(exception\|external\|include\|open\|type\)\>\|val\>.*:\)', 'bW')) +        endif + +        " Indent if current line begins with 'val': +    elseif line =~ '^\s*val\>' +        if lline !~ '^\s*\(exception\|external\|include\|open\)\>\|' . s:obj . '\|' . s:letlim +            return indent(search('^\s*\(\(exception\|include\|initializer\|method\|open\|type\|val\)\>\|external\>.*:\)', 'bW')) +        endif + +        " Indent if current line begins with 'constraint', 'inherit', 'initializer' +        " or 'method': +    elseif line =~ '^\s*\(constraint\|inherit\|initializer\|method\)\>' +        if lline !~ s:obj +            return indent(search('\<\(object\|object\s*(.*)\)\s*$', 'bW')) + &sw +        endif + +    endif + +    " Add a 'shiftwidth' after lines ending with: +    if lline =~ '\(:\|=\|->\|<-\|(\|\[\|{\|{<\|\[|\|\[<\|\<\(begin\|do\|else\|fun\|function\|functor\|if\|initializer\|object\|private\|sig\|struct\|then\|try\)\|\<object\s*(.*)\)\s*$' +        let ind = ind + &sw + +        " Back to normal indent after lines ending with ';;': +    elseif lline =~ ';;\s*$' && lline !~ '^\s*;;' +        let ind = s:GetInd(v:lnum, s:letpat, s:letlim) + +        " Back to normal indent after lines ending with 'end': +    elseif lline =~ '\<end\s*$' +        let ind = s:FindPair(s:module, '','\<end\>') + +        " Back to normal indent after lines ending with 'in': +    elseif lline =~ '\<in\s*$' && lline !~ '^\s*in\>' +        let ind = s:FindPair('\<let\>', '', '\<in\>') + +        " Back to normal indent after lines ending with 'done': +    elseif lline =~ '\<done\s*$' +        let ind = s:FindPair('\<do\>', '','\<done\>') + +        " Back to normal indent after lines ending with '}' or '>}': +    elseif lline =~ '\(\|>\)}\s*$' +        let ind = s:FindPair('{', '','}') + +        " Back to normal indent after lines ending with ']', '|]' or '>]': +    elseif lline =~ '\(\||\|>\)\]\s*$' +        let ind = s:FindPair('\[', '','\]') + +        " Back to normal indent after comments: +    elseif lline =~ '\*)\s*$' +        call search('\*)', 'bW') +        let ind = indent(searchpair('(\*', '', '\*)', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"')) + +        " Back to normal indent after lines ending with ')': +    elseif lline =~ ')\s*$' +        let ind = s:FindPair('(', '',')') + +        " If this is a multiline comment then align '*': +    elseif lline =~ '^\s*(\*' && line =~ '^\s*\*' +        let ind = ind + 1 + +    else +        " Don't change indentation of this line +        " for new lines (indent==0) use indentation of previous line + +        " This is for preventing removing indentation of these args: +        "   let f x = +        "     let y = x + 1 in +        "     Printf.printf +        "       "o"           << here +        "       "oeuth"       << don't touch indentation + +        let i = indent(v:lnum) +        return i == 0 ? ind : i + +    endif + +    return ind + +endfunction + +" vim: sw=4 et sts=4 + +endif diff --git a/indent/gitconfig.vim b/indent/gitconfig.vim new file mode 100644 index 00000000..e0e4a456 --- /dev/null +++ b/indent/gitconfig.vim @@ -0,0 +1,42 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'git') == -1 +   +" Vim indent file +" Language:	git config file +" Maintainer:	Tim Pope <vimNOSPAM@tpope.org> +" Last Change:	2013 May 30 + +if exists("b:did_indent") +  finish +endif +let b:did_indent = 1 + +setlocal autoindent +setlocal indentexpr=GetGitconfigIndent() +setlocal indentkeys=o,O,*<Return>,0[,],0;,0#,=,!^F + +let b:undo_indent = 'setl ai< inde< indk<' + +" Only define the function once. +if exists("*GetGitconfigIndent") +  finish +endif + +function! GetGitconfigIndent() +  let sw    = exists('*shiftwidth') ? shiftwidth() : &sw +  let line  = getline(prevnonblank(v:lnum-1)) +  let cline = getline(v:lnum) +  if line =~  '\\\@<!\%(\\\\\)*\\$' +    " odd number of slashes, in a line continuation +    return 2 * sw +  elseif cline =~ '^\s*\[' +    return 0 +  elseif cline =~ '^\s*\a' +    return sw +  elseif cline == ''       && line =~ '^\[' +    return sw +  else +    return -1 +  endif +endfunction + +endif diff --git a/indent/glsl.vim b/indent/glsl.vim new file mode 100644 index 00000000..64f3a6fa --- /dev/null +++ b/indent/glsl.vim @@ -0,0 +1,15 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'glsl') == -1 +   +" Language: OpenGL Shading Language +" Maintainer: Sergey Tikhomirov <sergey@tikhomirov.io> + +if exists("b:did_indent") +  finish +endif + +setlocal autoindent cindent +setlocal formatoptions+=roq + +" vim:set sts=2 sw=2 : + +endif diff --git a/indent/slime.vim b/indent/slime.vim new file mode 100644 index 00000000..59eea509 --- /dev/null +++ b/indent/slime.vim @@ -0,0 +1,79 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'slime') == -1 +   +" Vim indent file +" Language:	Slime + +if exists("b:did_indent") +  finish +endif +runtime! indent/ruby.vim +unlet! b:did_indent +let b:did_indent = 1 + +setlocal autoindent sw=2 et +setlocal indentexpr=GetSlimeIndent() +setlocal indentkeys=o,O,*<Return>,},],0),!^F,=end,=else,=elsif,=rescue,=ensure,=when + +" Only define the function once. +if exists("*GetSlimeIndent") +  finish +endif + +let s:attributes = '\%({.\{-\}}\|\[.\{-\}\]\)' +let s:tag = '\%([%.#][[:alnum:]_-]\+\|'.s:attributes.'\)*[<>]*' + +if !exists('g:haml_self_closing_tags') +  let g:haml_self_closing_tags = 'meta|link|img|hr|br' +endif + +function! GetSlimeIndent() +  let lnum = prevnonblank(v:lnum-1) +  if lnum == 0 +    return 0 +  endif +  let line = substitute(getline(lnum),'\s\+$','','') +  let cline = substitute(substitute(getline(v:lnum),'\s\+$','',''),'^\s\+','','') +  let lastcol = strlen(line) +  let line = substitute(line,'^\s\+','','') +  let indent = indent(lnum) +  let cindent = indent(v:lnum) +  if cline =~# '\v^-\s*%(elsif|else|when)>' +    let indent = cindent < indent ? cindent : indent - &sw +  endif +  let increase = indent + &sw +  if indent == indent(lnum) +    let indent = cindent <= indent ? -1 : increase +  endif + +  let group = synIDattr(synID(lnum,lastcol,1),'name') + +  if line =~ '^doctype' +    return indent +  elseif line =~ '^/\%(\[[^]]*\]\)\=$' +    return increase +  elseif line =~ '^[\.#]' +    return increase +  elseif line =~? '^div' +    return increase +  elseif group == 'hamlFilter' +    return increase +  elseif line =~ '^'.s:tag.'[&!]\=[=~-]\s*\%(\%(if\|else\|elsif\|unless\|case\|when\|while\|until\|for\|begin\|module\|class\|def\)\>\%(.*\<end\>\)\@!\|.*do\%(\s*|[^|]*|\)\=\s*$\)' +    return increase +  elseif line =~ '^'.s:tag.'[&!]\=[=~-].*,\s*$' +    return increase +  elseif line == '-#' +    return increase +  elseif group =~? '\v^(hamlSelfCloser)$' || line =~? '^\v('.g:haml_self_closing_tags.')>' +    return indent +  elseif group =~? '\v^(hamlTag|hamlAttributesDelimiter|hamlObjectDelimiter|hamlClass|hamlId|htmlTagName|htmlSpecialTagName)$' +    return increase +  elseif synIDattr(synID(v:lnum,1,1),'name') ==? 'hamlRubyFilter' +    return GetRubyIndent() +  else +    return indent +  endif +endfunction + +" vim:set sw=2: + +endif diff --git a/indent/tex.vim b/indent/tex.vim deleted file mode 100644 index 14af7b28..00000000 --- a/indent/tex.vim +++ /dev/null @@ -1,140 +0,0 @@ -if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 -   -" LaTeX indent file (part of LaTeX Box) -" Maintainer: David Munger (mungerd@gmail.com) - -if exists("g:LatexBox_custom_indent") && ! g:LatexBox_custom_indent -	finish -endif -if exists("b:did_indent") -	finish -endif - -let b:did_indent = 1 - -setlocal indentexpr=LatexBox_TexIndent() -setlocal indentkeys=0=\\end,0=\\end{enumerate},0=\\end{itemize},0=\\end{description},0=\\right,0=\\item,0=\\),0=\\],0},o,O,0\\ - -let s:list_envs = ['itemize', 'enumerate', 'description'] -" indent on \left( and on \(, but not on ( -" indent on \left[ and on \[, but not on [ -" indent on \left\{ and on {, but not on \{ -let s:open_pat = '\\\@<!\%(\\begin\|\\left\a\@!\|\\(\|\\\[\|{\)' -let s:close_pat = '\\\@<!\%(\\end\|\\right\a\@!\|\\)\|\\\]\|}\)' -let s:list_open_pat = '\\\@<!\\begin{\%(' . join(s:list_envs, '\|') . '\)}' -let s:list_close_pat	= '\\\@<!\\end{\%(' . join(s:list_envs, '\|') . '\)}' - -function! s:CountMatches(str, pat) -	return len(substitute(substitute(a:str, a:pat, "\n", 'g'), "[^\n]", '', 'g')) -endfunction - - -" TexIndent {{{ -function! LatexBox_TexIndent() - -	let lnum_curr = v:lnum -	let lnum_prev = prevnonblank(lnum_curr - 1) - -	if lnum_prev == 0 -		return 0 -	endif - -	let line_curr = getline(lnum_curr) -	let line_prev = getline(lnum_prev) - -	" remove \\ -	let line_curr = substitute(line_curr, '\\\\', '', 'g') -	let line_prev = substitute(line_prev, '\\\\', '', 'g') - -	" strip comments -	let line_curr = substitute(line_curr, '\\\@<!%.*$', '', 'g') -	let line_prev = substitute(line_prev, '\\\@<!%.*$', '', 'g') - -	" find unmatched opening patterns on previous line -	let n = s:CountMatches(line_prev, s:open_pat)-s:CountMatches(line_prev, s:close_pat) -	let n += s:CountMatches(line_prev, s:list_open_pat)-s:CountMatches(line_prev, s:list_close_pat) - -	" reduce indentation if current line starts with a closing pattern -	if line_curr =~ '^\s*\%(' . s:close_pat . '\)' -		let n -= 1 -	endif - -	" compensate indentation if previous line starts with a closing pattern -	if line_prev =~ '^\s*\%(' . s:close_pat . '\)' -		let n += 1 -	endif - -	" reduce indentation if current line starts with a closing list -	if line_curr =~ '^\s*\%(' . s:list_close_pat . '\)' -		let n -= 1 -	endif - -	" compensate indentation if previous line starts with a closing list -	if line_prev =~ '^\s*\%(' . s:list_close_pat . '\)' -		let n += 1 -	endif - -	" reduce indentation if previous line is \begin{document} -	if line_prev =~ '\\begin\s*{document}' -		let n -= 1 -	endif - -	" less shift for lines starting with \item -	let item_here =  line_curr =~ '^\s*\\item' -	let item_above = line_prev =~ '^\s*\\item' -	if !item_here && item_above -		let n += 1 -	elseif item_here && !item_above -		let n -= 1 -	endif - -	return indent(lnum_prev) + n * &sw -endfunction -" }}} - -" Restore cursor position, window position, and last search after running a -" command. -function! Latexbox_CallIndent() -  " Save the current cursor position. -  let cursor = getpos('.') - -  " Save the current window position. -  normal! H -  let window = getpos('.') -  call setpos('.', cursor) - -  " Get first non-whitespace character of current line. -  let line_start_char = matchstr(getline('.'), '\S') - -  " Get initial tab position. -  let initial_tab = stridx(getline('.'), line_start_char) - -  " Execute the command. -  execute 'normal! ==' - -  " Get tab position difference. -  let difference = stridx(getline('.'), line_start_char) - initial_tab - -  " Set new cursor Y position based on calculated difference. -  let cursor[2] = cursor[2] + difference - -  " Restore the previous window position. -  call setpos('.', window) -  normal! zt - -  " Restore the previous cursor position. -  call setpos('.', cursor) -endfunction - -" autocmd to call indent after completion -" 7.3.598 -if v:version > 703 || (v:version == 703 && has('patch598')) -	augroup LatexBox_Completion -		autocmd! -		autocmd CompleteDone <buffer> call Latexbox_CallIndent() -	augroup END -endif - -" vim:fdm=marker:ff=unix:noet:ts=4:sw=4 - -endif | 
