| 
									
										
										
										
											2012-01-10 14:55:01 +01:00
										 |  |  | " ninja build file syntax. | 
					
						
							|  |  |  | " Language: ninja build file as described at | 
					
						
							| 
									
										
										
										
											2018-04-06 11:14:11 +02:00
										 |  |  | "           http://ninja-build.org/manual.html | 
					
						
							|  |  |  | " Version: 1.5 | 
					
						
							|  |  |  | " Last Change: 2018/04/05 | 
					
						
							| 
									
										
										
										
											2012-01-10 14:55:01 +01:00
										 |  |  | " Maintainer: Nicolas Weber <nicolasweber@gmx.de> | 
					
						
							| 
									
										
										
										
											2018-04-06 11:14:11 +02:00
										 |  |  | " Version 1.5 of this script is in the upstream vim repository and will be | 
					
						
							| 
									
										
										
										
											2013-04-24 18:51:19 +02:00
										 |  |  | " included in the next vim release. If you change this, please send your change | 
					
						
							|  |  |  | " upstream. | 
					
						
							| 
									
										
										
										
											2012-01-10 14:55:01 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | " ninja lexer and parser are at | 
					
						
							| 
									
										
										
										
											2018-04-06 11:14:11 +02:00
										 |  |  | " https://github.com/ninja-build/ninja/blob/master/src/lexer.in.cc | 
					
						
							|  |  |  | " https://github.com/ninja-build/ninja/blob/master/src/manifest_parser.cc | 
					
						
							| 
									
										
										
										
											2012-01-10 14:55:01 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | if exists("b:current_syntax") | 
					
						
							|  |  |  |   finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-24 18:51:19 +02:00
										 |  |  | let s:cpo_save = &cpo | 
					
						
							|  |  |  | set cpo&vim | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-10 14:55:01 +01:00
										 |  |  | syn case match | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-06 11:14:11 +02:00
										 |  |  | " Comments are only matched when the # is at the beginning of the line (with | 
					
						
							|  |  |  | " optional whitespace), as long as the prior line didn't end with a $ | 
					
						
							|  |  |  | " continuation. | 
					
						
							|  |  |  | syn match ninjaComment /\(\$\n\)\@<!\_^\s*#.*$/  contains=@Spell | 
					
						
							| 
									
										
										
										
											2012-05-18 13:46:39 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-10 14:55:01 +01:00
										 |  |  | " Toplevel statements are the ones listed here and | 
					
						
							|  |  |  | " toplevel variable assignments (ident '=' value). | 
					
						
							| 
									
										
										
										
											2013-04-12 15:09:51 +02:00
										 |  |  | " lexer.in.cc, ReadToken() and manifest_parser.cc, Parse() | 
					
						
							| 
									
										
										
										
											2012-01-10 14:55:01 +01:00
										 |  |  | syn match ninjaKeyword "^build\>" | 
					
						
							|  |  |  | syn match ninjaKeyword "^rule\>" | 
					
						
							| 
									
										
										
										
											2013-04-12 15:09:51 +02:00
										 |  |  | syn match ninjaKeyword "^pool\>" | 
					
						
							| 
									
										
										
										
											2012-01-10 14:55:01 +01:00
										 |  |  | syn match ninjaKeyword "^default\>" | 
					
						
							|  |  |  | syn match ninjaKeyword "^include\>" | 
					
						
							|  |  |  | syn match ninjaKeyword "^subninja\>" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Both 'build' and 'rule' begin a variable scope that ends | 
					
						
							|  |  |  | " on the first line without indent. 'rule' allows only a | 
					
						
							|  |  |  | " limited set of magic variables, 'build' allows general | 
					
						
							|  |  |  | " let assignments. | 
					
						
							| 
									
										
										
										
											2013-04-12 15:09:51 +02:00
										 |  |  | " manifest_parser.cc, ParseRule() | 
					
						
							| 
									
										
										
										
											2018-04-06 11:14:11 +02:00
										 |  |  | syn region ninjaRule start="^rule" end="^\ze\S" contains=TOP transparent | 
					
						
							|  |  |  | syn keyword ninjaRuleCommand contained containedin=ninjaRule command | 
					
						
							|  |  |  |                                      \ deps depfile description generator | 
					
						
							| 
									
										
										
										
											2013-04-24 18:51:19 +02:00
										 |  |  |                                      \ pool restat rspfile rspfile_content | 
					
						
							| 
									
										
										
										
											2013-04-12 15:09:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-06 11:14:11 +02:00
										 |  |  | syn region ninjaPool start="^pool" end="^\ze\S" contains=TOP transparent | 
					
						
							|  |  |  | syn keyword ninjaPoolCommand contained containedin=ninjaPool  depth | 
					
						
							| 
									
										
										
										
											2012-01-10 14:55:01 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | " Strings are parsed as follows: | 
					
						
							|  |  |  | " lexer.in.cc, ReadEvalString() | 
					
						
							|  |  |  | " simple_varname = [a-zA-Z0-9_-]+; | 
					
						
							|  |  |  | " varname = [a-zA-Z0-9_.-]+; | 
					
						
							|  |  |  | " $$ -> $ | 
					
						
							|  |  |  | " $\n -> line continuation | 
					
						
							|  |  |  | " '$ ' -> escaped space | 
					
						
							|  |  |  | " $simple_varname -> variable | 
					
						
							|  |  |  | " ${varname} -> variable | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-12 21:46:14 +02:00
										 |  |  | syn match   ninjaDollar "\$\$" | 
					
						
							| 
									
										
										
										
											2012-01-10 14:55:01 +01:00
										 |  |  | syn match   ninjaWrapLineOperator "\$$" | 
					
						
							|  |  |  | syn match   ninjaSimpleVar "\$[a-zA-Z0-9_-]\+" | 
					
						
							|  |  |  | syn match   ninjaVar       "\${[a-zA-Z0-9_.-]\+}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " operators are: | 
					
						
							|  |  |  | " variable assignment = | 
					
						
							|  |  |  | " rule definition : | 
					
						
							|  |  |  | " implicit dependency | | 
					
						
							|  |  |  | " order-only dependency || | 
					
						
							|  |  |  | syn match ninjaOperator "\(=\|:\||\|||\)\ze\s" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-18 13:46:39 +02:00
										 |  |  | hi def link ninjaComment Comment | 
					
						
							| 
									
										
										
										
											2012-01-10 14:55:01 +01:00
										 |  |  | hi def link ninjaKeyword Keyword | 
					
						
							|  |  |  | hi def link ninjaRuleCommand Statement | 
					
						
							| 
									
										
										
										
											2013-04-12 15:09:51 +02:00
										 |  |  | hi def link ninjaPoolCommand Statement | 
					
						
							| 
									
										
										
										
											2014-06-12 21:46:14 +02:00
										 |  |  | hi def link ninjaDollar ninjaOperator | 
					
						
							| 
									
										
										
										
											2012-01-10 14:55:01 +01:00
										 |  |  | hi def link ninjaWrapLineOperator ninjaOperator | 
					
						
							|  |  |  | hi def link ninjaOperator Operator | 
					
						
							|  |  |  | hi def link ninjaSimpleVar ninjaVar | 
					
						
							|  |  |  | hi def link ninjaVar Identifier | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let b:current_syntax = "ninja" | 
					
						
							| 
									
										
										
										
											2013-04-24 18:51:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | let &cpo = s:cpo_save | 
					
						
							|  |  |  | unlet s:cpo_save |