| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " Vim indent file | 
					
						
							| 
									
										
										
										
											2022-04-27 15:25:03 +01:00
										 |  |  | " Language:		YACC input file | 
					
						
							|  |  |  | " Maintainer:		Doug Kearns <dougkearns@gmail.com> | 
					
						
							|  |  |  | " Previous Maintainer:	Nikolai Weibull <now@bitwi.se> | 
					
						
							|  |  |  | " Last Change:		2022 April 25 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | " Only load this indent file when no other was loaded. | 
					
						
							|  |  |  | if exists("b:did_indent") | 
					
						
							|  |  |  |   finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let b:did_indent = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | setlocal indentexpr=GetYaccIndent() | 
					
						
							|  |  |  | setlocal indentkeys=!^F,o,O | 
					
						
							| 
									
										
										
										
											2007-05-10 18:32:52 +00:00
										 |  |  | setlocal nosmartindent | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-27 15:25:03 +01:00
										 |  |  | let b:undo_indent = "setl inde< indk< si<" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " Only define the function once. | 
					
						
							|  |  |  | if exists("*GetYaccIndent") | 
					
						
							|  |  |  |   finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function GetYaccIndent() | 
					
						
							|  |  |  |   if v:lnum == 1 | 
					
						
							|  |  |  |     return 0 | 
					
						
							|  |  |  |   endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   let ind = indent(v:lnum - 1) | 
					
						
							|  |  |  |   let line = getline(v:lnum - 1) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if line == '' | 
					
						
							|  |  |  |     let ind = 0 | 
					
						
							|  |  |  |   elseif line =~ '^\w\+\s*:' | 
					
						
							|  |  |  |     let ind = ind + matchend(line, '^\w\+\s*') | 
					
						
							|  |  |  |   elseif line =~ '^\s*;' | 
					
						
							|  |  |  |     let ind = 0 | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     let ind = indent(v:lnum) | 
					
						
							|  |  |  |   endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return ind | 
					
						
							|  |  |  | endfunction |