diff options
| author | Adam Stankiewicz <sheerun@sher.pl> | 2020-09-16 15:50:39 +0200 | 
|---|---|---|
| committer | Adam Stankiewicz <sheerun@sher.pl> | 2020-09-16 15:50:39 +0200 | 
| commit | 17c2b630e1f0f0f02a24fcc664f0df91122e8e00 (patch) | |
| tree | 09a54c87c97be6d400291b79b89368fab37ce234 /indent | |
| parent | 271679272c7bb1a281c7404408a2414068abf91c (diff) | |
| download | vim-polyglot-17c2b630e1f0f0f02a24fcc664f0df91122e8e00.tar.gz vim-polyglot-17c2b630e1f0f0f02a24fcc664f0df91122e8e00.zip | |
Write heuristics for perl, closes #550v4.10.2
Diffstat (limited to '')
| -rw-r--r-- | indent/bzl.vim | 98 | ||||
| -rw-r--r-- | indent/prolog.vim | 71 | 
2 files changed, 169 insertions, 0 deletions
| diff --git a/indent/bzl.vim b/indent/bzl.vim new file mode 100644 index 00000000..adda8a85 --- /dev/null +++ b/indent/bzl.vim @@ -0,0 +1,98 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'bzl') == -1 + +" Vim indent file +" Language:	Bazel (http://bazel.io) +" Maintainer:	David Barnett (https://github.com/google/vim-ft-bzl) +" Last Change:	2017 Jun 13 + +if exists('b:did_indent') +  finish +endif + +" Load base python indent. +if !exists('*GetPythonIndent') +  runtime! indent/python.vim +endif + +let b:did_indent = 1 + +" Only enable bzl google indent if python google indent is enabled. +if !get(g:, 'no_google_python_indent') +  setlocal indentexpr=GetBzlIndent(v:lnum) +endif + +if exists('*GetBzlIndent') +  finish +endif + +let s:save_cpo = &cpo +set cpo-=C + +" Maximum number of lines to look backwards. +let s:maxoff = 50 + +"" +" Determine the correct indent level given an {lnum} in the current buffer. +function GetBzlIndent(lnum) abort +  let l:use_recursive_indent = !get(g:, 'no_google_python_recursive_indent') +  if l:use_recursive_indent +    " Backup and override indent setting variables. +    if exists('g:pyindent_nested_paren') +      let l:pyindent_nested_paren = g:pyindent_nested_paren +    endif +    if exists('g:pyindent_open_paren') +      let l:pyindent_open_paren = g:pyindent_open_paren +    endif +    let g:pyindent_nested_paren = 'shiftwidth() * 2' +    let g:pyindent_open_paren = 'shiftwidth() * 2' +  endif + +  let l:indent = -1 + +  " Indent inside parens. +  " Align with the open paren unless it is at the end of the line. +  " E.g. +  "   open_paren_not_at_EOL(100, +  "                         (200, +  "                          300), +  "                         400) +  "   open_paren_at_EOL( +  "       100, 200, 300, 400) +  call cursor(a:lnum, 1) +  let [l:par_line, l:par_col] = searchpairpos('(\|{\|\[', '', ')\|}\|\]', 'bW', +      \ "line('.') < " . (a:lnum - s:maxoff) . " ? dummy :" . +      \ " synIDattr(synID(line('.'), col('.'), 1), 'name')" . +      \ " =~ '\\(Comment\\|String\\)$'") +  if l:par_line > 0 +    call cursor(l:par_line, 1) +    if l:par_col != col('$') - 1 +      let l:indent = l:par_col +    endif +  endif + +  " Delegate the rest to the original function. +  if l:indent == -1 +    let l:indent = GetPythonIndent(a:lnum) +  endif + +  if l:use_recursive_indent +    " Restore global variables. +    if exists('l:pyindent_nested_paren') +      let g:pyindent_nested_paren = l:pyindent_nested_paren +    else +      unlet g:pyindent_nested_paren +    endif +    if exists('l:pyindent_open_paren') +      let g:pyindent_open_paren = l:pyindent_open_paren +    else +      unlet g:pyindent_open_paren +    endif +  endif + +  return l:indent +endfunction + +let &cpo = s:save_cpo +unlet s:save_cpo + +endif diff --git a/indent/prolog.vim b/indent/prolog.vim new file mode 100644 index 00000000..0426a473 --- /dev/null +++ b/indent/prolog.vim @@ -0,0 +1,71 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'prolog') == -1 + +"  vim: set sw=4 sts=4: +"  Maintainer	: Gergely Kontra <kgergely@mcl.hu> +"  Revised on	: 2002.02.18. 23:34:05 +"  Language	: Prolog +"  Last change by: Takuya Fujiwara, 2018 Sep 23 + +" 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*%' +	return ind +    endif +    " Previous line was the start of block comment -> +1 after '/*' comment +    if pline =~ '^\s*/\*' +	return ind + 1 +    endif +    " Previous line was the end of block comment -> -1 after '*/' comment +    if pline =~ '^\s*\*/' +	return ind - 1 +    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 | 
