1" ninja build file syntax. 2" Language: ninja build file as described at 3" http://martine.github.com/ninja/manual.html 4" Version: 1.4 5" Last Change: 2014/05/13 6" Maintainer: Nicolas Weber <[email protected]> 7" Version 1.4 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 ninjaDollar "\$\$" 59syn match ninjaWrapLineOperator "\$$" 60syn match ninjaSimpleVar "\$[a-zA-Z0-9_-]\+" 61syn match ninjaVar "\${[a-zA-Z0-9_.-]\+}" 62 63" operators are: 64" variable assignment = 65" rule definition : 66" implicit dependency | 67" order-only dependency || 68syn match ninjaOperator "\(=\|:\||\|||\)\ze\s" 69 70hi def link ninjaComment Comment 71hi def link ninjaKeyword Keyword 72hi def link ninjaRuleCommand Statement 73hi def link ninjaPoolCommand Statement 74hi def link ninjaDollar ninjaOperator 75hi def link ninjaWrapLineOperator ninjaOperator 76hi def link ninjaOperator Operator 77hi def link ninjaSimpleVar ninjaVar 78hi def link ninjaVar Identifier 79 80let b:current_syntax = "ninja" 81 82let &cpo = s:cpo_save 83unlet s:cpo_save 84