blob: 253ccc53711c624ff08e7277e8374ba70ae85276 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim indent file
Bram Moolenaarce001a32022-04-27 15:25:03 +01002" Language: YACC input file
3" Maintainer: Doug Kearns <dougkearns@gmail.com>
4" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
5" Last Change: 2022 April 25
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
7" Only load this indent file when no other was loaded.
8if exists("b:did_indent")
9 finish
10endif
11
12let b:did_indent = 1
13
14setlocal indentexpr=GetYaccIndent()
15setlocal indentkeys=!^F,o,O
Bram Moolenaar335437b2007-05-10 18:32:52 +000016setlocal nosmartindent
Bram Moolenaar071d4272004-06-13 20:20:40 +000017
Bram Moolenaarce001a32022-04-27 15:25:03 +010018let b:undo_indent = "setl inde< indk< si<"
19
Bram Moolenaar071d4272004-06-13 20:20:40 +000020" Only define the function once.
21if exists("*GetYaccIndent")
22 finish
23endif
24
25function GetYaccIndent()
26 if v:lnum == 1
27 return 0
28 endif
29
30 let ind = indent(v:lnum - 1)
31 let line = getline(v:lnum - 1)
32
33 if line == ''
34 let ind = 0
35 elseif line =~ '^\w\+\s*:'
36 let ind = ind + matchend(line, '^\w\+\s*')
37 elseif line =~ '^\s*;'
38 let ind = 0
39 else
40 let ind = indent(v:lnum)
41 endif
42
43 return ind
44endfunction