annotate runtime/indent/erlang.vim @ 48:67300faee616 v7-3-618

v7-3-618
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 01 Aug 2012 18:08:28 +0900
parents db46d51a3939
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
1 " Vim indent file
db46d51a3939 Initial revision
axmo
parents:
diff changeset
2 " Language: Erlang
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
3 " Author: Csaba Hoch <csaba.hoch@gmail.com>
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
4 " Contributors: Edwin Fine <efine145_nospam01 at usa dot net>
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
5 " Pawel 'kTT' Salata <rockplayer.pl@gmail.com>
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
6 " Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
7 " License: Vim license
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
8 " Version: 2011/09/06
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
9
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
10 " Only load this indent file when no other was loaded
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
11 if exists("b:did_indent")
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
12 finish
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
13 else
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
14 let b:did_indent = 1
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
15 endif
db46d51a3939 Initial revision
axmo
parents:
diff changeset
16
db46d51a3939 Initial revision
axmo
parents:
diff changeset
17 setlocal indentexpr=ErlangIndent()
db46d51a3939 Initial revision
axmo
parents:
diff changeset
18 setlocal indentkeys+==after,=end,=catch,=),=],=}
db46d51a3939 Initial revision
axmo
parents:
diff changeset
19
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
20 " Only define the functions once
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
21 if exists("*ErlangIndent")
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
22 finish
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
23 endif
db46d51a3939 Initial revision
axmo
parents:
diff changeset
24
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
25 " The function goes through the whole line, analyses it and returns the
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
26 " indentation level.
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
27 "
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
28 " line: the line to be examined
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
29 " return: the indentation level of the examined line
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
30 function s:ErlangIndentAfterLine(line)
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
31 let linelen = strlen(a:line) " the length of the line
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
32 let i = 0 " the index of the current character in the line
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
33 let ind = 0 " how much should be the difference between the indentation of
db46d51a3939 Initial revision
axmo
parents:
diff changeset
34 " the current line and the indentation of the next line?
db46d51a3939 Initial revision
axmo
parents:
diff changeset
35 " e.g. +1: the indentation of the next line should be equal to
db46d51a3939 Initial revision
axmo
parents:
diff changeset
36 " the indentation of the current line plus one shiftwidth
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
37 let last_fun = 0 " the last token was a 'fun'
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
38 let last_receive = 0 " the last token was a 'receive'; needed for 'after'
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
39 let last_hash_sym = 0 " the last token was a '#'
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
40
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
41 " Ignore comments
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
42 if a:line =~# '^\s*%'
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
43 return 0
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
44 endif
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
45
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
46 " Partial function head where the guard is missing
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
47 if a:line =~# "\\(^\\l[[:alnum:]_]*\\)\\|\\(^'[^']\\+'\\)(" && a:line !~# '->'
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
48 return 2
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
49 endif
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
50
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
51 " The missing guard from the split function head
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
52 if a:line =~# '^\s*when\s\+.*->'
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
53 return -1
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
54 endif
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
55
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
56 while 0<=i && i<linelen
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
57 " m: the next value of the i
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
58 if a:line[i] == '"'
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
59 let m = matchend(a:line,'"\%([^"\\]\|\\.\)*"',i)
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
60 let last_receive = 0
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
61 elseif a:line[i] == "'"
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
62 let m = matchend(a:line,"'[^']*'",i)
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
63 let last_receive = 0
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
64 elseif a:line[i] =~# "[a-z]"
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
65 let m = matchend(a:line,".[[:alnum:]_]*",i)
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
66 if last_fun
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
67 let ind = ind - 1
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
68 let last_fun = 0
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
69 let last_receive = 0
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
70 elseif a:line[(i):(m-1)] =~# '^\%(case\|if\|try\)$'
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
71 let ind = ind + 1
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
72 elseif a:line[(i):(m-1)] =~# '^receive$'
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
73 let ind = ind + 1
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
74 let last_receive = 1
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
75 elseif a:line[(i):(m-1)] =~# '^begin$'
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
76 let ind = ind + 2
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
77 let last_receive = 0
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
78 elseif a:line[(i):(m-1)] =~# '^end$'
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
79 let ind = ind - 2
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
80 let last_receive = 0
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
81 elseif a:line[(i):(m-1)] =~# '^after$'
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
82 if last_receive == 0
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
83 let ind = ind - 1
db46d51a3939 Initial revision
axmo
parents:
diff changeset
84 else
db46d51a3939 Initial revision
axmo
parents:
diff changeset
85 let ind = ind + 0
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
86 endif
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
87 let last_receive = 0
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
88 elseif a:line[(i):(m-1)] =~# '^fun$'
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
89 let ind = ind + 1
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
90 let last_fun = 1
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
91 let last_receive = 0
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
92 endif
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
93 elseif a:line[i] =~# "[A-Z_]"
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
94 let m = matchend(a:line,".[[:alnum:]_]*",i)
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
95 let last_receive = 0
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
96 elseif a:line[i] == '$'
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
97 let m = i+2
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
98 let last_receive = 0
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
99 elseif a:line[i] == "." && (i+1>=linelen || a:line[i+1]!~ "[0-9]")
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
100 let m = i+1
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
101 if last_hash_sym
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
102 let last_hash_sym = 0
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
103 else
db46d51a3939 Initial revision
axmo
parents:
diff changeset
104 let ind = ind - 1
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
105 endif
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
106 let last_receive = 0
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
107 elseif a:line[i] == '-' && (i+1<linelen && a:line[i+1]=='>')
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
108 let m = i+2
db46d51a3939 Initial revision
axmo
parents:
diff changeset
109 let ind = ind + 1
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
110 let last_receive = 0
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
111 elseif a:line[i] == ';' && a:line[(i):(linelen)] !~# '.*->.*'
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
112 let m = i+1
db46d51a3939 Initial revision
axmo
parents:
diff changeset
113 let ind = ind - 1
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
114 let last_receive = 0
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
115 elseif a:line[i] == '#'
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
116 let m = i+1
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
117 let last_hash_sym = 1
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
118 elseif a:line[i] =~# '[({[]'
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
119 let m = i+1
db46d51a3939 Initial revision
axmo
parents:
diff changeset
120 let ind = ind + 1
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
121 let last_fun = 0
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
122 let last_receive = 0
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
123 let last_hash_sym = 0
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
124 elseif a:line[i] =~# '[)}\]]'
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
125 let m = i+1
db46d51a3939 Initial revision
axmo
parents:
diff changeset
126 let ind = ind - 1
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
127 let last_receive = 0
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
128 else
db46d51a3939 Initial revision
axmo
parents:
diff changeset
129 let m = i+1
db46d51a3939 Initial revision
axmo
parents:
diff changeset
130 endif
db46d51a3939 Initial revision
axmo
parents:
diff changeset
131
db46d51a3939 Initial revision
axmo
parents:
diff changeset
132 let i = m
db46d51a3939 Initial revision
axmo
parents:
diff changeset
133 endwhile
db46d51a3939 Initial revision
axmo
parents:
diff changeset
134
db46d51a3939 Initial revision
axmo
parents:
diff changeset
135 return ind
db46d51a3939 Initial revision
axmo
parents:
diff changeset
136 endfunction
db46d51a3939 Initial revision
axmo
parents:
diff changeset
137
db46d51a3939 Initial revision
axmo
parents:
diff changeset
138 function s:FindPrevNonBlankNonComment(lnum)
db46d51a3939 Initial revision
axmo
parents:
diff changeset
139 let lnum = prevnonblank(a:lnum)
db46d51a3939 Initial revision
axmo
parents:
diff changeset
140 let line = getline(lnum)
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
141 " Continue to search above if the current line begins with a '%'
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
142 while line =~# '^\s*%.*$'
db46d51a3939 Initial revision
axmo
parents:
diff changeset
143 let lnum = prevnonblank(lnum - 1)
db46d51a3939 Initial revision
axmo
parents:
diff changeset
144 if 0 == lnum
db46d51a3939 Initial revision
axmo
parents:
diff changeset
145 return 0
db46d51a3939 Initial revision
axmo
parents:
diff changeset
146 endif
db46d51a3939 Initial revision
axmo
parents:
diff changeset
147 let line = getline(lnum)
db46d51a3939 Initial revision
axmo
parents:
diff changeset
148 endwhile
db46d51a3939 Initial revision
axmo
parents:
diff changeset
149 return lnum
db46d51a3939 Initial revision
axmo
parents:
diff changeset
150 endfunction
db46d51a3939 Initial revision
axmo
parents:
diff changeset
151
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
152 " The function returns the indentation level of the line adjusted to a mutiple
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
153 " of 'shiftwidth' option.
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
154 "
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
155 " lnum: line number
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
156 " return: the indentation level of the line
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
157 function s:GetLineIndent(lnum)
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
158 return (indent(a:lnum) / &sw) * &sw
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
159 endfunction
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
160
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
161 function ErlangIndent()
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
162 " Find a non-blank line above the current line
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
163 let lnum = prevnonblank(v:lnum - 1)
db46d51a3939 Initial revision
axmo
parents:
diff changeset
164
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
165 " Hit the start of the file, use zero indent
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
166 if lnum == 0
db46d51a3939 Initial revision
axmo
parents:
diff changeset
167 return 0
db46d51a3939 Initial revision
axmo
parents:
diff changeset
168 endif
db46d51a3939 Initial revision
axmo
parents:
diff changeset
169
db46d51a3939 Initial revision
axmo
parents:
diff changeset
170 let prevline = getline(lnum)
db46d51a3939 Initial revision
axmo
parents:
diff changeset
171 let currline = getline(v:lnum)
db46d51a3939 Initial revision
axmo
parents:
diff changeset
172
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
173 let ind_after = s:ErlangIndentAfterLine(prevline)
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
174 if ind_after != 0
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
175 let ind = s:GetLineIndent(lnum) + ind_after * &sw
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
176 else
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
177 let ind = indent(lnum) + ind_after * &sw
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
178 endif
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
179
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
180 " Special cases:
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
181 if prevline =~# '^\s*\%(after\|end\)\>'
db46d51a3939 Initial revision
axmo
parents:
diff changeset
182 let ind = ind + 2*&sw
db46d51a3939 Initial revision
axmo
parents:
diff changeset
183 endif
db46d51a3939 Initial revision
axmo
parents:
diff changeset
184 if currline =~# '^\s*end\>'
db46d51a3939 Initial revision
axmo
parents:
diff changeset
185 let ind = ind - 2*&sw
db46d51a3939 Initial revision
axmo
parents:
diff changeset
186 endif
db46d51a3939 Initial revision
axmo
parents:
diff changeset
187 if currline =~# '^\s*after\>'
db46d51a3939 Initial revision
axmo
parents:
diff changeset
188 let plnum = s:FindPrevNonBlankNonComment(v:lnum-1)
db46d51a3939 Initial revision
axmo
parents:
diff changeset
189 if getline(plnum) =~# '^[^%]*\<receive\>\s*\%(%.*\)\=$'
48
67300faee616 v7-3-618
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
190 " If the 'receive' is not in the same line as the 'after'
5
db46d51a3939 Initial revision
axmo
parents:
diff changeset
191 let ind = ind - 1*&sw
db46d51a3939 Initial revision
axmo
parents:
diff changeset
192 else
db46d51a3939 Initial revision
axmo
parents:
diff changeset
193 let ind = ind - 2*&sw
db46d51a3939 Initial revision
axmo
parents:
diff changeset
194 endif
db46d51a3939 Initial revision
axmo
parents:
diff changeset
195 endif
db46d51a3939 Initial revision
axmo
parents:
diff changeset
196 if prevline =~# '^\s*[)}\]]'
db46d51a3939 Initial revision
axmo
parents:
diff changeset
197 let ind = ind + 1*&sw
db46d51a3939 Initial revision
axmo
parents:
diff changeset
198 endif
db46d51a3939 Initial revision
axmo
parents:
diff changeset
199 if currline =~# '^\s*[)}\]]'
db46d51a3939 Initial revision
axmo
parents:
diff changeset
200 let ind = ind - 1*&sw
db46d51a3939 Initial revision
axmo
parents:
diff changeset
201 endif
db46d51a3939 Initial revision
axmo
parents:
diff changeset
202 if prevline =~# '^\s*\%(catch\)\s*\%(%\|$\)'
db46d51a3939 Initial revision
axmo
parents:
diff changeset
203 let ind = ind + 1*&sw
db46d51a3939 Initial revision
axmo
parents:
diff changeset
204 endif
db46d51a3939 Initial revision
axmo
parents:
diff changeset
205 if currline =~# '^\s*\%(catch\)\s*\%(%\|$\)'
db46d51a3939 Initial revision
axmo
parents:
diff changeset
206 let ind = ind - 1*&sw
db46d51a3939 Initial revision
axmo
parents:
diff changeset
207 endif
db46d51a3939 Initial revision
axmo
parents:
diff changeset
208
db46d51a3939 Initial revision
axmo
parents:
diff changeset
209 if ind<0
db46d51a3939 Initial revision
axmo
parents:
diff changeset
210 let ind = 0
db46d51a3939 Initial revision
axmo
parents:
diff changeset
211 endif
db46d51a3939 Initial revision
axmo
parents:
diff changeset
212 return ind
db46d51a3939 Initial revision
axmo
parents:
diff changeset
213 endfunction