forked from aniani/vim
		
	
		
			
	
	
		
			80 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
		
		
			
		
	
	
			80 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
|   | "   Vim indent file | ||
|  | "   Language:	    Objective-C | ||
|  | "   Maintainer:	    Kazunobu Kuriyama <kazunobu.kuriyama@nifty.com> | ||
|  | "   Last Change:    2004 May 16 | ||
|  | " | ||
|  | 
 | ||
|  | 
 | ||
|  | " Only load this indent file when no other was loaded. | ||
|  | if exists("b:did_indent") | ||
|  |     finish | ||
|  | endif | ||
|  | let b:did_indent = 1 | ||
|  | setlocal cindent | ||
|  | 
 | ||
|  | " Set the function to do the work. | ||
|  | setlocal indentexpr=GetObjCIndent() | ||
|  | 
 | ||
|  | " To make a colon (:) suggest an indentation other than a goto/swich label, | ||
|  | setlocal indentkeys-=: | ||
|  | setlocal indentkeys+=<:> | ||
|  | 
 | ||
|  | " Only define the function once. | ||
|  | if exists("*GetObjCIndent") | ||
|  |     finish | ||
|  | endif | ||
|  | 
 | ||
|  | function s:GetWidth(line, regexp) | ||
|  |     let end = matchend(a:line, a:regexp) | ||
|  |     let width = 0 | ||
|  |     let i = 0 | ||
|  |     while i < end | ||
|  | 	if a:line[i] != "\t" | ||
|  | 	    let width = width + 1 | ||
|  | 	else | ||
|  | 	    let width = width + &ts - (width % &ts) | ||
|  | 	endif | ||
|  | 	let i = i + 1 | ||
|  |     endwhile | ||
|  |     return width | ||
|  | endfunction | ||
|  | 
 | ||
|  | function s:LeadingWhiteSpace(line) | ||
|  |     let end = strlen(a:line) | ||
|  |     let width = 0 | ||
|  |     let i = 0 | ||
|  |     while i < end | ||
|  | 	let char = a:line[i] | ||
|  | 	if char != " " && char != "\t" | ||
|  | 	    break | ||
|  | 	endif | ||
|  | 	if char != "\t" | ||
|  | 	    let width = width + 1 | ||
|  | 	else | ||
|  | 	    let width = width + &ts - (width % &ts) | ||
|  | 	endif | ||
|  | 	let i = i + 1 | ||
|  |     endwhile | ||
|  |     return width | ||
|  | endfunction | ||
|  | 
 | ||
|  | 
 | ||
|  | function GetObjCIndent() | ||
|  |     let theIndent = cindent(v:lnum) | ||
|  | 
 | ||
|  |     let prev_line = getline(v:lnum - 1) | ||
|  |     let cur_line = getline(v:lnum) | ||
|  | 
 | ||
|  |     if prev_line !~# ":" || cur_line !~# ":" | ||
|  | 	return theIndent | ||
|  |     endif | ||
|  | 
 | ||
|  |     if prev_line !~# ";" | ||
|  | 	let prev_colon_pos = s:GetWidth(prev_line, ":") | ||
|  | 	let delta = s:GetWidth(cur_line, ":") - s:LeadingWhiteSpace(cur_line) | ||
|  | 	let theIndent = prev_colon_pos - delta | ||
|  |     endif | ||
|  | 
 | ||
|  |     return theIndent | ||
|  | endfunction |