github-linguist 4.8.17 → 4.8.18

Sign up to get free protection for your applications and to get access to all the features.
@@ -21,7 +21,7 @@
21
21
  "firstLineMatch": "(?x)\n# Hashbang\n^\\#!.*(?:\\s|\\/|(?<=!)\\b)\n (?:node|iojs|JavaScript)\n(?:$|\\s)\n|\n# Modeline\n(?i:\n # Emacs\n -\\*-(?:\\s*(?=[^:;\\s]+\\s*-\\*-)|(?:.*?[;\\s]|(?<=-\\*-))mode\\s*:\\s*)\n (?:js|javascript)\n (?=[\\s;]|(?<![-*])-\\*-).*?-\\*-\n |\n # Vim\n (?:(?:\\s|^)vi(?:m[<=>]?\\d+|m)?|\\sex)(?=:(?=\\s*set?\\s[^\\n:]+:)|:(?!\\s*set?\\s))(?:(?:\\s|\\s*:\\s*)\\w*(?:\\s*=(?:[^\\n\\\\\\s]|\\\\.)*)?)*[\\s:](?:filetype|ft|syntax)\\s*=\n javascript\n (?=\\s|:|$)\n)",
22
22
  "patterns": [
23
23
  {
24
- "begin": "(?<!\\.)\\b(import)(?!\\s*[:(])\\b",
24
+ "begin": "(?<!\\.)\\b(import)(?!\\s*:)\\b",
25
25
  "beginCaptures": {
26
26
  "1": {
27
27
  "name": "keyword.control.js"
@@ -146,7 +146,7 @@
146
146
  }
147
147
  },
148
148
  {
149
- "begin": "(?<!\\.)\\b(export)(?!\\s*[:(])\\b",
149
+ "begin": "(?<!\\.)\\b(export)(?!\\s*:)\\b",
150
150
  "beginCaptures": {
151
151
  "1": {
152
152
  "name": "keyword.control.js"
@@ -465,7 +465,7 @@
465
465
  ]
466
466
  },
467
467
  {
468
- "begin": "(?x)\n(?=\n (?!\n (break|case|catch|continue|do|else|finally|for|function|if|\n package|return|switch|throw|try|while|with)\n [\\s\\(]\n )\n (\n \\b(get|set) # Property getter/setter: get foo(){}\n (?:\\s+|(?=\\[)) # Followed by whitespace or square bracket\n )?\n ( # Method name\n \\b[a-zA-Z_$][\\w$]* # Fixed name\n |\n \\[ # Computed property key\n .*?[^\\[\\]\\s].*? # Contains at least one non-brace character\n \\]\n )\n \\s*\\(\\s* # Start of arguments list\n (\n \"[^\"]*\" | # Double-quoted string\n '[^']*' | # Single-quoted string\n [^\"()'] # Any non-bracket or non-quote\n )*\n \\)\\s* # End of arguments\n { # Beginning of body\n)",
468
+ "begin": "(?x)\n(?=\n (?!\n (break|case|catch|continue|do|else|finally|for|function|if|export|\n import|package|return|switch|throw|try|while|with)\n [\\s\\(]\n )\n (\n \\b(get|set) # Property getter/setter: get foo(){}\n (?:\\s+|(?=\\[)) # Followed by whitespace or square bracket\n )?\n ( # Method name\n \\b[a-zA-Z_$][\\w$]* # Fixed name\n |\n \\[ # Computed property key\n .*?[^\\[\\]\\s].*? # Contains at least one non-brace character\n \\]\n )\n \\s*\\(\\s* # Start of arguments list\n (\n \"[^\"]*\" | # Double-quoted string\n '[^']*' | # Single-quoted string\n [^\"()'] # Any non-bracket or non-quote\n )*\n \\)\\s* # End of arguments\n { # Beginning of body\n)",
469
469
  "end": "(?<=})",
470
470
  "patterns": [
471
471
  {
@@ -1023,7 +1023,7 @@
1023
1023
  "include": "#properties"
1024
1024
  },
1025
1025
  {
1026
- "match": "((?<!\\.|[\\w$])(?![_\\$]+[^A-Z0-9_$])\\$*\\b(?:[A-Z_$][A-Z0-9_$]*)\\b\\$*)",
1026
+ "match": "((?<!\\.|[\\w$])(?![_\\$]+[^A-Z0-9_$])\\$*\\b(?:[A-Z_$][A-Z0-9_$]*)\\b\\$*)(?!\\s*:)",
1027
1027
  "name": "constant.other.js"
1028
1028
  },
1029
1029
  {
@@ -1690,7 +1690,7 @@
1690
1690
  "name": "storage.type.class.jsdoc"
1691
1691
  },
1692
1692
  {
1693
- "match": "(?x)\n(\n \\[\n [^\\]]+ # Optional [link text] preceding {@link syntax}\n \\]\n\n (?! # Check to avoid highlighting two sets of link text\n {\n @\\w+ # Tagname\n \\s+\n [^\\s|}]+ # Namepath/URL\n [\\s|] # Whitespace or bar delimiting description\n [^}]*\n }\n )\n)?\n\n(?:\n {\n (\n @\n (?: link # Name of tag\n | linkcode\n | linkplain\n | tutorial\n )\n )\n\n \\s+\n\n ([^\\s|}]+) # Namepath or URL\n\n (?: # Optional link text following link target\n [\\s|] # Bar or space separating target and text\n [^}]* # Actual text\n )?\n }\n)",
1693
+ "match": "(?x)\n(\n \\[\n [^\\]]+ # Optional [link text] preceding {@link syntax}\n \\]\n\n (?! # Check to avoid highlighting two sets of link text\n {\n @\\w+ # Tagname\n \\s+\n [^\\s|}]+ # Namepath/URL\n [\\s|] # Whitespace or bar delimiting description\n [^}]*\n }\n )\n)?\n\n(?:\n {\n (\n @\n (?: link # Name of tag\n | linkcode\n | linkplain\n | tutorial\n )\n )\n \n \\s+\n\n ([^\\s|}]+) # Namepath or URL\n\n (?: # Optional link text following link target\n [\\s|] # Bar or space separating target and text\n [^}]* # Actual text\n )?\n }\n)",
1694
1694
  "captures": {
1695
1695
  "0": {
1696
1696
  "name": "entity.name.type.instance.jsdoc"
@@ -1708,7 +1708,7 @@
1708
1708
  "name": "other.meta.jsdoc"
1709
1709
  },
1710
1710
  {
1711
- "match": "(?x)\n(?:(?<=@param)|(?<=@arg)|(?<=@argument)|(?<=@type))\n\\s+\n({(?:\n \\* | # {*} any type\n \\? | # {?} unknown type\n\n (?:\n (?: # Check for a prefix\n \\? | # {?string} nullable type\n ! | # {!string} non-nullable type\n \\.{3} # {...string} variable number of parameters\n )?\n\n (?:\n (?:\n function # {function(string, number)} function type\n \\s*\n \\(\n \\s*\n (?:\n [a-zA-Z_$][\\w$]*\n (?:\n \\s*,\\s*\n [a-zA-Z_$][\\w$]*\n )*\n )?\n \\s*\n \\)\n )?\n |\n (?:\n \\( # Opening bracket of multiple types with parenthesis {(string|number)}\n [a-zA-Z_$]+\n (?:\n (?:\n [\\w$]*\n (?:\\[\\])? # {(string[]|number)} type application, an array of strings or a number\n ) |\n \\.?<[\\w$]+(?:,\\s+[\\w$]+)*> # {Array<string>} or {Object<string, number>} type application (optional .)\n )\n (?:\n [\\.|~] # {Foo.bar} namespaced, {string|number} multiple, {Foo~bar} class-specific callback\n [a-zA-Z_$]+\n (?:\n (?:\n [\\w$]*\n (?:\\[\\])? # {(string|number[])} type application, a string or an array of numbers\n ) |\n \\.?<[\\w$]+(?:,\\s+[\\w$]+)*> # {Array<string>} or {Object<string, number>} type application (optional .)\n )\n )*\n \\) |\n [a-zA-Z_$]+\n (?:\n (?:\n [\\w$]*\n (?:\\[\\])? # {(string|number[])} type application, a string or an array of numbers\n ) |\n \\.?<[\\w$]+(?:,\\s+[\\w$]+)*> # {Array<string>} or {Object<string, number>} type application (optional .)\n )\n (?:\n [\\.|~] # {Foo.bar} namespaced, {string|number} multiple, {Foo~bar} class-specific callback\n [a-zA-Z_$]+\n (?:\n [\\w$]* |\n \\.?<[\\w$]+(?:,\\s+[\\w$]+)*> # {Array<string>} or {Object<string, number>} type application (optional .)\n )\n )*\n )\n )\n # Check for suffix\n (?:\\[\\])? # {string[]} type application, an array of strings\n =? # {string=} optional parameter\n )\n)})\n\\s+\n(\n \\[ # [foo] optional parameter\n \\s*\n (?:\n [a-zA-Z_$][\\w$]*\n (?:\n (?:\\[\\])? # Foo[].bar properties within an array\n \\. # Foo.Bar namespaced parameter\n [a-zA-Z_$][\\w$]*\n )*\n (?:\n \\s*\n = # [foo=bar] Default parameter value\n \\s*\n [\\w$\\s]*\n )?\n )\n \\s*\n \\] |\n (?:\n [a-zA-Z_$][\\w$]*\n (?:\n (?:\\[\\])? # Foo[].bar properties within an array\n \\. # Foo.Bar namespaced parameter\n [a-zA-Z_$][\\w$]*\n )*\n )?\n)\n\\s+\n(?:-\\s+)? # optional hyphen before the description\n((?:(?!\\*\\/).)*) # The type description",
1711
+ "match": "(?x)\n(?:(?<=@param)|(?<=@arg)|(?<=@argument)|(?<=@type))\n\\s+\n({(?:\n \\* | # {*} any type\n \\? | # {?} unknown type\n\n (?: # Check for a prefix\n \\? | # {?string} nullable type\n ! | # {!string} non-nullable type\n \\.{3} # {...string} variable number of parameters\n )?\n\n (?:\n \\( # Opening bracket of multiple types with parenthesis {(string|number)}\n [a-zA-Z_$]+\n (?:\n (?:\n [\\w$]*\n (?:\\[\\])? # {(string[]|number)} type application, an array of strings or a number\n ) |\n \\.?<[\\w$]+(?:,\\s+[\\w$]+)*> # {Array<string>} or {Object<string, number>} type application (optional .)\n )\n (?:\n [\\.|~] # {Foo.bar} namespaced, {string|number} multiple, {Foo~bar} class-specific callback\n [a-zA-Z_$]+\n (?:\n (?:\n [\\w$]*\n (?:\\[\\])? # {(string|number[])} type application, a string or an array of numbers\n ) |\n \\.?<[\\w$]+(?:,\\s+[\\w$]+)*> # {Array<string>} or {Object<string, number>} type application (optional .)\n )\n )*\n \\) |\n [a-zA-Z_$]+\n (?:\n (?:\n [\\w$]*\n (?:\\[\\])? # {string[]|number} type application, an array of strings or a number\n ) |\n \\.?<[\\w$]+(?:,\\s+[\\w$]+)*> # {Array<string>} or {Object<string, number>} type application (optional .)\n )\n (?:\n [\\.|~] # {Foo.bar} namespaced, {string|number} multiple, {Foo~bar} class-specific callback\n [a-zA-Z_$]+\n (?:\n [\\w$]* |\n \\.?<[\\w$]+(?:,\\s+[\\w$]+)*> # {Array<string>} or {Object<string, number>} type application (optional .)\n )\n )*\n )\n # Check for suffix\n (?:\\[\\])? # {string[]} type application, an array of strings\n =? # {string=} optional parameter\n)})\n\\s+\n(\n \\[ # [foo] optional parameter\n \\s*\n (?:\n [a-zA-Z_$][\\w$]*\n (?:\n (?:\\[\\])? # Foo[].bar properties within an array\n \\. # Foo.Bar namespaced parameter\n [a-zA-Z_$][\\w$]*\n )*\n (?:\n \\s*\n = # [foo=bar] Default parameter value\n \\s*\n [\\w$\\s]*\n )?\n )\n \\s*\n \\] |\n (?:\n [a-zA-Z_$][\\w$]*\n (?:\n (?:\\[\\])? # Foo[].bar properties within an array\n \\. # Foo.Bar namespaced parameter\n [a-zA-Z_$][\\w$]*\n )*\n )?\n)\n\\s+\n(?:-\\s+)? # optional hyphen before the description\n((?:(?!\\*\\/).)*) # The type description",
1712
1712
  "captures": {
1713
1713
  "0": {
1714
1714
  "name": "other.meta.jsdoc"
@@ -1725,7 +1725,7 @@
1725
1725
  }
1726
1726
  },
1727
1727
  {
1728
- "match": "(?x)\n({(?:\n \\* | # {*} any type\n \\? | # {?} unknown type\n\n (?:\n (?: # Check for a prefix\n \\? | # {?string} nullable type\n ! | # {!string} non-nullable type\n \\.{3} # {...string} variable number of parameters\n )?\n\n (?:\n (?:\n function # {function(string, number)} function type\n \\s*\n \\(\n \\s*\n (?:\n [a-zA-Z_$][\\w$]*\n (?:\n \\s*,\\s*\n [a-zA-Z_$][\\w$]*\n )*\n )?\n \\s*\n \\)\n )?\n |\n (?:\n \\( # Opening bracket of multiple types with parenthesis {(string|number)}\n [a-zA-Z_$]+\n (?:\n [\\w$]* |\n \\.?<[\\w$]+(?:,\\s+[\\w$]+)*> # {Array<string>} or {Object<string, number>} type application (optional .)\n )\n (?:\n [\\.|~] # {Foo.bar} namespaced, {string|number} multiple, {Foo~bar} class-specific callback\n [a-zA-Z_$]+\n (?:\n [\\w$]* |\n \\.?<[\\w$]+(?:,\\s+[\\w$]+)*> # {Array<string>} or {Object<string, number>} type application (optional .)\n )\n )*\n \\) |\n [a-zA-Z_$]+\n (?:\n [\\w$]* |\n \\.?<[\\w$]+(?:,\\s+[\\w$]+)*> # {Array<string>} or {Object<string, number>} type application (optional .)\n )\n (?:\n [\\.|~] # {Foo.bar} namespaced, {string|number} multiple, {Foo~bar} class-specific callback\n [a-zA-Z_$]+\n (?:\n [\\w$]* |\n \\.?<[\\w$]+(?:,\\s+[\\w$]+)*> # {Array<string>} or {Object<string, number>} type application (optional .)\n )\n )*\n )\n )\n # Check for suffix\n (?:\\[\\])? # {string[]} type application, an array of strings\n =? # {string=} optional parameter\n )\n)})\n\\s+\n(?:-\\s+)? # optional hyphen before the description\n((?:(?!\\*\\/).)*) # The type description",
1728
+ "match": "(?x)\n({(?:\n \\* | # {*} any type\n \\? | # {?} unknown type\n\n (?: # Check for a prefix\n \\? | # {?string} nullable type\n ! | # {!string} non-nullable type\n \\.{3} # {...string} variable number of parameters\n )?\n\n (?:\n \\( # Opening bracket of multiple types with parenthesis {(string|number)}\n [a-zA-Z_$]+\n (?:\n [\\w$]* |\n \\.?<[\\w$]+(?:,\\s+[\\w$]+)*> # {Array<string>} or {Object<string, number>} type application (optional .)\n )\n (?:\n [\\.|~] # {Foo.bar} namespaced, {string|number} multiple, {Foo~bar} class-specific callback\n [a-zA-Z_$]+\n (?:\n [\\w$]* |\n \\.?<[\\w$]+(?:,\\s+[\\w$]+)*> # {Array<string>} or {Object<string, number>} type application (optional .)\n )\n )*\n \\) |\n [a-zA-Z_$]+\n (?:\n [\\w$]* |\n \\.?<[\\w$]+(?:,\\s+[\\w$]+)*> # {Array<string>} or {Object<string, number>} type application (optional .)\n )\n (?:\n [\\.|~] # {Foo.bar} namespaced, {string|number} multiple, {Foo~bar} class-specific callback\n [a-zA-Z_$]+\n (?:\n [\\w$]* |\n \\.?<[\\w$]+(?:,\\s+[\\w$]+)*> # {Array<string>} or {Object<string, number>} type application (optional .)\n )\n )*\n )\n # Check for suffix\n (?:\\[\\])? # {string[]} type application, an array of strings\n =? # {string=} optional parameter\n)})\n\\s+\n(?:-\\s+)? # optional hyphen before the description\n((?:(?!\\*\\/).)*) # The type description",
1729
1729
  "captures": {
1730
1730
  "0": {
1731
1731
  "name": "other.meta.jsdoc"
@@ -1,66 +1,254 @@
1
1
  {
2
+ "scopeName": "source.ninja",
3
+ "name": "Ninja",
2
4
  "fileTypes": [
3
5
  "ninja"
4
6
  ],
5
- "keyEquivalent": "^~N",
6
- "name": "Ninja",
7
+ "firstLineMatch": "(?xi)\n# Emacs modeline\n-\\*-(?:\\s*(?=[^:;\\s]+\\s*-\\*-)|(?:.*?[;\\s]|(?<=-\\*-))mode\\s*:\\s*)\n ninja\n(?=[\\s;]|(?<![-*])-\\*-).*?-\\*-\n|\n# Vim modeline\n(?:(?:\\s|^)vi(?:m[<=>]?\\d+|m)?|\\sex)(?=:(?=\\s*set?\\s[^\\n:]+:)|:(?!\\s*set?\\s))(?:(?:\\s|\\s*:\\s*)\\w*(?:\\s*=(?:[^\\n\\\\\\s]|\\\\.)*)?)*[\\s:](?:filetype|ft|syntax)\\s*=\n ninja\n(?=\\s|:|$)",
8
+ "foldingStartMarker": "^rule",
9
+ "foldingStopMarker": "^\\S",
7
10
  "patterns": [
8
11
  {
9
- "match": "^\\t+(?![#\\t]).*\\n?",
10
- "name": "invalid.illegal.tab-not-allowed-here.ninja"
12
+ "name": "comment.line.number-sign.ninja",
13
+ "begin": "#",
14
+ "end": "$",
15
+ "beginCaptures": {
16
+ "0": {
17
+ "name": "punctuation.definition.comment.ninja"
18
+ }
19
+ }
11
20
  },
12
21
  {
13
- "match": "$[$: ]",
14
- "name": "constant.character.escape.ninja"
22
+ "name": "meta.$1.ninja",
23
+ "begin": "^(rule|pool)\\s+(\\S+)",
24
+ "end": "^(?=\\S)",
25
+ "beginCaptures": {
26
+ "1": {
27
+ "name": "storage.type.$1.ninja"
28
+ },
29
+ "2": {
30
+ "name": "entity.name.function.$1.ninja",
31
+ "patterns": [
32
+ {
33
+ "include": "#escapes"
34
+ }
35
+ ]
36
+ }
37
+ },
38
+ "patterns": [
39
+ {
40
+ "include": "$self"
41
+ }
42
+ ]
15
43
  },
16
44
  {
17
- "match": "\\b(build|rule|default)\\b",
18
- "name": "storage.type.$1.ninja"
45
+ "name": "meta.build.ninja",
46
+ "begin": "(?x)\n^ (build) \\s+\n((?:[^\\s:|$]|\\$.)+)\n(?:\n (\\|{1,2})\n ((?:[^:$]|\\$.)*)\n (?=:)\n)?",
47
+ "beginCaptures": {
48
+ "1": {
49
+ "name": "storage.type.build.ninja"
50
+ },
51
+ "2": {
52
+ "name": "entity.name.function.build.ninja",
53
+ "patterns": [
54
+ {
55
+ "include": "#escapes"
56
+ }
57
+ ]
58
+ },
59
+ "3": {
60
+ "name": "keyword.operator.build.ninja"
61
+ },
62
+ "4": {
63
+ "patterns": [
64
+ {
65
+ "include": "#escapes"
66
+ },
67
+ {
68
+ "match": "(?:[^\\s:|$]|\\$.)+",
69
+ "name": "variable.reference.ninja",
70
+ "captures": {
71
+ "0": {
72
+ "patterns": [
73
+ {
74
+ "include": "#escapes"
75
+ }
76
+ ]
77
+ }
78
+ }
79
+ }
80
+ ]
81
+ }
82
+ },
83
+ "end": "(?<!\\$)$",
84
+ "patterns": [
85
+ {
86
+ "match": "\\|{2}",
87
+ "name": "keyword.operator.build.ninja"
88
+ },
89
+ {
90
+ "match": "(?:[^\\s:|$]|\\$.)+",
91
+ "name": "variable.reference.ninja"
92
+ },
93
+ {
94
+ "include": "$self"
95
+ }
96
+ ]
19
97
  },
20
98
  {
21
- "match": "\\b(include|subninja)\\b",
22
- "name": "keyword.control.$1.ninja"
99
+ "match": "(?<=:)\\s*(phony)\\b",
100
+ "captures": {
101
+ "1": {
102
+ "name": "storage.modifier.phony.build.ninja"
103
+ }
104
+ }
23
105
  },
24
106
  {
107
+ "match": "(?<==)\\s*(\\.\\d+|\\d+(?:\\.\\d+)?)",
25
108
  "captures": {
26
109
  "1": {
27
- "name": "punctuation.definition.variable.ninja"
110
+ "name": "constant.numeric.ninja"
28
111
  }
29
- },
30
- "match": "(\\$)[a-zA-Z_][a-zA-Z0-9_]*",
31
- "name": "variable.other.normal.ninja"
112
+ }
32
113
  },
33
114
  {
34
- "captures": {
115
+ "name": "meta.default.ninja",
116
+ "begin": "^(default)(?=\\s|$)",
117
+ "end": "(?<!\\$)$",
118
+ "beginCaptures": {
35
119
  "1": {
36
- "name": "punctuation.definition.variable.ninja"
120
+ "name": "storage.type.build.default.ninja"
37
121
  }
38
122
  },
39
- "match": "(\\$)\\{.*?\\}",
40
- "name": "variable.other.bracket.ninja"
123
+ "patterns": [
124
+ {
125
+ "match": "\\S+",
126
+ "name": "entity.name.function.build.ninja"
127
+ },
128
+ {
129
+ "include": "$self"
130
+ }
131
+ ]
41
132
  },
42
133
  {
43
- "begin": "^([ \\t]+)?(?=#)",
134
+ "name": "meta.command.ninja",
135
+ "begin": "^\\s*(command)\\s*(=)",
44
136
  "beginCaptures": {
45
137
  "1": {
46
- "name": "punctuation.whitespace.comment.leading.ninja"
138
+ "name": "variable.language.rule.ninja"
139
+ },
140
+ "2": {
141
+ "name": "keyword.operator.assignment.ninja"
47
142
  }
48
143
  },
49
- "end": "(?!\\G)",
144
+ "end": "(?<!\\$)$",
50
145
  "patterns": [
51
146
  {
52
- "begin": "#",
53
- "beginCaptures": {
54
- "0": {
55
- "name": "punctuation.definition.comment.ninja"
147
+ "include": "$self"
148
+ },
149
+ {
150
+ "match": "(?:\\G|^)(.+)(?=$)",
151
+ "captures": {
152
+ "1": {
153
+ "name": "embedded.source.shell",
154
+ "patterns": [
155
+ {
156
+ "include": "source.shell"
157
+ }
158
+ ]
56
159
  }
57
- },
58
- "end": "\\n",
59
- "name": "comment.line.number-sign.ninja"
160
+ }
60
161
  }
61
162
  ]
163
+ },
164
+ {
165
+ "name": "meta.property.ninja",
166
+ "match": "(?x) ^ \\s* (depfile|deps|msvc_deps_prefix|description|generator|in |in_newline|out|restat|rspfile|rspfile_content) \\s* (=)",
167
+ "captures": {
168
+ "1": {
169
+ "name": "support.variable.language.rule.ninja"
170
+ },
171
+ "2": {
172
+ "name": "keyword.operator.assignment.ninja"
173
+ }
174
+ }
175
+ },
176
+ {
177
+ "name": "meta.$1.ninja",
178
+ "begin": "^(subninja|include)\\s+",
179
+ "end": "(?<!\\$)$",
180
+ "beginCaptures": {
181
+ "1": {
182
+ "name": "keyword.operator.$1.ninja"
183
+ }
184
+ },
185
+ "contentName": "string.unquoted.filename.ninja",
186
+ "patterns": [
187
+ {
188
+ "include": "$self"
189
+ }
190
+ ]
191
+ },
192
+ {
193
+ "match": ":",
194
+ "name": "punctuation.separator.dictionary.key-value.ninja"
195
+ },
196
+ {
197
+ "match": "^\\s*(\\w+)\\s*(=)",
198
+ "captures": {
199
+ "1": {
200
+ "name": "variable.parameter.reference.ninja"
201
+ },
202
+ "2": {
203
+ "name": "keyword.operator.assignment.ninja"
204
+ }
205
+ }
206
+ },
207
+ {
208
+ "match": "(\\$)\\w+",
209
+ "name": "variable.parameter.reference.ninja",
210
+ "captures": {
211
+ "1": {
212
+ "name": "punctuation.definition.variable.ninja"
213
+ }
214
+ }
215
+ },
216
+ {
217
+ "match": "\\$$\\n?",
218
+ "name": "constant.character.escape.newline.ninja"
219
+ },
220
+ {
221
+ "name": "variable.other.bracket.ninja",
222
+ "match": "(\\${)\\s*[^{}]+\\s*(})",
223
+ "captures": {
224
+ "1": {
225
+ "name": "punctuation.definition.variable.begin.ninja"
226
+ },
227
+ "2": {
228
+ "name": "punctuation.definition.variable.end.ninja"
229
+ }
230
+ }
231
+ },
232
+ {
233
+ "include": "#escapes"
62
234
  }
63
235
  ],
64
- "scopeName": "source.ninja",
65
- "uuid": "012183BB-F02F-496D-9910-3B2504674FEC"
236
+ "repository": {
237
+ "escapes": {
238
+ "patterns": [
239
+ {
240
+ "match": "\\${2}",
241
+ "name": "constant.character.escape.dollar-sign.ninja"
242
+ },
243
+ {
244
+ "match": "\\$[ \\t]",
245
+ "name": "constant.character.escape.whitespace.ninja"
246
+ },
247
+ {
248
+ "match": "\\$:",
249
+ "name": "constant.character.escape.colon.ninja"
250
+ }
251
+ ]
252
+ }
253
+ }
66
254
  }
@@ -0,0 +1,452 @@
1
+ {
2
+ "name": "OpenType Feature File",
3
+ "scopeName": "source.opentype",
4
+ "fileTypes": [
5
+ "fea",
6
+ "family"
7
+ ],
8
+ "patterns": [
9
+ {
10
+ "include": "#main"
11
+ }
12
+ ],
13
+ "repository": {
14
+ "main": {
15
+ "patterns": [
16
+ {
17
+ "include": "#comments"
18
+ },
19
+ {
20
+ "include": "#target"
21
+ },
22
+ {
23
+ "include": "#blocks"
24
+ },
25
+ {
26
+ "include": "#keywords"
27
+ },
28
+ {
29
+ "include": "#tags"
30
+ },
31
+ {
32
+ "include": "#inclusion"
33
+ },
34
+ {
35
+ "include": "#strings"
36
+ },
37
+ {
38
+ "include": "#number"
39
+ },
40
+ {
41
+ "include": "#punctuation"
42
+ },
43
+ {
44
+ "include": "#identifier"
45
+ }
46
+ ]
47
+ },
48
+ "comments": {
49
+ "name": "comment.line.number-sign.opentype",
50
+ "begin": "#",
51
+ "end": "$",
52
+ "beginCaptures": {
53
+ "0": {
54
+ "name": "punctuation.definition.comment.opentype"
55
+ }
56
+ }
57
+ },
58
+ "blocks": {
59
+ "patterns": [
60
+ {
61
+ "name": "meta.feature.opentype",
62
+ "begin": "(?<=^|[\\s{}])(feature)\\s+(\\w+)(?:\\s+(useExtension))?\\s*({)",
63
+ "end": "(})\\s*(\\2)\\s*(?=[#;]|$)",
64
+ "beginCaptures": {
65
+ "1": {
66
+ "name": "storage.type.var.feature.opentype"
67
+ },
68
+ "2": {
69
+ "name": "entity.name.feature.opentype"
70
+ },
71
+ "3": {
72
+ "name": "keyword.operator.opentype"
73
+ },
74
+ "4": {
75
+ "name": "punctuation.section.bracket.curly.begin.opentype"
76
+ }
77
+ },
78
+ "endCaptures": {
79
+ "1": {
80
+ "name": "punctuation.section.bracket.curly.end.opentype"
81
+ },
82
+ "2": {
83
+ "name": "entity.name.feature.opentype"
84
+ }
85
+ },
86
+ "patterns": [
87
+ {
88
+ "name": "keyword.operator.opentype",
89
+ "match": "(?<=^|[\\s{};])sizemenuname(?=[\\s#;]|$)"
90
+ },
91
+ {
92
+ "include": "$self"
93
+ }
94
+ ]
95
+ },
96
+ {
97
+ "name": "meta.lookup.opentype",
98
+ "begin": "(?<=^|[\\s{}])(lookup)\\s+((?![\\d.])[A-Za-z0-9._]+)(?:\\s+(useExtension))?\\s*({)",
99
+ "end": "(})\\s*(\\2)\\s*(?=[#;]|$)",
100
+ "patterns": [
101
+ {
102
+ "include": "$self"
103
+ }
104
+ ],
105
+ "beginCaptures": {
106
+ "1": {
107
+ "name": "storage.type.var.lookup.opentype"
108
+ },
109
+ "2": {
110
+ "name": "entity.name.lookup.opentype"
111
+ },
112
+ "3": {
113
+ "name": "keyword.operator.opentype"
114
+ },
115
+ "4": {
116
+ "name": "punctuation.section.bracket.curly.begin.opentype"
117
+ }
118
+ },
119
+ "endCaptures": {
120
+ "1": {
121
+ "name": "punctuation.section.bracket.curly.end.opentype"
122
+ },
123
+ "2": {
124
+ "name": "entity.name.lookup.opentype"
125
+ }
126
+ }
127
+ },
128
+ {
129
+ "name": "meta.table.opentype",
130
+ "begin": "(?<=^|[\\s{};])(table)\\s+([\\w/]+)\\s*({)",
131
+ "end": "(})\\s*(\\2)\\s*(?=[#;]|$)",
132
+ "beginCaptures": {
133
+ "1": {
134
+ "name": "storage.type.var.table.opentype"
135
+ },
136
+ "2": {
137
+ "name": "entity.name.table.opentype"
138
+ },
139
+ "3": {
140
+ "name": "punctuation.section.bracket.curly.begin.opentype"
141
+ }
142
+ },
143
+ "endCaptures": {
144
+ "1": {
145
+ "name": "punctuation.section.bracket.curly.end.opentype"
146
+ },
147
+ "2": {
148
+ "name": "entity.name.table.opentype"
149
+ }
150
+ },
151
+ "patterns": [
152
+ {
153
+ "name": "keyword.operator.table-field.opentype",
154
+ "match": "(?x) (?<=^|[\\s{};])\n(GlyphClassDef|Attach|LigatureCaretBy(?:Dev|Index|Pos)|MarkAttachClass\n|(?:Horiz|Vert)Axis\\.(?:BaseTagList|BaseScriptList|MinMax)|FontRevision\n|CaretOffset|Ascender|Descender|LineGap|Panose|TypoAscender|TypoDescender\n|TypoLineGap|winAscent|winDescent|UnicodeRange|CodePageRange|XHeight|CapHeight\n|Vendor|VertTypoAscender|VertTypoDescender|VertTypoLineGap|VertOriginY|VertAdvanceY)\n(?=[\\s#;]|$)"
155
+ },
156
+ {
157
+ "include": "$self"
158
+ }
159
+ ]
160
+ },
161
+ {
162
+ "begin": "(?<=^|[\\s{};])(anonymous|anon)\\s+([\\w.]+)\\s*({)",
163
+ "end": "(})\\s*(\\2)\\s*(;)",
164
+ "contentName": "string.unquoted.heredoc.opentype",
165
+ "beginCaptures": {
166
+ "1": {
167
+ "name": "storage.type.var.opentype"
168
+ },
169
+ "2": {
170
+ "name": "entity.name.anon-tag.opentype"
171
+ },
172
+ "3": {
173
+ "name": "punctuation.section.bracket.curly.begin.opentype"
174
+ }
175
+ },
176
+ "endCaptures": {
177
+ "1": {
178
+ "name": "punctuation.section.bracket.curly.end.opentype"
179
+ },
180
+ "2": {
181
+ "name": "entity.name.anon-tag.opentype"
182
+ },
183
+ "3": {
184
+ "name": "punctuation.terminator.statement.opentype"
185
+ }
186
+ }
187
+ },
188
+ {
189
+ "name": "meta.cv-params.opentype",
190
+ "begin": "(?<=^|[\\s{}])(cvParameters)\\s*({)",
191
+ "end": "(})",
192
+ "beginCaptures": {
193
+ "1": {
194
+ "name": "storage.type.var.opentype"
195
+ },
196
+ "2": {
197
+ "name": "punctuation.section.bracket.curly.begin.opentype"
198
+ }
199
+ },
200
+ "endCaptures": {
201
+ "1": {
202
+ "name": "punctuation.section.bracket.curly.end.opentype"
203
+ }
204
+ },
205
+ "patterns": [
206
+ {
207
+ "name": "meta.cv-param.$1.opentype",
208
+ "begin": "(?<=^|[\\s{}])(FeatUILabelNameID|FeatUITooltipTextNameID|SampleTextNameID|ParamUILabelNameID)\\s*({)",
209
+ "end": "(})",
210
+ "patterns": [
211
+ {
212
+ "include": "$self"
213
+ }
214
+ ],
215
+ "beginCaptures": {
216
+ "1": {
217
+ "name": "keyword.operator.parameter.opentype"
218
+ },
219
+ "2": {
220
+ "name": "punctuation.section.bracket.curly.begin.opentype"
221
+ }
222
+ },
223
+ "endCaptures": {
224
+ "1": {
225
+ "name": "punctuation.section.bracket.curly.end.opentype"
226
+ }
227
+ }
228
+ },
229
+ {
230
+ "name": "keyword.operator.parameter.opentype",
231
+ "match": "(?<=\\s|^)Character(?=\\s|$|#)"
232
+ },
233
+ {
234
+ "include": "$self"
235
+ }
236
+ ]
237
+ },
238
+ {
239
+ "name": "meta.$1.opentype",
240
+ "begin": "(?<=^|[\\s{}])(featureNames)\\s*({)",
241
+ "end": "(})",
242
+ "patterns": [
243
+ {
244
+ "include": "$self"
245
+ }
246
+ ],
247
+ "beginCaptures": {
248
+ "1": {
249
+ "name": "storage.type.var.opentype"
250
+ },
251
+ "2": {
252
+ "name": "punctuation.section.bracket.curly.begin.opentype"
253
+ }
254
+ },
255
+ "endCaptures": {
256
+ "1": {
257
+ "name": "punctuation.section.bracket.curly.end.opentype"
258
+ }
259
+ }
260
+ }
261
+ ]
262
+ },
263
+ "identifier": {
264
+ "name": "variable.parameter.opentype",
265
+ "match": "(\\\\)?(@)?(?![\\d.])[A-Za-z0-9._]+",
266
+ "captures": {
267
+ "1": {
268
+ "name": "punctuation.definition.backslash.opentype"
269
+ },
270
+ "2": {
271
+ "name": "punctuation.definition.glyph-class.opentype"
272
+ }
273
+ }
274
+ },
275
+ "keywords": {
276
+ "patterns": [
277
+ {
278
+ "name": "invalid.deprecated.keyword.opentype",
279
+ "match": "(?<=^|[\\s{};])(excludeDFLT|includeDFLT)(?=$|[\\s{}#;])"
280
+ },
281
+ {
282
+ "name": "constant.language.null.opentype",
283
+ "match": "(?<=^|[\\s{};])NULL(?=[\\s{}#;]|$)"
284
+ },
285
+ {
286
+ "name": "storage.type.var.name.opentype",
287
+ "match": "(?<=^|[\\s{};])name(?=[\\s{}#;]|$)"
288
+ },
289
+ {
290
+ "name": "support.constant.language.opentype",
291
+ "match": "(?<![\\w.])\\.notdef(?![\\w.])"
292
+ },
293
+ {
294
+ "name": "storage.modifier.ignore.opentype",
295
+ "match": "(?<=^|[\\s{};])ignore(?=$|[\\s{}\\#;])"
296
+ },
297
+ {
298
+ "name": "keyword.operator.opentype",
299
+ "match": "(?x) (?<=^|[\\s{};])\n(anchor|anchorDef|by|contour|cursive|device|enumerate|enum|exclude_dflt|feature|from\n|IgnoreBaseGlyphs|IgnoreLigatures|IgnoreMarks|MarkAttachmentType|UseMarkFilteringSet\n|include|include_dflt|language|languagesystem|lookupflag|mark|markClass|nameid|parameters\n|position|pos|required|RightToLeft|reversesub|rsub|script|substitute|sub|subtable|table\n|useExtension|valueRecordDef|FSType|WeightClass|WidthClass)\n(?=$|[\\s{}\\#(;])"
300
+ }
301
+ ]
302
+ },
303
+ "inclusion": {
304
+ "begin": "\\(",
305
+ "end": "\\)",
306
+ "beginCaptures": {
307
+ "0": {
308
+ "name": "punctuation.section.bracket.round.begin.opentype"
309
+ }
310
+ },
311
+ "endCaptures": {
312
+ "0": {
313
+ "name": "punctuation.section.bracket.round.end.opentype"
314
+ }
315
+ },
316
+ "contentName": "string.other.filename.opentype",
317
+ "patterns": [
318
+ {
319
+ "include": "#strings"
320
+ }
321
+ ]
322
+ },
323
+ "number": {
324
+ "patterns": [
325
+ {
326
+ "name": "constant.numeric.integer.hex.opentype",
327
+ "match": "(?<!\\w)[-+]?0x[A-Fa-f0-9]+"
328
+ },
329
+ {
330
+ "name": "constant.numeric.integer.opentype",
331
+ "match": "(?<!\\w)[-+]?\\d+"
332
+ }
333
+ ]
334
+ },
335
+ "punctuation": {
336
+ "patterns": [
337
+ {
338
+ "match": "=",
339
+ "name": "keyword.operator.assignment.opentype"
340
+ },
341
+ {
342
+ "match": ";",
343
+ "name": "punctuation.terminator.statement.opentype"
344
+ },
345
+ {
346
+ "match": ",",
347
+ "name": "punctuation.separator.list.comma.opentype"
348
+ },
349
+ {
350
+ "match": "-",
351
+ "name": "punctuation.separator.range.dash.opentype"
352
+ },
353
+ {
354
+ "match": "'",
355
+ "name": "punctuation.definition.context-mark.opentype"
356
+ },
357
+ {
358
+ "match": "{",
359
+ "name": "punctuation.section.bracket.curly.begin.opentype"
360
+ },
361
+ {
362
+ "match": "}",
363
+ "name": "punctuation.section.bracket.curly.end.opentype"
364
+ },
365
+ {
366
+ "match": "<",
367
+ "name": "punctuation.section.bracket.angle.begin.opentype"
368
+ },
369
+ {
370
+ "match": ">",
371
+ "name": "punctuation.section.bracket.angle.end.opentype"
372
+ },
373
+ {
374
+ "match": "\\[",
375
+ "name": "punctuation.section.bracket.square.begin.opentype"
376
+ },
377
+ {
378
+ "match": "\\]",
379
+ "name": "punctuation.section.bracket.square.end.opentype"
380
+ },
381
+ {
382
+ "match": "\\(",
383
+ "name": "punctuation.section.bracket.round.begin.opentype"
384
+ },
385
+ {
386
+ "match": "\\)",
387
+ "name": "punctuation.section.bracket.round.end.opentype"
388
+ }
389
+ ]
390
+ },
391
+ "strings": {
392
+ "patterns": [
393
+ {
394
+ "name": "string.quoted.double.opentype",
395
+ "begin": "\"",
396
+ "end": "\"",
397
+ "beginCaptures": {
398
+ "0": {
399
+ "name": "punctuation.definition.string.begin.opentype"
400
+ }
401
+ },
402
+ "endCaptures": {
403
+ "0": {
404
+ "name": "punctuation.definition.string.end.opentype"
405
+ }
406
+ },
407
+ "patterns": [
408
+ {
409
+ "match": "\\\\[A-Fa-f0-9]{1,4}",
410
+ "name": "constant.character.escape.codepoint.opentype"
411
+ }
412
+ ]
413
+ }
414
+ ]
415
+ },
416
+ "tags": {
417
+ "patterns": [
418
+ {
419
+ "name": "support.constant.language.tag.feature.opentype",
420
+ "match": "(?x) (?<=^|[\\s{};])\n(aalt|abvf|abvm|abvs|afrc|akhn|blwf|blwm|blws|calt|case|ccmp|cfar|cjct|clig|cpct|cpsp\n|cswh|curs|cv[0-9]{2}|c2pc|c2sc|dist|dlig|dnom|dtls|expt|falt|fin2|fin3|fina|flac|frac\n|fwid|half|haln|halt|hist|hkna|hlig|hngl|hojo|hwid|init|isol|ital|jalt|jp78|jp83|jp90\n|jp04|kern|lfbd|liga|ljmo|lnum|locl|ltra|ltrm|mark|med2|medi|mgrk|mkmk|mset|nalt|nlck\n|nukt|numr|onum|opbd|ordn|ornm|palt|pcap|pkna|pnum|pref|pres|pstf|psts|pwid|qwid|rand\n|rclt|rkrf|rlig|rphf|rtbd|rtla|rtlm|ruby|rvrn|salt|sinf|size|smcp|smpl|ss[0-9]{2}|ssty\n|stch|subs|sups|swsh|titl|tjmo|tnam|tnum|trad|twid|unic|valt|vatu|vert|vhal|vjmo|vkna\n|vkrn|vpal|vrt2|vrtr|zero)\n(?=[\\s#;]|$)"
421
+ },
422
+ {
423
+ "name": "support.constant.language.tag.script.opentype",
424
+ "match": "(?x) (?<=^|[\\s{};])\n(arab|armn|avst|bali|bamu|batk|beng|bng2|bopo|brah|brai|bugi|buhd|byzm|cans|cari|cakm\n|cham|cher|hani|copt|cprt|cyrl|DFLT|dsrt|deva|dev2|egyp|ethi|geor|glag|goth|grek|gujr\n|gjr2|guru|gur2|hang|jamo|hano|hebr|kana|armi|phli|prti|java|kthi|knda|knd2|kana|kali\n|khar|khmr|lao|latn|lepc|limb|linb|lisu|lyci|lydi|mlym|mlm2|mand|math|mtei|merc|mero\n|plrd|mong|musc|mymr|mym2|talu|nko|ogam|olck|ital|xpeo|sarb|orkh|orya|ory2|osma|phag\n|phnx|rjng|runr|samr|saur|shrd|shaw|sinh|sora|xsux|sund|sylo|syrc|tglg|tagb|tale|lana\n|tavt|takr|taml|tml2|telu|tel2|thaa|thai|tibt|tfng|ugar|vai|yi)\n(?=[\\s#;]|$)"
425
+ },
426
+ {
427
+ "name": "support.constant.language.tag.opentype",
428
+ "match": "(?x) (?<=^|[\\s{};])\n(ARA|APPH|ANG|AMH|ALT|ALS|AKA|AIO|AGW|AFR|AFK|ADY|ACR|ACH|ABK|ABA|BGQ|BGC|BEN|BEM|BEL\n|BDY|BCR|BCH|BBR|BBC|BAU|BAR|BAN|BAL|BAG|BAD0|BAD|AZE|AZB|AYM|AWA|AVR|ATH|AST|ASM|ARK\n|ARI|ARG|CHE|CEB|CBK|CAT|CAK|BUG|BTS|BTI|BSH|BRX|BRM|BRI|BRH|BRE|BPY|BOS|BML|BMB|BLT\n|BLN|BLK|BLI|BKF|BJJ|BIS|BIL|BIK|BHO|BHI|BGR|DEU|DCR|DAX|DAR|DAN|CUK|CTG|CSY|CSL|CSB\n|CRT|CRR|CRE|CPP|COS|COR|COP|CMR|CGG|CHY|CHU|CHA|CHR|CHP|CHO|CHK0|CHK|CHI|CHH|CHG|EWE\n|EVN|EVK|EUQ|ETI|ESU|ESP|ERZ|ENG|EMK|ELL|EFI|EDO|ECR|EBI|DZN|DUN|DUJ|DRI|DNK|DNJ|DNG\n|DJR0|DJR|DIV|DIQ|DHV|DHG|DGR|DGO|GLK|GKP|GIL0|GIL|GIH|GEZ|GAW|GAR|GAL|GAG|GAE|GAD|FUV\n|FUL|FTA|FRP|FRL|FRI|FRC|FRA|FOS|FON|FNE|FLE|FJI|FIN|FAT|FAR|FAN0|FAN|HUN|HRV|HRI|HO\n|HND|HMO|HMN|HMA|HIN|HIL|HER|HBN|HAZ|HAY|HAW|HAU|HAR|HAL|HAI|GUZ|GUJ|GUF|GUC|GUA|GRO\n|GRN|GON|GOG|GNN|GMZ|KAB0|KAB|JUL|JUD|JBO|JAN|JAM|JII|JAV|IWR|ITA|ISM|ISL|IRT|IRI|IPPH\n|IPK|INU|ING|IND|INA|ILO|ILE|IDO|IJO|IBO|IBB|IBA|HYE0|HYE|KMS|KMO|KMN|KMB|KLM|KKN|KJP\n|KJD|KIU|KIS|KIR|KIK|KHW|KHV|KHT|KHS|KHM|KHK|KHA|KGE|KEK|KEB|KEA|KDE|KAZ|KAT|KAR|KAN\n|KAL|KAC|KUY|KUU|KUR|KUM|KUL|KUI|KUA|KSW|KSM|KSI|KSH0|KSH|KRT|KRN|KRM|KRL|KRK|KRI|KPL\n|KOZ|KOS|KOR|KOP|KOM|KON0|KON|KOK|KOH|KOD|KNR|LUB|LUA|LTZ|LTH|LSM|LSB|LRC|LOM|LMW|LMO\n|LMB|LMA|LKI|LJP|LIS|LIN|LIM|LIJ|LEZ|LDK|LCR|LAZ|LAT|LAO|LAM|LAK|LAH|LAD|KYU|KYK|MLG\n|MLE|MKW|MKR|MKD|MIZ|MIN|MFE|MER|MEN|MDR|MDE|MCR|MCH|MBN|MAW|MAR|MAP|MAN|MAM|MAL|MAK\n|MAJ|MAH|MAG|MAD|LVI|LUO|LUH|LUG|NAV|NAU|NAS|NAP|NAN|NAH|NAG|MZN|MYN|MWW|MWL|MUS|MUN\n|MTS|MTH|MRI|MOS|MOR|MON|MOL|MOK|MOH|MNX|MNK|MNI|MNG|MND|MLY|MLR|MLN|ORO|ORI|OJB|OCR\n|OCI|NYN|NYM|NTO|NTA|NSO|NSM|NOV|NOR|NOG|NOE|NLD|NKO|NKL|NIU|NIS|NHC|NGR|NGA|NEW|NEP\n|NDS|NDG|NDC|NDB|NCR|QUH|QUC|QIN|PWO|PTG|PRO|PON|POH|PNB|PMS|PLK|PLG|PIL|PIH|PHK|PGR\n|PDC|PCD|PCC|PAU|PAS|PAP0|PAP|PAN|PAM|PAL|PAG|PAA|OSS|SEK|SCO|SCN|SAY|SAT|SAS|SAN|SAD\n|RUS|RUP|RUN|RUA|RTM|RSY|ROY|ROM|RMY|RMS|RKW|RIT|RIF|RIA|REJ|RBU|RCR|RAR|RAJ|QWH|QVI\n|QUZ|SSM|SSL|SRR|SRK|SRD|SRB|SQI|SOT|SOP|SOG|SNK|SNH|SND|SNA0|SNA|SMO|SML|SLV|SLA|SKY\n|SKS|SIG|SID|SIB|SHN|SHI|SGS|SGO|SGA|SEL|TIV|TIB|THT|THA|TGY|TGR|TGN|TGL|TET|TEL|TDD\n|TCR|TAT|TAM|TAJ|TAB|SZL|SYR|SYL|SXU|SXT|SWZ|SWK|SWA|SVE|SVA|SUR|SUN|SUK|STQ|VIT|VEN\n|VEC|UZB|UYG|USB|URD|UMB|UKR|UDM|TZO|TZM|TYZ|TWI|TVL|TUV|TUM|TUL|TUA|TSG|TRK|TPI|TOD0\n|TOD|TNG|TNE|TNA|TMN|TMH|TKM|ZUL|ZZA|dflt)\n(?=[\\s#;]|$)"
429
+ },
430
+ {
431
+ "name": "support.constant.language.tag.baseline.opentype",
432
+ "match": "(?<=^|[\\s{};])(hang|icfb|icft|ideo|idtp|math|romn)(?=[\\s#;]|$)"
433
+ }
434
+ ]
435
+ },
436
+ "target": {
437
+ "match": "(\\\\)?(@)?(?![\\d.])[A-Za-z0-9._]+(')",
438
+ "name": "entity.name.subject.opentype",
439
+ "captures": {
440
+ "1": {
441
+ "name": "punctuation.definition.backslash.opentype"
442
+ },
443
+ "2": {
444
+ "name": "punctuation.definition.context-mark.opentype"
445
+ },
446
+ "3": {
447
+ "name": "punctuation.definition.glyph-class.opentype"
448
+ }
449
+ }
450
+ }
451
+ }
452
+ }