browse.py: allow port override via environment variable
[platform/upstream/ninja.git] / misc / ninja.vim
1 " ninja build file syntax.
2 " Language: ninja build file as described at
3 "           http://ninja-build.org/manual.html
4 " Version: 1.4
5 " Last Change: 2014/05/13
6 " Maintainer: Nicolas Weber <nicolasweber@gmx.de>
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/ninja-build/ninja/blob/master/src/lexer.in.cc
13 " https://github.com/ninja-build/ninja/blob/master/src/manifest_parser.cc
14
15 if exists("b:current_syntax")
16   finish
17 endif
18
19 let s:cpo_save = &cpo
20 set cpo&vim
21
22 syn case match
23
24 syn 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()
29 syn match ninjaKeyword "^build\>"
30 syn match ninjaKeyword "^rule\>"
31 syn match ninjaKeyword "^pool\>"
32 syn match ninjaKeyword "^default\>"
33 syn match ninjaKeyword "^include\>"
34 syn 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()
41 syn region ninjaRule start="^rule" end="^\ze\S" contains=ALL transparent
42 syn keyword ninjaRuleCommand contained command deps depfile description generator
43                                      \ pool restat rspfile rspfile_content
44
45 syn region ninjaPool start="^pool" end="^\ze\S" contains=ALL transparent
46 syn 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
58 syn match   ninjaDollar "\$\$"
59 syn match   ninjaWrapLineOperator "\$$"
60 syn match   ninjaSimpleVar "\$[a-zA-Z0-9_-]\+"
61 syn match   ninjaVar       "\${[a-zA-Z0-9_.-]\+}"
62
63 " operators are:
64 " variable assignment =
65 " rule definition :
66 " implicit dependency |
67 " order-only dependency ||
68 syn match ninjaOperator "\(=\|:\||\|||\)\ze\s"
69
70 hi def link ninjaComment Comment
71 hi def link ninjaKeyword Keyword
72 hi def link ninjaRuleCommand Statement
73 hi def link ninjaPoolCommand Statement
74 hi def link ninjaDollar ninjaOperator
75 hi def link ninjaWrapLineOperator ninjaOperator
76 hi def link ninjaOperator Operator
77 hi def link ninjaSimpleVar ninjaVar
78 hi def link ninjaVar Identifier
79
80 let b:current_syntax = "ninja"
81
82 let &cpo = s:cpo_save
83 unlet s:cpo_save