xref: /vim-8.2.3635/runtime/indent/postscr.vim (revision 6e649224)
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