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 / objc.vim < prev    next >
Encoding:
Text File  |  2010-08-15  |  1.7 KB  |  80 lines

  1. "   Vim indent file
  2. "   Language:        Objective-C
  3. "   Maintainer:        Kazunobu Kuriyama <kazunobu.kuriyama@nifty.com>
  4. "   Last Change:    2004 May 16
  5. "
  6.  
  7.  
  8. " Only load this indent file when no other was loaded.
  9. if exists("b:did_indent")
  10.     finish
  11. endif
  12. let b:did_indent = 1
  13. setlocal cindent
  14.  
  15. " Set the function to do the work.
  16. setlocal indentexpr=GetObjCIndent()
  17.  
  18. " To make a colon (:) suggest an indentation other than a goto/swich label,
  19. setlocal indentkeys-=:
  20. setlocal indentkeys+=<:>
  21.  
  22. " Only define the function once.
  23. if exists("*GetObjCIndent")
  24.     finish
  25. endif
  26.  
  27. function s:GetWidth(line, regexp)
  28.     let end = matchend(a:line, a:regexp)
  29.     let width = 0
  30.     let i = 0
  31.     while i < end
  32.     if a:line[i] != "\t"
  33.         let width = width + 1
  34.     else
  35.         let width = width + &ts - (width % &ts)
  36.     endif
  37.     let i = i + 1
  38.     endwhile
  39.     return width
  40. endfunction
  41.  
  42. function s:LeadingWhiteSpace(line)
  43.     let end = strlen(a:line)
  44.     let width = 0
  45.     let i = 0
  46.     while i < end
  47.     let char = a:line[i]
  48.     if char != " " && char != "\t"
  49.         break
  50.     endif
  51.     if char != "\t"
  52.         let width = width + 1
  53.     else
  54.         let width = width + &ts - (width % &ts)
  55.     endif
  56.     let i = i + 1
  57.     endwhile
  58.     return width
  59. endfunction
  60.  
  61.  
  62. function GetObjCIndent()
  63.     let theIndent = cindent(v:lnum)
  64.  
  65.     let prev_line = getline(v:lnum - 1)
  66.     let cur_line = getline(v:lnum)
  67.  
  68.     if prev_line !~# ":" || cur_line !~# ":"
  69.     return theIndent
  70.     endif
  71.  
  72.     if prev_line !~# ";"
  73.     let prev_colon_pos = s:GetWidth(prev_line, ":")
  74.     let delta = s:GetWidth(cur_line, ":") - s:LeadingWhiteSpace(cur_line)
  75.     let theIndent = prev_colon_pos - delta
  76.     endif
  77.  
  78.     return theIndent
  79. endfunction
  80.