|
- %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
|