1" Vim indent file
2" Language:         YACC input file
3" Maintainer:       Nikolai Weibull <now@bitwi.se>
4" Latest Revision:  2006-12-20
5
6" Only load this indent file when no other was loaded.
7if exists("b:did_indent")
8  finish
9endif
10
11let b:did_indent = 1
12
13setlocal indentexpr=GetYaccIndent()
14setlocal indentkeys=!^F,o,O
15setlocal nosmartindent
16
17" Only define the function once.
18if exists("*GetYaccIndent")
19  finish
20endif
21
22function GetYaccIndent()
23  if v:lnum == 1
24    return 0
25  endif
26
27  let ind = indent(v:lnum - 1)
28  let line = getline(v:lnum - 1)
29
30  if line == ''
31    let ind = 0
32  elseif line =~ '^\w\+\s*:'
33    let ind = ind + matchend(line, '^\w\+\s*')
34  elseif line =~ '^\s*;'
35    let ind = 0
36  else
37    let ind = indent(v:lnum)
38  endif
39
40  return ind
41endfunction
42