summaryrefslogtreecommitdiffstats
path: root/indent/prolog.vim
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2017-09-27 20:43:42 +0200
committerAdam Stankiewicz <sheerun@sher.pl>2017-09-27 20:43:42 +0200
commit5b77877888162f4e415fe9a7b8c5e9fb5dfb6ee1 (patch)
tree965ae5128797f3d42d78d02692e62d24a4596e19 /indent/prolog.vim
parent8148255ef1c416f414c3a78405eff08fe149d16e (diff)
downloadvim-polyglot-5b77877888162f4e415fe9a7b8c5e9fb5dfb6ee1.tar.gz
vim-polyglot-5b77877888162f4e415fe9a7b8c5e9fb5dfb6ee1.zip
Add syntax files from upstream vim repository
Diffstat (limited to 'indent/prolog.vim')
-rw-r--r--indent/prolog.vim62
1 files changed, 62 insertions, 0 deletions
diff --git a/indent/prolog.vim b/indent/prolog.vim
new file mode 100644
index 00000000..8f66554e
--- /dev/null
+++ b/indent/prolog.vim
@@ -0,0 +1,62 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vim') == -1
+
+" 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 + shiftwidth()
+ " Check for end of clause on previous line
+ elseif pline =~ '\.\s*\(%.*\)\?$'
+ let ind = ind - shiftwidth()
+ endif
+ " Check for opening conditional on previous line
+ if pline =~ '^\s*\([(;]\|->\)'
+ let ind = ind + shiftwidth()
+ endif
+ " Check for closing an unclosed paren, or middle ; or ->
+ if line =~ '^\s*\([);]\|->\)'
+ let ind = ind - shiftwidth()
+ endif
+ return ind
+endfunction
+
+endif