1" PostScript indent file 2" Language: PostScript 3" Maintainer: Mike Williams <[email protected]> (Invalid email address) 4" Doug Kearns <[email protected]> 5" Last Change: 2nd July 2001 6" 7 8" Only load this indent file when no other was loaded. 9if exists("b:did_indent") 10 finish 11endif 12let b:did_indent = 1 13 14setlocal indentexpr=PostscrIndentGet(v:lnum) 15setlocal indentkeys+=0],0=>>,0=%%,0=end,0=restore,0=grestore indentkeys-=:,0#,e 16 17" Catch multiple instantiations 18if exists("*PostscrIndentGet") 19 finish 20endif 21 22function! PostscrIndentGet(lnum) 23 " Find a non-empty non-comment line above the current line. 24 " Note: ignores DSC comments as well! 25 let lnum = a:lnum - 1 26 while lnum != 0 27 let lnum = prevnonblank(lnum) 28 if getline(lnum) !~ '^\s*%.*$' 29 break 30 endif 31 let lnum = lnum - 1 32 endwhile 33 34 " Hit the start of the file, use user indent. 35 if lnum == 0 36 return -1 37 endif 38 39 " Start with the indent of the previous line 40 let ind = indent(lnum) 41 let pline = getline(lnum) 42 43 " Indent for dicts, arrays, and saves with possible trailing comment 44 if pline =~ '\(begin\|<<\|g\=save\|{\|[\)\s*\(%.*\)\=$' 45 let ind = ind + shiftwidth() 46 endif 47 48 " Remove indent for popped dicts, and restores. 49 if pline =~ '\(end\|g\=restore\)\s*$' 50 let ind = ind - shiftwidth() 51 52 " Else handle immediate dedents of dicts, restores, and arrays. 53 elseif getline(a:lnum) =~ '\(end\|>>\|g\=restore\|}\|]\)' 54 let ind = ind - shiftwidth() 55 56 " Else handle DSC comments - always start of line. 57 elseif getline(a:lnum) =~ '^\s*%%' 58 let ind = 0 59 endif 60 61 " For now catch excessive left indents if they occur. 62 if ind < 0 63 let ind = -1 64 endif 65 66 return ind 67endfunction 68 69" vim:sw=2 70