Skip to content

Commit 2c70320

Browse files
committed
[html] update html grammar
1 parent 7c13b3c commit 2c70320

5 files changed

Lines changed: 532 additions & 292 deletions

File tree

extensions/html/syntaxes/html.json

Lines changed: 217 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
],
1111
"firstLineMatch": "<(?i:(!DOCTYPE\\s*)?html)",
1212
"injections": {
13-
"R:text.html - comment.block": {
13+
"R:text.html - (comment.block, text.html source)": {
1414
"comment": "Use R: to ensure this matches after any other injections.",
1515
"patterns": [
1616
{
@@ -24,7 +24,7 @@
2424
"name": "HTML",
2525
"patterns": [
2626
{
27-
"begin": "(<)([a-zA-Z0-9:\\-]++)(?=[^>]*></\\2>)",
27+
"begin": "(<)([a-zA-Z][a-zA-Z0-9:-]*)(?=[^>]*></\\2>)",
2828
"beginCaptures": {
2929
"1": {
3030
"name": "punctuation.definition.tag.html"
@@ -139,104 +139,256 @@
139139
"include": "#embedded-code"
140140
},
141141
{
142-
"begin": "(?:^\\s+)?(<)((?i:style))\\b(?![^>]*/>)",
143-
"captures": {
142+
"begin": "(^[ \\t]+)?(?=<(?i:style))",
143+
"beginCaptures": {
144144
"1": {
145-
"name": "punctuation.definition.tag.html"
146-
},
147-
"2": {
148-
"name": "entity.name.tag.style.html"
149-
},
150-
"3": {
151-
"name": "punctuation.definition.tag.html"
145+
"name": "punctuation.whitespace.embedded.leading.html"
146+
}
147+
},
148+
"end": "(?!\\G)([ \\t]*$\\n?)?",
149+
"endCaptures": {
150+
"1": {
151+
"name": "punctuation.whitespace.embedded.trailing.html"
152152
}
153153
},
154-
"end": "(</)((?i:style))(>)(?:\\s*\\n)?",
155154
"patterns": [
156155
{
157-
"include": "#tag-stuff"
158-
},
159-
{
160-
"contentName": "source.css.embedded.html",
161-
"begin": "(>)",
156+
"begin": "(<)((?i:style))\\b",
162157
"beginCaptures": {
158+
"0": {
159+
"name": "meta.tag.metadata.style.html"
160+
},
163161
"1": {
164-
"name": "punctuation.definition.tag.html"
162+
"name": "punctuation.definition.tag.begin.html"
163+
},
164+
"2": {
165+
"name": "entity.name.tag.html"
165166
}
166167
},
167-
"end": "(?=</(?i:style))",
168+
"end": "(/>)|((<)/)((?i:style))(>)",
169+
"endCaptures": {
170+
"0": {
171+
"name": "meta.tag.metadata.style.html"
172+
},
173+
"1": {
174+
"name": "punctuation.definition.tag.end.html"
175+
},
176+
"2": {
177+
"name": "punctuation.definition.tag.begin.html"
178+
},
179+
"3": {
180+
"name": "source.css"
181+
},
182+
"4": {
183+
"name": "entity.name.tag.html"
184+
},
185+
"5": {
186+
"name": "punctuation.definition.tag.end.html"
187+
}
188+
},
189+
"name": "meta.embedded.block.html",
168190
"patterns": [
169191
{
170-
"include": "#embedded-code"
192+
"begin": "\\G",
193+
"captures": {
194+
"1": {
195+
"name": "punctuation.definition.tag.end.html"
196+
}
197+
},
198+
"end": "(?=/>)|(>)",
199+
"name": "meta.tag.metadata.style.html",
200+
"patterns": [
201+
{
202+
"include": "#tag-stuff"
203+
}
204+
]
171205
},
172206
{
173-
"include": "source.css"
207+
"begin": "(?!\\G)",
208+
"end": "(?=</(?i:style))",
209+
"name": "source.css",
210+
"patterns": [
211+
{
212+
"include": "#embedded-code"
213+
},
214+
{
215+
"include": "source.css"
216+
}
217+
]
174218
}
175219
]
176220
}
177221
]
178222
},
179223
{
180-
"begin": "(?:^\\s+)?(<)((?i:script))\\b(?![^>]*/>)(?![^>]*(?i:type.?=.?text/((?!javascript).*)))",
224+
"begin": "(^[ \\t]+)?(?=<(?i:script))",
181225
"beginCaptures": {
182226
"1": {
183-
"name": "punctuation.definition.tag.html"
184-
},
185-
"2": {
186-
"name": "entity.name.tag.script.html"
227+
"name": "punctuation.whitespace.embedded.leading.html"
187228
}
188229
},
189-
"end": "(?<=</(script|SCRIPT))(>)(?:\\s*\\n)?",
230+
"end": "(?!\\G)([ \\t]*$\\n?)?",
190231
"endCaptures": {
191-
"2": {
192-
"name": "punctuation.definition.tag.html"
232+
"1": {
233+
"name": "punctuation.whitespace.embedded.trailing.html"
193234
}
194235
},
195236
"patterns": [
196237
{
197-
"include": "#tag-stuff"
198-
},
199-
{
200-
"contentName": "source.js.embedded.html",
201-
"begin": "(?<!</(?:script|SCRIPT))(>)",
202-
"captures": {
238+
"begin": "(<)((?i:script))\\b",
239+
"beginCaptures": {
240+
"0": {
241+
"name": "meta.tag.metadata.script.html"
242+
},
203243
"1": {
204-
"name": "punctuation.definition.tag.html"
244+
"name": "punctuation.definition.tag.begin.html"
205245
},
206246
"2": {
207-
"name": "entity.name.tag.script.html"
247+
"name": "entity.name.tag.html"
208248
}
209249
},
210-
"end": "(</)((?i:script))",
211-
"patterns": [
212-
{
213-
"captures": {
214-
"1": {
215-
"name": "punctuation.definition.comment.js"
216-
}
217-
},
218-
"match": "(//).*?((?=</script)|$\\n?)",
219-
"name": "comment.line.double-slash.js"
250+
"end": "(/>)|(/)((?i:script))(>)",
251+
"endCaptures": {
252+
"0": {
253+
"name": "meta.tag.metadata.script.html"
220254
},
221-
{
222-
"begin": "/\\*",
223-
"captures": {
224-
"0": {
225-
"name": "punctuation.definition.comment.js"
226-
}
227-
},
228-
"end": "\\*/|(?=</script)",
229-
"name": "comment.block.js"
255+
"1": {
256+
"name": "punctuation.definition.tag.end.html"
230257
},
258+
"2": {
259+
"name": "punctuation.definition.tag.begin.html"
260+
},
261+
"3": {
262+
"name": "entity.name.tag.html"
263+
},
264+
"4": {
265+
"name": "punctuation.definition.tag.end.html"
266+
}
267+
},
268+
"name": "meta.embedded.block.html",
269+
"patterns": [
231270
{
232-
"include": "source.js"
271+
"begin": "\\G",
272+
"end": "(?=/>|/)",
273+
"patterns": [
274+
{
275+
"begin": "(>)",
276+
"beginCaptures": {
277+
"0": {
278+
"name": "meta.tag.metadata.script.html"
279+
},
280+
"1": {
281+
"name": "punctuation.definition.tag.end.html"
282+
}
283+
},
284+
"end": "((<))(?=/(?i:script))",
285+
"endCaptures": {
286+
"0": {
287+
"name": "meta.tag.metadata.script.html"
288+
},
289+
"1": {
290+
"name": "punctuation.definition.tag.begin.html"
291+
},
292+
"2": {
293+
"name": "source.js"
294+
}
295+
},
296+
"patterns": [
297+
{
298+
"begin": "\\G",
299+
"end": "(?=</(?i:script))",
300+
"name": "source.js",
301+
"patterns": [
302+
{
303+
"begin": "(^[ \\t]+)?(?=//)",
304+
"beginCaptures": {
305+
"1": {
306+
"name": "punctuation.whitespace.comment.leading.js"
307+
}
308+
},
309+
"end": "(?!\\G)",
310+
"patterns": [
311+
{
312+
"begin": "//",
313+
"beginCaptures": {
314+
"0": {
315+
"name": "punctuation.definition.comment.js"
316+
}
317+
},
318+
"end": "(?=</script)|\\n",
319+
"name": "comment.line.double-slash.js"
320+
}
321+
]
322+
},
323+
{
324+
"begin": "/\\*",
325+
"captures": {
326+
"0": {
327+
"name": "punctuation.definition.comment.js"
328+
}
329+
},
330+
"end": "\\*/|(?=</script)",
331+
"name": "comment.block.js"
332+
},
333+
{
334+
"include": "source.js"
335+
}
336+
]
337+
}
338+
]
339+
},
340+
{
341+
"begin": "\\G",
342+
"end": "(?i:(?=/?>|type\\s*=\\s*('|\"|)(?!text/(javascript|ecmascript)|application/((x-)?javascript|ecmascript))\\b))",
343+
"name": "meta.tag.metadata.script.html",
344+
"patterns": [
345+
{
346+
"include": "#tag-stuff"
347+
}
348+
]
349+
},
350+
{
351+
"begin": "(?=(?i:type))",
352+
"end": "(<)(?=/(?i:script))",
353+
"endCaptures": {
354+
"0": {
355+
"name": "meta.tag.metadata.script.html"
356+
},
357+
"1": {
358+
"name": "punctuation.definition.tag.begin.html"
359+
}
360+
},
361+
"patterns": [
362+
{
363+
"begin": "\\G",
364+
"end": "(>)|(?=/>)",
365+
"endCaptures": {
366+
"1": {
367+
"name": "punctuation.definition.tag.end.html"
368+
}
369+
},
370+
"name": "meta.tag.metadata.script.html",
371+
"patterns": [
372+
{
373+
"include": "#tag-stuff"
374+
}
375+
]
376+
},
377+
{
378+
"begin": "(?!\\G)",
379+
"end": "(?=</(?i:script))",
380+
"name": "source.unknown"
381+
}
382+
]
383+
}
384+
]
233385
}
234386
]
235387
}
236388
]
237389
},
238390
{
239-
"begin": "(</?)((?i:body|head|html)(?=\\s|\\\\|>))",
391+
"begin": "(</?)((?i:body|head|html)\\b)",
240392
"captures": {
241393
"1": {
242394
"name": "punctuation.definition.tag.html"
@@ -254,7 +406,7 @@
254406
]
255407
},
256408
{
257-
"begin": "(</?)((?i:address|blockquote|dd|div|section|article|aside|header|footer|nav|menu|dl|dt|fieldset|form|frame|frameset|h1|h2|h3|h4|h5|h6|iframe|noframes|object|ol|p|ul|applet|center|dir|hr|pre)(?=\\s|\\\\|>))",
409+
"begin": "(</?)((?i:address|blockquote|dd|div|section|article|aside|header|footer|nav|menu|dl|dt|fieldset|form|frame|frameset|h1|h2|h3|h4|h5|h6|iframe|noframes|object|ol|p|ul|applet|center|dir|hr|pre)\\b)",
258410
"beginCaptures": {
259411
"1": {
260412
"name": "punctuation.definition.tag.begin.html"
@@ -277,7 +429,7 @@
277429
]
278430
},
279431
{
280-
"begin": "(</?)((?i:a|abbr|acronym|area|b|base|basefont|bdo|big|br|button|caption|cite|code|col|colgroup|del|dfn|em|font|head|html|i|img|input|ins|isindex|kbd|label|legend|li|link|map|meta|noscript|optgroup|option|param|q|s|samp|script|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|title|tr|tt|u|var)(?=\\s|\\\\|>))",
432+
"begin": "(</?)((?i:a|abbr|acronym|area|b|base|basefont|bdo|big|br|button|caption|cite|code|col|colgroup|del|dfn|em|font|head|html|i|img|input|ins|isindex|kbd|label|legend|li|link|map|meta|noscript|optgroup|option|param|q|s|samp|script|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|title|tr|tt|u|var)\\b(?!-))",
281433
"beginCaptures": {
282434
"1": {
283435
"name": "punctuation.definition.tag.begin.html"
@@ -300,7 +452,7 @@
300452
]
301453
},
302454
{
303-
"begin": "(</?)([a-zA-Z0-9:\\-]+)",
455+
"begin": "(</?)([a-zA-Z][a-zA-Z0-9:-]*)",
304456
"beginCaptures": {
305457
"1": {
306458
"name": "punctuation.definition.tag.begin.html"
@@ -309,7 +461,7 @@
309461
"name": "entity.name.tag.other.html"
310462
}
311463
},
312-
"end": "(>)",
464+
"end": "(/?>)",
313465
"endCaptures": {
314466
"1": {
315467
"name": "punctuation.definition.tag.end.html"
@@ -364,7 +516,7 @@
364516
"python": {
365517
"begin": "(?:^\\s*)<\\?python(?!.*\\?>)",
366518
"end": "\\?>(?:\\s*$\\n)?",
367-
"contentName": "source.python.embedded.html",
519+
"name": "source.python.embedded.html",
368520
"patterns": [
369521
{
370522
"include": "source.python"
@@ -389,7 +541,7 @@
389541
"begin": "{{|{",
390542
"disabled": 1,
391543
"end": "}}|}",
392-
"contentName": "source.smarty.embedded.html",
544+
"name": "source.smarty.embedded.html",
393545
"patterns": [
394546
{
395547
"include": "source.smarty"
@@ -549,5 +701,5 @@
549701
},
550702
"scopeName": "text.html.basic",
551703
"uuid": "17994EC8-6B1D-11D9-AC3A-000D93589AF6",
552-
"version": "https://github.com/textmate/html.tmbundle/commit/9f812c89f4990a98391701caa77824c94860538f"
704+
"version": "https://github.com/textmate/html.tmbundle/commit/d66526c5f6b6080358d7bf648654165a4fabf713"
553705
}

0 commit comments

Comments
 (0)