view runtime/indent/matlab.vim @ 12485:ab40ecb0fd73 v8.0.1122

patch 8.0.1122: vimtutor.bat doesn't work well with vim.bat commit https://github.com/vim/vim/commit/dde403c2d8f3dabe6fefa7b526958b49a8f2e6e9 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Sep 17 21:43:00 2017 +0200 patch 8.0.1122: vimtutor.bat doesn't work well with vim.bat Problem: vimtutor.bat doesn't work well with vim.bat. Solution: Use "call vim". (Ken Takata, closes https://github.com/vim/vim/issues/2105)
author Christian Brabandt <cb@256bit.org>
date Sun, 17 Sep 2017 21:45:04 +0200
parents 63b0b7b79b25
children 8b334e4cb97f
line wrap: on
line source

" Matlab indent file
" Language:	Matlab
" Maintainer:	Christophe Poucet <christophe.poucet@pandora.be>
" Last Change:	6 January, 2001

" Only load this indent file when no other was loaded.
if exists("b:did_indent")
  finish
endif
let b:did_indent = 1

" Some preliminary setting
setlocal indentkeys=!,o,O=end,=case,=else,=elseif,=otherwise,=catch


setlocal indentexpr=GetMatlabIndent(v:lnum)

" Only define the function once.
if exists("*GetMatlabIndent")
  finish
endif

function GetMatlabIndent(lnum)
  " Give up if this line is explicitly joined.
  if getline(a:lnum - 1) =~ '\\$'
    return -1
  endif

  " Search backwards for the first non-empty line.
  let plnum = a:lnum - 1
  while plnum > 0 && getline(plnum) =~ '^\s*$'
    let plnum = plnum - 1
  endwhile

  if plnum == 0
    " This is the first non-empty line, use zero indent.
    return 0
  endif

  let curind = indent(plnum)

  " If the current line is a stop-block statement...
  if getline(v:lnum) =~ '^\s*\(end\|else\|elseif\|case\|otherwise\|catch\)\>'
    " See if this line does not follow the line right after an openblock
    if getline(plnum) =~ '^\s*\(for\|if\|else\|elseif\|case\|while\|switch\|try\|otherwise\|catch\)\>'
    " See if the user has already dedented
    elseif indent(v:lnum) > curind - shiftwidth()
      " If not, recommend one dedent
	let curind = curind - shiftwidth()
    else
      " Otherwise, trust the user
      return -1
    endif
"  endif

  " If the previous line opened a block
  elseif getline(plnum) =~ '^\s*\(for\|if\|else\|elseif\|case\|while\|switch\|try\|otherwise\|catch\)\>'
    " See if the user has already indented
    if indent(v:lnum) < curind + shiftwidth()
      "If not, recommend indent
      let curind = curind + shiftwidth()
    else
      " Otherwise, trust the user
      return -1
    endif
  endif



  " If we got to here, it means that the user takes the standardversion, so we return it
  return curind
endfunction

" vim:sw=2