Mercurial > vim
annotate runtime/indent/cmake.vim @ 2448:628147a4b3b2 vim73
Fix: on MS-Windows the "open with..." menu starts Vim without a file.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Sat, 31 Jul 2010 20:53:54 +0200 |
parents | 6d3d35ff2c2b |
children | dd6c2497c997 |
rev | line source |
---|---|
836 | 1 " Vim indent file |
2249
6d3d35ff2c2b
Use full path in undofile(). Updated docs.
Bram Moolenaar <bram@vim.org>
parents:
2034
diff
changeset
|
2 " Program: CMake - Cross-Platform Makefile Generator |
6d3d35ff2c2b
Use full path in undofile(). Updated docs.
Bram Moolenaar <bram@vim.org>
parents:
2034
diff
changeset
|
3 " Module: $RCSfile: cmake-indent.vim,v $ |
836 | 4 " Language: CMake (ft=cmake) |
5 " Author: Andy Cedilnik <andy.cedilnik@kitware.com> | |
2249
6d3d35ff2c2b
Use full path in undofile(). Updated docs.
Bram Moolenaar <bram@vim.org>
parents:
2034
diff
changeset
|
6 " Maintainer: Karthik Krishnan <karthik.krishnan@kitware.com> |
6d3d35ff2c2b
Use full path in undofile(). Updated docs.
Bram Moolenaar <bram@vim.org>
parents:
2034
diff
changeset
|
7 " Last Change: $Date: 2008-01-16 16:53:53 $ |
6d3d35ff2c2b
Use full path in undofile(). Updated docs.
Bram Moolenaar <bram@vim.org>
parents:
2034
diff
changeset
|
8 " Version: $Revision: 1.9 $ |
836 | 9 " |
10 " Licence: The CMake license applies to this file. See | |
11 " http://www.cmake.org/HTML/Copyright.html | |
12 " This implies that distribution with Vim is allowed | |
13 | |
14 if exists("b:did_indent") | |
15 finish | |
16 endif | |
17 let b:did_indent = 1 | |
18 | |
19 setlocal indentexpr=CMakeGetIndent(v:lnum) | |
2249
6d3d35ff2c2b
Use full path in undofile(). Updated docs.
Bram Moolenaar <bram@vim.org>
parents:
2034
diff
changeset
|
20 setlocal indentkeys+==ENDIF(,ENDFOREACH(,ENDMACRO(,ELSE(,ELSEIF(,ENDWHILE( |
836 | 21 |
22 " Only define the function once. | |
23 if exists("*CMakeGetIndent") | |
24 finish | |
25 endif | |
26 | |
27 fun! CMakeGetIndent(lnum) | |
28 let this_line = getline(a:lnum) | |
29 | |
30 " Find a non-blank line above the current line. | |
31 let lnum = a:lnum | |
32 let lnum = prevnonblank(lnum - 1) | |
33 let previous_line = getline(lnum) | |
34 | |
35 " Hit the start of the file, use zero indent. | |
36 if lnum == 0 | |
37 return 0 | |
38 endif | |
39 | |
40 let ind = indent(lnum) | |
41 | |
42 let or = '\|' | |
43 " Regular expressions used by line indentation function. | |
44 let cmake_regex_comment = '#.*' | |
45 let cmake_regex_identifier = '[A-Za-z][A-Za-z0-9_]*' | |
46 let cmake_regex_quoted = '"\([^"\\]\|\\.\)*"' | |
47 let cmake_regex_arguments = '\(' . cmake_regex_quoted . | |
48 \ or . '\$(' . cmake_regex_identifier . ')' . | |
49 \ or . '[^()\\#"]' . or . '\\.' . '\)*' | |
50 | |
51 let cmake_indent_comment_line = '^\s*' . cmake_regex_comment | |
839 | 52 let cmake_indent_blank_regex = '^\s*$' |
836 | 53 let cmake_indent_open_regex = '^\s*' . cmake_regex_identifier . |
54 \ '\s*(' . cmake_regex_arguments . | |
55 \ '\(' . cmake_regex_comment . '\)\?$' | |
56 | |
57 let cmake_indent_close_regex = '^' . cmake_regex_arguments . | |
58 \ ')\s*' . | |
59 \ '\(' . cmake_regex_comment . '\)\?$' | |
60 | |
2249
6d3d35ff2c2b
Use full path in undofile(). Updated docs.
Bram Moolenaar <bram@vim.org>
parents:
2034
diff
changeset
|
61 let cmake_indent_begin_regex = '^\s*\(IF\|MACRO\|FOREACH\|ELSE\|ELSEIF\|WHILE\|FUNCTION\)\s*(' |
6d3d35ff2c2b
Use full path in undofile(). Updated docs.
Bram Moolenaar <bram@vim.org>
parents:
2034
diff
changeset
|
62 let cmake_indent_end_regex = '^\s*\(ENDIF\|ENDFOREACH\|ENDMACRO\|ELSE\|ELSEIF\|ENDWHILE\|ENDFUNCTION\)\s*(' |
836 | 63 |
64 " Add | |
65 if previous_line =~? cmake_indent_comment_line " Handle comments | |
66 let ind = ind | |
67 else | |
68 if previous_line =~? cmake_indent_begin_regex | |
69 let ind = ind + &sw | |
70 endif | |
71 if previous_line =~? cmake_indent_open_regex | |
72 let ind = ind + &sw | |
73 endif | |
74 endif | |
75 | |
76 " Subtract | |
77 if this_line =~? cmake_indent_end_regex | |
78 let ind = ind - &sw | |
79 endif | |
80 if previous_line =~? cmake_indent_close_regex | |
81 let ind = ind - &sw | |
82 endif | |
83 | |
84 return ind | |
85 endfun |