diff runtime/indent/idlang.vim @ 7:3fc0f57ecb91 v7.0001

updated for version 7.0001
author vimboss
date Sun, 13 Jun 2004 20:20:40 +0000
parents
children dd6c2497c997
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/runtime/indent/idlang.vim
@@ -0,0 +1,63 @@
+" IDL (Interactive Data Language) indent file.
+" Language: IDL (ft=idlang)
+" Last change:	2002 Sep 23
+" Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+   finish
+endif
+let b:did_indent = 1
+
+setlocal indentkeys=o,O,0=endif,0=ENDIF,0=endelse,0=ENDELSE,0=endwhile,
+		    \0=ENDWHILE,0=endfor,0=ENDFOR,0=endrep,0=ENDREP
+
+setlocal indentexpr=GetIdlangIndent(v:lnum)
+
+" Only define the function once.
+if exists("*GetIdlangIndent")
+   finish
+endif
+
+function GetIdlangIndent(lnum)
+   " First non-empty line above the current line.
+   let pnum = prevnonblank(v:lnum-1)
+   " v:lnum is the first non-empty line -- zero indent.
+   if pnum == 0
+      return 0
+   endif
+   " Second non-empty line above the current line.
+   let pnum2 = prevnonblank(pnum-1)
+
+   " Current indent.
+   let curind = indent(pnum)
+
+   " Indenting of continued lines.
+   if getline(pnum) =~ '\$\s*\(;.*\)\=$'
+      if getline(pnum2) !~ '\$\s*\(;.*\)\=$'
+	 let curind = curind+&sw
+      endif
+   else
+      if getline(pnum2) =~ '\$\s*\(;.*\)\=$'
+	 let curind = curind-&sw
+      endif
+   endif
+
+   " Indenting blocks of statements.
+   if getline(v:lnum) =~? '^\s*\(endif\|endelse\|endwhile\|endfor\|endrep\)\>'
+      if getline(pnum) =~? 'begin\>'
+      elseif indent(v:lnum) > curind-&sw
+	 let curind = curind-&sw
+      else
+	 return -1
+      endif
+   elseif getline(pnum) =~? 'begin\>'
+      if indent(v:lnum) < curind+&sw
+	 let curind = curind+&sw
+      else
+	 return -1
+      endif
+   endif
+   return curind
+endfunction
+