Mercurial > vim
comparison runtime/indent/objc.vim @ 7:3fc0f57ecb91 v7.0001
updated for version 7.0001
author | vimboss |
---|---|
date | Sun, 13 Jun 2004 20:20:40 +0000 |
parents | |
children | 11b656e74444 |
comparison
equal
deleted
inserted
replaced
6:c2daee826b8f | 7:3fc0f57ecb91 |
---|---|
1 " Vim indent file | |
2 " Language: Objective-C | |
3 " Maintainer: Kazunobu Kuriyama <kazunobu.kuriyama@nifty.com> | |
4 " Last Change: 2004 May 16 | |
5 " | |
6 | |
7 | |
8 " Only load this indent file when no other was loaded. | |
9 if exists("b:did_indent") | |
10 finish | |
11 endif | |
12 let b:did_indent = 1 | |
13 setlocal cindent | |
14 | |
15 " Set the function to do the work. | |
16 setlocal indentexpr=GetObjCIndent() | |
17 | |
18 " To make a colon (:) suggest an indentation other than a goto/swich label, | |
19 setlocal indentkeys-=: | |
20 setlocal indentkeys+=<:> | |
21 | |
22 " Only define the function once. | |
23 if exists("*GetObjCIndent") | |
24 finish | |
25 endif | |
26 | |
27 function s:GetWidth(line, regexp) | |
28 let end = matchend(a:line, a:regexp) | |
29 let width = 0 | |
30 let i = 0 | |
31 while i < end | |
32 if a:line[i] != "\t" | |
33 let width = width + 1 | |
34 else | |
35 let width = width + &ts - (width % &ts) | |
36 endif | |
37 let i = i + 1 | |
38 endwhile | |
39 return width | |
40 endfunction | |
41 | |
42 function s:LeadingWhiteSpace(line) | |
43 let end = strlen(a:line) | |
44 let width = 0 | |
45 let i = 0 | |
46 while i < end | |
47 let char = a:line[i] | |
48 if char != " " && char != "\t" | |
49 break | |
50 endif | |
51 if char != "\t" | |
52 let width = width + 1 | |
53 else | |
54 let width = width + &ts - (width % &ts) | |
55 endif | |
56 let i = i + 1 | |
57 endwhile | |
58 return width | |
59 endfunction | |
60 | |
61 | |
62 function GetObjCIndent() | |
63 let theIndent = cindent(v:lnum) | |
64 | |
65 let prev_line = getline(v:lnum - 1) | |
66 let cur_line = getline(v:lnum) | |
67 | |
68 if prev_line !~# ":" || cur_line !~# ":" | |
69 return theIndent | |
70 endif | |
71 | |
72 if prev_line !~# ";" | |
73 let prev_colon_pos = s:GetWidth(prev_line, ":") | |
74 let delta = s:GetWidth(cur_line, ":") - s:LeadingWhiteSpace(cur_line) | |
75 let theIndent = prev_colon_pos - delta | |
76 endif | |
77 | |
78 return theIndent | |
79 endfunction |