annotate runtime/indent/mma.vim @ 48:67300faee616 v7-3-618

v7-3-618
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 01 Aug 2012 18:08:28 +0900
parents 76efa0be13f1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
1 " Vim indent file
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
2 " Language: Mathematica
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
3 " Author: steve layland <layland@wolfram.com>
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
4 " Last Change: Sat May 10 18:56:22 CDT 2005
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
5 " Source: http://vim.sourceforge.net/scripts/script.php?script_id=1274
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
6 " http://members.wolfram.com/layland/vim/indent/mma.vim
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
7 "
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
8 " NOTE:
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
9 " Empty .m files will automatically be presumed to be Matlab files
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
10 " unless you have the following in your .vimrc:
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
11 "
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
12 " let filetype_m="mma"
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
13 "
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
14 " Credits:
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
15 " o steve hacked this out of a random indent file in the Vim 6.1
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
16 " distribution that he no longer remembers...sh.vim? Thanks!
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
17
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
18 " Only load this indent file when no other was loaded.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
19 if exists("b:did_indent")
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
20 finish
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
21 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
22 let b:did_indent = 1
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
23
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
24 setlocal indentexpr=GetMmaIndent()
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
25 setlocal indentkeys+=0[,0],0(,0)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
26 setlocal nosi "turn off smart indent so we don't over analyze } blocks
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
27
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
28 if exists("*GetMmaIndent")
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
29 finish
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
30 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
31
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
32 function GetMmaIndent()
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
33
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
34 " Hit the start of the file, use zero indent.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
35 if v:lnum == 0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
36 return 0
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
37 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
38
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
39 " Find a non-blank line above the current line.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
40 let lnum = prevnonblank(v:lnum - 1)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
41
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
42 " use indenting as a base
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
43 let ind = indent(v:lnum)
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
44 let lnum = v:lnum
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
45
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
46 " if previous line has an unmatched bracket, or ( indent.
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
47 " doesn't do multiple parens/blocks/etc...
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
48
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
49 " also, indent only if this line if this line isn't starting a new
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
50 " block... TODO - fix this with indentkeys?
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
51 if getline(v:lnum-1) =~ '\\\@<!\%(\[[^\]]*\|([^)]*\|{[^}]*\)$' && getline(v:lnum) !~ '\s\+[\[({]'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
52 let ind = ind+&sw
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
53 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
54
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
55 " if this line had unmatched closing block,
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
56 " indent to the matching opening block
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
57 if getline(v:lnum) =~ '[^[]*]\s*$'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
58 " move to the closing bracket
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
59 call search(']','bW')
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
60 " and find it's partner's indent
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
61 let ind = indent(searchpair('\[','',']','bWn'))
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
62 " same for ( blocks
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
63 elseif getline(v:lnum) =~ '[^(]*)$'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
64 call search(')','bW')
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
65 let ind = indent(searchpair('(','',')','bWn'))
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
66
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
67 " and finally, close { blocks if si ain't already set
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
68 elseif getline(v:lnum) =~ '[^{]*}'
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
69 call search('}','bW')
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
70 let ind = indent(searchpair('{','','}','bWn'))
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
71 endif
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
72
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
73 return ind
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
74 endfunction
76efa0be13f1 Initial revision
atsuki
parents:
diff changeset
75