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 / unix / vim-6.2.tar.bz2 / vim-6.2.tar / vim62 / runtime / indent / dylan.vim < prev    next >
Encoding:
Text File  |  2003-02-07  |  2.6 KB  |  91 lines

  1. " Vim indent file
  2. " Language:    Dylan
  3. " Version:    0.01
  4. " Last Change:    2003 Feb 04
  5. " Maintainer:    Brent A. Fulgham <bfulgham@debian.org>
  6.  
  7. " Only load this indent file when no other was loaded.
  8. if exists("b:did_indent")
  9.   finish
  10. endif
  11. let b:did_indent = 1
  12.  
  13. setlocal indentkeys+==~begin,=~block,=~case,=~cleanup,=~define,=~end,=~else,=~elseif,=~exception,=~for,=~finally,=~if,=~otherwise,=~select,=~unless,=~while
  14.  
  15. " Define the appropriate indent function but only once
  16. setlocal indentexpr=DylanGetIndent()
  17. if exists("*DylanGetIndent")
  18.   finish
  19. endif
  20.  
  21. function DylanGetIndent()
  22.   " Get the line to be indented
  23.   let cline = getline(v:lnum)
  24.  
  25.   " Don't reindent comments on first column
  26.   if cline =~ '^/\[/\*]'
  27.     return 0
  28.   endif
  29.  
  30.   "Find the previous non-blank line
  31.   let lnum = prevnonblank(v:lnum - 1)
  32.   "Use zero indent at the top of the file
  33.   if lnum == 0
  34.     return 0
  35.   endif
  36.  
  37.   let prevline=getline(lnum)
  38.   let ind = indent(lnum)
  39.   let chg = 0
  40.  
  41.   " If previous line was a comment, use its indent
  42.   if prevline =~ '^\s*//'
  43.     return ind
  44.   endif
  45.  
  46.   " If previous line was a 'define', indent
  47.   if prevline =~? '\(^\s*\(begin\|block\|case\|define\|else\|elseif\|for\|finally\|if\|select\|unless\|while\)\|\s*\S*\s*=>$\)'
  48.     let chg = &sw
  49.   " local methods indent the shift-width, plus 6 for the 'local'
  50.   elseif prevline =~? '^\s*local'
  51.     let chg = &sw + 6
  52.   " If previous line was a let with no closing semicolon, indent
  53.   elseif prevline =~? '^\s*let.*[^;]\s*$'
  54.     let chg = &sw
  55.   " If previous line opened a parenthesis, and did not close it, indent
  56.   elseif prevline =~ '^.*(\s*[^)]*\((.*)\)*[^)]*$'
  57.     return = match( prevline, '(.*\((.*)\|[^)]\)*.*$') + 1
  58.   "elseif prevline =~ '^.*(\s*[^)]*\((.*)\)*[^)]*$'
  59.   elseif prevline =~ '^[^(]*)\s*$'
  60.     " This line closes a parenthesis.  Find opening
  61.     let curr_line = prevnonblank(lnum - 1)
  62.     while curr_line >= 0
  63.       let str = getline(curr_line)
  64.       if str !~ '^.*(\s*[^)]*\((.*)\)*[^)]*$'
  65.     let curr_line = prevnonblank(curr_line - 1)
  66.       else
  67.     break
  68.       endif
  69.     endwhile
  70.     if curr_line < 0
  71.       return -1
  72.     endif
  73.     let ind = indent(curr_line)
  74.     " Although we found the closing parenthesis, make sure this
  75.     " line doesn't start with an indentable command:
  76.     let curr_str = getline(curr_line)
  77.     if curr_str =~? '^\s*\(begin\|block\|case\|define\|else\|elseif\|for\|finally\|if\|select\|unless\|while\)'
  78.       let chg = &sw
  79.     endif
  80.   endif
  81.  
  82.   " If a line starts with end, un-indent (even if we just indented!)
  83.   if cline =~? '^\s*\(cleanup\|end\|else\|elseif\|exception\|finally\|otherwise\)'
  84.     let chg = chg - &sw
  85.   endif
  86.  
  87.   return ind + chg
  88. endfunction
  89.  
  90. " vim:sw=2 tw=130
  91.