Mercurial > hg > RemoteEditor > vim7
comparison runtime/indent/dylan.vim @ 0:76efa0be13f1
Initial revision
author | atsuki |
---|---|
date | Sat, 10 Nov 2007 15:07:22 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:76efa0be13f1 |
---|---|
1 " Vim indent file | |
2 " Language: Dylan | |
3 " Version: 0.01 | |
4 " Last Change: 2003 Feb 04 | |
5 " Maintainer: Brent A. Fulgham <bfulgham@debian.org> | |
6 | |
7 " Only load this indent file when no other was loaded. | |
8 if exists("b:did_indent") | |
9 finish | |
10 endif | |
11 let b:did_indent = 1 | |
12 | |
13 setlocal indentkeys+==~begin,=~block,=~case,=~cleanup,=~define,=~end,=~else,=~elseif,=~exception,=~for,=~finally,=~if,=~otherwise,=~select,=~unless,=~while | |
14 | |
15 " Define the appropriate indent function but only once | |
16 setlocal indentexpr=DylanGetIndent() | |
17 if exists("*DylanGetIndent") | |
18 finish | |
19 endif | |
20 | |
21 function DylanGetIndent() | |
22 " Get the line to be indented | |
23 let cline = getline(v:lnum) | |
24 | |
25 " Don't reindent comments on first column | |
26 if cline =~ '^/\[/\*]' | |
27 return 0 | |
28 endif | |
29 | |
30 "Find the previous non-blank line | |
31 let lnum = prevnonblank(v:lnum - 1) | |
32 "Use zero indent at the top of the file | |
33 if lnum == 0 | |
34 return 0 | |
35 endif | |
36 | |
37 let prevline=getline(lnum) | |
38 let ind = indent(lnum) | |
39 let chg = 0 | |
40 | |
41 " If previous line was a comment, use its indent | |
42 if prevline =~ '^\s*//' | |
43 return ind | |
44 endif | |
45 | |
46 " If previous line was a 'define', indent | |
47 if prevline =~? '\(^\s*\(begin\|block\|case\|define\|else\|elseif\|for\|finally\|if\|select\|unless\|while\)\|\s*\S*\s*=>$\)' | |
48 let chg = &sw | |
49 " local methods indent the shift-width, plus 6 for the 'local' | |
50 elseif prevline =~? '^\s*local' | |
51 let chg = &sw + 6 | |
52 " If previous line was a let with no closing semicolon, indent | |
53 elseif prevline =~? '^\s*let.*[^;]\s*$' | |
54 let chg = &sw | |
55 " If previous line opened a parenthesis, and did not close it, indent | |
56 elseif prevline =~ '^.*(\s*[^)]*\((.*)\)*[^)]*$' | |
57 return = match( prevline, '(.*\((.*)\|[^)]\)*.*$') + 1 | |
58 "elseif prevline =~ '^.*(\s*[^)]*\((.*)\)*[^)]*$' | |
59 elseif prevline =~ '^[^(]*)\s*$' | |
60 " This line closes a parenthesis. Find opening | |
61 let curr_line = prevnonblank(lnum - 1) | |
62 while curr_line >= 0 | |
63 let str = getline(curr_line) | |
64 if str !~ '^.*(\s*[^)]*\((.*)\)*[^)]*$' | |
65 let curr_line = prevnonblank(curr_line - 1) | |
66 else | |
67 break | |
68 endif | |
69 endwhile | |
70 if curr_line < 0 | |
71 return -1 | |
72 endif | |
73 let ind = indent(curr_line) | |
74 " Although we found the closing parenthesis, make sure this | |
75 " line doesn't start with an indentable command: | |
76 let curr_str = getline(curr_line) | |
77 if curr_str =~? '^\s*\(begin\|block\|case\|define\|else\|elseif\|for\|finally\|if\|select\|unless\|while\)' | |
78 let chg = &sw | |
79 endif | |
80 endif | |
81 | |
82 " If a line starts with end, un-indent (even if we just indented!) | |
83 if cline =~? '^\s*\(cleanup\|end\|else\|elseif\|exception\|finally\|otherwise\)' | |
84 let chg = chg - &sw | |
85 endif | |
86 | |
87 return ind + chg | |
88 endfunction | |
89 | |
90 " vim:sw=2 tw=130 |