comparison runtime/indent/cmake.vim @ 836:5a7843c57316 v7.0e02

updated for version 7.0e02
author vimboss
date Tue, 18 Apr 2006 21:55:01 +0000
parents
children 1f3b1021f002
comparison
equal deleted inserted replaced
835:8bebcabccc2c 836:5a7843c57316
1 " =============================================================================
2 "
3 " Program: CMake - Cross-Platform Makefile Generator
4 " Module: $RCSfile$
5 " Language: VIM
6 " Date: $Date$
7 " Version: $Revision$
8 "
9 " =============================================================================
10
11 " Vim indent file
12 " Language: CMake (ft=cmake)
13 " Author: Andy Cedilnik <andy.cedilnik@kitware.com>
14 " Maintainer: Andy Cedilnik <andy.cedilnik@kitware.com>
15 " Last Change: $Date$
16 " Version: $Revision$
17 "
18 " Licence: The CMake license applies to this file. See
19 " http://www.cmake.org/HTML/Copyright.html
20 " This implies that distribution with Vim is allowed
21
22 if exists("b:did_indent")
23 finish
24 endif
25 let b:did_indent = 1
26
27 setlocal indentexpr=CMakeGetIndent(v:lnum)
28
29 " Only define the function once.
30 if exists("*CMakeGetIndent")
31 finish
32 endif
33
34 fun! CMakeGetIndent(lnum)
35 let this_line = getline(a:lnum)
36
37 " Find a non-blank line above the current line.
38 let lnum = a:lnum
39 let lnum = prevnonblank(lnum - 1)
40 let previous_line = getline(lnum)
41
42 " Hit the start of the file, use zero indent.
43 if lnum == 0
44 return 0
45 endif
46
47 let ind = indent(lnum)
48
49 let or = '\|'
50 " Regular expressions used by line indentation function.
51 let cmake_regex_comment = '#.*'
52 let cmake_regex_identifier = '[A-Za-z][A-Za-z0-9_]*'
53 let cmake_regex_quoted = '"\([^"\\]\|\\.\)*"'
54 let cmake_regex_arguments = '\(' . cmake_regex_quoted .
55 \ or . '\$(' . cmake_regex_identifier . ')' .
56 \ or . '[^()\\#"]' . or . '\\.' . '\)*'
57
58 let cmake_indent_comment_line = '^\s*' . cmake_regex_comment
59 let cmake_indent_blank_regex = '^\s*$')
60 let cmake_indent_open_regex = '^\s*' . cmake_regex_identifier .
61 \ '\s*(' . cmake_regex_arguments .
62 \ '\(' . cmake_regex_comment . '\)\?$'
63
64 let cmake_indent_close_regex = '^' . cmake_regex_arguments .
65 \ ')\s*' .
66 \ '\(' . cmake_regex_comment . '\)\?$'
67
68 let cmake_indent_begin_regex = '^\s*\(IF\|MACRO\|FOREACH\|ELSE\)\s*('
69 let cmake_indent_end_regex = '^\s*\(ENDIF\|ENDFOREACH\|ENDMACRO\|ELSE\)\s*('
70
71 " Add
72 if previous_line =~? cmake_indent_comment_line " Handle comments
73 let ind = ind
74 else
75 if previous_line =~? cmake_indent_begin_regex
76 let ind = ind + &sw
77 endif
78 if previous_line =~? cmake_indent_open_regex
79 let ind = ind + &sw
80 endif
81 endif
82
83 " Subtract
84 if this_line =~? cmake_indent_end_regex
85 let ind = ind - &sw
86 endif
87 if previous_line =~? cmake_indent_close_regex
88 let ind = ind - &sw
89 endif
90
91 return ind
92 endfun