xref: /vim-8.2.3635/runtime/indent/dosbatch.vim (revision 079ba76a)
120aac6c1SBram Moolenaar" Vim indent file
220aac6c1SBram Moolenaar" Language:	MSDOS batch file (with NT command extensions)
320aac6c1SBram Moolenaar" Maintainer:	Ken Takata
420aac6c1SBram Moolenaar" URL:		https://github.com/k-takata/vim-dosbatch-indent
5*079ba76aSBram Moolenaar" Last Change:	2021-10-18
620aac6c1SBram Moolenaar" Filenames:	*.bat
720aac6c1SBram Moolenaar" License:	VIM License
820aac6c1SBram Moolenaar
920aac6c1SBram Moolenaarif exists("b:did_indent")
1020aac6c1SBram Moolenaar  finish
1120aac6c1SBram Moolenaarendif
1220aac6c1SBram Moolenaarlet b:did_indent = 1
1320aac6c1SBram Moolenaar
1420aac6c1SBram Moolenaarsetlocal nosmartindent
1520aac6c1SBram Moolenaarsetlocal noautoindent
1620aac6c1SBram Moolenaarsetlocal indentexpr=GetDosBatchIndent(v:lnum)
1720aac6c1SBram Moolenaarsetlocal indentkeys=!^F,o,O
1820aac6c1SBram Moolenaarsetlocal indentkeys+=0=)
1920aac6c1SBram Moolenaar
20*079ba76aSBram Moolenaarlet b:undo_indent = "setl ai< inde< indk< si<"
21*079ba76aSBram Moolenaar
2220aac6c1SBram Moolenaarif exists("*GetDosBatchIndent")
2320aac6c1SBram Moolenaar  finish
2420aac6c1SBram Moolenaarendif
2520aac6c1SBram Moolenaar
2620aac6c1SBram Moolenaarlet s:cpo_save = &cpo
2720aac6c1SBram Moolenaarset cpo&vim
2820aac6c1SBram Moolenaar
2920aac6c1SBram Moolenaarfunction! GetDosBatchIndent(lnum)
3020aac6c1SBram Moolenaar  let l:prevlnum = prevnonblank(a:lnum-1)
3120aac6c1SBram Moolenaar  if l:prevlnum == 0
3220aac6c1SBram Moolenaar    " top of file
3320aac6c1SBram Moolenaar    return 0
3420aac6c1SBram Moolenaar  endif
3520aac6c1SBram Moolenaar
3620aac6c1SBram Moolenaar  " grab the previous and current line, stripping comments.
3720aac6c1SBram Moolenaar  let l:prevl = substitute(getline(l:prevlnum), '\c^\s*\%(@\s*\)\?rem\>.*$', '', '')
3820aac6c1SBram Moolenaar  let l:thisl = getline(a:lnum)
3920aac6c1SBram Moolenaar  let l:previ = indent(l:prevlnum)
4020aac6c1SBram Moolenaar
4120aac6c1SBram Moolenaar  let l:ind = l:previ
4220aac6c1SBram Moolenaar
4320aac6c1SBram Moolenaar  if l:prevl =~? '^\s*@\=if\>.*(\s*$' ||
4420aac6c1SBram Moolenaar        \ l:prevl =~? '\<do\>\s*(\s*$' ||
4520aac6c1SBram Moolenaar        \ l:prevl =~? '\<else\>\s*\%(if\>.*\)\?(\s*$' ||
4620aac6c1SBram Moolenaar        \ l:prevl =~? '^.*\(&&\|||\)\s*(\s*$'
4720aac6c1SBram Moolenaar    " previous line opened a block
4820aac6c1SBram Moolenaar    let l:ind += shiftwidth()
4920aac6c1SBram Moolenaar  endif
5020aac6c1SBram Moolenaar  if l:thisl =~ '^\s*)'
5120aac6c1SBram Moolenaar    " this line closed a block
5220aac6c1SBram Moolenaar    let l:ind -= shiftwidth()
5320aac6c1SBram Moolenaar  endif
5420aac6c1SBram Moolenaar
5520aac6c1SBram Moolenaar  return l:ind
5620aac6c1SBram Moolenaarendfunction
5720aac6c1SBram Moolenaar
5820aac6c1SBram Moolenaarlet &cpo = s:cpo_save
5920aac6c1SBram Moolenaarunlet s:cpo_save
6020aac6c1SBram Moolenaar
6120aac6c1SBram Moolenaar" vim: ts=8 sw=2 sts=2
62