xref: /vim-8.2.3635/runtime/indent/tf.vim (revision 214641f7)
1" Vim indent file
2" Language:     tf (TinyFugue)
3" Maintainer:   Christian J. Robinson <[email protected]>
4" URL:          http://www.vim.org/scripts/script.php?script_id=174
5" Last Change:  2017 Feb 25
6
7" Only load this indent file when no other was loaded.
8if exists("b:did_indent")
9  finish
10endif
11let b:did_indent = 1
12
13setlocal indentexpr=GetTFIndent()
14setlocal indentkeys-=0{,0} indentkeys-=0# indentkeys-=:
15setlocal indentkeys+==/endif,=/then,=/else,=/done,0;
16
17" Only define the function once:
18if exists("*GetTFIndent")
19  finish
20endif
21
22function GetTFIndent()
23	" Find a non-blank line above the current line:
24	let lnum = prevnonblank(v:lnum - 1)
25
26	" No indent for the start of the file:
27	if lnum == 0
28		return 0
29	endif
30
31	let ind = indent(lnum)
32	let line = getline(lnum)
33
34	" No indentation if the previous line didn't end with "\":
35	" (Could be annoying, but it lets you know if you made a mistake.)
36	if line !~ '\\$'
37		return 0
38	endif
39
40	if line =~ '\(/def.*\\\|/for.*\(%;\s*\)\@\<!\\\)$'
41		let ind = ind + shiftwidth()
42	elseif line =~ '\(/if\|/else\|/then\)'
43		if line !~ '/endif'
44			let ind = ind + shiftwidth()
45		endif
46	elseif line =~ '/while'
47		if line !~ '/done'
48			let ind = ind + shiftwidth()
49		endif
50	endif
51
52	let line = getline(v:lnum)
53
54	if line =~ '\(/else\|/endif\|/then\)'
55		if line !~ '/if'
56			let ind = ind - shiftwidth()
57		endif
58	elseif line =~ '/done'
59		if line !~ '/while'
60			let ind = ind - shiftwidth()
61		endif
62	endif
63
64	" Comments at the beginning of a line:
65	if line =~ '^\s*;'
66		let ind = 0
67	endif
68
69
70	return ind
71
72endfunction
73