diff .vim/indent/prolog.vim @ 3:19d1235ce229

More stigg.
author samer
date Sun, 18 Jan 2015 18:35:47 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.vim/indent/prolog.vim	Sun Jan 18 18:35:47 2015 +0000
@@ -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