summaryrefslogtreecommitdiffstats
path: root/indent/matlab.vim
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2017-09-27 20:43:42 +0200
committerAdam Stankiewicz <sheerun@sher.pl>2017-09-27 20:43:42 +0200
commit5b77877888162f4e415fe9a7b8c5e9fb5dfb6ee1 (patch)
tree965ae5128797f3d42d78d02692e62d24a4596e19 /indent/matlab.vim
parent8148255ef1c416f414c3a78405eff08fe149d16e (diff)
downloadvim-polyglot-5b77877888162f4e415fe9a7b8c5e9fb5dfb6ee1.tar.gz
vim-polyglot-5b77877888162f4e415fe9a7b8c5e9fb5dfb6ee1.zip
Add syntax files from upstream vim repository
Diffstat (limited to '')
-rw-r--r--indent/matlab.vim78
1 files changed, 78 insertions, 0 deletions
diff --git a/indent/matlab.vim b/indent/matlab.vim
new file mode 100644
index 00000000..32bb721e
--- /dev/null
+++ b/indent/matlab.vim
@@ -0,0 +1,78 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vim') == -1
+
+" 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
+
+endif