mirror of
				https://github.com/vim/vim.git
				synced 2025-10-31 09:57:14 -04:00 
			
		
		
		
	
		
			
	
	
		
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
		
		
			
		
	
	
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
|   | " Vim indent file | ||
|  | " Language:		Device Tree | ||
|  | " Maintainer:		Roland Hieber, Pengutronix <rhi@pengutronix.de> | ||
|  | " | ||
|  | if exists("b:did_indent") | ||
|  |     finish | ||
|  | endif | ||
|  | let b:did_indent = 1 | ||
|  | 
 | ||
|  | setlocal autoindent | ||
|  | setlocal nosmartindent | ||
|  | setlocal indentkeys=o,O,0},0<>>,!<Ctrl-F> | ||
|  | setlocal indentexpr=GetDTSIndent() | ||
|  | setlocal nolisp | ||
|  | 
 | ||
|  | let b:undo_indent = 'setl autoindent< smartindent< indentkeys< indentexpr< lisp<' | ||
|  | 
 | ||
|  | function GetDTSIndent() | ||
|  |     let sw        = shiftwidth() | ||
|  |     let lnum      = v:lnum | ||
|  |     let line      = getline(lnum) | ||
|  |     let prevline  = getline(prevnonblank(lnum-1)) | ||
|  |     let prevind   = indent(prevnonblank(lnum-1)) | ||
|  | 
 | ||
|  |     if prevnonblank(lnum-1) < 1 | ||
|  |         return 0 | ||
|  |     endif | ||
|  | 
 | ||
|  |     " Don't indent header and preprocessor directives | ||
|  |     if line =~ '^\s*\(/dts-\|#\(include\|define\|undef\|warn\(ing\)\?\|error\|if\(n\?def\)\?\|else\|elif\|endif\)\)' | ||
|  |         return 0 | ||
|  | 
 | ||
|  |     " Don't indent /node and &label blocks | ||
|  |     elseif line =~ '^\s*[/&].\+{\s*$' | ||
|  |         return 0 | ||
|  | 
 | ||
|  |     " Indent to matching bracket or remove one shiftwidth if line begins with } or > | ||
|  |     elseif line =~ '^\s*[}>]' | ||
|  |         " set cursor to closing bracket on current line | ||
|  |         let col = matchend(line, '^\s*[>}]') | ||
|  |         call cursor(lnum, col) | ||
|  |          | ||
|  |         " determine bracket type, {} or <> | ||
|  |         let pair = strpart('{}<>', stridx('}>', line[col-1]) * 2, 2) | ||
|  | 
 | ||
|  |         " find matching bracket pair | ||
|  |         let pairline = searchpair(pair[0], '', pair[1], 'bW') | ||
|  | 
 | ||
|  |         if pairline > 0  | ||
|  |             return indent(pairline) | ||
|  |         else | ||
|  |             return prevind - sw | ||
|  |         endif | ||
|  | 
 | ||
|  |     " else, add one level of indent if line ends in { or < or = or , | ||
|  |     elseif prevline =~ '[{<=,]$' | ||
|  |         return prevind + sw | ||
|  | 
 | ||
|  |     else | ||
|  |         return prevind | ||
|  |     endif | ||
|  | 
 | ||
|  | endfunction |