blob: 17597734b8c7ccca255ac54c5735d68761834c7b [file] [log] [blame]
Bram Moolenaar8c8de832008-06-24 22:58:06 +00001" Vim indent file
2" Language: tf (TinyFugue)
Bram Moolenaara3ff49f2010-05-30 22:48:02 +02003" Maintainer: Christian J. Robinson <heptite@gmail.com>
4" URL: http://christianrobinson.name/vim/indent/tf.vim
Bram Moolenaar8c8de832008-06-24 22:58:06 +00005" Last Change: 2002 May 29
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 + &sw
42 elseif line =~ '\(/if\|/else\|/then\)'
43 if line !~ '/endif'
44 let ind = ind + &sw
45 endif
46 elseif line =~ '/while'
47 if line !~ '/done'
48 let ind = ind + &sw
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 - &sw
57 endif
58 elseif line =~ '/done'
59 if line !~ '/while'
60 let ind = ind - &sw
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