1e37d50a5SBram Moolenaar" Vim indent file
2e37d50a5SBram Moolenaar" Language:		FrameScript
3*6e649224SBram Moolenaar" Maintainer:		Doug Kearns <[email protected]>
4214641f7SBram Moolenaar" Previous Maintainer:	Nikolai Weibull <[email protected]>
5*6e649224SBram Moolenaar" Last Change:		24 Sep 2021
6e37d50a5SBram Moolenaar
7e37d50a5SBram Moolenaarif exists("b:did_indent")
8e37d50a5SBram Moolenaar  finish
9e37d50a5SBram Moolenaarendif
10e37d50a5SBram Moolenaarlet b:did_indent = 1
11e37d50a5SBram Moolenaar
12e37d50a5SBram Moolenaarsetlocal indentexpr=GetFrameScriptIndent()
13e37d50a5SBram Moolenaarsetlocal indentkeys=!^F,o,O,0=~Else,0=~EndIf,0=~EndLoop,0=~EndSub
14e37d50a5SBram Moolenaarsetlocal nosmartindent
15e37d50a5SBram Moolenaar
16*6e649224SBram Moolenaarlet b:undo_indent = "setl inde< indk< si<"
17*6e649224SBram Moolenaar
18e37d50a5SBram Moolenaarif exists("*GetFrameScriptIndent")
19e37d50a5SBram Moolenaar  finish
20e37d50a5SBram Moolenaarendif
21e37d50a5SBram Moolenaar
22e37d50a5SBram Moolenaarfunction GetFrameScriptIndent()
23e37d50a5SBram Moolenaar  let lnum = prevnonblank(v:lnum - 1)
24e37d50a5SBram Moolenaar
25e37d50a5SBram Moolenaar  if lnum == 0
26e37d50a5SBram Moolenaar    return 0
27e37d50a5SBram Moolenaar  endif
28e37d50a5SBram Moolenaar
29e37d50a5SBram Moolenaar  if getline(v:lnum) =~ '^\s*\*'
30e37d50a5SBram Moolenaar    return cindent(v:lnum)
31e37d50a5SBram Moolenaar  endif
32e37d50a5SBram Moolenaar
33e37d50a5SBram Moolenaar  let ind = indent(lnum)
34e37d50a5SBram Moolenaar
35e37d50a5SBram Moolenaar  if getline(lnum) =~? '^\s*\%(If\|Loop\|Sub\)'
36036986f1SBram Moolenaar    let ind = ind + shiftwidth()
37e37d50a5SBram Moolenaar  endif
38e37d50a5SBram Moolenaar
39e37d50a5SBram Moolenaar  if getline(v:lnum) =~? '^\s*\%(Else\|End\%(If\|Loop\|Sub\)\)'
40036986f1SBram Moolenaar    let ind = ind - shiftwidth()
41e37d50a5SBram Moolenaar  endif
42e37d50a5SBram Moolenaar
43e37d50a5SBram Moolenaar  return ind
44e37d50a5SBram Moolenaarendfunction
45