1" ninja build file syntax. 2" Language: ninja build file as described at 3" http://martine.github.com/ninja/manual.html 4" Version: 1.3 5" Last Change: 2013/04/16 6" Maintainer: Nicolas Weber <[email protected]> 7" Version 1.3 of this script is in the upstream vim repository and will be 8" included in the next vim release. If you change this, please send your change 9" upstream. 10 11" ninja lexer and parser are at 12" https://github.com/martine/ninja/blob/master/src/lexer.in.cc 13" https://github.com/martine/ninja/blob/master/src/manifest_parser.cc 14 15if exists("b:current_syntax") 16 finish 17endif 18 19let s:cpo_save = &cpo 20set cpo&vim 21 22syn case match 23 24syn match ninjaComment /#.*/ contains=@Spell 25 26" Toplevel statements are the ones listed here and 27" toplevel variable assignments (ident '=' value). 28" lexer.in.cc, ReadToken() and manifest_parser.cc, Parse() 29syn match ninjaKeyword "^build\>" 30syn match ninjaKeyword "^rule\>" 31syn match ninjaKeyword "^pool\>" 32syn match ninjaKeyword "^default\>" 33syn match ninjaKeyword "^include\>" 34syn match ninjaKeyword "^subninja\>" 35 36" Both 'build' and 'rule' begin a variable scope that ends 37" on the first line without indent. 'rule' allows only a 38" limited set of magic variables, 'build' allows general 39" let assignments. 40" manifest_parser.cc, ParseRule() 41syn region ninjaRule start="^rule" end="^\ze\S" contains=ALL transparent 42syn keyword ninjaRuleCommand contained command deps depfile description generator 43 \ pool restat rspfile rspfile_content 44 45syn region ninjaPool start="^pool" end="^\ze\S" contains=ALL transparent 46syn keyword ninjaPoolCommand contained depth 47 48" Strings are parsed as follows: 49" lexer.in.cc, ReadEvalString() 50" simple_varname = [a-zA-Z0-9_-]+; 51" varname = [a-zA-Z0-9_.-]+; 52" $$ -> $ 53" $\n -> line continuation 54" '$ ' -> escaped space 55" $simple_varname -> variable 56" ${varname} -> variable 57 58syn match ninjaWrapLineOperator "\$$" 59syn match ninjaSimpleVar "\$[a-zA-Z0-9_-]\+" 60syn match ninjaVar "\${[a-zA-Z0-9_.-]\+}" 61 62" operators are: 63" variable assignment = 64" rule definition : 65" implicit dependency | 66" order-only dependency || 67syn match ninjaOperator "\(=\|:\||\|||\)\ze\s" 68 69hi def link ninjaComment Comment 70hi def link ninjaKeyword Keyword 71hi def link ninjaRuleCommand Statement 72hi def link ninjaPoolCommand Statement 73hi def link ninjaWrapLineOperator ninjaOperator 74hi def link ninjaOperator Operator 75hi def link ninjaSimpleVar ninjaVar 76hi def link ninjaVar Identifier 77 78let b:current_syntax = "ninja" 79 80let &cpo = s:cpo_save 81unlet s:cpo_save 82