| 
									
										
										
										
											2023-08-20 19:08:28 +02:00
										 |  |  | " Vim indent file | 
					
						
							|  |  |  | " Language:     QML | 
					
						
							|  |  |  | " Maintainer:   Chase Knowlden <haroldknowlden@gmail.com> | 
					
						
							| 
									
										
										
										
											2024-01-24 06:33:32 +11:00
										 |  |  | " Last Change:  2024 Jan 24 by Vim Project | 
					
						
							| 
									
										
										
										
											2023-08-20 19:08:28 +02:00
										 |  |  | " | 
					
						
							|  |  |  | " Improved JavaScript indent script. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Indent script in place for this already? | 
					
						
							|  |  |  | if exists("b:did_indent") | 
					
						
							|  |  |  |   finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | let b:did_indent = 1 | 
					
						
							|  |  |  | let b:undo_indent = "setlocal indentexpr< indentkeys<" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | setlocal indentexpr=s:GetQmlIndent() | 
					
						
							|  |  |  | setlocal indentkeys=0{,0},0),0],:,!^F,o,O,e,*<Return>,=*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Only define functions once per session | 
					
						
							|  |  |  | if exists("*s:GetQmlIndent") | 
					
						
							|  |  |  |   finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Clean up a line of code by removing trailing '//' and '/* */' comments, and trimming | 
					
						
							|  |  |  | " whitespace | 
					
						
							|  |  |  | function! s:Trim(line) | 
					
						
							|  |  |  |   return substitute(substitute(substitute(a:line, '// .*', '', ''), '/\* .* \*/', '', ''), '^\s*\|\s*$', '', 'g') | 
					
						
							|  |  |  | endfunction | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function! s:GetQmlIndent() | 
					
						
							|  |  |  |   let num = v:lnum | 
					
						
							|  |  |  |   let line = s:Trim(getline(num)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   let pnum = prevnonblank(num - 1) | 
					
						
							|  |  |  |   if pnum == 0 | 
					
						
							|  |  |  |     return 0 | 
					
						
							|  |  |  |   endif | 
					
						
							|  |  |  |   let pline = s:Trim(getline(pnum)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   let ind = indent(pnum) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   " bracket/brace/paren blocks | 
					
						
							|  |  |  |   if pline =~ '[{[(]$' | 
					
						
							| 
									
										
										
										
											2024-01-24 06:33:32 +11:00
										 |  |  |     let ind += shiftwidth() | 
					
						
							| 
									
										
										
										
											2023-08-20 19:08:28 +02:00
										 |  |  |   endif | 
					
						
							|  |  |  |   if line =~ '^[}\])]' | 
					
						
							| 
									
										
										
										
											2024-01-24 06:33:32 +11:00
										 |  |  |     let ind -= shiftwidth() | 
					
						
							| 
									
										
										
										
											2023-08-20 19:08:28 +02:00
										 |  |  |   endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   " '/*' comments | 
					
						
							|  |  |  |   if pline =~ '^/\*.*\*/' | 
					
						
							|  |  |  |     " no indent for single-line form | 
					
						
							|  |  |  |   elseif pline =~ '^/\*' | 
					
						
							|  |  |  |     let ind += 1 | 
					
						
							|  |  |  |   elseif pline =~ '^\*/' | 
					
						
							|  |  |  |     let ind -= 1 | 
					
						
							|  |  |  |   endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return ind | 
					
						
							|  |  |  | endfunction |