// This is a TextMate grammar distributed by `starry-night`. // This grammar is developed at // // and licensed `mit`. // See for more info. /** * @import {Grammar} from '@wooorm/starry-night' */ /** @type {Grammar} */ const grammar = { dependencies: ['text.html.basic'], extensions: ['.slim'], names: ['slim'], patterns: [ { begin: '^(\\s*)(ruby):$', beginCaptures: {2: {name: 'constant.language.name.ruby.filter.slim'}}, end: '^(?!(\\1\\s)|\\s*$)', name: 'meta.filter.slim source.ruby.embedded.slim', patterns: [{include: 'source.ruby'}] }, { begin: '^(\\s*)(javascript).*:$', beginCaptures: { 2: {name: 'constant.language.name.javascript.filter.slim'} }, end: '^(?!(\\1\\s)|\\s*$)', name: 'meta.filter.slim source.js.embedded.slim', patterns: [{include: 'source.js'}] }, { begin: '^(\\s*)(coffee).*:$', beginCaptures: { 2: {name: 'constant.language.name.coffeescript.filter.slim'} }, end: '^(?!(\\1\\s)|\\s*$)', name: 'meta.filter.slim source.coffee.embedded.slim', patterns: [{include: 'source.coffee'}] }, { begin: '^(\\s*)(markdown):$', beginCaptures: {2: {name: 'constant.language.name.markdown.filter.slim'}}, end: '^(?!(\\1\\s)|\\s*$)', name: 'meta.filter.slim text.html.markdown.embedded.slim', patterns: [{include: 'text.md'}] }, { begin: '^(\\s*)(css).*:$', beginCaptures: {2: {name: 'constant.language.name.css.filter.slim'}}, end: '^(?!(\\1\\s)|\\s*$)', name: 'meta.filter.slim source.css.embedded.slim', patterns: [{include: 'source.css'}] }, { begin: '^(\\s*)(sass).*:$', beginCaptures: {2: {name: 'constant.language.name.sass.filter.slim'}}, end: '^(?!(\\1\\s)|\\s*$)', name: 'meta.filter.slim source.sass.embedded.slim', patterns: [{include: 'source.sass'}] }, { begin: '^(\\s*)(scss).*:$', beginCaptures: {2: {name: 'constant.language.name.scss.filter.slim'}}, end: '^(?!(\\1\\s)|\\s*$)', name: 'meta.filter.slim source.scss.embedded.slim', patterns: [{include: 'source.css.scss'}] }, { begin: '^(\\s*)(less).*:$', beginCaptures: {2: {name: 'constant.language.name.less.filter.slim'}}, end: '^(?!(\\1\\s)|\\s*$)', name: 'meta.filter.slim source.less.embedded.slim', patterns: [{include: 'source.css.less'}] }, { begin: '^(\\s*)(erb):$', beginCaptures: {2: {name: 'constant.language.name.erb.filter.slim'}}, end: '^(?!(\\1\\s)|\\s*$)', name: 'meta.filter.slim text.html.erb.embedded.slim', patterns: [{include: 'text.html.erb'}] }, { begin: '^(\\s*)((/!)\\s*.*)$', beginCaptures: { 2: {name: 'comment.line.slash.slim'}, 3: {name: 'punctuation.definition.comment.slim'} }, end: '^(?!(\\1\\s)|\\s*$)', name: 'comment.block.html.slim' }, { begin: '^(\\s*)((/)((\\[).*(\\])).*)$', beginCaptures: { 2: {name: 'comment.line.slash.slim'}, 3: {name: 'punctuation.definition.comment.slim'}, 4: {name: 'meta.brackets.slim'}, 5: {name: 'punctuation.section.brackets.begin.slim'}, 6: {name: 'punctuation.section.brackets.end.slim'} }, end: '^(?!(\\1\\s)|\\s*$)', name: 'comment.block.slim' }, { begin: '^(\\s*)((/)\\s*.*)$', beginCaptures: { 2: {name: 'comment.line.slash.slim'}, 3: {name: 'punctuation.definition.comment.slim'} }, end: '^(?!(\\1\\s)|\\s*$)', name: 'comment.block.slim' }, {begin: '^\\s*(?=-)', end: '$', patterns: [{include: '#rubyline'}]}, {begin: '^\\s*(?==+|~)', end: '$', patterns: [{include: '#rubyline'}]}, {include: '#splat-attribute'}, {include: '#interpolated-ruby'}, {include: '#verbatim-text'}, { captures: {0: {name: 'meta.tag.sgml.doctype.slim'}}, match: '^\\s*(doctype)\\s+.*(\\n|$)' }, { begin: '(\\s*)(?:([\\w-]+)|(\\.)((?:[\\w-]|(?::(?!\\s)))+(?:/\\d+)?)|(#)((?:[\\w-]|(?::(?!\\s)))+(?:/\\d+)?))', beginCaptures: { 2: {name: 'entity.name.tag.slim'}, 3: {name: 'punctuation.definition.attribute.class.slim'}, 4: {name: 'entity.other.attribute-name.class.html'}, 5: {name: 'punctuation.definition.attribute.id.slim'}, 6: {name: 'entity.other.attribute-name.id.html'} }, end: '$|(:)(?=\\s)', endCaptures: {1: {name: 'punctuation.definition.tag.end.slim'}}, name: 'meta.tag.slim', patterns: [ {include: '#xml-namespace'}, {include: '#class-id-shortcut'}, {include: '#attribute-wrapper'}, {include: '#splat-attribute'}, {include: '#whitespace-modifier'}, {include: '#rubyline'}, {include: '#tag-attribute'}, {include: '#whitespace'}, {include: '#closed-tag-terminator'}, {include: '#inline-text'} ] }, {captures: {1: {name: 'meta.escape.slim'}}, match: '^\\s*(\\\\.)'}, {include: '#inline-text'} ], repository: { 'attribute-wrapper': { patterns: [ {include: '#attribute-wrapper-parens'}, {include: '#attribute-wrapper-brackets'}, {include: '#attribute-wrapper-braces'} ] }, 'attribute-wrapper-braces': { begin: '\\{', beginCaptures: {0: {name: 'punctuation.section.braces.begin.slim'}}, end: '\\}', endCaptures: {0: {name: 'punctuation.section.braces.end.slim'}}, name: 'meta.braces.slim', patterns: [ {include: '#tag-attribute-wrapped'}, {include: '#tag-boolean-attribute'} ] }, 'attribute-wrapper-brackets': { begin: '\\[', beginCaptures: {0: {name: 'punctuation.section.brackets.begin.slim'}}, end: '\\]', endCaptures: {0: {name: 'punctuation.section.brackets.end.slim'}}, name: 'meta.brackets.slim', patterns: [ {include: '#tag-attribute-wrapped'}, {include: '#tag-boolean-attribute'} ] }, 'attribute-wrapper-parens': { begin: '\\(', beginCaptures: {0: {name: 'punctuation.section.parens.begin.slim'}}, end: '\\)', endCaptures: {0: {name: 'punctuation.section.parens.end.slim'}}, name: 'meta.parens.slim', patterns: [ {include: '#tag-attribute-wrapped'}, {include: '#tag-boolean-attribute'} ] }, 'boolean-attribute-value': { begin: 'true|false|nil', end: '(?=\\s)|$', name: 'constant.language.slim' }, 'class-id-shortcut': { patterns: [{include: '#class-shortcut'}, {include: '#id-shortcut'}] }, 'class-shortcut': { captures: { 1: {name: 'punctuation.definition.attribute.class.slim'}, 2: {name: 'entity.other.attribute-name.class.html'} }, match: '(\\.)((?:[\\w-]|(?::(?!\\s)))+(?:/\\d+)?)' }, 'closed-tag-terminator': { match: '\\s*/\\s*', name: 'punctuation.terminator.tag.slim' }, continuation: { captures: {1: {name: 'punctuation.separator.continuation.slim'}}, match: '([\\\\,])\\s*\\n' }, 'delimited-ruby-group': { begin: '\\(', beginCaptures: {0: {name: 'punctuation.definition.group.begin.slim'}}, contentName: 'meta.source.ruby', end: '(\\))(?=(\\s|\\]|\\}$))', endCaptures: {1: {name: 'punctuation.definition.group.end.slim'}}, name: 'meta.embedded.slim meta.string.ruby source.ruby.embedded.slim entity.other.slim.ruby-attribute-delimited', patterns: [{include: 'source.ruby'}] }, entities: { patterns: [ { captures: { 1: {name: 'punctuation.definition.entity.html'}, 3: {name: 'punctuation.definition.entity.html'} }, match: '(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)', name: 'constant.character.entity.html' }, {match: '&', name: 'invalid.illegal.bad-ampersand.html'} ] }, 'id-shortcut': { captures: { 1: {name: 'punctuation.definition.attribute.id.slim'}, 2: {name: 'entity.other.attribute-name.id.html'} }, match: '(#)((?:[\\w-]|(?::(?!\\s)))+(?:/\\d+)?)' }, 'inline-text': { begin: '(?=.)', end: '(?|><|<'|'<|<|>)?|-\\s*", beginCaptures: { 0: {name: 'punctuation.section.embedded.slim'}, 2: {name: 'keyword.operator.whitespace.slim'} }, contentName: 'meta.embedded.slim meta.string.ruby source.ruby.embedded.slim entity.other.slim.ruby-line', end: '(do\\s*\\n$)|(? |<> |>< )?)\\s*", beginCaptures: {2: {name: 'punctuation.section.verbatim.slim'}}, contentName: 'text.html.embedded.slim', end: '^(?!(\\1\\s)|\\s*$)', patterns: [{include: 'text.html.basic'}, {include: '#interpolated-ruby'}] }, whitespace: {match: '\\s+', name: 'text.html.embedded.whitespace.slim'}, 'whitespace-modifier': { match: '(?|\\<|\\<\\>|\\>\\<)', name: 'keyword.operator.whitespace.slim' }, 'xml-namespace': {match: '(:[\\w-]+)+', name: 'entity.name.tag.slim'} }, scopeName: 'text.slim' } export default grammar