@@ -0,0 +1,662 @@
1+%YAML 1.2
2+---
3+# http://www.sublimetext.com/docs/3/syntax.html
4+name: HTML (Twig)
5+file_extensions:
6+ - twig
7+ - html.twig
8+scope: text.html.twig
9+contexts:
10+ main:
11+ - match: '(<)([a-zA-Z0-9:]++)(?=[^>]*></\2>)'
12+ captures:
13+ 1: punctuation.definition.tag.html
14+ 2: entity.name.tag.html
15+ push:
16+ - meta_scope: meta.tag.any.html
17+ - match: (>(<)/)(\2)(>)
18+ captures:
19+ 1: punctuation.definition.tag.html
20+ 2: meta.scope.between-tag-pair.html
21+ 3: entity.name.tag.html
22+ 4: punctuation.definition.tag.html
23+ pop: true
24+ - include: tag-stuff
25+ - match: (<\?)(xml)
26+ captures:
27+ 1: punctuation.definition.tag.html
28+ 2: entity.name.tag.xml.html
29+ push:
30+ - meta_scope: meta.tag.preprocessor.xml.html
31+ - match: (\?>)
32+ captures:
33+ 1: punctuation.definition.tag.html
34+ 2: entity.name.tag.xml.html
35+ pop: true
36+ - include: tag-generic-attribute
37+ - include: string-double-quoted
38+ - include: string-single-quoted
39+ - match: <!--
40+ captures:
41+ 0: punctuation.definition.comment.html
42+ push:
43+ - meta_scope: comment.block.html
44+ - match: '--\s*>'
45+ captures:
46+ 0: punctuation.definition.comment.html
47+ pop: true
48+ - match: "--"
49+ scope: invalid.illegal.bad-comments-or-CDATA.html
50+ - include: embedded-code
51+ - match: <!
52+ captures:
53+ 0: punctuation.definition.tag.html
54+ push:
55+ - meta_scope: meta.tag.sgml.html
56+ - match: ">"
57+ captures:
58+ 0: punctuation.definition.tag.html
59+ pop: true
60+ - match: (?i:DOCTYPE)
61+ captures:
62+ 1: entity.name.tag.doctype.html
63+ push:
64+ - meta_scope: meta.tag.sgml.doctype.html
65+ - match: (?=>)
66+ captures:
67+ 1: entity.name.tag.doctype.html
68+ pop: true
69+ - match: '"[^">]*"'
70+ scope: string.quoted.double.doctype.identifiers-and-DTDs.html
71+ - match: '\[CDATA\['
72+ push:
73+ - meta_scope: constant.other.inline-data.html
74+ - match: "]](?=>)"
75+ pop: true
76+ - match: (\s*)(?!--|>)\S(\s*)
77+ scope: invalid.illegal.bad-comments-or-CDATA.html
78+ - include: embedded-code
79+ - match: '(?:^\s+)?(<)((?i:style))\b(?![^>]*/>)'
80+ captures:
81+ 1: punctuation.definition.tag.html
82+ 2: entity.name.tag.style.html
83+ 3: punctuation.definition.tag.html
84+ push:
85+ - meta_scope: source.css.embedded.html
86+ - match: (</)((?i:style))(>)(?:\s*\n)?
87+ captures:
88+ 1: punctuation.definition.tag.html
89+ 2: entity.name.tag.style.html
90+ 3: punctuation.definition.tag.html
91+ pop: true
92+ - include: tag-stuff
93+ - match: (>)
94+ captures:
95+ 1: punctuation.definition.tag.html
96+ push:
97+ - match: (?=</(?i:style))
98+ pop: true
99+ - include: embedded-code
100+ - include: scope:source.css
101+ - match: '(?:^\s+)?(<)((?i:script))\b(?![^>]*/>)'
102+ captures:
103+ 1: punctuation.definition.tag.html
104+ 2: entity.name.tag.script.html
105+ push:
106+ - meta_scope: source.js.embedded.html
107+ - match: (?<=</(script|SCRIPT))(>)(?:\s*\n)?
108+ captures:
109+ 2: punctuation.definition.tag.html
110+ pop: true
111+ - include: tag-stuff
112+ - match: (?<!</(?:script|SCRIPT))(>)
113+ captures:
114+ 1: punctuation.definition.tag.html
115+ 2: entity.name.tag.script.html
116+ push:
117+ - match: (</)((?i:script))
118+ captures:
119+ 1: punctuation.definition.tag.html
120+ 2: entity.name.tag.script.html
121+ pop: true
122+ - match: (//).*?((?=</script)|$\n?)
123+ scope: comment.line.double-slash.js
124+ captures:
125+ 1: punctuation.definition.comment.js
126+ - match: /\*
127+ captures:
128+ 0: punctuation.definition.comment.js
129+ push:
130+ - meta_scope: comment.block.js
131+ - match: \*/|(?=</script)
132+ captures:
133+ 0: punctuation.definition.comment.js
134+ pop: true
135+ - include: php
136+ - include: twig-print-tag
137+ - include: twig-statement-tag
138+ - include: twig-comment-tag
139+ - include: scope:source.js
140+ - match: (</?)((?i:body|head|html)\b)
141+ captures:
142+ 1: punctuation.definition.tag.html
143+ 2: entity.name.tag.structure.any.html
144+ push:
145+ - meta_scope: meta.tag.structure.any.html
146+ - match: (>)
147+ captures:
148+ 1: punctuation.definition.tag.html
149+ 2: entity.name.tag.structure.any.html
150+ pop: true
151+ - include: tag-stuff
152+ - match: (</?)((?i:address|blockquote|dd|div|dl|dt|fieldset|form|frame|frameset|h1|h2|h3|h4|h5|h6|iframe|noframes|object|ol|p|ul|applet|center|dir|hr|menu|pre)\b)
153+ captures:
154+ 1: punctuation.definition.tag.begin.html
155+ 2: entity.name.tag.block.any.html
156+ push:
157+ - meta_scope: meta.tag.block.any.html
158+ - match: (>)
159+ captures:
160+ 1: punctuation.definition.tag.end.html
161+ pop: true
162+ - include: tag-stuff
163+ - match: (</?)((?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)
164+ captures:
165+ 1: punctuation.definition.tag.begin.html
166+ 2: entity.name.tag.inline.any.html
167+ push:
168+ - meta_scope: meta.tag.inline.any.html
169+ - match: "((?: ?/)?>)"
170+ captures:
171+ 1: punctuation.definition.tag.end.html
172+ pop: true
173+ - include: tag-stuff
174+ - match: "(</?)([a-zA-Z0-9:]+)"
175+ captures:
176+ 1: punctuation.definition.tag.begin.html
177+ 2: entity.name.tag.other.html
178+ push:
179+ - meta_scope: meta.tag.other.html
180+ - match: (>)
181+ captures:
182+ 1: punctuation.definition.tag.end.html
183+ pop: true
184+ - include: tag-stuff
185+ - include: entities
186+ - match: <>
187+ scope: invalid.illegal.incomplete.html
188+ - match: <
189+ scope: invalid.illegal.bad-angle-bracket.html
190+ - include: twig-print-tag
191+ - include: twig-statement-tag
192+ - include: twig-comment-tag
193+ embedded-code:
194+ - include: ruby
195+ - include: php
196+ - include: twig-print-tag
197+ - include: twig-statement-tag
198+ - include: twig-comment-tag
199+ - include: python
200+ entities:
201+ - match: "(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)"
202+ scope: constant.character.entity.html
203+ captures:
204+ 1: punctuation.definition.entity.html
205+ 3: punctuation.definition.entity.html
206+ - match: "&"
207+ scope: invalid.illegal.bad-ampersand.html
208+ php:
209+ - match: (?=(^\s*)?<\?)
210+ push:
211+ - match: (?!(^\s*)?<\?)
212+ pop: true
213+ - include: scope:text.html.php
214+ python:
215+ - match: (?:^\s*)<\?python(?!.*\?>)
216+ push:
217+ - meta_scope: source.python.embedded.html
218+ - match: \?>(?:\s*$\n)?
219+ pop: true
220+ - include: scope:source.python
221+ ruby:
222+ - match: "<%+#"
223+ captures:
224+ 0: punctuation.definition.comment.erb
225+ push:
226+ - meta_scope: comment.block.erb
227+ - match: "%>"
228+ captures:
229+ 0: punctuation.definition.comment.erb
230+ pop: true
231+ - match: <%+(?!>)=?
232+ captures:
233+ 0: punctuation.section.embedded.ruby
234+ push:
235+ - meta_scope: source.ruby.embedded.html
236+ - match: "-?%>"
237+ captures:
238+ 0: punctuation.section.embedded.ruby
239+ pop: true
240+ - match: (#).*?(?=-?%>)
241+ scope: comment.line.number-sign.ruby
242+ captures:
243+ 1: punctuation.definition.comment.ruby
244+ - include: scope:source.ruby
245+ - match: <\?r(?!>)=?
246+ captures:
247+ 0: punctuation.section.embedded.ruby.nitro
248+ push:
249+ - meta_scope: source.ruby.nitro.embedded.html
250+ - match: '-?\?>'
251+ captures:
252+ 0: punctuation.section.embedded.ruby.nitro
253+ pop: true
254+ - match: (#).*?(?=-?\?>)
255+ scope: comment.line.number-sign.ruby.nitro
256+ captures:
257+ 1: punctuation.definition.comment.ruby.nitro
258+ - include: scope:source.ruby
259+ string-double-quoted:
260+ - match: '"'
261+ captures:
262+ 0: punctuation.definition.string.begin.html
263+ push:
264+ - meta_scope: string.quoted.double.html
265+ - match: '"'
266+ captures:
267+ 0: punctuation.definition.string.end.html
268+ pop: true
269+ - include: embedded-code
270+ - include: entities
271+ string-single-quoted:
272+ - match: "'"
273+ captures:
274+ 0: punctuation.definition.string.begin.html
275+ push:
276+ - meta_scope: string.quoted.single.html
277+ - match: "'"
278+ captures:
279+ 0: punctuation.definition.string.end.html
280+ pop: true
281+ - include: embedded-code
282+ - include: entities
283+ tag-generic-attribute:
284+ - match: '\b([a-zA-Z\-:]+)'
285+ scope: entity.other.attribute-name.html
286+ tag-id-attribute:
287+ - match: \b(id)\b\s*(=)
288+ captures:
289+ 1: entity.other.attribute-name.id.html
290+ 2: punctuation.separator.key-value.html
291+ push:
292+ - meta_scope: meta.attribute-with-value.id.html
293+ - match: (?<='|")
294+ captures:
295+ 1: entity.other.attribute-name.id.html
296+ 2: punctuation.separator.key-value.html
297+ pop: true
298+ - match: '"'
299+ captures:
300+ 0: punctuation.definition.string.begin.html
301+ push:
302+ - meta_scope: string.quoted.double.html
303+ - meta_content_scope: meta.toc-list.id.html
304+ - match: '"'
305+ captures:
306+ 0: punctuation.definition.string.end.html
307+ pop: true
308+ - include: embedded-code
309+ - include: entities
310+ - match: "'"
311+ captures:
312+ 0: punctuation.definition.string.begin.html
313+ push:
314+ - meta_scope: string.quoted.single.html
315+ - meta_content_scope: meta.toc-list.id.html
316+ - match: "'"
317+ captures:
318+ 0: punctuation.definition.string.end.html
319+ pop: true
320+ - include: embedded-code
321+ - include: entities
322+ tag-stuff:
323+ - include: tag-id-attribute
324+ - include: tag-generic-attribute
325+ - include: string-double-quoted
326+ - include: string-single-quoted
327+ - include: embedded-code
328+ twig-arrays:
329+ - match: '(?<=[\s\(\{\[:,])\['
330+ captures:
331+ 0: punctuation.section.array.begin.twig
332+ push:
333+ - meta_scope: meta.array.twig
334+ - match: '\]'
335+ captures:
336+ 0: punctuation.section.array.end.twig
337+ pop: true
338+ - include: twig-arrays
339+ - include: twig-hashes
340+ - include: twig-constants
341+ - include: twig-strings
342+ - include: twig-functions-warg
343+ - include: twig-functions
344+ - include: twig-macros
345+ - include: twig-objects
346+ - include: twig-properties
347+ - include: twig-filters-warg
348+ - include: twig-filters
349+ - include: twig-filters-warg-ud
350+ - include: twig-filters-ud
351+ - match: ","
352+ scope: punctuation.separator.object.twig
353+ twig-comment-tag:
354+ - match: '\{#-?'
355+ captures:
356+ 0: punctuation.definition.comment.begin.twig
357+ push:
358+ - meta_scope: comment.block.twig
359+ - match: '-?#\}'
360+ captures:
361+ 0: punctuation.definition.comment.end.twig
362+ pop: true
363+ twig-constants:
364+ - match: '(?i)(?<=[\s\[\(\{:,])(?:true|false|null|none)(?=[\s\)\]\}\,])'
365+ scope: constant.language.twig
366+ - match: '(?<=[\s\[\(\{:,]|\.\.|\*\*)[0-9]+(?:\.[0-9]+)?(?=[\s\)\]\}\,]|\.\.|\*\*)'
367+ scope: constant.numeric.twig
368+ twig-filters:
369+ - match: '(?<=(?:[a-zA-Z0-9_\x{7f}-\x{ff}\]\)\''\"]\|)|\{%\sfilter\s)(abs|capitalize|e(?:scape)?|first|join|(?:json|url)_encode|keys|last|length|lower|nl2br|number_format|raw|reverse|round|sort|striptags|title|trim|upper)(?=[\s\|\]\}\):,]|\.\.|\*\*)'
370+ captures:
371+ 1: support.function.twig
372+ twig-filters-ud:
373+ - match: '(?<=(?:[a-zA-Z0-9_\x{7f}-\x{ff}\]\)\''\"]\|)|\{%\sfilter\s)([a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)'
374+ captures:
375+ 1: meta.function-call.other.twig
376+ twig-filters-warg:
377+ - match: '(?<=(?:[a-zA-Z0-9_\x{7f}-\x{ff}\]\)\''\"]\|)|\{%\sfilter\s)(batch|convert_encoding|date|date_modify|default|e(?:scape)?|format|join|merge|number_format|replace|round|slice|split|trim)(\()'
378+ captures:
379+ 1: support.function.twig
380+ 2: punctuation.definition.parameters.begin.twig
381+ push:
382+ - meta_content_scope: meta.function.arguments.twig
383+ - match: \)
384+ captures:
385+ 0: punctuation.definition.parameters.end.twig
386+ pop: true
387+ - include: twig-constants
388+ - include: twig-functions-warg
389+ - include: twig-functions
390+ - include: twig-macros
391+ - include: twig-objects
392+ - include: twig-properties
393+ - include: twig-filters-warg
394+ - include: twig-filters
395+ - include: twig-filters-warg-ud
396+ - include: twig-filters-ud
397+ - include: twig-strings
398+ - include: twig-arrays
399+ - include: twig-hashes
400+ twig-filters-warg-ud:
401+ - match: '(?<=(?:[a-zA-Z0-9_\x{7f}-\x{ff}\]\)\''\"]\|)|\{%\sfilter\s)([a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)(\()'
402+ captures:
403+ 1: meta.function-call.other.twig
404+ 2: punctuation.definition.parameters.begin.twig
405+ push:
406+ - meta_content_scope: meta.function.arguments.twig
407+ - match: \)
408+ captures:
409+ 0: punctuation.definition.parameters.end.twig
410+ pop: true
411+ - include: twig-constants
412+ - include: twig-functions-warg
413+ - include: twig-functions
414+ - include: twig-macros
415+ - include: twig-objects
416+ - include: twig-properties
417+ - include: twig-filters-warg
418+ - include: twig-filters
419+ - include: twig-filters-warg-ud
420+ - include: twig-filters-ud
421+ - include: twig-strings
422+ - include: twig-arrays
423+ - include: twig-hashes
424+ twig-functions:
425+ - match: (?<=is\s)(defined|empty|even|iterable|odd)
426+ captures:
427+ 1: support.function.twig
428+ twig-functions-warg:
429+ - match: '(?<=[\s\(\[\{:,])(attribute|block|constant|cycle|date|divisible by|dump|include|max|min|parent|random|range|same as|source|template_from_string)(\()'
430+ captures:
431+ 1: support.function.twig
432+ 2: punctuation.definition.parameters.begin.twig
433+ push:
434+ - meta_content_scope: meta.function.arguments.twig
435+ - match: \)
436+ captures:
437+ 0: punctuation.definition.parameters.end.twig
438+ pop: true
439+ - include: twig-constants
440+ - include: twig-functions-warg
441+ - include: twig-functions
442+ - include: twig-macros
443+ - include: twig-objects
444+ - include: twig-properties
445+ - include: twig-filters-warg
446+ - include: twig-filters
447+ - include: twig-filters-warg-ud
448+ - include: twig-filters-ud
449+ - include: twig-strings
450+ - include: twig-arrays
451+ twig-hashes:
452+ - match: '(?<=[\s\(\{\[:,])\{'
453+ captures:
454+ 0: punctuation.section.hash.begin.twig
455+ push:
456+ - meta_scope: meta.hash.twig
457+ - match: '\}'
458+ captures:
459+ 0: punctuation.section.hash.end.twig
460+ pop: true
461+ - include: twig-hashes
462+ - include: twig-arrays
463+ - include: twig-constants
464+ - include: twig-strings
465+ - include: twig-functions-warg
466+ - include: twig-functions
467+ - include: twig-macros
468+ - include: twig-objects
469+ - include: twig-properties
470+ - include: twig-filters-warg
471+ - include: twig-filters
472+ - include: twig-filters-warg-ud
473+ - include: twig-filters-ud
474+ - match: ":"
475+ scope: punctuation.separator.key-value.twig
476+ - match: ","
477+ scope: punctuation.separator.object.twig
478+ twig-keywords:
479+ - match: (?<=\s)((?:end)?(?:autoescape|block|embed|filter|for|if|macro|raw|sandbox|set|spaceless|trans|verbatim)|as|do|else|elseif|extends|flush|from|ignore missing|import|include|only|use|with)(?=\s)
480+ scope: keyword.control.twig
481+ twig-macros:
482+ - match: |-
483+ (?x)
484+ (?<=[\s\(\[\{:,])
485+ ([a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)
486+ (?:
487+ (\.)([a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)
488+ )?
489+ (\()
490+ captures:
491+ 1: meta.function-call.twig
492+ 2: punctuation.separator.property.twig
493+ 3: variable.other.property.twig
494+ 4: punctuation.definition.parameters.begin.twig
495+ push:
496+ - meta_content_scope: meta.function.arguments.twig
497+ - match: \)
498+ captures:
499+ 0: punctuation.definition.parameters.end.twig
500+ pop: true
501+ - include: twig-constants
502+ - include: twig-operators
503+ - include: twig-functions-warg
504+ - include: twig-functions
505+ - include: twig-macros
506+ - include: twig-objects
507+ - include: twig-properties
508+ - include: twig-filters-warg
509+ - include: twig-filters
510+ - include: twig-filters-warg-ud
511+ - include: twig-filters-ud
512+ - include: twig-strings
513+ - include: twig-arrays
514+ - include: twig-hashes
515+ twig-objects:
516+ - match: '(?<=[\s\{\[\(:,])([a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)(?=[\s\}\[\]\(\)\.\|,:])'
517+ captures:
518+ 1: variable.other.twig
519+ twig-operators:
520+ - match: (?<=\s)(\+|-|//?|%|\*\*?)(?=\s)
521+ captures:
522+ 1: keyword.operator.arithmetic.twig
523+ - match: (?<=\s)(=|~)(?=\s)
524+ captures:
525+ 1: keyword.operator.assignment.twig
526+ - match: (?<=\s)(b-(?:and|or|xor))(?=\s)
527+ captures:
528+ 1: keyword.operator.bitwise.twig
529+ - match: '(?<=\s)((?:!|=)=|<=?|>=?|(?:not )?in|is(?: not)?|(?:ends|starts) with|matches)(?=\s)'
530+ captures:
531+ 1: keyword.operator.comparison.twig
532+ - match: (?<=\s)(\?|:|and|not|or)(?=\s)
533+ captures:
534+ 1: keyword.operator.logical.twig
535+ - match: '(?<=[a-zA-Z0-9_\x{7f}-\x{ff}\]\)''"])\.\.(?=[a-zA-Z0-9_\x{7f}-\x{ff}''"])'
536+ captures:
537+ 0: keyword.operator.other.twig
538+ - match: '(?<=[a-zA-Z0-9_\x{7f}-\x{ff}\]\}\)''"])\|(?=[a-zA-Z_\x{7f}-\x{ff}])'
539+ captures:
540+ 0: keyword.operator.other.twig
541+ twig-print-tag:
542+ - match: '\{\{-?'
543+ captures:
544+ 0: punctuation.section.tag.twig
545+ push:
546+ - meta_scope: meta.tag.template.value.twig
547+ - match: '-?\}\}'
548+ captures:
549+ 0: punctuation.section.tag.twig
550+ pop: true
551+ - include: twig-constants
552+ - include: twig-operators
553+ - include: twig-functions-warg
554+ - include: twig-functions
555+ - include: twig-macros
556+ - include: twig-objects
557+ - include: twig-properties
558+ - include: twig-filters-warg
559+ - include: twig-filters
560+ - include: twig-filters-warg-ud
561+ - include: twig-filters-ud
562+ - include: twig-strings
563+ - include: twig-arrays
564+ - include: twig-hashes
565+ twig-properties:
566+ - match: |-
567+ (?x)
568+ (?<=[a-zA-Z0-9_\x{7f}-\x{ff}])
569+ (\.)([a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)
570+ (?=[\.\s\|\[\)\]\}:,])
571+ captures:
572+ 1: punctuation.separator.property.twig
573+ 2: variable.other.property.twig
574+ - match: |-
575+ (?x)
576+ (?<=[a-zA-Z0-9_\x{7f}-\x{ff}])
577+ (\.)([a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)
578+ (\()
579+ captures:
580+ 1: punctuation.separator.property.twig
581+ 2: variable.other.property.twig
582+ 3: punctuation.definition.parameters.begin.twig
583+ push:
584+ - meta_content_scope: meta.function.arguments.twig
585+ - match: \)
586+ captures:
587+ 0: punctuation.definition.parameters.end.twig
588+ pop: true
589+ - include: twig-constants
590+ - include: twig-functions-warg
591+ - include: twig-functions
592+ - include: twig-macros
593+ - include: twig-objects
594+ - include: twig-properties
595+ - include: twig-filters-warg
596+ - include: twig-filters
597+ - include: twig-filters-warg-ud
598+ - include: twig-filters-ud
599+ - include: twig-strings
600+ - include: twig-arrays
601+ - match: |-
602+ (?x)
603+ (?<=[a-zA-Z0-9_\x{7f}-\x{ff}\]])
604+ (?:
605+ (\[)('[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*')(\])
606+ |(\[)("[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*")(\])
607+ |(\[)([a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)(\])
608+ )
609+ captures:
610+ 1: punctuation.section.array.begin.twig
611+ 2: variable.other.property.twig
612+ 3: punctuation.section.array.end.twig
613+ 4: punctuation.section.array.begin.twig
614+ 5: variable.other.property.twig
615+ 6: punctuation.section.array.end.twig
616+ 7: punctuation.section.array.begin.twig
617+ 8: variable.other.property.twig
618+ 9: punctuation.section.array.end.twig
619+ twig-statement-tag:
620+ - match: '\{%-?'
621+ captures:
622+ 0: punctuation.section.tag.twig
623+ push:
624+ - meta_scope: meta.tag.template.block.twig
625+ - match: '-?%\}'
626+ captures:
627+ 0: punctuation.section.tag.twig
628+ pop: true
629+ - include: twig-constants
630+ - include: twig-keywords
631+ - include: twig-operators
632+ - include: twig-functions-warg
633+ - include: twig-functions
634+ - include: twig-macros
635+ - include: twig-filters-warg
636+ - include: twig-filters
637+ - include: twig-filters-warg-ud
638+ - include: twig-filters-ud
639+ - include: twig-objects
640+ - include: twig-properties
641+ - include: twig-strings
642+ - include: twig-arrays
643+ - include: twig-hashes
644+ twig-strings:
645+ - match: (?:(?<!\\)|(?<=\\\\))'
646+ captures:
647+ 0: punctuation.definition.string.begin.twig
648+ push:
649+ - meta_scope: string.quoted.single.twig
650+ - match: (?:(?<!\\)|(?<=\\\\))'
651+ captures:
652+ 0: punctuation.definition.string.end.twig
653+ pop: true
654+ - match: (?:(?<!\\)|(?<=\\\\))"
655+ captures:
656+ 0: punctuation.definition.string.begin.twig
657+ push:
658+ - meta_scope: string.quoted.double.twig
659+ - match: (?:(?<!\\)|(?<=\\\\))"
660+ captures:
661+ 0: punctuation.definition.string.end.twig
662+ pop: true