codekingpro/portable-devtools
114k
1" Vim indent file2" Language: Device Tree3" Maintainer: Roland Hieber, Pengutronix <rhi@pengutronix.de>4"5if exists("b:did_indent")6 finish7endif8let b:did_indent = 19 10setlocal autoindent11setlocal nosmartindent12setlocal indentkeys=o,O,0},0<>>,!<Ctrl-F>13setlocal indentexpr=GetDTSIndent()14setlocal nolisp15 16let b:undo_indent = 'setl autoindent< smartindent< indentkeys< indentexpr< lisp<'17 18function GetDTSIndent()19 let sw = shiftwidth()20 let lnum = v:lnum21 let line = getline(lnum)22 let prevline = getline(prevnonblank(lnum-1))23 let prevind = indent(prevnonblank(lnum-1))24 25 if prevnonblank(lnum-1) < 126 return 027 endif28 29 " Don't indent header and preprocessor directives30 if line =~ '^\s*\(/dts-\|#\(include\|define\|undef\|warn\(ing\)\?\|error\|if\(n\?def\)\?\|else\|elif\|endif\)\)'31 return 032 33 " Don't indent /node and &label blocks34 elseif line =~ '^\s*[/&].\+{\s*$'35 return 036 37 " Indent to matching bracket or remove one shiftwidth if line begins with } or >38 elseif line =~ '^\s*[}>]'39 " set cursor to closing bracket on current line40 let col = matchend(line, '^\s*[>}]')41 call cursor(lnum, col)42 43 " determine bracket type, {} or <>44 let pair = strpart('{}<>', stridx('}>', line[col-1]) * 2, 2)45 46 " find matching bracket pair47 let pairline = searchpair(pair[0], '', pair[1], 'bW')48 49 if pairline > 0 50 return indent(pairline)51 else52 return prevind - sw53 endif54 55 " else, add one level of indent if line ends in { or < or = or ,56 elseif prevline =~ '[{<=,]$'57 return prevind + sw58 59 else60 return prevind61 endif62 63endfunction64 