github-linguist 4.8.17 → 4.8.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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
+ }