neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

ishd.vim (1877B)


      1 " Description:	InstallShield indenter
      2 " Author:	Johannes Zellner <johannes@zellner.org>
      3 " Last Change:	Tue, 27 Apr 2004 14:54:59 CEST
      4 
      5 " Only load this indent file when no other was loaded.
      6 if exists("b:did_indent")
      7    finish
      8 endif
      9 let b:did_indent = 1
     10 
     11 setlocal autoindent
     12 setlocal indentexpr=GetIshdIndent(v:lnum)
     13 setlocal indentkeys&
     14 setlocal indentkeys+==else,=elseif,=endif,=end,=begin,<:>
     15 " setlocal indentkeys-=0#
     16 
     17 let b:undo_indent = "setl ai< indentexpr< indentkeys<"
     18 
     19 " Only define the function once.
     20 if exists("*GetIshdIndent")
     21    finish
     22 endif
     23 
     24 fun! GetIshdIndent(lnum)
     25    " labels and preprocessor get zero indent immediately
     26    let this_line = getline(a:lnum)
     27    let LABELS_OR_PREPROC = '^\s*\(\<\k\+\>:\s*$\|#.*\)'
     28    let LABELS_OR_PREPROC_EXCEPT = '^\s*\<default\+\>:'
     29    if this_line =~ LABELS_OR_PREPROC && this_line !~ LABELS_OR_PREPROC_EXCEPT
     30 return 0
     31    endif
     32 
     33    " Find a non-blank line above the current line.
     34    " Skip over labels and preprocessor directives.
     35    let lnum = a:lnum
     36    while lnum > 0
     37 let lnum = prevnonblank(lnum - 1)
     38 let previous_line = getline(lnum)
     39 if previous_line !~ LABELS_OR_PREPROC || previous_line =~ LABELS_OR_PREPROC_EXCEPT
     40     break
     41 endif
     42    endwhile
     43 
     44    " Hit the start of the file, use zero indent.
     45    if lnum == 0
     46 return 0
     47    endif
     48 
     49    let ind = indent(lnum)
     50 
     51    " Add
     52    if previous_line =~ '^\s*\<\(function\|begin\|switch\|case\|default\|if.\{-}then\|else\|elseif\|while\|repeat\)\>'
     53 let ind = ind + shiftwidth()
     54    endif
     55 
     56    " Subtract
     57    if this_line =~ '^\s*\<endswitch\>'
     58 let ind = ind - 2 * shiftwidth()
     59    elseif this_line =~ '^\s*\<\(begin\|end\|endif\|endwhile\|else\|elseif\|until\)\>'
     60 let ind = ind - shiftwidth()
     61    elseif this_line =~ '^\s*\<\(case\|default\)\>'
     62 if previous_line !~ '^\s*\<switch\>'
     63     let ind = ind - shiftwidth()
     64 endif
     65    endif
     66 
     67    return ind
     68 endfun