16ee8d89cSBram Moolenaar" ninja build file syntax. 26ee8d89cSBram Moolenaar" Language: ninja build file as described at 3*51ad4eaaSBram Moolenaar" http://ninja-build.org/manual.html 4*51ad4eaaSBram Moolenaar" Version: 1.5 5*51ad4eaaSBram Moolenaar" Last Change: 2018/04/05 66ee8d89cSBram Moolenaar" Maintainer: Nicolas Weber <[email protected]> 7*51ad4eaaSBram Moolenaar" Version 1.5 of this script is in the upstream vim repository and will be 8ff034194SBram Moolenaar" included in the next vim release. If you change this, please send your change 9ff034194SBram Moolenaar" upstream. 106ee8d89cSBram Moolenaar 116ee8d89cSBram Moolenaar" ninja lexer and parser are at 12*51ad4eaaSBram Moolenaar" https://github.com/ninja-build/ninja/blob/master/src/lexer.in.cc 13*51ad4eaaSBram Moolenaar" https://github.com/ninja-build/ninja/blob/master/src/manifest_parser.cc 146ee8d89cSBram Moolenaar 156ee8d89cSBram Moolenaarif exists("b:current_syntax") 166ee8d89cSBram Moolenaar finish 176ee8d89cSBram Moolenaarendif 186ee8d89cSBram Moolenaar 19ff034194SBram Moolenaarlet s:cpo_save = &cpo 20ff034194SBram Moolenaarset cpo&vim 21ff034194SBram Moolenaar 226ee8d89cSBram Moolenaarsyn case match 236ee8d89cSBram Moolenaar 24*51ad4eaaSBram Moolenaar" Comments are only matched when the # is at the beginning of the line (with 25*51ad4eaaSBram Moolenaar" optional whitespace), as long as the prior line didn't end with a $ 26*51ad4eaaSBram Moolenaar" continuation. 27*51ad4eaaSBram Moolenaarsyn match ninjaComment /\(\$\n\)\@<!\_^\s*#.*$/ contains=@Spell 281aeaf8c0SBram Moolenaar 296ee8d89cSBram Moolenaar" Toplevel statements are the ones listed here and 306ee8d89cSBram Moolenaar" toplevel variable assignments (ident '=' value). 310187ca0bSBram Moolenaar" lexer.in.cc, ReadToken() and manifest_parser.cc, Parse() 326ee8d89cSBram Moolenaarsyn match ninjaKeyword "^build\>" 336ee8d89cSBram Moolenaarsyn match ninjaKeyword "^rule\>" 340187ca0bSBram Moolenaarsyn match ninjaKeyword "^pool\>" 356ee8d89cSBram Moolenaarsyn match ninjaKeyword "^default\>" 366ee8d89cSBram Moolenaarsyn match ninjaKeyword "^include\>" 376ee8d89cSBram Moolenaarsyn match ninjaKeyword "^subninja\>" 386ee8d89cSBram Moolenaar 396ee8d89cSBram Moolenaar" Both 'build' and 'rule' begin a variable scope that ends 406ee8d89cSBram Moolenaar" on the first line without indent. 'rule' allows only a 416ee8d89cSBram Moolenaar" limited set of magic variables, 'build' allows general 426ee8d89cSBram Moolenaar" let assignments. 430187ca0bSBram Moolenaar" manifest_parser.cc, ParseRule() 44*51ad4eaaSBram Moolenaarsyn region ninjaRule start="^rule" end="^\ze\S" contains=TOP transparent 45*51ad4eaaSBram Moolenaarsyn keyword ninjaRuleCommand contained containedin=ninjaRule command 46*51ad4eaaSBram Moolenaar \ deps depfile description generator 47ff034194SBram Moolenaar \ pool restat rspfile rspfile_content 480187ca0bSBram Moolenaar 49*51ad4eaaSBram Moolenaarsyn region ninjaPool start="^pool" end="^\ze\S" contains=TOP transparent 50*51ad4eaaSBram Moolenaarsyn keyword ninjaPoolCommand contained containedin=ninjaPool depth 516ee8d89cSBram Moolenaar 526ee8d89cSBram Moolenaar" Strings are parsed as follows: 536ee8d89cSBram Moolenaar" lexer.in.cc, ReadEvalString() 546ee8d89cSBram Moolenaar" simple_varname = [a-zA-Z0-9_-]+; 556ee8d89cSBram Moolenaar" varname = [a-zA-Z0-9_.-]+; 566ee8d89cSBram Moolenaar" $$ -> $ 576ee8d89cSBram Moolenaar" $\n -> line continuation 586ee8d89cSBram Moolenaar" '$ ' -> escaped space 596ee8d89cSBram Moolenaar" $simple_varname -> variable 606ee8d89cSBram Moolenaar" ${varname} -> variable 616ee8d89cSBram Moolenaar 62822ff866SBram Moolenaarsyn match ninjaDollar "\$\$" 636ee8d89cSBram Moolenaarsyn match ninjaWrapLineOperator "\$$" 646ee8d89cSBram Moolenaarsyn match ninjaSimpleVar "\$[a-zA-Z0-9_-]\+" 656ee8d89cSBram Moolenaarsyn match ninjaVar "\${[a-zA-Z0-9_.-]\+}" 666ee8d89cSBram Moolenaar 676ee8d89cSBram Moolenaar" operators are: 686ee8d89cSBram Moolenaar" variable assignment = 696ee8d89cSBram Moolenaar" rule definition : 706ee8d89cSBram Moolenaar" implicit dependency | 716ee8d89cSBram Moolenaar" order-only dependency || 726ee8d89cSBram Moolenaarsyn match ninjaOperator "\(=\|:\||\|||\)\ze\s" 736ee8d89cSBram Moolenaar 741aeaf8c0SBram Moolenaarhi def link ninjaComment Comment 756ee8d89cSBram Moolenaarhi def link ninjaKeyword Keyword 766ee8d89cSBram Moolenaarhi def link ninjaRuleCommand Statement 770187ca0bSBram Moolenaarhi def link ninjaPoolCommand Statement 78822ff866SBram Moolenaarhi def link ninjaDollar ninjaOperator 796ee8d89cSBram Moolenaarhi def link ninjaWrapLineOperator ninjaOperator 806ee8d89cSBram Moolenaarhi def link ninjaOperator Operator 816ee8d89cSBram Moolenaarhi def link ninjaSimpleVar ninjaVar 826ee8d89cSBram Moolenaarhi def link ninjaVar Identifier 836ee8d89cSBram Moolenaar 846ee8d89cSBram Moolenaarlet b:current_syntax = "ninja" 85ff034194SBram Moolenaar 86ff034194SBram Moolenaarlet &cpo = s:cpo_save 87ff034194SBram Moolenaarunlet s:cpo_save 88