Mercurial > hg > RemoteEditor > vim7
comparison runtime/indent/ishd.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 " Description: InstallShield indenter | |
2 " Author: Johannes Zellner <johannes@zellner.org> | |
3 " Last Change: Tue, 27 Apr 2004 14:54:59 CEST | |
4 | |
5 " Only load this indent file when no other was loaded. | |
6 if exists("b:did_indent") | |
7 finish | |
8 endif | |
9 let b:did_indent = 1 | |
10 | |
11 setlocal autoindent | |
12 setlocal indentexpr=GetIshdIndent(v:lnum) | |
13 setlocal indentkeys& | |
14 setlocal indentkeys+==else,=elseif,=endif,=end,=begin,<:> | |
15 " setlocal indentkeys-=0# | |
16 | |
17 let b:undo_indent = "setl ai< indentexpr< indentkeys<" | |
18 | |
19 " Only define the function once. | |
20 if exists("*GetIshdIndent") | |
21 finish | |
22 endif | |
23 | |
24 fun! GetIshdIndent(lnum) | |
25 " labels and preprocessor get zero indent immediately | |
26 let this_line = getline(a:lnum) | |
27 let LABELS_OR_PREPROC = '^\s*\(\<\k\+\>:\s*$\|#.*\)' | |
28 let LABELS_OR_PREPROC_EXCEPT = '^\s*\<default\+\>:' | |
29 if this_line =~ LABELS_OR_PREPROC && this_line !~ LABELS_OR_PREPROC_EXCEPT | |
30 return 0 | |
31 endif | |
32 | |
33 " Find a non-blank line above the current line. | |
34 " Skip over labels and preprocessor directives. | |
35 let lnum = a:lnum | |
36 while lnum > 0 | |
37 let lnum = prevnonblank(lnum - 1) | |
38 let previous_line = getline(lnum) | |
39 if previous_line !~ LABELS_OR_PREPROC || previous_line =~ LABELS_OR_PREPROC_EXCEPT | |
40 break | |
41 endif | |
42 endwhile | |
43 | |
44 " Hit the start of the file, use zero indent. | |
45 if lnum == 0 | |
46 return 0 | |
47 endif | |
48 | |
49 let ind = indent(lnum) | |
50 | |
51 " Add | |
52 if previous_line =~ '^\s*\<\(function\|begin\|switch\|case\|default\|if.\{-}then\|else\|elseif\|while\|repeat\)\>' | |
53 let ind = ind + &sw | |
54 endif | |
55 | |
56 " Subtract | |
57 if this_line =~ '^\s*\<endswitch\>' | |
58 let ind = ind - 2 * &sw | |
59 elseif this_line =~ '^\s*\<\(begin\|end\|endif\|endwhile\|else\|elseif\|until\)\>' | |
60 let ind = ind - &sw | |
61 elseif this_line =~ '^\s*\<\(case\|default\)\>' | |
62 if previous_line !~ '^\s*\<switch\>' | |
63 let ind = ind - &sw | |
64 endif | |
65 endif | |
66 | |
67 return ind | |
68 endfun |