summaryrefslogtreecommitdiff
path: root/runtime/indent/prolog.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/indent/prolog.vim')
-rw-r--r--runtime/indent/prolog.vim58
1 files changed, 58 insertions, 0 deletions
diff --git a/runtime/indent/prolog.vim b/runtime/indent/prolog.vim
new file mode 100644
index 000000000..afe448e8f
--- /dev/null
+++ b/runtime/indent/prolog.vim
@@ -0,0 +1,58 @@
+" vim: set sw=4 sts=4:
+" Maintainer : Gergely Kontra <kgergely@mcl.hu>
+" Revised on : 2002.02.18. 23:34:05
+" Language : Prolog
+
+" TODO:
+" checking with respect to syntax highlighting
+" ignoring multiline comments
+" detecting multiline strings
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+
+let b:did_indent = 1
+
+setlocal indentexpr=GetPrologIndent()
+setlocal indentkeys-=:,0#
+setlocal indentkeys+=0%,-,0;,>,0)
+
+" Only define the function once.
+"if exists("*GetPrologIndent")
+" finish
+"endif
+
+function! GetPrologIndent()
+ " Find a non-blank line above the current line.
+ let pnum = prevnonblank(v:lnum - 1)
+ " Hit the start of the file, use zero indent.
+ if pnum == 0
+ return 0
+ endif
+ let line = getline(v:lnum)
+ let pline = getline(pnum)
+
+ let ind = indent(pnum)
+ " Previous line was comment -> use previous line's indent
+ if pline =~ '^\s*%'
+ retu ind
+ endif
+ " Check for clause head on previous line
+ if pline =~ ':-\s*\(%.*\)\?$'
+ let ind = ind + &sw
+ " Check for end of clause on previous line
+ elseif pline =~ '\.\s*\(%.*\)\?$'
+ let ind = ind - &sw
+ endif
+ " Check for opening conditional on previous line
+ if pline =~ '^\s*\([(;]\|->\)'
+ let ind = ind + &sw
+ endif
+ " Check for closing an unclosed paren, or middle ; or ->
+ if line =~ '^\s*\([);]\|->\)'
+ let ind = ind - &sw
+ endif
+ return ind
+endfunction