Add Jinja2 syntax
This commit is contained in:
parent
8711c9a3c0
commit
aee1552619
180
sublime_syntaxes/Jinj2.sublime-syntax
Normal file
180
sublime_syntaxes/Jinj2.sublime-syntax
Normal file
|
@ -0,0 +1,180 @@
|
|||
%YAML 1.2
|
||||
---
|
||||
# http://www.sublimetext.com/docs/3/syntax.html
|
||||
name: Jinja2
|
||||
file_extensions:
|
||||
- j2
|
||||
- jinja2
|
||||
scope: source.jinja2
|
||||
contexts:
|
||||
main:
|
||||
- match: '({%)\s*(raw)\s*(%})'
|
||||
captures:
|
||||
1: entity.other.jinja2.delimiter.tag
|
||||
2: keyword.control.jinja2
|
||||
3: entity.other.jinja2.delimiter.tag
|
||||
push:
|
||||
- meta_scope: comment.block.jinja2.raw
|
||||
- match: '({%)\s*(endraw)\s*(%})'
|
||||
captures:
|
||||
1: entity.other.jinja2.delimiter.tag
|
||||
2: keyword.control.jinja2
|
||||
3: entity.other.jinja2.delimiter.tag
|
||||
pop: true
|
||||
- match: "{#-?"
|
||||
captures:
|
||||
0: entity.other.jinja2.delimiter.comment
|
||||
push:
|
||||
- meta_scope: comment.block.jinja2
|
||||
- match: "-?#}"
|
||||
captures:
|
||||
0: entity.other.jinja2.delimiter.comment
|
||||
pop: true
|
||||
- match: "{{-?"
|
||||
captures:
|
||||
0: entity.other.jinja2.delimiter.variable
|
||||
push:
|
||||
- meta_scope: meta.scope.jinja2.variable
|
||||
- match: "-?}}"
|
||||
captures:
|
||||
0: entity.other.jinja2.delimiter.variable
|
||||
pop: true
|
||||
- include: expression
|
||||
- match: "{%-?"
|
||||
captures:
|
||||
0: entity.other.jinja2.delimiter.tag
|
||||
push:
|
||||
- meta_scope: meta.scope.jinja2.tag
|
||||
- match: "-?%}"
|
||||
captures:
|
||||
0: entity.other.jinja2.delimiter.tag
|
||||
pop: true
|
||||
- include: expression
|
||||
escaped_char:
|
||||
- match: '\\x[0-9A-F]{2}'
|
||||
scope: constant.character.escape.hex.jinja2
|
||||
escaped_unicode_char:
|
||||
- match: '(\\U[0-9A-Fa-f]{8})|(\\u[0-9A-Fa-f]{4})|(\\N\{[a-zA-Z ]+\})'
|
||||
captures:
|
||||
1: constant.character.escape.unicode.16-bit-hex.jinja2
|
||||
2: constant.character.escape.unicode.32-bit-hex.jinja2
|
||||
3: constant.character.escape.unicode.name.jinja2
|
||||
expression:
|
||||
- match: '\s*\b(macro)\s+([a-zA-Z_][a-zA-Z0-9_]*)\b'
|
||||
captures:
|
||||
1: keyword.control.jinja2
|
||||
2: variable.other.jinja2.macro
|
||||
- match: '\s*\b(block)\s+([a-zA-Z_][a-zA-Z0-9_]*)\b'
|
||||
captures:
|
||||
1: keyword.control.jinja2
|
||||
2: variable.other.jinja2.block
|
||||
- match: '\s*\b(filter)\s+([a-zA-Z_][a-zA-Z0-9_]*)\b'
|
||||
captures:
|
||||
1: keyword.control.jinja2
|
||||
2: variable.other.jinja2.filter
|
||||
- match: '\s*\b(is)\s+([a-zA-Z_][a-zA-Z0-9_]*)\b'
|
||||
captures:
|
||||
1: keyword.control.jinja2
|
||||
2: variable.other.jinja2.test
|
||||
- match: '(?<=\{\%-|\{\%)\s*\b([a-zA-Z_][a-zA-Z0-9_]*)\b(?!\s*[,=])'
|
||||
captures:
|
||||
1: keyword.control.jinja2
|
||||
- match: \b(and|else|if|in|import|not|or|recursive|with(out)?\s+context)\b
|
||||
scope: keyword.control.jinja2
|
||||
- match: '\b([Tt]rue|[Ff]alse|[Nn]one)\b'
|
||||
scope: constant.language.jinja2
|
||||
- match: \b(loop|super|self|varargs|kwargs)\b
|
||||
scope: variable.language.jinja2
|
||||
- match: "[a-zA-Z_][a-zA-Z0-9_]*"
|
||||
scope: variable.other.jinja2
|
||||
- match: (\+|\-|\*\*|\*|//|/|%)
|
||||
scope: keyword.operator.arithmetic.jinja2
|
||||
- match: '(\|)([a-zA-Z_][a-zA-Z0-9_]*)'
|
||||
captures:
|
||||
1: punctuation.other.jinja2
|
||||
2: variable.other.jinja2.filter
|
||||
- match: '(\.)([a-zA-Z_][a-zA-Z0-9_]*)'
|
||||
captures:
|
||||
1: punctuation.other.jinja2
|
||||
2: variable.other.jinja2.attribute
|
||||
- match: '\['
|
||||
captures:
|
||||
0: punctuation.other.jinja2
|
||||
push:
|
||||
- match: '\]'
|
||||
captures:
|
||||
0: punctuation.other.jinja2
|
||||
pop: true
|
||||
- include: expression
|
||||
- match: \(
|
||||
captures:
|
||||
0: punctuation.other.jinja2
|
||||
push:
|
||||
- match: \)
|
||||
captures:
|
||||
0: punctuation.other.jinja2
|
||||
pop: true
|
||||
- include: expression
|
||||
- match: '\{'
|
||||
captures:
|
||||
0: punctuation.other.jinja2
|
||||
push:
|
||||
- match: '\}'
|
||||
captures:
|
||||
0: punctuation.other.jinja2
|
||||
pop: true
|
||||
- include: expression
|
||||
- match: (\.|:|\||,)
|
||||
scope: punctuation.other.jinja2
|
||||
- match: (==|<=|=>|<|>|!=)
|
||||
scope: keyword.operator.comparison.jinja2
|
||||
- match: "="
|
||||
scope: keyword.operator.assignment.jinja2
|
||||
- match: '"'
|
||||
captures:
|
||||
0: punctuation.definition.string.begin.jinja2
|
||||
push:
|
||||
- meta_scope: string.quoted.double.jinja2
|
||||
- match: '"'
|
||||
captures:
|
||||
0: punctuation.definition.string.end.jinja2
|
||||
pop: true
|
||||
- include: string
|
||||
- match: "'"
|
||||
captures:
|
||||
0: punctuation.definition.string.begin.jinja2
|
||||
push:
|
||||
- meta_scope: string.quoted.single.jinja2
|
||||
- match: "'"
|
||||
captures:
|
||||
0: punctuation.definition.string.end.jinja2
|
||||
pop: true
|
||||
- include: string
|
||||
- match: "@/"
|
||||
captures:
|
||||
0: punctuation.definition.regexp.begin.jinja2
|
||||
push:
|
||||
- meta_scope: string.regexp.jinja2
|
||||
- match: /
|
||||
captures:
|
||||
0: punctuation.definition.regexp.end.jinja2
|
||||
pop: true
|
||||
- include: simple_escapes
|
||||
simple_escapes:
|
||||
- match: (\\\n)|(\\\\)|(\\\")|(\\')|(\\a)|(\\b)|(\\f)|(\\n)|(\\r)|(\\t)|(\\v)
|
||||
captures:
|
||||
1: constant.character.escape.newline.jinja2
|
||||
2: constant.character.escape.backlash.jinja2
|
||||
3: constant.character.escape.double-quote.jinja2
|
||||
4: constant.character.escape.single-quote.jinja2
|
||||
5: constant.character.escape.bell.jinja2
|
||||
6: constant.character.escape.backspace.jinja2
|
||||
7: constant.character.escape.formfeed.jinja2
|
||||
8: constant.character.escape.linefeed.jinja2
|
||||
9: constant.character.escape.return.jinja2
|
||||
10: constant.character.escape.tab.jinja2
|
||||
11: constant.character.escape.vertical-tab.jinja2
|
||||
string:
|
||||
- include: simple_escapes
|
||||
- include: escaped_char
|
||||
- include: escaped_unicode_char
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in a new issue