diff options
Diffstat (limited to 'assets/syntaxes/02_Extra/HTML (Twig).sublime-syntax')
-rw-r--r-- | assets/syntaxes/02_Extra/HTML (Twig).sublime-syntax | 662 |
1 files changed, 662 insertions, 0 deletions
diff --git a/assets/syntaxes/02_Extra/HTML (Twig).sublime-syntax b/assets/syntaxes/02_Extra/HTML (Twig).sublime-syntax new file mode 100644 index 00000000..fcedca32 --- /dev/null +++ b/assets/syntaxes/02_Extra/HTML (Twig).sublime-syntax @@ -0,0 +1,662 @@ +%YAML 1.2 +--- +# http://www.sublimetext.com/docs/3/syntax.html +name: HTML (Twig) +file_extensions: + - twig + - html.twig +scope: text.html.twig +contexts: + main: + - match: '(<)([a-zA-Z0-9:]++)(?=[^>]*></\2>)' + captures: + 1: punctuation.definition.tag.html + 2: entity.name.tag.html + push: + - meta_scope: meta.tag.any.html + - match: (>(<)/)(\2)(>) + captures: + 1: punctuation.definition.tag.html + 2: meta.scope.between-tag-pair.html + 3: entity.name.tag.html + 4: punctuation.definition.tag.html + pop: true + - include: tag-stuff + - match: (<\?)(xml) + captures: + 1: punctuation.definition.tag.html + 2: entity.name.tag.xml.html + push: + - meta_scope: meta.tag.preprocessor.xml.html + - match: (\?>) + captures: + 1: punctuation.definition.tag.html + 2: entity.name.tag.xml.html + pop: true + - include: tag-generic-attribute + - include: string-double-quoted + - include: string-single-quoted + - match: <!-- + captures: + 0: punctuation.definition.comment.html + push: + - meta_scope: comment.block.html + - match: '--\s*>' + captures: + 0: punctuation.definition.comment.html + pop: true + - match: "--" + scope: invalid.illegal.bad-comments-or-CDATA.html + - include: embedded-code + - match: <! + captures: + 0: punctuation.definition.tag.html + push: + - meta_scope: meta.tag.sgml.html + - match: ">" + captures: + 0: punctuation.definition.tag.html + pop: true + - match: (?i:DOCTYPE) + captures: + 1: entity.name.tag.doctype.html + push: + - meta_scope: meta.tag.sgml.doctype.html + - match: (?=>) + captures: + 1: entity.name.tag.doctype.html + pop: true + - match: '"[^">]*"' + scope: string.quoted.double.doctype.identifiers-and-DTDs.html + - match: '\[CDATA\[' + push: + - meta_scope: constant.other.inline-data.html + - match: "]](?=>)" + pop: true + - match: (\s*)(?!--|>)\S(\s*) + scope: invalid.illegal.bad-comments-or-CDATA.html + - include: embedded-code + - match: '(?:^\s+)?(<)((?i:style))\b(?![^>]*/>)' + captures: + 1: punctuation.definition.tag.html + 2: entity.name.tag.style.html + 3: punctuation.definition.tag.html + push: + - meta_scope: source.css.embedded.html + - match: (</)((?i:style))(>)(?:\s*\n)? + captures: + 1: punctuation.definition.tag.html + 2: entity.name.tag.style.html + 3: punctuation.definition.tag.html + pop: true + - include: tag-stuff + - match: (>) + captures: + 1: punctuation.definition.tag.html + push: + - match: (?=</(?i:style)) + pop: true + - include: embedded-code + - include: scope:source.css + - match: '(?:^\s+)?(<)((?i:script))\b(?![^>]*/>)' + captures: + 1: punctuation.definition.tag.html + 2: entity.name.tag.script.html + push: + - meta_scope: source.js.embedded.html + - match: (?<=</(script|SCRIPT))(>)(?:\s*\n)? + captures: + 2: punctuation.definition.tag.html + pop: true + - include: tag-stuff + - match: (?<!</(?:script|SCRIPT))(>) + captures: + 1: punctuation.definition.tag.html + 2: entity.name.tag.script.html + push: + - match: (</)((?i:script)) + captures: + 1: punctuation.definition.tag.html + 2: entity.name.tag.script.html + pop: true + - match: (//).*?((?=</script)|$\n?) + scope: comment.line.double-slash.js + captures: + 1: punctuation.definition.comment.js + - match: /\* + captures: + 0: punctuation.definition.comment.js + push: + - meta_scope: comment.block.js + - match: \*/|(?=</script) + captures: + 0: punctuation.definition.comment.js + pop: true + - include: php + - include: twig-print-tag + - include: twig-statement-tag + - include: twig-comment-tag + - include: scope:source.js + - match: (</?)((?i:body|head|html)\b) + captures: + 1: punctuation.definition.tag.html + 2: entity.name.tag.structure.any.html + push: + - meta_scope: meta.tag.structure.any.html + - match: (>) + captures: + 1: punctuation.definition.tag.html + 2: entity.name.tag.structure.any.html + pop: true + - include: tag-stuff + - 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) + captures: + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.block.any.html + push: + - meta_scope: meta.tag.block.any.html + - match: (>) + captures: + 1: punctuation.definition.tag.end.html + pop: true + - include: tag-stuff + - 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) + captures: + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.inline.any.html + push: + - meta_scope: meta.tag.inline.any.html + - match: "((?: ?/)?>)" + captures: + 1: punctuation.definition.tag.end.html + pop: true + - include: tag-stuff + - match: "(</?)([a-zA-Z0-9:]+)" + captures: + 1: punctuation.definition.tag.begin.html + 2: entity.name.tag.other.html + push: + - meta_scope: meta.tag.other.html + - match: (>) + captures: + 1: punctuation.definition.tag.end.html + pop: true + - include: tag-stuff + - include: entities + - match: <> + scope: invalid.illegal.incomplete.html + - match: < + scope: invalid.illegal.bad-angle-bracket.html + - include: twig-print-tag + - include: twig-statement-tag + - include: twig-comment-tag + embedded-code: + - include: ruby + - include: php + - include: twig-print-tag + - include: twig-statement-tag + - include: twig-comment-tag + - include: python + entities: + - match: "(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)" + scope: constant.character.entity.html + captures: + 1: punctuation.definition.entity.html + 3: punctuation.definition.entity.html + - match: "&" + scope: invalid.illegal.bad-ampersand.html + php: + - match: (?=(^\s*)?<\?) + push: + - match: (?!(^\s*)?<\?) + pop: true + - include: scope:text.html.php + python: + - match: (?:^\s*)<\?python(?!.*\?>) + push: + - meta_scope: source.python.embedded.html + - match: \?>(?:\s*$\n)? + pop: true + - include: scope:source.python + ruby: + - match: "<%+#" + captures: + 0: punctuation.definition.comment.erb + push: + - meta_scope: comment.block.erb + - match: "%>" + captures: + 0: punctuation.definition.comment.erb + pop: true + - match: <%+(?!>)=? + captures: + 0: punctuation.section.embedded.ruby + push: + - meta_scope: source.ruby.embedded.html + - match: "-?%>" + captures: + 0: punctuation.section.embedded.ruby + pop: true + - match: (#).*?(?=-?%>) + scope: comment.line.number-sign.ruby + captures: + 1: punctuation.definition.comment.ruby + - include: scope:source.ruby + - match: <\?r(?!>)=? + captures: + 0: punctuation.section.embedded.ruby.nitro + push: + - meta_scope: source.ruby.nitro.embedded.html + - match: '-?\?>' + captures: + 0: punctuation.section.embedded.ruby.nitro + pop: true + - match: (#).*?(?=-?\?>) + scope: comment.line.number-sign.ruby.nitro + captures: + 1: punctuation.definition.comment.ruby.nitro + - include: scope:source.ruby + string-double-quoted: + - match: '"' + captures: + 0: punctuation.definition.string.begin.html + push: + - meta_scope: string.quoted.double.html + - match: '"' + captures: + 0: punctuation.definition.string.end.html + pop: true + - include: embedded-code + - include: entities + string-single-quoted: + - match: "'" + captures: + 0: punctuation.definition.string.begin.html + push: + - meta_scope: string.quoted.single.html + - match: "'" + captures: + 0: punctuation.definition.string.end.html + pop: true + - include: embedded-code + - include: entities + tag-generic-attribute: + - match: '\b([a-zA-Z\-:]+)' + scope: entity.other.attribute-name.html + tag-id-attribute: + - match: \b(id)\b\s*(=) + captures: + 1: entity.other.attribute-name.id.html + 2: punctuation.separator.key-value.html + push: + - meta_scope: meta.attribute-with-value.id.html + - match: (?<='|") + captures: + 1: entity.other.attribute-name.id.html + 2: punctuation.separator.key-value.html + pop: true + - match: '"' + captures: + 0: punctuation.definition.string.begin.html + push: + - meta_scope: string.quoted.double.html + - meta_content_scope: meta.toc-list.id.html + - match: '"' + captures: + 0: punctuation.definition.string.end.html + pop: true + - include: embedded-code + - include: entities + - match: "'" + captures: + 0: punctuation.definition.string.begin.html + push: + - meta_scope: string.quoted.single.html + - meta_content_scope: meta.toc-list.id.html + - match: "'" + captures: + 0: punctuation.definition.string.end.html + pop: true + - include: embedded-code + - include: entities + tag-stuff: + - include: tag-id-attribute + - include: tag-generic-attribute + - include: string-double-quoted + - include: string-single-quoted + - include: embedded-code + twig-arrays: + - match: '(?<=[\s\(\{\[:,])\[' + captures: + 0: punctuation.section.array.begin.twig + push: + - meta_scope: meta.array.twig + - match: '\]' + captures: + 0: punctuation.section.array.end.twig + pop: true + - include: twig-arrays + - include: twig-hashes + - include: twig-constants + - include: twig-strings + - include: twig-functions-warg + - include: twig-functions + - include: twig-macros + - include: twig-objects + - include: twig-properties + - include: twig-filters-warg + - include: twig-filters + - include: twig-filters-warg-ud + - include: twig-filters-ud + - match: "," + scope: punctuation.separator.object.twig + twig-comment-tag: + - match: '\{#-?' + captures: + 0: punctuation.definition.comment.begin.twig + push: + - meta_scope: comment.block.twig + - match: '-?#\}' + captures: + 0: punctuation.definition.comment.end.twig + pop: true + twig-constants: + - match: '(?i)(?<=[\s\[\(\{:,])(?:true|false|null|none)(?=[\s\)\]\}\,])' + scope: constant.language.twig + - match: '(?<=[\s\[\(\{:,]|\.\.|\*\*)[0-9]+(?:\.[0-9]+)?(?=[\s\)\]\}\,]|\.\.|\*\*)' + scope: constant.numeric.twig + twig-filters: + - 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\|\]\}\):,]|\.\.|\*\*)' + captures: + 1: support.function.twig + twig-filters-ud: + - 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}]*)' + captures: + 1: meta.function-call.other.twig + twig-filters-warg: + - 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)(\()' + captures: + 1: support.function.twig + 2: punctuation.definition.parameters.begin.twig + push: + - meta_content_scope: meta.function.arguments.twig + - match: \) + captures: + 0: punctuation.definition.parameters.end.twig + pop: true + - include: twig-constants + - include: twig-functions-warg + - include: twig-functions + - include: twig-macros + - include: twig-objects + - include: twig-properties + - include: twig-filters-warg + - include: twig-filters + - include: twig-filters-warg-ud + - include: twig-filters-ud + - include: twig-strings + - include: twig-arrays + - include: twig-hashes + twig-filters-warg-ud: + - 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}]*)(\()' + captures: + 1: meta.function-call.other.twig + 2: punctuation.definition.parameters.begin.twig + push: + - meta_content_scope: meta.function.arguments.twig + - match: \) + captures: + 0: punctuation.definition.parameters.end.twig + pop: true + - include: twig-constants + - include: twig-functions-warg + - include: twig-functions + - include: twig-macros + - include: twig-objects + - include: twig-properties + - include: twig-filters-warg + - include: twig-filters + - include: twig-filters-warg-ud + - include: twig-filters-ud + - include: twig-strings + - include: twig-arrays + - include: twig-hashes + twig-functions: + - match: (?<=is\s)(defined|empty|even|iterable|odd) + captures: + 1: support.function.twig + twig-functions-warg: + - match: '(?<=[\s\(\[\{:,])(attribute|block|constant|cycle|date|divisible by|dump|include|max|min|parent|random|range|same as|source|template_from_string)(\()' + captures: + 1: support.function.twig + 2: punctuation.definition.parameters.begin.twig + push: + - meta_content_scope: meta.function.arguments.twig + - match: \) + captures: + 0: punctuation.definition.parameters.end.twig + pop: true + - include: twig-constants + - include: twig-functions-warg + - include: twig-functions + - include: twig-macros + - include: twig-objects + - include: twig-properties + - include: twig-filters-warg + - include: twig-filters + - include: twig-filters-warg-ud + - include: twig-filters-ud + - include: twig-strings + - include: twig-arrays + twig-hashes: + - match: '(?<=[\s\(\{\[:,])\{' + captures: + 0: punctuation.section.hash.begin.twig + push: + - meta_scope: meta.hash.twig + - match: '\}' + captures: + 0: punctuation.section.hash.end.twig + pop: true + - include: twig-hashes + - include: twig-arrays + - include: twig-constants + - include: twig-strings + - include: twig-functions-warg + - include: twig-functions + - include: twig-macros + - include: twig-objects + - include: twig-properties + - include: twig-filters-warg + - include: twig-filters + - include: twig-filters-warg-ud + - include: twig-filters-ud + - match: ":" + scope: punctuation.separator.key-value.twig + - match: "," + scope: punctuation.separator.object.twig + twig-keywords: + - 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) + scope: keyword.control.twig + twig-macros: + - match: |- + (?x) + (?<=[\s\(\[\{:,]) + ([a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*) + (?: + (\.)([a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*) + )? + (\() + captures: + 1: meta.function-call.twig + 2: punctuation.separator.property.twig + 3: variable.other.property.twig + 4: punctuation.definition.parameters.begin.twig + push: + - meta_content_scope: meta.function.arguments.twig + - match: \) + captures: + 0: punctuation.definition.parameters.end.twig + pop: true + - include: twig-constants + - include: twig-operators + - include: twig-functions-warg + - include: twig-functions + - include: twig-macros + - include: twig-objects + - include: twig-properties + - include: twig-filters-warg + - include: twig-filters + - include: twig-filters-warg-ud + - include: twig-filters-ud + - include: twig-strings + - include: twig-arrays + - include: twig-hashes + twig-objects: + - match: '(?<=[\s\{\[\(:,])([a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)(?=[\s\}\[\]\(\)\.\|,:])' + captures: + 1: variable.other.twig + twig-operators: + - match: (?<=\s)(\+|-|//?|%|\*\*?)(?=\s) + captures: + 1: keyword.operator.arithmetic.twig + - match: (?<=\s)(=|~)(?=\s) + captures: + 1: keyword.operator.assignment.twig + - match: (?<=\s)(b-(?:and|or|xor))(?=\s) + captures: + 1: keyword.operator.bitwise.twig + - match: '(?<=\s)((?:!|=)=|<=?|>=?|(?:not )?in|is(?: not)?|(?:ends|starts) with|matches)(?=\s)' + captures: + 1: keyword.operator.comparison.twig + - match: (?<=\s)(\?|:|and|not|or)(?=\s) + captures: + 1: keyword.operator.logical.twig + - match: '(?<=[a-zA-Z0-9_\x{7f}-\x{ff}\]\)''"])\.\.(?=[a-zA-Z0-9_\x{7f}-\x{ff}''"])' + captures: + 0: keyword.operator.other.twig + - match: '(?<=[a-zA-Z0-9_\x{7f}-\x{ff}\]\}\)''"])\|(?=[a-zA-Z_\x{7f}-\x{ff}])' + captures: + 0: keyword.operator.other.twig + twig-print-tag: + - match: '\{\{-?' + captures: + 0: punctuation.section.tag.twig + push: + - meta_scope: meta.tag.template.value.twig + - match: '-?\}\}' + captures: + 0: punctuation.section.tag.twig + pop: true + - include: twig-constants + - include: twig-operators + - include: twig-functions-warg + - include: twig-functions + - include: twig-macros + - include: twig-objects + - include: twig-properties + - include: twig-filters-warg + - include: twig-filters + - include: twig-filters-warg-ud + - include: twig-filters-ud + - include: twig-strings + - include: twig-arrays + - include: twig-hashes + twig-properties: + - match: |- + (?x) + (?<=[a-zA-Z0-9_\x{7f}-\x{ff}]) + (\.)([a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*) + (?=[\.\s\|\[\)\]\}:,]) + captures: + 1: punctuation.separator.property.twig + 2: variable.other.property.twig + - match: |- + (?x) + (?<=[a-zA-Z0-9_\x{7f}-\x{ff}]) + (\.)([a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*) + (\() + captures: + 1: punctuation.separator.property.twig + 2: variable.other.property.twig + 3: punctuation.definition.parameters.begin.twig + push: + - meta_content_scope: meta.function.arguments.twig + - match: \) + captures: + 0: punctuation.definition.parameters.end.twig + pop: true + - include: twig-constants + - include: twig-functions-warg + - include: twig-functions + - include: twig-macros + - include: twig-objects + - include: twig-properties + - include: twig-filters-warg + - include: twig-filters + - include: twig-filters-warg-ud + - include: twig-filters-ud + - include: twig-strings + - include: twig-arrays + - match: |- + (?x) + (?<=[a-zA-Z0-9_\x{7f}-\x{ff}\]]) + (?: + (\[)('[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*')(\]) + |(\[)("[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*")(\]) + |(\[)([a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)(\]) + ) + captures: + 1: punctuation.section.array.begin.twig + 2: variable.other.property.twig + 3: punctuation.section.array.end.twig + 4: punctuation.section.array.begin.twig + 5: variable.other.property.twig + 6: punctuation.section.array.end.twig + 7: punctuation.section.array.begin.twig + 8: variable.other.property.twig + 9: punctuation.section.array.end.twig + twig-statement-tag: + - match: '\{%-?' + captures: + 0: punctuation.section.tag.twig + push: + - meta_scope: meta.tag.template.block.twig + - match: '-?%\}' + captures: + 0: punctuation.section.tag.twig + pop: true + - include: twig-constants + - include: twig-keywords + - include: twig-operators + - include: twig-functions-warg + - include: twig-functions + - include: twig-macros + - include: twig-filters-warg + - include: twig-filters + - include: twig-filters-warg-ud + - include: twig-filters-ud + - include: twig-objects + - include: twig-properties + - include: twig-strings + - include: twig-arrays + - include: twig-hashes + twig-strings: + - match: (?:(?<!\\)|(?<=\\\\))' + captures: + 0: punctuation.definition.string.begin.twig + push: + - meta_scope: string.quoted.single.twig + - match: (?:(?<!\\)|(?<=\\\\))' + captures: + 0: punctuation.definition.string.end.twig + pop: true + - match: (?:(?<!\\)|(?<=\\\\))" + captures: + 0: punctuation.definition.string.begin.twig + push: + - meta_scope: string.quoted.double.twig + - match: (?:(?<!\\)|(?<=\\\\))" + captures: + 0: punctuation.definition.string.end.twig + pop: true |