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