diff options
| author | Adam Stankiewicz <sheerun@sher.pl> | 2017-09-27 20:43:42 +0200 | 
|---|---|---|
| committer | Adam Stankiewicz <sheerun@sher.pl> | 2017-09-27 20:43:42 +0200 | 
| commit | 5b77877888162f4e415fe9a7b8c5e9fb5dfb6ee1 (patch) | |
| tree | 965ae5128797f3d42d78d02692e62d24a4596e19 /indent/sdl.vim | |
| parent | 8148255ef1c416f414c3a78405eff08fe149d16e (diff) | |
| download | vim-polyglot-5b77877888162f4e415fe9a7b8c5e9fb5dfb6ee1.tar.gz vim-polyglot-5b77877888162f4e415fe9a7b8c5e9fb5dfb6ee1.zip | |
Add syntax files from upstream vim repository
Diffstat (limited to 'indent/sdl.vim')
| -rw-r--r-- | indent/sdl.vim | 97 | 
1 files changed, 97 insertions, 0 deletions
| diff --git a/indent/sdl.vim b/indent/sdl.vim new file mode 100644 index 00000000..131dce06 --- /dev/null +++ b/indent/sdl.vim @@ -0,0 +1,97 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vim') == -1 +   +" Vim indent file +" Language:	SDL +" Maintainer:	Michael Piefel <entwurf@piefel.de> +" Last Change:	10 December 2011 + +" Shamelessly stolen from the Vim-Script indent file + +" Only load this indent file when no other was loaded. +if exists("b:did_indent") +  finish +endif +let b:did_indent = 1 + +setlocal indentexpr=GetSDLIndent() +setlocal indentkeys+==~end,=~state,*<Return> + +" Only define the function once. +if exists("*GetSDLIndent") +"  finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +function! GetSDLIndent() +  " Find a non-blank line above the current line. +  let lnum = prevnonblank(v:lnum - 1) + +  " At the start of the file use zero indent. +  if lnum == 0 +    return 0 +  endif + +  let ind = indent(lnum) +  let virtuality = '^\s*\(\(virtual\|redefined\|finalized\)\s\+\)\=\s*' + +  " Add a single space to comments which use asterisks +  if getline(lnum) =~ '^\s*\*' +    let ind = ind - 1 +  endif +  if getline(v:lnum) =~ '^\s*\*' +    let ind = ind + 1 +  endif + +  " Add a 'shiftwidth' after states, different blocks, decision (and alternatives), inputs +  if (getline(lnum) =~? '^\s*\(start\|state\|system\|package\|connection\|channel\|alternative\|macro\|operator\|newtype\|select\|substructure\|decision\|generator\|refinement\|service\|method\|exceptionhandler\|asntype\|syntype\|value\|(.*):\|\(priority\s\+\)\=input\|provided\)' +    \ || getline(lnum) =~? virtuality . '\(process\|procedure\|block\|object\)') +    \ && getline(lnum) !~? 'end[[:alpha:]]\+;$' +    let ind = ind + shiftwidth() +  endif + +  " Subtract a 'shiftwidth' after states +  if getline(lnum) =~? '^\s*\(stop\|return\>\|nextstate\)' +    let ind = ind - shiftwidth() +  endif + +  " Subtract a 'shiftwidth' on on end (uncompleted line) +  if getline(v:lnum) =~? '^\s*end\>' +    let ind = ind - shiftwidth() +  endif + +  " Put each alternatives where the corresponding decision was +  if getline(v:lnum) =~? '^\s*\((.*)\|else\):' +    normal k +    let ind = indent(searchpair('^\s*decision', '', '^\s*enddecision', 'bW', +      \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "sdlString"')) +  endif + +  " Put each state where the preceding state was +  if getline(v:lnum) =~? '^\s*state\>' +    let ind = indent(search('^\s*start', 'bW')) +  endif + +  " Systems and packages are always in column 0 +  if getline(v:lnum) =~? '^\s*\(\(end\)\=system\|\(end\)\=package\)' +    return 0 +  endif + +  " Put each end* where the corresponding begin was +  if getline(v:lnum) =~? '^\s*end[[:alpha:]]' +    normal k +    let partner=matchstr(getline(v:lnum), '\(' . virtuality . 'end\)\@<=[[:alpha:]]\+') +    let ind = indent(searchpair(virtuality . partner, '', '^\s*end' . partner, 'bW', +      \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "sdlString"')) +  endif + +  return ind +endfunction + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim:sw=2 + +endif | 
