diff runtime/indent/tf.vim @ 5:db46d51a3939

Initial revision
author axmo
date Wed, 13 Aug 2008 17:36:09 +0900
parents
children c16898406ff2
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/runtime/indent/tf.vim	Wed Aug 13 17:36:09 2008 +0900
@@ -0,0 +1,72 @@
+" Vim indent file
+" Language:     tf (TinyFugue)
+" Maintainer:   Christian J. Robinson <infynity@onewest.net>
+" URL:          http://www.infynity.spodzone.com/vim/indent/tf.vim
+" Last Change:  2002 May 29
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+  finish
+endif
+let b:did_indent = 1
+
+setlocal indentexpr=GetTFIndent()
+setlocal indentkeys-=0{,0} indentkeys-=0# indentkeys-=:
+setlocal indentkeys+==/endif,=/then,=/else,=/done,0;
+
+" Only define the function once:
+if exists("*GetTFIndent")
+  finish
+endif
+
+function GetTFIndent()
+	" Find a non-blank line above the current line:
+	let lnum = prevnonblank(v:lnum - 1)
+
+	" No indent for the start of the file:
+	if lnum == 0
+		return 0
+	endif
+
+	let ind = indent(lnum)
+	let line = getline(lnum)
+
+	" No indentation if the previous line didn't end with "\":
+	" (Could be annoying, but it lets you know if you made a mistake.)
+	if line !~ '\\$'
+		return 0
+	endif
+
+	if line =~ '\(/def.*\\\|/for.*\(%;\s*\)\@\<!\\\)$'
+		let ind = ind + &sw
+	elseif line =~ '\(/if\|/else\|/then\)'
+		if line !~ '/endif'
+			let ind = ind + &sw
+		endif
+	elseif line =~ '/while'
+		if line !~ '/done'
+			let ind = ind + &sw
+		endif
+	endif
+
+	let line = getline(v:lnum)
+
+	if line =~ '\(/else\|/endif\|/then\)'
+		if line !~ '/if'
+			let ind = ind - &sw
+		endif
+	elseif line =~ '/done'
+		if line !~ '/while'
+			let ind = ind - &sw
+		endif
+	endif
+
+	" Comments at the beginning of a line:
+	if line =~ '^\s*;'
+		let ind = 0
+	endif
+
+
+	return ind
+
+endfunction