Mercurial > vim
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 |