474 lines
15 KiB
Plaintext
474 lines
15 KiB
Plaintext
|
%YAML 1.2
|
||
|
---
|
||
|
# http://www.sublimetext.com/docs/3/syntax.html
|
||
|
name: Handlebars
|
||
|
file_extensions:
|
||
|
- handlebars
|
||
|
- handlebars.html
|
||
|
- hbr
|
||
|
- hbrs
|
||
|
- hbs
|
||
|
- hdbs
|
||
|
- hjs
|
||
|
- mu
|
||
|
- mustache
|
||
|
- rac
|
||
|
- stache
|
||
|
- template
|
||
|
- tmpl
|
||
|
scope: text.html.handlebars
|
||
|
contexts:
|
||
|
main:
|
||
|
- include: yfm
|
||
|
- include: extends
|
||
|
- include: block_comments
|
||
|
- include: comments
|
||
|
- include: block_helper
|
||
|
- include: end_block
|
||
|
- include: else_token
|
||
|
- include: partial_and_var
|
||
|
- include: inline_script
|
||
|
- include: html_tags
|
||
|
- include: scope:text.html.basic
|
||
|
block_comments:
|
||
|
- match: '\{\{!--'
|
||
|
push:
|
||
|
- meta_scope: comment.block.handlebars
|
||
|
- match: '--\}\}'
|
||
|
pop: true
|
||
|
- match: '@\w*'
|
||
|
scope: keyword.annotation.handlebars
|
||
|
- include: comments
|
||
|
- match: <!--
|
||
|
captures:
|
||
|
0: punctuation.definition.comment.html
|
||
|
push:
|
||
|
- meta_scope: comment.block.html
|
||
|
- match: '-{2,3}\s*>'
|
||
|
captures:
|
||
|
0: punctuation.definition.comment.html
|
||
|
pop: true
|
||
|
- match: "--"
|
||
|
scope: invalid.illegal.bad-comments-or-CDATA.html
|
||
|
block_helper:
|
||
|
- match: '(\{\{~?\#)([-a-zA-Z0-9_\./>]+)\s?(@?[-a-zA-Z0-9_\./]+)*\s?(@?[-a-zA-Z0-9_\./]+)*\s?(@?[-a-zA-Z0-9_\./]+)*'
|
||
|
captures:
|
||
|
1: support.constant.handlebars
|
||
|
2: support.constant.handlebars
|
||
|
3: variable.parameter.handlebars
|
||
|
4: support.constant.handlebars
|
||
|
5: variable.parameter.handlebars
|
||
|
6: support.constant.handlebars
|
||
|
push:
|
||
|
- meta_scope: meta.function.block.start.handlebars
|
||
|
- match: '(~?\}\})'
|
||
|
captures:
|
||
|
1: support.constant.handlebars
|
||
|
pop: true
|
||
|
- include: string
|
||
|
- include: handlebars_attribute
|
||
|
comments:
|
||
|
- match: '\{\{!'
|
||
|
push:
|
||
|
- meta_scope: comment.block.handlebars
|
||
|
- match: '\}\}'
|
||
|
pop: true
|
||
|
- match: '@\w*'
|
||
|
scope: keyword.annotation.handlebars
|
||
|
- include: comments
|
||
|
- match: <!--
|
||
|
captures:
|
||
|
0: punctuation.definition.comment.html
|
||
|
push:
|
||
|
- meta_scope: comment.block.html
|
||
|
- match: '-{2,3}\s*>'
|
||
|
captures:
|
||
|
0: punctuation.definition.comment.html
|
||
|
pop: true
|
||
|
- match: "--"
|
||
|
scope: invalid.illegal.bad-comments-or-CDATA.html
|
||
|
else_token:
|
||
|
- match: '(\{\{~?else)(@?\s(if)\s([-a-zA-Z0-9_\./]+))?'
|
||
|
captures:
|
||
|
1: support.constant.handlebars
|
||
|
3: support.constant.handlebars
|
||
|
4: variable.parameter.handlebars
|
||
|
push:
|
||
|
- meta_scope: meta.function.inline.else.handlebars
|
||
|
- match: '(~?\}\}\}*)'
|
||
|
captures:
|
||
|
1: support.constant.handlebars
|
||
|
pop: true
|
||
|
end_block:
|
||
|
- match: '(\{\{~?/)([a-zA-Z0-9/_\.-]+)\s*'
|
||
|
captures:
|
||
|
1: support.constant.handlebars
|
||
|
2: support.constant.handlebars
|
||
|
push:
|
||
|
- meta_scope: meta.function.block.end.handlebars
|
||
|
- match: '(~?\}\})'
|
||
|
captures:
|
||
|
1: support.constant.handlebars
|
||
|
pop: true
|
||
|
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
|
||
|
escaped-double-quote:
|
||
|
- match: \\"
|
||
|
scope: constant.character.escape.js
|
||
|
escaped-single-quote:
|
||
|
- match: \\'
|
||
|
scope: constant.character.escape.js
|
||
|
extends:
|
||
|
- match: '(\{\{!<)\s([-a-zA-Z0-9_\./]+)'
|
||
|
captures:
|
||
|
1: support.function.handlebars
|
||
|
2: support.class.handlebars
|
||
|
push:
|
||
|
- meta_scope: meta.preprocessor.handlebars
|
||
|
- match: '(\}\})'
|
||
|
captures:
|
||
|
1: support.function.handlebars
|
||
|
pop: true
|
||
|
handlebars_attribute:
|
||
|
- include: handlebars_attribute_name
|
||
|
- include: handlebars_attribute_value
|
||
|
handlebars_attribute_name:
|
||
|
- match: '\b([-a-zA-Z0-9_\.]+)\b='
|
||
|
captures:
|
||
|
1: variable.parameter.handlebars
|
||
|
push:
|
||
|
- meta_scope: entity.other.attribute-name.handlebars
|
||
|
- match: (?='|"|)
|
||
|
captures:
|
||
|
1: variable.parameter.handlebars
|
||
|
pop: true
|
||
|
handlebars_attribute_value:
|
||
|
- match: '([-a-zA-Z0-9_\./]+)\b'
|
||
|
captures:
|
||
|
1: variable.parameter.handlebars
|
||
|
push:
|
||
|
- meta_scope: entity.other.attribute-value.handlebars
|
||
|
- match: ('|"|)
|
||
|
captures:
|
||
|
1: variable.parameter.handlebars
|
||
|
pop: true
|
||
|
- include: string
|
||
|
html_tags:
|
||
|
- 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
|
||
|
- 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
|
||
|
- match: <!
|
||
|
captures:
|
||
|
0: punctuation.definition.tag.html
|
||
|
push:
|
||
|
- meta_scope: meta.tag.sgml.html
|
||
|
- match: ">"
|
||
|
captures:
|
||
|
0: punctuation.definition.tag.html
|
||
|
pop: true
|
||
|
- match: (DOCTYPE|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
|
||
|
- 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: 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: 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|header|section|footer|aside|nav|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.html
|
||
|
2: entity.name.tag.block.any.html
|
||
|
push:
|
||
|
- meta_scope: meta.tag.block.any.html
|
||
|
- match: (>)
|
||
|
captures:
|
||
|
1: punctuation.definition.tag.html
|
||
|
2: entity.name.tag.block.any.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.html
|
||
|
2: entity.name.tag.inline.any.html
|
||
|
push:
|
||
|
- meta_scope: meta.tag.inline.any.html
|
||
|
- match: "((?: ?/)?>)"
|
||
|
captures:
|
||
|
1: punctuation.definition.tag.html
|
||
|
2: entity.name.tag.inline.any.html
|
||
|
pop: true
|
||
|
- include: tag-stuff
|
||
|
- match: "(</?)([a-zA-Z0-9:-]+)"
|
||
|
captures:
|
||
|
1: punctuation.definition.tag.html
|
||
|
2: entity.name.tag.other.html
|
||
|
push:
|
||
|
- meta_scope: meta.tag.other.html
|
||
|
- match: (>)
|
||
|
captures:
|
||
|
1: punctuation.definition.tag.html
|
||
|
2: entity.name.tag.other.html
|
||
|
pop: true
|
||
|
- include: tag-stuff
|
||
|
- match: "(</?)([a-zA-Z0-9{}:-]+)"
|
||
|
captures:
|
||
|
1: punctuation.definition.tag.html
|
||
|
2: entity.name.tag.tokenised.html
|
||
|
push:
|
||
|
- meta_scope: meta.tag.tokenised.html
|
||
|
- match: (>)
|
||
|
captures:
|
||
|
1: punctuation.definition.tag.html
|
||
|
2: entity.name.tag.tokenised.html
|
||
|
pop: true
|
||
|
- include: tag-stuff
|
||
|
- include: entities
|
||
|
- match: <>
|
||
|
scope: invalid.illegal.incomplete.html
|
||
|
- match: <
|
||
|
scope: invalid.illegal.bad-angle-bracket.html
|
||
|
inline_script:
|
||
|
- match: '(?:^\s+)?(<)((?i:script))\b(?:.*(type)=(["''](?:text/x-handlebars-template|text/x-handlebars|text/template|x-tmpl-handlebars)["'']))(?![^>]*/>)'
|
||
|
captures:
|
||
|
1: punctuation.definition.tag.html
|
||
|
2: entity.name.tag.script.html
|
||
|
3: entity.other.attribute-name.html
|
||
|
4: string.quoted.double.html
|
||
|
push:
|
||
|
- meta_scope: source.handlebars.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
|
||
|
- include: block_comments
|
||
|
- include: comments
|
||
|
- include: block_helper
|
||
|
- include: end_block
|
||
|
- include: else_token
|
||
|
- include: partial_and_var
|
||
|
- include: html_tags
|
||
|
- include: scope:text.html.basic
|
||
|
partial_and_var:
|
||
|
- match: '(\{\{~?\{*(>|!<)*)\s*(@?[-a-zA-Z0-9$_\./]+)*'
|
||
|
captures:
|
||
|
1: support.constant.handlebars
|
||
|
3: variable.parameter.handlebars
|
||
|
push:
|
||
|
- meta_scope: meta.function.inline.other.handlebars
|
||
|
- match: '(~?\}\}\}*)'
|
||
|
captures:
|
||
|
1: support.constant.handlebars
|
||
|
pop: true
|
||
|
- include: string
|
||
|
- include: handlebars_attribute
|
||
|
string:
|
||
|
- include: string-single-quoted
|
||
|
- include: string-double-quoted
|
||
|
string-double-quoted:
|
||
|
- match: '"'
|
||
|
captures:
|
||
|
0: punctuation.definition.string.begin.html
|
||
|
push:
|
||
|
- meta_scope: string.quoted.double.handlebars
|
||
|
- match: '"'
|
||
|
captures:
|
||
|
0: punctuation.definition.string.end.html
|
||
|
pop: true
|
||
|
- include: escaped-double-quote
|
||
|
- include: block_comments
|
||
|
- include: comments
|
||
|
- include: block_helper
|
||
|
- include: else_token
|
||
|
- include: end_block
|
||
|
- include: partial_and_var
|
||
|
string-single-quoted:
|
||
|
- match: "'"
|
||
|
captures:
|
||
|
0: punctuation.definition.string.begin.html
|
||
|
push:
|
||
|
- meta_scope: string.quoted.single.handlebars
|
||
|
- match: "'"
|
||
|
captures:
|
||
|
0: punctuation.definition.string.end.html
|
||
|
pop: true
|
||
|
- include: escaped-single-quote
|
||
|
- include: block_comments
|
||
|
- include: comments
|
||
|
- include: block_helper
|
||
|
- include: else_token
|
||
|
- include: end_block
|
||
|
- include: partial_and_var
|
||
|
tag-stuff:
|
||
|
- include: tag_id_attribute
|
||
|
- include: tag_generic_attribute
|
||
|
- include: string
|
||
|
- include: block_comments
|
||
|
- include: comments
|
||
|
- include: block_helper
|
||
|
- include: end_block
|
||
|
- include: else_token
|
||
|
- include: partial_and_var
|
||
|
tag_generic_attribute:
|
||
|
- match: '\b([a-zA-Z0-9_-]+)\b\s*(=)'
|
||
|
captures:
|
||
|
1: entity.other.attribute-name.generic.html
|
||
|
2: punctuation.separator.key-value.html
|
||
|
push:
|
||
|
- meta_scope: entity.other.attribute-name.html
|
||
|
- match: (?<='|"|)
|
||
|
captures:
|
||
|
1: entity.other.attribute-name.generic.html
|
||
|
2: punctuation.separator.key-value.html
|
||
|
pop: true
|
||
|
- include: string
|
||
|
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
|
||
|
- include: string
|
||
|
yfm:
|
||
|
- match: (?<!\s)---\n$
|
||
|
push:
|
||
|
- meta_scope: markup.raw.yaml.front-matter
|
||
|
- match: ^---\s
|
||
|
pop: true
|
||
|
- include: scope:source.yaml
|