diff --git a/sublime_syntaxes/Jinj2.sublime-syntax b/sublime_syntaxes/Jinj2.sublime-syntax new file mode 100644 index 0000000..e8f881a --- /dev/null +++ b/sublime_syntaxes/Jinj2.sublime-syntax @@ -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 diff --git a/sublime_syntaxes/newlines.packdump b/sublime_syntaxes/newlines.packdump index 2d1b77e..0a15981 100644 Binary files a/sublime_syntaxes/newlines.packdump and b/sublime_syntaxes/newlines.packdump differ diff --git a/sublime_syntaxes/nonewlines.packdump b/sublime_syntaxes/nonewlines.packdump index a494424..5bc7fd2 100644 Binary files a/sublime_syntaxes/nonewlines.packdump and b/sublime_syntaxes/nonewlines.packdump differ