Mercurial > vim
comparison runtime/indent/logtalk.vim @ 1668:0b796e045c42 v7.2b.000
updated for version 7.2b-000
author | vimboss |
---|---|
date | Sun, 13 Jul 2008 17:41:49 +0000 |
parents | |
children | 63b0b7b79b25 |
comparison
equal
deleted
inserted
replaced
1667:131dbd3d2a4b | 1668:0b796e045c42 |
---|---|
1 " Maintainer: Paulo Moura <pmoura@logtalk.org> | |
2 " Revised on: 2008.06.02 | |
3 " Language: Logtalk | |
4 | |
5 " This Logtalk indent file is a modified version of the Prolog | |
6 " indent file written by Gergely Kontra | |
7 | |
8 " Only load this indent file when no other was loaded. | |
9 if exists("b:did_indent") | |
10 finish | |
11 endif | |
12 | |
13 let b:did_indent = 1 | |
14 | |
15 setlocal indentexpr=GetLogtalkIndent() | |
16 setlocal indentkeys-=:,0# | |
17 setlocal indentkeys+=0%,-,0;,>,0) | |
18 | |
19 " Only define the function once. | |
20 if exists("*GetLogtalkIndent") | |
21 finish | |
22 endif | |
23 | |
24 function! GetLogtalkIndent() | |
25 " Find a non-blank line above the current line. | |
26 let pnum = prevnonblank(v:lnum - 1) | |
27 " Hit the start of the file, use zero indent. | |
28 if pnum == 0 | |
29 return 0 | |
30 endif | |
31 let line = getline(v:lnum) | |
32 let pline = getline(pnum) | |
33 | |
34 let ind = indent(pnum) | |
35 " Previous line was comment -> use previous line's indent | |
36 if pline =~ '^\s*%' | |
37 retu ind | |
38 endif | |
39 " Check for entity opening directive on previous line | |
40 if pline =~ '^\s*:-\s\(object\|protocol\|category\)\ze(.*,$' | |
41 let ind = ind + &sw | |
42 " Check for clause head on previous line | |
43 elseif pline =~ ':-\s*\(%.*\)\?$' | |
44 let ind = ind + &sw | |
45 " Check for entity closing directive on previous line | |
46 elseif pline =~ '^\s*:-\send_\(object\|protocol\|category\)\.\(%.*\)\?$' | |
47 let ind = ind - &sw | |
48 " Check for end of clause on previous line | |
49 elseif pline =~ '\.\s*\(%.*\)\?$' | |
50 let ind = ind - &sw | |
51 endif | |
52 " Check for opening conditional on previous line | |
53 if pline =~ '^\s*\([(;]\|->\)' && pline !~ '\.\s*\(%.*\)\?$' && pline !~ '^.*\([)][,]\s*\(%.*\)\?$\)' | |
54 let ind = ind + &sw | |
55 endif | |
56 " Check for closing an unclosed paren, or middle ; or -> | |
57 if line =~ '^\s*\([);]\|->\)' | |
58 let ind = ind - &sw | |
59 endif | |
60 return ind | |
61 endfunction |