home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / runtime / dos / indent / idlang.vim < prev    next >
Encoding:
Text File  |  2012-05-31  |  1.6 KB  |  63 lines

  1. " IDL (Interactive Data Language) indent file.
  2. " Language: IDL (ft=idlang)
  3. " Last change:    2012 May 18
  4. " Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
  5.  
  6. " Only load this indent file when no other was loaded.
  7. if exists("b:did_indent")
  8.    finish
  9. endif
  10. let b:did_indent = 1
  11.  
  12. setlocal indentkeys=o,O,0=endif,0=ENDIF,0=endelse,0=ENDELSE,0=endwhile,0=ENDWHILE,0=endfor,0=ENDFOR,0=endrep,0=ENDREP
  13.  
  14. setlocal indentexpr=GetIdlangIndent(v:lnum)
  15.  
  16. " Only define the function once.
  17. if exists("*GetIdlangIndent")
  18.    finish
  19. endif
  20.  
  21. function GetIdlangIndent(lnum)
  22.    " First non-empty line above the current line.
  23.    let pnum = prevnonblank(v:lnum-1)
  24.    " v:lnum is the first non-empty line -- zero indent.
  25.    if pnum == 0
  26.       return 0
  27.    endif
  28.    " Second non-empty line above the current line.
  29.    let pnum2 = prevnonblank(pnum-1)
  30.  
  31.    " Current indent.
  32.    let curind = indent(pnum)
  33.  
  34.    " Indenting of continued lines.
  35.    if getline(pnum) =~ '\$\s*\(;.*\)\=$'
  36.       if getline(pnum2) !~ '\$\s*\(;.*\)\=$'
  37.      let curind = curind+&sw
  38.       endif
  39.    else
  40.       if getline(pnum2) =~ '\$\s*\(;.*\)\=$'
  41.      let curind = curind-&sw
  42.       endif
  43.    endif
  44.  
  45.    " Indenting blocks of statements.
  46.    if getline(v:lnum) =~? '^\s*\(endif\|endelse\|endwhile\|endfor\|endrep\)\>'
  47.       if getline(pnum) =~? 'begin\>'
  48.       elseif indent(v:lnum) > curind-&sw
  49.      let curind = curind-&sw
  50.       else
  51.      return -1
  52.       endif
  53.    elseif getline(pnum) =~? 'begin\>'
  54.       if indent(v:lnum) < curind+&sw
  55.      let curind = curind+&sw
  56.       else
  57.      return -1
  58.       endif
  59.    endif
  60.    return curind
  61. endfunction
  62.  
  63.