mirror of
https://github.com/sharkdp/bat
synced 2024-12-18 16:23:05 +00:00
307 lines
9.6 KiB
Text
307 lines
9.6 KiB
Text
|
%YAML 1.2
|
||
|
---
|
||
|
# http://www.sublimetext.com/docs/syntax.html
|
||
|
name: Ruby Slim
|
||
|
file_extensions:
|
||
|
- slim
|
||
|
- skim
|
||
|
scope: text.slim
|
||
|
contexts:
|
||
|
main:
|
||
|
- match: ^(\s*)(ruby):$
|
||
|
captures:
|
||
|
2: constant.language.name.ruby.filter.slim
|
||
|
push:
|
||
|
- meta_scope: text.ruby.filter.slim
|
||
|
- match: ^(?!(\1\s)|\s*$)
|
||
|
pop: true
|
||
|
- include: scope:source.ruby
|
||
|
- match: ^(\s*)(javascript):$
|
||
|
captures:
|
||
|
2: constant.language.name.javascript.filter.slim
|
||
|
push:
|
||
|
- meta_scope: source.js.filter.slim
|
||
|
- match: ^(?!(\1\s)|\s*$)
|
||
|
pop: true
|
||
|
- include: scope:source.js
|
||
|
- match: ^(---)\s*\n
|
||
|
captures:
|
||
|
1: storage.frontmatter.slim
|
||
|
push:
|
||
|
- meta_scope: source.yaml.meta.slim
|
||
|
- match: ^(---)\s*\n
|
||
|
captures:
|
||
|
1: storage.frontmatter.slim
|
||
|
pop: true
|
||
|
- include: scope:source.yaml
|
||
|
- match: ^(\s*)(coffee):$
|
||
|
captures:
|
||
|
2: constant.language.name.coffeescript.filter.slim
|
||
|
push:
|
||
|
- meta_scope: text.coffeescript.filter.slim
|
||
|
- match: ^(?!(\1\s)|\s*$)
|
||
|
pop: true
|
||
|
- include: scope:source.coffee
|
||
|
- match: ^(\s*)(markdown):$
|
||
|
captures:
|
||
|
2: constant.language.name.markdown.filter.slim
|
||
|
push:
|
||
|
- meta_scope: text.markdown.filter.slim
|
||
|
- match: ^(?!(\1\s)|\s*$)
|
||
|
pop: true
|
||
|
- include: scope:text.html.markdown
|
||
|
- match: ^(\s*)(css):$
|
||
|
captures:
|
||
|
2: constant.language.name.css.filter.slim
|
||
|
push:
|
||
|
- meta_scope: text.css.filter.slim
|
||
|
- match: ^(?!(\1\s)|\s*$)
|
||
|
pop: true
|
||
|
- include: scope:source.css
|
||
|
- match: ^(\s*)(sass):$
|
||
|
captures:
|
||
|
2: constant.language.name.sass.filter.slim
|
||
|
push:
|
||
|
- meta_scope: text.sass.filter.slim
|
||
|
- match: ^(?!(\1\s)|\s*$)
|
||
|
pop: true
|
||
|
- include: scope:source.sass
|
||
|
- match: ^(\s*)(scss):$
|
||
|
captures:
|
||
|
2: constant.language.name.scss.filter.slim
|
||
|
push:
|
||
|
- meta_scope: text.scss.filter.slim
|
||
|
- match: ^(?!(\1\s)|\s*$)
|
||
|
pop: true
|
||
|
- include: scope:source.scss
|
||
|
- match: ^(\s*)(less):$
|
||
|
captures:
|
||
|
2: constant.language.name.less.filter.slim
|
||
|
push:
|
||
|
- meta_scope: text.less.filter.slim
|
||
|
- match: ^(?!(\1\s)|\s*$)
|
||
|
pop: true
|
||
|
- include: scope:source.less
|
||
|
- match: ^(\s*)(erb):$
|
||
|
captures:
|
||
|
2: constant.language.name.erb.filter.slim
|
||
|
push:
|
||
|
- meta_scope: text.erb.filter.slim
|
||
|
- match: ^(?!(\1\s)|\s*$)
|
||
|
pop: true
|
||
|
- include: scope:source.erb
|
||
|
- match: ^(! )($|\s.*)
|
||
|
scope: meta.prolog.slim
|
||
|
captures:
|
||
|
1: punctuation.definition.prolog.slim
|
||
|
- match: ^(\s*)(/)\s*.*$
|
||
|
captures:
|
||
|
2: comment.line.slash.slim
|
||
|
push:
|
||
|
- meta_scope: comment.block.slim
|
||
|
- match: ^(?!(\1\s)|\s*$)
|
||
|
pop: true
|
||
|
- match: ^\s*(?=-)
|
||
|
push:
|
||
|
- match: $
|
||
|
pop: true
|
||
|
- include: rubyline
|
||
|
- match: (?==+|~)
|
||
|
push:
|
||
|
- match: $
|
||
|
pop: true
|
||
|
- include: rubyline
|
||
|
- include: tag-attribute
|
||
|
- include: embedded-ruby
|
||
|
- match: ^(\s*)(\||')\s*
|
||
|
comment: Verbatim text (can include HTML tags and copied lines)
|
||
|
push:
|
||
|
- match: ^(?!(\1\s)|\s*$)
|
||
|
pop: true
|
||
|
- include: scope:text.html.basic
|
||
|
- include: embedded-ruby
|
||
|
- match: '^\s*(\.|#|[-a-zA-Z0-9]+)([\w-]+)?'
|
||
|
comment: '1 - dot OR hash OR any combination of word, number; 2 - OPTIONAL any combination of word, number, dash or underscore (following a . or'
|
||
|
captures:
|
||
|
1: entity.name.tag.slim
|
||
|
2: entity.other.attribute-name.event.slim
|
||
|
push:
|
||
|
- meta_scope: meta.tag
|
||
|
- match: '$|(?!\.|#|:|-|~|/|\}|\]|\*|\s?[\*\{])'
|
||
|
captures:
|
||
|
1: entity.name.tag.slim
|
||
|
2: entity.other.attribute-name.event.slim
|
||
|
pop: true
|
||
|
- match: '(:[\w\d]+)+'
|
||
|
comment: XML
|
||
|
push:
|
||
|
- meta_scope: entity.name.tag.slim
|
||
|
- match: $|\s
|
||
|
pop: true
|
||
|
- match: '(:\s)(\.|#|[a-zA-Z0-9]+)([\w-]+)?'
|
||
|
comment: Inline HTML / 1 - colon; 2 - dot OR hash OR any combination of word, number; 3 - OPTIONAL any combination of word, number, dash or underscore (following a . or
|
||
|
captures:
|
||
|
1: punctuation.definition.tag.end.slim
|
||
|
2: entity.name.tag.slim
|
||
|
3: entity.other.attribute-name.event.slim
|
||
|
push:
|
||
|
- match: '$|(?!\.|#|=|-|~|/|\}|\]|\*|\s?[\*\{])'
|
||
|
captures:
|
||
|
1: punctuation.definition.tag.end.slim
|
||
|
2: entity.name.tag.slim
|
||
|
3: entity.other.attribute-name.event.slim
|
||
|
pop: true
|
||
|
- include: root-class-id-tag
|
||
|
- include: tag-attribute
|
||
|
- match: '(\*\{)(?=.*\}|.*\|\s*$)'
|
||
|
comment: Splat attributes
|
||
|
captures:
|
||
|
1: punctuation.section.embedded.ruby
|
||
|
push:
|
||
|
- meta_scope: source.ruby.embedded.slim
|
||
|
- match: '(\})|$|^(?!.*\|\s*$)'
|
||
|
captures:
|
||
|
1: punctuation.section.embedded.ruby
|
||
|
pop: true
|
||
|
- include: embedded-ruby
|
||
|
- include: root-class-id-tag
|
||
|
- include: rubyline
|
||
|
- match: /
|
||
|
scope: punctuation.terminator.tag.slim
|
||
|
- match: ^\s*(\\.)
|
||
|
captures:
|
||
|
1: meta.escape.slim
|
||
|
- match: ^\s*(?=\||')
|
||
|
push:
|
||
|
- match: $
|
||
|
pop: true
|
||
|
- include: embedded-ruby
|
||
|
- include: scope:text.html.basic
|
||
|
- match: '(?=<[\w\d\:]+)'
|
||
|
comment: Inline and root-level HTML tags
|
||
|
push:
|
||
|
- match: $|\/\>
|
||
|
pop: true
|
||
|
- include: scope:text.html.basic
|
||
|
continuation:
|
||
|
- match: '([\\,])\s*\n'
|
||
|
captures:
|
||
|
1: punctuation.separator.continuation.slim
|
||
|
delimited-ruby-a:
|
||
|
- match: '=\('
|
||
|
push:
|
||
|
- meta_scope: source.ruby.embedded.slim
|
||
|
- match: \)(?=( \w|$))
|
||
|
pop: true
|
||
|
- include: scope:source.ruby.rails
|
||
|
delimited-ruby-b:
|
||
|
- match: '=\['
|
||
|
push:
|
||
|
- meta_scope: source.ruby.embedded.slim
|
||
|
- match: '\](?=( \w|$))'
|
||
|
pop: true
|
||
|
- include: scope:source.ruby.rails
|
||
|
delimited-ruby-c:
|
||
|
- match: '=\{'
|
||
|
push:
|
||
|
- meta_scope: source.ruby.embedded.slim
|
||
|
- match: '\}(?=( \w|$))'
|
||
|
pop: true
|
||
|
- include: scope:source.ruby.rails
|
||
|
embedded-ruby:
|
||
|
- match: '(?<!\\)#\{{1,2}'
|
||
|
captures:
|
||
|
0: punctuation.section.embedded.ruby
|
||
|
push:
|
||
|
- meta_scope: source.ruby.embedded.html
|
||
|
- match: '\}{1,2}'
|
||
|
captures:
|
||
|
0: punctuation.section.embedded.ruby
|
||
|
pop: true
|
||
|
- include: scope:source.ruby.rails
|
||
|
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
|
||
|
interpolated-ruby:
|
||
|
- match: '=(?=\b)'
|
||
|
push:
|
||
|
- meta_scope: source.ruby.embedded.html
|
||
|
- match: \s|\w$
|
||
|
pop: true
|
||
|
root-class-id-tag:
|
||
|
- match: '(\.|#)([\w\d\-]+)'
|
||
|
captures:
|
||
|
1: punctuation.separator.key-value.html
|
||
|
2: entity.other.attribute-name.html
|
||
|
rubyline:
|
||
|
- match: (==|=)(<>|><|<'|'<|<|>)?|-
|
||
|
comment: Hack to thwart Sublime's Ruby highlighter. It thinks do without a variable continues the next line (this can be muted with a / at the end of the line). For things like yields, do is unnecessary without an argument, so this hack will suffice
|
||
|
push:
|
||
|
- meta_scope: meta.line.ruby.slim
|
||
|
- meta_content_scope: source.ruby.embedded.slim
|
||
|
- match: (do\s*\n$)|(?<!\\|,|,\n|\\\n)$
|
||
|
captures:
|
||
|
1: keyword.control.start-block.ruby
|
||
|
pop: true
|
||
|
- match: '#.*$'
|
||
|
comment: Hack to let ruby comments work in this context properly
|
||
|
scope: comment.line.number-sign.ruby
|
||
|
- include: continuation
|
||
|
- include: scope:source.ruby.rails
|
||
|
string-double-quoted:
|
||
|
- 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-ruby
|
||
|
- include: entities
|
||
|
string-single-quoted:
|
||
|
- 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-ruby
|
||
|
- include: entities
|
||
|
tag-attribute:
|
||
|
- match: '([\w.#_-]+)(=)(?!\s)(true|false|nil)?(\s*\(|\{)?'
|
||
|
captures:
|
||
|
1: entity.other.attribute-name.event.slim
|
||
|
2: punctuation.separator.key-value.html
|
||
|
3: constant.language.slim
|
||
|
push:
|
||
|
- meta_scope: meta.attribute-with-value.slim
|
||
|
- match: '\}|\)|$'
|
||
|
captures:
|
||
|
1: entity.other.attribute-name.event.slim
|
||
|
2: punctuation.separator.key-value.html
|
||
|
3: constant.language.slim
|
||
|
pop: true
|
||
|
- include: tag-stuff
|
||
|
- include: string-double-quoted
|
||
|
- include: string-single-quoted
|
||
|
tag-stuff:
|
||
|
- include: tag-attribute
|
||
|
- include: interpolated-ruby
|
||
|
- include: delimited-ruby-a
|
||
|
- include: delimited-ruby-b
|
||
|
- include: delimited-ruby-c
|
||
|
- include: rubyline
|
||
|
- include: embedded-ruby
|