diff --git a/LICENSE b/LICENSE
index ea68767..e48ea04 100644
--- a/LICENSE
+++ b/LICENSE
@@ -19,6 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
-
-
-Python.sublime-syntax is part of the sublimehq package repository and is used by this project as per its own license: https://raw.githubusercontent.com/sublimehq/Packages/5919f45faabdfcf3932c13886f626f87070bff09/LICENSE
\ No newline at end of file
diff --git a/Python.sublime-syntax b/Python.sublime-syntax
deleted file mode 100644
index 2451aea..0000000
--- a/Python.sublime-syntax
+++ /dev/null
@@ -1,2139 +0,0 @@
-%YAML 1.2
----
-name: Python
-file_extensions:
-  - py
-  - py3
-  - pyw
-  - pyi
-  - pyx
-  - pyx.in
-  - pxd
-  - pxd.in
-  - pxi
-  - pxi.in
-  - rpy
-  - cpy
-  - SConstruct
-  - Sconstruct
-  - sconstruct
-  - SConscript
-  - gyp
-  - gypi
-  - Snakefile
-  - wscript
-first_line_match: ^#!\s*/.*\bpython(\d(\.\d)?)?\b
-scope: source.python.compat
-
-variables:
-  # We support unicode here because Python 3 is the future
-  identifier_continue: '[[:alnum:]_]'
-  identifier: '\b[[:alpha:]_]{{identifier_continue}}*\b'
-  identifier_constant: '\b(?:[\p{Lu}_][\p{Lu}_\d]*)?[\p{Lu}]{2,}[\p{Lu}_\d]*\b'  # require 2 consecutive upper-case letters
-  digitpart: (?:\d(?:_?\d)*)
-  path: '({{identifier}} *\. *)*{{identifier}}'
-  sql_indicator: \s*(?:SELECT|INSERT|UPDATE|DELETE|CREATE|REPLACE|ALTER|WITH)\b
-  illegal_names: (?:and|as|assert|break|class|continue|def|del|elif|else|except|finally|for|from|global|if|import|in|is|lambda|not|or|pass|raise|return|try|while|with|yield)
-  format_spec: |-
-    (?x:
-      (?:.? [<>=^])?     # fill align
-      [ +-]?             # sign
-      \#?                # alternate form
-      # technically, octal and hexadecimal integers are also supported as 'width', but rarely used
-      \d*                # width
-      ,?                 # thousands separator
-      (?:\.\d+)?         # precision
-      [bcdeEfFgGnosxX%]? # type
-    )
-  strftime_spec: '(?:%(?:[aAwdbBGmyYHIpMSfzZjuUVWcxX%]|-[dmHIMSj]))'
-  # This can be used in look-aheads to parse simple expressions.
-  # Can't be recursive, because sregex doesn't support that,
-  # so we're skipping parentheses.
-  # Can't parse multiple lines as well, for obvious reasons
-  simple_expression: |-
-    (?x:
-      \s+                      # whitespace
-      | [urfb]*"(?:\\.|[^"])*" # strings
-      | [urfb]*'(?:\\.|[^'])*' # ^
-      | [\d.ej]+               # numerics
-      | [+*/%@-] | // | and | or # operators
-    )*
-
-
-
-contexts:
-  main:
-    - include: statements
-
-  statements:
-    - include: docstrings
-    - include: line-statements
-    - include: block-statements
-    - include: classes
-    - include: functions
-    - include: modifiers
-    - include: assignments
-    - match: ;
-      scope: punctuation.terminator.statement.python
-    - include: line-expressions
-
-  line-statements:
-    - include: imports
-    - include: decorators
-    - match: \b(raise)\b
-      scope: keyword.control.flow.raise.python
-      push:
-        - meta_scope: meta.statement.raise.python
-        - include: line-continuation-or-pop
-        - match: \b(from)\b
-          scope: keyword.control.flow.raise.from.python
-          set:
-            - meta_scope: meta.statement.raise.python
-            - include: line-continuation-or-pop
-            - include: expressions
-        - include: expressions
-    - match: \b(assert)\b
-      scope: keyword.other.assert.python
-    - match: \b(del)\b
-      scope: keyword.other.del.python
-    - match: \b(print)\b(?! *([,.()\]}]))
-      scope: keyword.other.print.python
-    - match: \b(exec)\b(?! *($|[,.()\]}]))
-      scope: keyword.other.exec.python
-    - match: \b(return)\b
-      scope: keyword.control.flow.return.python
-    - match: \b(break)\b
-      scope: keyword.control.flow.break.python
-    - match: \b(continue)\b
-      scope: keyword.control.flow.continue.python
-    - match: \b(pass)\b
-      scope: keyword.control.flow.pass.python
-    - match: ':'
-      scope: punctuation.separator.annotation.variable.python
-
-  imports:
-    - match: \b(import)\b
-      scope: keyword.control.import.python
-      push:
-        - meta_scope: meta.statement.import.python
-        - include: line-continuation-or-pop
-        - match: ','
-          scope: punctuation.separator.import-list.python
-        - match: \.
-          scope: invalid.illegal.unexpected-relative-import.python
-        - include: import-alias
-        - include: qualified-name
-        - match: (?=\S)
-          pop: true
-    - match: \b(from)\b
-      scope: keyword.control.import.from.python
-      push:
-        - meta_scope: meta.statement.import.python
-        - meta_content_scope: meta.import-source.python.compat
-        - include: line-continuation-or-pop
-        - match: \b(import)\b
-          scope: keyword.control.import.python
-          set:
-            - meta_scope: meta.statement.import.python
-            - include: line-continuation-or-pop
-            - match: ' *(\()'
-              captures:
-                1: punctuation.section.import-list.begin.python
-              set:
-                - meta_scope: meta.statement.import.python
-                - include: comments
-                - match: \)
-                  scope: punctuation.section.import-list.end.python
-                  pop: true
-                - include: import-name-list
-                - match: (?=\S)
-                  pop: true
-            - match: ''
-              set:
-                - meta_scope: meta.statement.import.python
-                - include: line-continuation-or-pop
-                - include: import-name-list
-                - match: (?=\S)
-                  pop: true
-            - match: (?=\S)
-              pop: true
-        - include: import-from-name
-        - match: (?=\S)
-          pop: true
-
-  import-name-list:
-    - match: ','
-      scope: punctuation.separator.import-list.python
-    - include: import-alias
-    - include: name
-    - match: \*
-      scope: constant.language.import-all.python
-    - match: \S+
-      scope: invalid.illegal.name.import.python
-
-  import-alias:
-    - match: \b(as)\b
-      scope: keyword.control.import.as.python
-
-  import-from-name:
-    - match: \.+
-      scope: meta.import-path.python keyword.control.import.relative.python
-    - match: (?={{path}})
-      push:
-        - meta_scope: meta.import-path.python
-        - match: '{{illegal_names}}\b'
-          scope: invalid.illegal.name.python
-        - match: '{{identifier}}'
-          scope: meta.import-name.python
-        - match: \s*(\.) *(?:({{illegal_names}}\b)|({{identifier}}))
-          captures:
-            1: punctuation.accessor.dot.python
-            2: invalid.illegal.name.python
-            3: meta.import-name.python
-        - match: \ *(\. *\S+) # matches and consumes the remainder of "abc.123" or "abc.+"
-          captures:
-            1: invalid.illegal.name.python
-          pop: true
-        - match: ''
-          pop: true
-
-  block-statements:
-    # async for ... in ...:
-    - match: \b(async +)?(for)\b
-      captures:
-        1: storage.modifier.async.python
-        2: keyword.control.flow.for.python
-      push:
-        - meta_scope: meta.statement.for.python
-        - include: line-continuation-or-pop
-        - match: \b(in)\b
-          scope: keyword.control.flow.for.in.python
-          set:
-            - meta_scope: meta.statement.for.python
-            - include: line-continuation-or-pop
-            - match: ':'
-              scope: punctuation.section.block.for.python
-              pop: true
-            - include: expressions
-        - match: ':'
-          scope: invalid.illegal.missing-in.python
-          pop: true
-        - include: target-list
-    # async with ... as ...:
-    - match: \b(async +)?(with)\b
-      captures:
-        1: storage.modifier.async.python
-        2: keyword.control.flow.with.python
-      push: with-body
-    # except ... as ...:
-    - match: \b(except)\b
-      scope: keyword.control.flow.except.python
-      push:
-        - meta_scope: meta.statement.except.python
-        - include: line-continuation-or-pop
-        - match: ':'
-          scope: punctuation.section.block.except.python
-          pop: true
-        - match: '\b(as)\b'
-          scope: keyword.control.flow.as.python
-          set:
-            - meta_content_scope: meta.statement.except.python
-            - include: line-continuation-or-pop
-            - match: ':'
-              scope: meta.statement.except.python punctuation.section.block.except.python
-              pop: true
-            - include: name
-        - include: target-list
-    - match: \bif\b
-      scope: keyword.control.flow.conditional.python
-      push:
-        - meta_scope: meta.statement.if.python
-        - include: line-continuation-or-pop
-        - match: ':'
-          scope: punctuation.section.block.conditional.python
-          pop: true
-        - include: expressions
-    - match: \bwhile\b
-      scope: keyword.control.flow.while.python
-      push:
-        - meta_scope: meta.statement.while.python
-        - include: line-continuation-or-pop
-        - match: ':'
-          scope: punctuation.section.block.while.python
-          pop: true
-        - include: expressions
-    - match: \b(else)\b(?:\s*(:))?
-      scope: meta.statement.conditional.python
-      captures:
-        1: keyword.control.flow.conditional.python
-        2: punctuation.section.block.python
-    - match: \b(try)\b(?:\s*(:))?
-      scope: meta.statement.try.python
-      captures:
-        1: keyword.control.flow.try.python
-        2: punctuation.section.block.try.python
-    - match: \b(finally)\b(?:\s*(:))?
-      scope: meta.statement.finally.python
-      captures:
-        1: keyword.control.flow.finally.python
-        2: punctuation.section.block.finally.python
-    - match: \belif\b
-      scope: keyword.control.flow.conditional.python
-      push:
-        - meta_scope: meta.statement.conditional.python
-        - match: ':'
-          scope: punctuation.section.block.python
-          pop: true
-        - match: $\n?
-          pop: true
-        - include: line-expressions
-
-  with-body:
-    - meta_scope: meta.statement.with.python
-    - include: line-continuation-or-pop
-    - match: \b(as)\b
-      scope: keyword.control.flow.with.as.python
-      set: with-as
-    - match: ':'
-      scope: punctuation.section.block.with.python
-      pop: true
-    - match: ','
-      scope: punctuation.separator.with-resources.python
-    - include: expressions
-
-  with-as:
-    - meta_scope: meta.statement.with.python
-    - include: line-continuation-or-pop
-    - match: ':'
-      scope: punctuation.section.block.with.python
-      pop: true
-    - match: ','
-      scope: punctuation.separator.with-resources.python
-      set: with-body
-    - include: name
-    - include: groups
-    - include: lists
-
-  expressions-common:
-    - include: comments
-    - include: constants
-    - include: numbers
-    - include: yields
-    - include: operators
-    - include: lambda
-    - match: \b(await)\b
-      scope: keyword.other.await.python
-    - include: inline-if
-    - include: strings
-    - include: function-calls
-    - include: item-access
-    - include: lists
-    - include: dictionaries-and-sets
-    - include: tuples
-    - include: groups
-    - match: \)
-      scope: invalid.illegal.stray.brace.round.python
-    - match: \]
-      scope: invalid.illegal.stray.brace.square.python
-    - match: \}
-      scope: invalid.illegal.stray.brace.curly.python
-    - include: line-continuation
-
-  line-expressions: # Always include this last!
-    - include: expressions-common
-    - include: qualified-name
-
-  expressions: # Always include this last!
-    # Differs from the line scope in that invalid-name matches will pop the current context
-    # and matches accessors continued on a different line
-    - include: expressions-common
-    - include: illegal-names-pop
-    - include: qualified-name
-    - match: '(\.) *(?={{identifier}})'
-      captures:
-        1: punctuation.accessor.dot.python
-      push:
-        - include: magic-function-names
-        - include: magic-variable-names
-        - include: illegal-names
-        - include: generic-names
-        - match: ''
-          pop: true
-
-  after-expression:
-    # direct function call
-    - match: '\s*(\()'
-      captures:
-        1: punctuation.section.arguments.begin.python
-      push:
-        - meta_scope: meta.function-call.arguments.python
-        - match: \)
-          scope: punctuation.section.arguments.end.python
-          pop: true
-        - include: arguments
-    # item access
-    - match: '\s*(\[)'
-      captures:
-        1: meta.item-access.python punctuation.section.brackets.begin.python
-      push:
-        - meta_content_scope: meta.item-access.arguments.python
-        - match: \]
-          scope: meta.item-access.python punctuation.section.brackets.end.python
-          pop: true
-        - match: ':'
-          scope: punctuation.separator.slice.python
-        - include: expressions
-    # indirect function call following attribute access
-    - include: function-calls
-    # arbitrary attribute access
-    - match: '\s*(\.)'
-      captures:
-        1: punctuation.accessor.dot.python
-      push:
-        - include: magic-function-names
-        - include: magic-variable-names
-        - include: illegal-names
-        - include: generic-names
-        - match: ''
-          pop: true
-    - match: ''
-      pop: true
-
-  comments:
-    - match: "#"
-      scope: punctuation.definition.comment.python
-      push:
-        - meta_scope: comment.line.number-sign.python
-        - match: \n
-          pop: true
-
-  constants:
-    - match: \b(None|True|False|Ellipsis|NotImplemented|__debug__)\b
-      scope: constant.language.python
-    - match: \.{3}(?!\w)
-      scope: constant.language.python
-
-  numbers:
-    # https://docs.python.org/3/reference/lexical_analysis.html#numeric-literals
-    # hexadecimal
-    - match: \b(?i)(0x)\h*(L) # py2
-      scope: constant.numeric.integer.long.hexadecimal.python
-      captures:
-        1: punctuation.definition.numeric.hexadecimal.python
-        2: storage.type.numeric.long.python
-    - match: \b(?i)(0x)(_?\h)+
-      scope: constant.numeric.integer.hexadecimal.python
-      captures:
-        1: punctuation.definition.numeric.hexadecimal.python
-    # octal
-    - match: \b(?i)(0o?)(?=o|[0-7])[0-7]*(L) # py2
-      scope: constant.numeric.integer.long.octal.python
-      captures:
-        1: punctuation.definition.integer.octal.python
-        2: storage.type.numeric.long.python
-    - match: \b(?i)(0)[0-7]+ # py2
-      scope: constant.numeric.integer.octal.python
-      captures:
-        1: punctuation.definition.numeric.octal.python
-    - match: \b(?i)(0o)(_?[0-7])+
-      scope: constant.numeric.integer.octal.python
-      captures:
-        1: punctuation.definition.numeric.octal.python
-    # binary
-    - match: \b(?i)(0b)[01]*(L) # py2
-      scope: constant.numeric.integer.long.binary.python
-      captures:
-        1: punctuation.definition.numeric.binary.python
-        2: storage.type.numeric.long.python
-    - match: \b(?i)(0b)(_?[01])*
-      scope: constant.numeric.integer.binary.python
-      captures:
-        1: punctuation.definition.numeric.binary.python
-    # complex
-    - match: (?i){{digitpart}}?(\.){{digitpart}}(?:e[\-\+]?{{digitpart}})?(j) # mandatory fraction
-      scope: constant.numeric.complex.python
-      captures:
-        1: punctuation.separator.decimal.python
-        2: storage.type.numeric.complex.python
-    - match: \b(?i)(?:{{digitpart}}(?:(\.){{digitpart}}?)?|(\.){{digitpart}})(?:e[\-\+]?{{digitpart}})(j) # mandatory exponent
-      scope: constant.numeric.complex.python
-      captures:
-        1: punctuation.separator.decimal.python
-        2: punctuation.separator.decimal.python
-        3: storage.type.numeric.complex.python
-    - match: (?i){{digitpart}}(\.)?(j) # mandatory digitpart
-      scope: constant.numeric.complex.python
-      captures:
-        1: punctuation.separator.decimal.python
-        2: storage.type.numeric.complex.python
-    # floating point
-    - match: (?i){{digitpart}}?(\.){{digitpart}}(?:e[\-\+]?{{digitpart}})? # mandatory fraction
-      scope: constant.numeric.float.python
-      captures:
-        1: punctuation.separator.decimal.python
-    - match: \b(?i)(?:{{digitpart}}(?:(\.){{digitpart}}?)?|(\.){{digitpart}})(?:e[\-\+]?{{digitpart}}) # mandatory exponent
-      scope: constant.numeric.float.python
-      captures:
-        1: punctuation.separator.decimal.python
-        2: punctuation.separator.decimal.python
-    - match: (?i){{digitpart}}(\.) # mandatory digitpart
-      scope: constant.numeric.float.python
-      captures:
-        1: punctuation.separator.decimal.python
-    # integer
-    - match: \b(?i)(?:[1-9]\d*|0)(L)\b # py2
-      scope: constant.numeric.integer.long.decimal.python
-      captures:
-        1: storage.type.numeric.long.python
-    - match: \b(?i)([1-9][\d_]*|0)\b
-      scope: constant.numeric.integer.decimal.python
-
-  modifiers:
-    - match: \b(?:(global)|(nonlocal))\b
-      captures:
-        1: storage.modifier.global.python
-        2: storage.modifier.nonlocal.python
-      push:
-        - include: line-continuation-or-pop
-        - match: ','
-          scope: punctuation.separator.storage-list.python
-        - include: name
-        - match: \S+
-          scope: invalid.illegal.name.storage.python
-
-  yields:
-    - match: \b(yield)(?:\s+(from))?\b
-      captures:
-        1: keyword.control.flow.yield.python
-        2: keyword.control.flow.yield-from.python
-
-  assignments:
-    - match: \+=|-=|\*=|/=|//=|%=|@=|&=|\|=|\^=|>>=|<<=|\*\*=
-      scope: keyword.operator.assignment.augmented.python
-    - match: '=(?!=)'
-      scope: keyword.operator.assignment.python
-
-  operators:
-    - match: <>
-      scope: invalid.deprecated.operator.python
-    - match: <\=|>\=|\=\=|<|>|\!\=
-      scope: keyword.operator.comparison.python
-    - match: \+|\-|\*|\*\*|/|//|%|<<|>>|&|\||\^|~
-      scope: keyword.operator.arithmetic.python
-    - match: \b(and|in|is|not|or)\b
-      comment: keyword operators that evaluate to True or False
-      scope: keyword.operator.logical.python
-    - match: '@'
-      scope: keyword.operator.matrix.python
-
-  allow-unpack-operators:
-    # Match unpacking operators, if present
-    - include: comments
-    - match: \*{3,}
-      scope: invalid.illegal.syntax.python
-      pop: true
-    - match: \*\*
-      scope: keyword.operator.unpacking.mapping.python
-      pop: true
-    - match: \*
-      scope: keyword.operator.unpacking.sequence.python
-      pop: true
-    - match: (?=\S)
-      pop: true
-
-  classes:
-    - match: '^\s*(class)\b'
-      captures:
-        1: storage.type.class.python
-      push:
-        - meta_scope: meta.class.python
-        - include: line-continuation-or-pop
-        - match: ':'
-          scope: punctuation.section.class.begin.python
-          pop: true
-        - match: "(?={{identifier}})"
-          push:
-            - meta_content_scope: entity.name.class.python
-            - include: entity-name-class
-            - match: ''
-              pop: true
-        - match: \(
-          scope: punctuation.section.inheritance.begin.python
-          set:
-            - meta_scope: meta.class.inheritance.python
-            - match: \)
-              scope: punctuation.section.inheritance.end.python
-              set:
-                - include: line-continuation-or-pop
-                - match: ':'
-                  scope: meta.class.python punctuation.section.class.begin.python
-                  pop: true
-                - match: (?=\S)
-                  pop: true
-            - match: ':'
-              scope: invalid.illegal.no-closing-parens.python
-              pop: true
-            - match: ','
-              scope: punctuation.separator.inheritance.python
-            - include: illegal-names-pop
-            - match: ({{identifier}}) *(=)
-              captures:
-                1: variable.parameter.class-inheritance.python
-                2: keyword.operator.assignment.python
-            - match: (?={{path}})
-              push:
-                - meta_scope: entity.other.inherited-class.python
-                - match: '{{identifier}}(?: *(\.) *)?'
-                  captures:
-                    1: punctuation.accessor.dot.python
-                - match: ''
-                  pop: true
-            - include: expressions
-
-  functions:
-    - match: '^\s*(?:(async)\s+)?(def)\b'
-      captures:
-        1: storage.modifier.async.python
-        2: storage.type.function.python
-      push:
-        - meta_scope: meta.function.python
-        - include: line-continuation-or-pop
-        - match: ':'
-          scope: punctuation.section.function.begin.python
-          pop: true
-        - match: "(?={{identifier}})"
-          push:
-            - meta_content_scope: entity.name.function.python
-            - include: entity-name-function
-            - match: ''
-              pop: true
-        - match: '(?=\()'
-          set:
-            - match: \(
-              scope: meta.function.parameters.python punctuation.section.parameters.begin.python
-              set: [function-parameters, allow-unpack-operators]
-
-  function-parameters:
-    - meta_content_scope: meta.function.parameters.python
-    - match: \)
-      scope: punctuation.section.parameters.end.python
-      set: function-after-parameters
-    - include: comments
-    - match: ','
-      scope: punctuation.separator.parameters.python
-      push: allow-unpack-operators
-    - match: '(?==)'
-      set:
-        - match: '='
-          scope: keyword.operator.assignment.python
-          set:
-            - meta_scope: meta.function.parameters.default-value.python
-            - match: '(?=[,)])'
-              set: [function-parameters, allow-unpack-operators]
-            - include: expressions
-    - match: '(?=:)'
-      set:
-        - match: ':'
-          scope: punctuation.separator.annotation.parameter.python
-          set:
-            - meta_scope: meta.function.parameters.annotation.python
-            - match: '(?=[,)=])'
-              set: function-parameters
-            - include: expressions
-    - include: function-parameters-tuple
-    - include: illegal-names
-    - match: '{{identifier}}'
-      scope: variable.parameter.python
-    - include: line-continuation
-
-  function-parameters-tuple:
-    # python 2 style tuple arguments
-    # removed from python 3 since PEP-3113
-    - match: \(
-      scope: punctuation.section.group.begin.python
-      push:
-        - meta_scope: meta.group.python
-        - match: \)
-          scope: punctuation.section.group.end.python
-          set: after-expression
-        - include: comments
-        - match: ','
-          scope: punctuation.separator.parameters.python
-          push: allow-unpack-operators
-        # default values should follow the argument
-        - match: '='
-          push:
-            - meta_scope: invalid.illegal.default-value.python
-            - match: '(?=[,)=])'
-              pop: true
-        # python 2 does not support type annotations
-        - match: '(?=:)'
-          push:
-            - meta_scope: invalid.illegal.annotation.python
-            - match: '(?=[,)=])'
-              pop: true
-        - include: illegal-names
-        - match: '{{identifier}}'
-          scope: variable.parameter.python
-        - include: line-continuation
-
-  function-after-parameters:
-    - meta_content_scope: meta.function.python
-    - match: '(?=->)'
-      set:
-        - meta_content_scope: meta.function.annotation.return.python
-        - match: ->
-          scope: punctuation.separator.annotation.return.python
-        - match: '(?=:)'
-          set: function-after-parameters
-        - include: line-continuation-or-pop
-        - include: expressions
-    - match: ':'
-      scope: meta.function.python punctuation.section.function.begin.python
-      pop: true
-    - include: comments
-    - match: (?=\S)
-      pop: true
-
-  decorators:
-    - match: ^\s*(?=@)
-      push:
-        # Due to line continuations, we don't know whether this is a "function call" yet
-        - meta_content_scope: meta.annotation.python
-        - match: '@'
-          scope: punctuation.definition.annotation.python
-        - match: $
-          pop: true
-        - include: line-continuation-or-pop
-        - match: (?=\.?\s*{{path}}\s*\() # now we do
-          set: [decorator-function-call-wrapper, qualified-name-until-leaf]
-        - match: (?=\.?\s*{{path}})
-          push: [decorator-wrapper, qualified-name-until-leaf]
-        - match: \S
-          scope: invalid.illegal.character.python
-          pop: true
-
-  decorator-wrapper:
-    - match: (\.)\s*
-      captures:
-        1: punctuation.accessor.dot.python
-      set:
-        - meta_scope: meta.qualified-name.python
-        - meta_content_scope: variable.annotation.python
-        - include: dotted-name-specials
-        - include: generic-names
-        - match: ''
-          pop: true
-    - match: ''
-      set:
-        - meta_scope: meta.qualified-name.python variable.annotation.python
-        - include: name-specials
-        - include: generic-names
-        - match: ''
-          pop: true
-
-  decorator-function-call-wrapper:
-    - meta_scope: meta.annotation.function.python
-    - match: \)
-      scope: punctuation.section.arguments.end.python
-      set: after-expression
-    - match: \(
-      scope: meta.annotation.function.python punctuation.section.arguments.begin.python
-      push:
-        - clear_scopes: 1
-        - meta_content_scope: meta.annotation.arguments.python
-        - match: (?=\))
-          pop: true
-        - include: arguments
-    - match: (\.)\s*
-      captures:
-        1: punctuation.accessor.dot.python
-      push:
-        - meta_scope: meta.qualified-name.python
-        - meta_content_scope: variable.annotation.function.python
-        - include: dotted-name-specials
-        - include: generic-names
-        - match: ''
-          pop: true
-    - match: ''
-      push:
-        - meta_scope: meta.qualified-name.python variable.annotation.function.python
-        - include: name-specials
-        - include: generic-names
-        - match: ''
-          pop: true
-
-  item-access:
-    - match: '(?={{path}}\s*\[)'
-      push:
-        - match: \]
-          scope: meta.item-access.python punctuation.section.brackets.end.python
-          set: after-expression
-        - match: '(?={{path}}\s*\[)'
-          push:
-            - meta_content_scope: meta.item-access.python
-            - match: '(?=\s*\[)'
-              pop: true
-            - include: qualified-name
-        - match: \[
-          scope: meta.item-access.python punctuation.section.brackets.begin.python
-          push:
-            - meta_content_scope: meta.item-access.arguments.python
-            - match: '(?=\])'
-              pop: true
-            - match: ':'
-              scope: punctuation.separator.slice.python
-            - include: expressions
-
-  function-calls:
-    - match: '(?=(\.\s*)?{{path}}\s*\()'
-      push: [function-call-wrapper, qualified-name-until-leaf]
-
-  function-call-wrapper:
-    - meta_scope: meta.function-call.python
-    - match: (?=\()  # need to remove meta.function-call.python from opening parens
-      set:
-        - match: \(
-          scope: punctuation.section.arguments.begin.python
-          set:
-            - meta_scope: meta.function-call.arguments.python
-            - match: \)
-              scope: punctuation.section.arguments.end.python
-              set: after-expression
-            - include: arguments
-    - match: (\.)\s*(?={{identifier}})
-      captures:
-        1: punctuation.accessor.dot.python
-      push:
-        - meta_scope: meta.qualified-name.python
-        - meta_content_scope: variable.function.python
-        - include: dotted-name-specials
-        - include: generic-names
-        - match: ''
-          pop: true
-    - match: (?={{identifier}})
-      push:
-        - meta_scope: meta.qualified-name.python variable.function.python
-        - include: name-specials
-        - include: generic-names
-        - match: ''
-          pop: true
-
-  arguments:
-    - include: keyword-arguments
-    - match: ','
-      scope: punctuation.separator.arguments.python
-      push: allow-unpack-operators
-    - include: inline-for
-    - include: expressions
-
-  keyword-arguments:
-    - match: '(?={{identifier}}\s*=(?!=))'
-      push:
-        - include: line-continuation-or-pop
-        - match: '='
-          scope: keyword.operator.assignment.python
-          set:
-            - match: (?=\s*[,):])
-              pop: true
-            - include: expressions
-        - include: illegal-names
-        - match: '{{identifier}}'
-          scope: variable.parameter.python
-
-  lambda:
-    - match: \b(lambda)(?=\s|:|$)
-      scope: storage.type.function.inline.python
-      push: [lambda-parameters, allow-unpack-operators]
-
-  lambda-parameters:
-    - meta_scope: meta.function.inline.python
-    - meta_content_scope: meta.function.inline.parameters.python
-    - include: line-continuation-or-pop
-    - match: '\:'
-      scope: punctuation.section.function.begin.python
-      pop: true
-    - match: ','
-      scope: punctuation.separator.parameters.python
-      push: allow-unpack-operators
-    - include: keyword-arguments
-    - include: function-parameters-tuple
-    - include: illegal-names
-    - match: '{{identifier}}'
-      scope: variable.parameter.python
-    - match: '\S'
-      scope: invalid.illegal.expected-parameter.python
-
-  groups:
-    - match: \(
-      scope: punctuation.section.group.begin.python
-      push:
-        - meta_scope: meta.group.python
-        - match: \)
-          scope: punctuation.section.group.end.python
-          set: after-expression
-        - match: ','
-          scope: punctuation.separator.tuple.python
-        - include: inline-for
-        - include: expressions
-
-  tuples:
-    # We don't know for certain, whether a parenthesized expression is a tuple,
-    # so try looking ahead.
-    - match: (\()\s*(\))
-      scope: meta.sequence.tuple.empty.python
-      captures:
-        1: punctuation.section.sequence.begin.python
-        2: punctuation.section.sequence.end.python
-      push: after-expression
-    - match: \((?={{simple_expression}},|\s*\*{{path}})
-      scope: punctuation.section.sequence.begin.python
-      push: inside-tuple
-    # TODO generator
-    # - match: \((?:{{simple_expression}}for)
-
-  inside-tuple:
-    - meta_scope: meta.sequence.tuple.python
-    - match: \)
-      scope: punctuation.section.sequence.end.python
-      set: after-expression
-    - match: ','
-      scope: punctuation.separator.sequence.python
-      push: allow-unpack-operators
-    - include: inline-for
-    - include: expressions
-
-  lists:
-    - match: (\[)\s*(\])
-      scope: meta.sequence.list.empty.python
-      captures:
-        1: punctuation.section.sequence.begin.python
-        2: punctuation.section.sequence.end.python
-      push: after-expression
-    - match: \[
-      scope: punctuation.section.sequence.begin.python
-      push: [inside-list, allow-unpack-operators]
-
-  inside-list:
-    - meta_scope: meta.sequence.list.python
-    - match: \]
-      scope: punctuation.section.sequence.end.python
-      set: after-expression
-    - match: ','
-      scope: punctuation.separator.sequence.python
-      push: allow-unpack-operators
-    - include: inline-for
-    - include: expressions
-
-  dictionaries-and-sets:
-    # Dictionaries and set literals use the same punctuation,
-    # so we try looking ahead to determine whether we have a dict or a set.
-    - match: '(\{)\s*(\})'
-      scope: meta.mapping.empty.python
-      captures:
-        1: punctuation.section.mapping.begin.python
-        2: punctuation.section.mapping.end.python
-      push: after-expression
-    - match: \{(?={{simple_expression}}:|\s*\*\*{{path}})
-      scope: punctuation.section.mapping.begin.python
-      push: inside-dictionary
-    - match: \{(?={{simple_expression}}[,}]|\s*\*{{path}})
-      scope: punctuation.section.set.begin.python
-      push: inside-set
-    # If the expression is "more complex" or on the next line,
-    # fall back to default and determine later.
-    - match: \{
-      scope: punctuation.section.mapping-or-set.begin.python
-      push:
-        - meta_scope: meta.mapping-or-set.python
-        - match: \}
-          scope: punctuation.section.mapping-or-set.end.python
-          set: after-expression
-        - match: (?={{simple_expression}}:|\s*\*\*{{path}})
-          set: inside-dictionary
-        - match: (?={{simple_expression}}[,}]|\s*\*{{path}})
-          set: inside-set
-        - match: ','
-          scope: punctuation.separator.set.python
-          set: inside-set
-        - match: ':'
-          scope: punctuation.separator.mapping.key-value.python
-          set: inside-directory-value
-        - include: inline-for
-        - include: expressions
-
-  inside-dictionary:
-    - meta_scope: meta.mapping.python
-    - match: \}
-      scope: punctuation.section.mapping.end.python
-      set: after-expression
-    - match: ':'
-      scope: punctuation.separator.mapping.key-value.python
-      set: inside-directory-value
-    - match: ','
-      scope: invalid.illegal.expected-colon.python
-    - match: \*\*
-      scope: keyword.operator.unpacking.mapping.python
-      push:
-        - match: (?=\})
-          pop: true
-        - match: ','
-          scope: punctuation.separator.mapping.python
-          pop: true
-        - include: expressions
-    - include: comments
-    - match: (?=\S)
-      push:
-        - clear_scopes: 1
-        - meta_scope: meta.mapping.key.python
-        - match: \s*(?=\}|,|:)
-          pop: true
-        - include: expressions
-
-  inside-directory-value:
-    - meta_content_scope: meta.mapping.python
-    - match: \}
-      scope: punctuation.section.mapping.end.python
-      set: after-expression
-    - match: (?=,)
-      set:
-        # clear meta scope from this match, because 'inside-directory' has it in meta_scope
-        - match: ','
-          scope: punctuation.separator.mapping.python
-          set: inside-dictionary
-    - match: (?=for)
-      push:
-        - match: (?=\})
-          pop: true
-        - match: ','
-          scope: invalid.illegal.unexpected-comma.python
-        - include: inline-for
-        - include: expressions
-    - include: comments
-    - match: (?=\S)
-      push:
-        - clear_scopes: 1
-        - meta_content_scope: meta.mapping.value.python
-        - match: (?=\s*(\}|,|for))
-          pop: true
-        - include: expressions
-
-  inside-set:
-    - meta_scope: meta.set.python
-    - match: \}
-      scope: punctuation.section.set.end.python
-      set: after-expression
-    - match: ':'
-      scope: invalid.illegal.colon-inside-set.python
-    - match: ','
-      scope: punctuation.separator.set.python
-    - match: \*
-      scope: keyword.operator.unpacking.sequence.python
-      push:
-        - match: (?=\})
-          pop: true
-        - match: ','
-          scope: punctuation.separator.set.python
-          pop: true
-        - include: expressions
-    - include: inline-for
-    - include: expressions
-
-  builtin-exceptions:
-    - match: |-
-        (?x)\b(
-        	(
-        		Arithmetic|Assertion|Attribute|BlockingIO|BrokenPipe|Buffer|ChildProcess|
-        		Connection(Aborted|Refused|Reset)?|EOF|Environment|FileExists|
-        		FileNotFound|FloatingPoint|Interrupted|IO|IsADirectoryError|
-        		Import|Indentation|Index|Key|Lookup|Memory|Name|NotADirectory|
-        		NotImplemented|OS|Overflow|Permission|ProcessLookup|Reference|
-        		Runtime|Standard|Syntax|System|Tab|Timeout|Type|UnboundLocal|
-        		Unicode(Encode|Decode|Translate)?|Value|VMS|Windows|ZeroDivision
-        	)Error|
-        	((Pending)?Deprecation|Runtime|Syntax|User|Future|Import|Unicode|Bytes)?Warning|
-        	(Base)?Exception|
-        	SystemExit|StopIteration|NotImplemented|KeyboardInterrupt|GeneratorExit
-        )\b
-      scope: support.type.exception.python
-
-  builtin-functions:
-    - match: |-
-        (?x)\b(
-        	__import__|all|abs|any|apply|ascii|bin|breakpoint|callable|chr|classmethod|cmp|coerce|
-        	compile|delattr|dir|divmod|enumerate|eval|exec|execfile|filter|format|getattr|
-        	globals|hasattr|hash|help|hex|id|input|intern|isinstance|issubclass|iter|
-        	len|locals|map|max|min|next|oct|open|ord|pow|print|property|range|
-        	raw_input|reduce|reload|repr|reversed|round|setattr|sorted|staticmethod|
-        	sum|super|type|unichr|vars|zip
-        )\b
-      scope: support.function.builtin.python
-
-  builtin-types:
-    - match: |-
-        (?x)\b(
-        	basestring|bool|buffer|bytearray|bytes|complex|dict|float|frozenset|int|
-        	list|long|memoryview|object|range|set|slice|str|tuple|unicode|xrange
-        )\b
-      scope: support.type.python
-
-  name:
-    - match: '(?={{identifier}})'
-      push:
-        - include: name-specials
-        - match: '{{identifier_constant}}'
-          scope: variable.other.constant.python
-        - include: generic-names
-        - match: ''
-          pop: true
-
-  dotted-name:
-    - match: '\s*(\.)\s*(?={{identifier}})'
-      captures:
-        1: punctuation.accessor.dot.python
-      push:
-        - include: dotted-name-specials
-        - match: '{{identifier_constant}}'
-          scope: variable.other.constant.python
-        - include: generic-names
-        - match: ''
-          pop: true
-
-  qualified-name:
-    - match: '(?={{path}})'
-      push:
-        - meta_scope: meta.qualified-name.python
-        - include: name
-        - include: dotted-name
-        - match: ''
-          pop: true
-
-  qualified-name-until-leaf:
-    # Push this together with another context to match a qualified name
-    # until the last non-special identifier (if any).
-    # This allows the leaf to be scoped individually.
-    - meta_scope: meta.qualified-name.python
-    # If a line continuation follows, this may or may not be the last leaf (most likley not though)
-    - match: (?={{identifier}}\s*(\.|\\))
-      push:
-        - include: name-specials
-        - include: generic-names
-        - match: ''
-          pop: true
-    - match: (\.)\s*(?={{identifier}}\s*(\.|\\))
-      captures:
-        1: punctuation.accessor.dot.python
-      push:
-        - include: dotted-name-specials
-        - include: generic-names
-        - match: ''
-          pop: true
-    - match: \.(?!\s*{{identifier}})  # don't match last dot
-      scope: punctuation.accessor.dot.python
-    - match: (?=\S|$)
-      pop: true
-
-  name-specials:
-    - include: builtin-functions
-    - include: builtin-types
-    - include: builtin-exceptions
-    - include: illegal-names
-    - include: magic-function-names
-    - include: magic-variable-names
-    - include: language-variables
-
-  dotted-name-specials:
-    - include: magic-function-names
-    - include: magic-variable-names
-    - include: illegal-names
-
-  entity-name-class:
-    - include: illegal-names
-    - include: generic-names
-
-  entity-name-function:
-    - include: magic-function-names
-    - include: illegal-names
-    - include: generic-names
-
-  generic-names:
-    - match: '{{identifier}}'
-      scope: meta.generic-name.python
-
-  illegal-names:
-    - match: \b{{illegal_names}}\b
-      scope: invalid.illegal.name.python
-
-  illegal-names-pop:
-    - match: \b{{illegal_names}}\b
-      scope: invalid.illegal.name.python
-      pop: true
-
-  language-variables:
-    - match: \b(self|cls)\b
-      scope: variable.language.python
-    - match: _(?!{{identifier_continue}})
-      scope: variable.language.python
-
-  line-continuation:
-    - match: (\\)(.*)$\n?
-      captures:
-        1: punctuation.separator.continuation.line.python
-        2: invalid.illegal.unexpected-text.python
-    # make sure to resume parsing at next line
-      push:
-        # This prevents strings after a continuation from being a docstring
-        - include: strings
-        - match: (?=\S|^\s*$|\n)  # '\n' for when we matched a string earlier
-          pop: true
-
-  line-continuation-or-pop:
-    - include: line-continuation
-    - match: (?=\s*($|;|#))
-      pop: true
-
-  magic-function-names:
-    # https://docs.python.org/2/reference/datamodel.html
-    # https://docs.python.org/3/reference/datamodel.html
-    - match: |-
-        (?x)\b__(?:
-          # unary operators
-          invert|neg|pos|abs|
-          # binary operators
-          add|and|div|divmod|floordiv|lshift|mod|mul|or|pow|rshift|sub|truediv|xor|
-          contains|
-          # right-hand binary operators
-          radd|rand|rdiv|rdivmod|rfloordiv|rlshift|rmod|rmul|ror|rpow|rrshift|rsub|rtruediv|rxor|
-          # in-place operator assignments
-          iadd|iand|idiv|ifloordiv|ilshift|imod|imul|ior|ipow|irshift|isub|itruediv|ixor|
-          # comparisons
-          eq|ge|gt|le|lt|ne|
-          cmp|rcmp| # py2
-          # primary coercion
-          bool|str|
-          nonzero|unicode| # py2
-          # number coercion (converts something to a number)
-          bytes|complex|float|index|int|round|
-          long| # py2
-          # other "coercion"
-          format|len|length_hint|hash|repr|reversed|
-          coerce|hex|oct| # py2
-          fspath|
-          # iterator (and 'await')
-          iter|next|
-          aiter|anext|
-          await|
-          # attribute and item access
-          delattr|delitem|delslice|
-          getattr|getattribute|getitem|getslice|
-          setattr|setitem|setslice|
-          dir|missing|
-          # context manager
-          enter|exit|
-          aenter|aexit|
-          # other class magic
-          call|del|init|new|init_subclass|
-          instancecheck|subclasscheck|
-          # pickling
-          getnewargs|getnewargs_ex|getstate|setstate|reduce|reduce_ex|
-          # descriptors
-          delete|get|set|set_name|
-          # class-specific
-          subclasses|
-          # dataclasses (PEP 557)
-          post_init|
-          # for typing core support (PEP 560)
-          class_getitem|mro_entries
-        )__\b
-      comment: these methods have magic interpretation by python and are generally called indirectly through syntactic constructs
-      scope: support.function.magic.python
-
-  magic-variable-names:
-    # magic variables which a class/module/object may have.
-    # https://docs.python.org/3/library/inspect.html#types-and-members
-    # https://docs.python.org/3/reference/datamodel.html#object.__slots__
-    # https://docs.python.org/3/reference/datamodel.html#preparing-the-class-namespace
-    - match: |-
-        (?x)\b__(?:
-          # generic object
-          class|dict|doc|module|name|
-          # module-specific / global
-          all|file|package|
-          # functions & methods
-          annotations|closure|code|defaults|func|globals|kwdefaults|self|qualname|
-          # classes (attributes)
-          bases|prepare|slots|metaclass|mro|
-          # Python 2
-          members|methods
-        )__\b
-      scope: support.variable.magic.python
-
-  docstrings:
-    - match: ^\s*(?=(?i)(ur|ru|u|r)?("""|'''))
-      push:
-      - match: (?i)(u)?("""|''')
-        captures:
-          1: storage.type.string.python
-          2: punctuation.definition.comment.begin.python
-        set:
-          - meta_scope: comment.block.documentation.python
-          - include: escaped-unicode-char
-          - include: escaped-char
-          - match: '\2'
-            scope: punctuation.definition.comment.end.python
-            pop: true
-      - match: (?i)(u?ru?)("""|''')
-        captures:
-          1: storage.type.string.python
-          2: punctuation.definition.comment.begin.python
-        set:
-          - meta_scope: comment.block.documentation.python
-          - match: '\2'
-            scope: punctuation.definition.comment.end.python
-            pop: true
-
-  escaped-char:
-    - match: '(\\x\h{2})|(\\[0-7]{3})|(\\[\\"''abfnrtv])'
-      captures:
-        1: constant.character.escape.hex.python
-        2: constant.character.escape.octal.python
-        3: constant.character.escape.python
-    - match: \\.  # deprecated in 3.6 and will eventually be a syntax error
-      scope: invalid.deprecated.character.escape.python
-
-  escaped-unicode-char:
-    - match: '(\\U\h{8})|(\\u\h{4})|(\\N\{[a-zA-Z ]+\})'
-      captures:
-        1: constant.character.escape.unicode.16-bit-hex.python
-        2: constant.character.escape.unicode.32-bit-hex.python
-        3: constant.character.escape.unicode.name.python
-
-  line-continuation-inside-string:
-    - match: (\\)$\n?
-      captures:
-        1: punctuation.separator.continuation.line.python
-    - match: \n
-      scope: invalid.illegal.unclosed-string.python
-      set: after-expression
-
-  constant-placeholder:
-    - match: |- # printf style
-        (?x)
-        %
-          ( \( ({{identifier}}) \) )? # mapping key
-          \#?            # alternate form
-          0?             # pad with zeros
-          \-?            # left-adjust
-          \ ?            # implicit sign
-          [+-]?          # sign
-          (\d*|\*)       # width
-          (\. (\d*|\*))? # precision
-          [hlL]?         # length modifier (but ignored)
-          [acdeEfFgGiorsuxX%]
-      scope: constant.other.placeholder.python
-      captures:
-        2: variable.other.placeholder.python
-    - match: '{{strftime_spec}}'
-      scope: constant.other.placeholder.python
-    - match: '\{\{|\}\}'
-      scope: constant.character.escape.python
-    - include: formatting-syntax
-
-  formatting-syntax:
-    # https://docs.python.org/3.6/library/string.html#formatstrings
-    - match: |- # simple form
-        (?x)
-        (\{)
-          (?: [\w.\[\]]+)?             # field_name
-          (   ! [ars])?                # conversion
-          (   : (?:{{format_spec}}|    # format_spec OR
-                   [^}%]*%.[^}]*)      # any format-like string
-          )?
-        (\})
-      scope: constant.other.placeholder.python
-      captures:
-        1: punctuation.definition.placeholder.begin.python
-        2: storage.modifier.conversion.python
-        3: constant.other.format-spec.python
-        4: punctuation.definition.placeholder.end.python
-    - match: \{(?=[^\}"']+\{[^"']*\}) # complex (nested) form
-      scope: punctuation.definition.placeholder.begin.python
-      push:
-        - meta_scope: constant.other.placeholder.python
-        - match: \}
-          scope: punctuation.definition.placeholder.end.python
-          pop: true
-        - match: '[\w.\[\]]+'
-        - match: '![ars]'
-          scope: storage.modifier.conversion.python
-        - match: ':'
-          push:
-            - meta_scope: meta.format-spec.python constant.other.format-spec.python
-            - match: (?=\})
-              pop: true
-            - include: formatting-syntax
-
-  f-string-content:
-    # https://www.python.org/dev/peps/pep-0498/
-    # https://docs.python.org/3.6/reference/lexical_analysis.html#f-strings
-    - match: \{\{|\}\}
-      scope: constant.character.escape.python
-    - match: \{\s*\}
-      scope: invalid.illegal.empty-expression.python
-    - match: (?=\{)
-      push: f-string-replacement
-    - match: \}
-      scope: invalid.illegal.stray-brace.python
-
-  f-string-content-reset:
-    # Same as f-string-content, but will reset the entire scope stack
-    - match: \{\{|\}\}
-      scope: constant.character.escape.python
-    - match: \{\s*\}
-      scope: invalid.illegal.empty-expression.python
-    - match: (?=\{)
-      push: f-string-replacement-reset
-    - match: \}
-      scope: invalid.illegal.stray-brace.python
-
-  f-string-replacement:
-    - clear_scopes: 1
-    - match: \}
-      scope: meta.interpolation.python punctuation.section.interpolation.end.python
-      pop: true
-    - match: \{
-      scope: punctuation.section.interpolation.begin.python
-      push:
-        - meta_scope: meta.interpolation.python
-        - match: (?=\})
-          pop: true
-        - match: '![ars]'
-          scope: storage.modifier.conversion.python
-        - match: ':'
-          push:
-            - meta_scope: meta.format-spec.python constant.other.format-spec.python
-            # Because replacements can also be used *within* the format-spec,
-            # basically any character is valid and matching {{format_spec}} is useless.
-            # - match: '{{format_spec}}'
-            - match: (?=\})
-              pop: true
-            - include: f-string-content
-        - match: ''
-          push:
-            - meta_content_scope: source.python.compat.embedded
-            - match: (?=![^=]|:|\})
-              pop: true
-            - match: \\
-              scope: invalid.illegal.backslash-in-fstring.python
-            - include: inline-for
-            - include: expressions
-
-  f-string-replacement-reset:
-    # Same as f-string-replacement, but with clear_scopes: true
-    - clear_scopes: true
-    - meta_scope: source.python.compat meta.string.interpolated.python
-    - match: \}
-      scope: meta.interpolation.python punctuation.section.interpolation.end.python
-      pop: true
-    - match: \{
-      scope: punctuation.section.interpolation.begin.python
-      push:
-        - meta_scope: meta.interpolation.python
-        - match: (?=\})
-          pop: true
-        - match: '![ars]'
-          scope: storage.modifier.conversion.python
-        - match: ':'
-          push:
-            - meta_scope: meta.format-spec.python constant.other.format-spec.python
-            - match: (?=\})
-              pop: true
-            - include: f-string-content
-        - match: ''
-          push:
-            - meta_content_scope: source.python.compat.embedded
-            - match: (?=![^=]|:|\})
-              pop: true
-            - match: \\
-              scope: invalid.illegal.backslash-in-fstring.python
-            - include: inline-for
-            - include: expressions
-
-  string-quoted-double-block:
-    # Triple-quoted capital R raw string, unicode or not, no syntax embedding
-    - match: '([uU]?R)(""")'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.double.block.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.double.block.python
-        - match: '"""'
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: escaped-unicode-char
-    # Triple-quoted capital R raw string, bytes, no syntax embedding
-    - match: '([bB]R|R[bB])(""")'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.double.block.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.double.block.python
-        - match: '"""'
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-    # Triple-quoted raw string, unicode or not, will detect SQL, otherwise regex
-    - match: '([uU]?r)(""")'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.double.block.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.double.block.python
-        - match: '(?={{sql_indicator}})'
-          set:
-            - meta_scope: meta.string.python string.quoted.double.block.python
-            - match: '"""'
-              scope: punctuation.definition.string.end.python
-              set: after-expression
-            - match: ''
-              push: scope:source.sql
-              with_prototype:
-                - match: '(?=""")'
-                  pop: true
-                - include: escaped-unicode-char
-                - include: constant-placeholder
-        - match: '(?=\S)'
-          set:
-            - meta_scope: meta.string.python string.quoted.double.block.python
-            - match: '"""'
-              scope: punctuation.definition.string.end.python
-              set: after-expression
-            - match: ''
-              push: scope:source.regexp.python
-              with_prototype:
-                - match: '(?=""")'
-                  pop: true
-                - include: escaped-unicode-char
-    # Triple-quoted raw string, bytes, will use regex
-    - match: '([bB]r|r[bB])(""")'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.double.block.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.double.block.python
-        - match: '"""'
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - match: ''
-          embed: scope:source.regexp.python
-          escape: (?=""")
-    # Triple-quoted raw f-string
-    - match: ([fF]R|R[fF])(""")
-      captures:
-        1: storage.type.string.python
-        2: meta.string.interpolated.python string.quoted.double.block.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.interpolated.python string.quoted.double.block.python
-        - match: '"""'
-          scope: punctuation.definition.string.begin.python
-          set: after-expression
-        - include: f-string-content
-    # Triple-quoted raw f-string, treated as regex
-    - match: ([fF]r|r[fF])(""")
-      captures:
-        1: storage.type.string.python
-        2: meta.string.interpolated.python string.quoted.double.block.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.interpolated.python string.quoted.double.block.python
-        - match: '"""'
-          scope: punctuation.definition.string.begin.python
-          set: after-expression
-        - match: ''
-          push: scope:source.regexp.python
-          with_prototype:
-            - match: '(?=""")'
-              pop: true
-            - include: line-continuation-inside-string
-            - include: f-string-content-reset
-    # Triple-quoted f-string
-    - match: ((?i)f|f)(""")
-      captures:
-        1: storage.type.string.python
-        2: meta.string.interpolated.python string.quoted.double.block.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.interpolated.python string.quoted.double.block.python
-        - match: '"""'
-          scope: punctuation.definition.string.begin.python
-          set: after-expression
-        - include: escaped-unicode-char
-        - include: escaped-char
-        - include: f-string-content
-    # Triple-quoted string, unicode or not, will detect SQL
-    - match: '([uU]?)(""")'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.double.block.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.double.block.python
-        - match: '(?={{sql_indicator}})'
-          set:
-            - meta_scope: meta.string.python string.quoted.double.block.python
-            - match: '"""'
-              scope: punctuation.definition.string.end.python
-              set: after-expression
-            - match: ''
-              push: scope:source.sql
-              with_prototype:
-                - match: '(?=""")'
-                  pop: true
-                - include: escaped-unicode-char
-                - include: escaped-char
-                - include: constant-placeholder
-        - match: '(?=\S)'
-          set:
-            - meta_scope: meta.string.python string.quoted.double.block.python
-            - match: '"""'
-              scope: punctuation.definition.string.end.python
-              set: after-expression
-            - include: escaped-unicode-char
-            - include: escaped-char
-            - include: constant-placeholder
-    # Triple-quoted string, bytes, no syntax embedding
-    - match: '([bB])(""")'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.double.block.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.double.block.python
-        - match: '"""'
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: escaped-char
-        - include: constant-placeholder
-
-  string-quoted-double:
-    # Single-line capital R raw string, unicode or not, no syntax embedding
-    - match: '([uU]?R)(")'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.double.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.double.python
-        - match: '"'
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: line-continuation-inside-string
-    # Single-line capital R raw string, bytes, no syntax embedding
-    - match: '([bB]R|R[bB])(")'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.double.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.double.python
-        - match: '"'
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: line-continuation-inside-string
-    # Single-line raw string, unicode or not, starting with a SQL keyword
-    - match: '([uU]?r)(")(?={{sql_indicator}})'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.double.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.double.python
-        - match: '"'
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: line-continuation-inside-string
-        - match: ''
-          push: scope:source.sql
-          with_prototype:
-            - match: '(?="|\n)'
-              pop: true
-            - include: constant-placeholder
-            - include: line-continuation-inside-string
-    # Single-line raw string, unicode or not, treated as regex
-    - match: '([uU]?r)(")'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.double.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.double.python
-        - match: '"'
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: line-continuation-inside-string
-        - match: ''
-          push: scope:source.regexp.python
-          with_prototype:
-            - match: '(?="|\n)'
-              pop: true
-            - include: line-continuation-inside-string
-    # Single-line raw string, bytes, treated as regex
-    - match: '([bB]r|r[bB])(")'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.double.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.double.python
-        - match: '"'
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: line-continuation-inside-string
-        - match: ''
-          embed: scope:source.regexp.python
-          escape: (?="|\n)
-    # Single-line raw f-string
-    - match: (R[fF]|[fF]R)(")
-      captures:
-        1: storage.type.string.python
-        2: meta.string.interpolated.python string.quoted.double.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.interpolated.python string.quoted.double.python
-        - match: '"'
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: line-continuation-inside-string
-        - include: f-string-content
-    # Single-line raw f-string, treated as regex
-    - match: (r[fF]|[fF]r)(")
-      captures:
-        1: storage.type.string.python
-        2: meta.string.interpolated.python string.quoted.double.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.interpolated.python string.quoted.double.python
-        - match: '"'
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: line-continuation-inside-string
-        - match: ''
-          push: scope:source.regexp.python
-          with_prototype:
-            - match: '(?="|\n)'
-              pop: true
-            - include: line-continuation-inside-string
-            - include: f-string-content-reset
-    # Single-line f-string
-    - match: ((?i)f|f)(")
-      captures:
-        1: storage.type.string.python
-        2: meta.string.interpolated.python string.quoted.double.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.interpolated.python string.quoted.double.python
-        - match: '"'
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: escaped-unicode-char
-        - include: escaped-char
-        - include: line-continuation-inside-string
-        - include: f-string-content
-    # Single-line string, unicode or not, starting with a SQL keyword
-    - match: '([uU]?)(")(?={{sql_indicator}})'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.double.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.double.python
-        - match: '"'
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: line-continuation-inside-string
-        - match: ''
-          push: scope:source.sql
-          with_prototype:
-            - match: '(?="|\n)'
-              pop: true
-            - include: escaped-unicode-char
-            - include: escaped-char
-            - include: line-continuation-inside-string
-            - include: constant-placeholder
-    # Single-line string, unicode or not
-    - match: '([uU]?)(")'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.double.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.double.python
-        - match: '"'
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: escaped-unicode-char
-        - include: escaped-char
-        - include: line-continuation-inside-string
-        - include: constant-placeholder
-    # Single-line string, bytes
-    - match: '([bB])(")'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.double.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.double.python
-        - match: '"'
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: escaped-char
-        - include: line-continuation-inside-string
-        - include: constant-placeholder
-
-  string-quoted-single-block:
-    # Triple-quoted capital R raw string, unicode or not, no syntax embedding
-    - match: ([uU]?R)(''')
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.single.block.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.single.block.python
-        - match: "'''"
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-    # Triple-quoted capital R raw string, bytes, no syntax embedding
-    - match: ([bB]R|R[bB])(''')
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.single.block.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.single.block.python
-        - match: "'''"
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-    # Triple-quoted raw string, unicode or not, will detect SQL, otherwise regex
-    - match: ([uU]?r)(''')
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.single.block.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.single.block.python
-        - match: '(?={{sql_indicator}})'
-          set:
-            - meta_scope: meta.string.python string.quoted.single.block.python
-            - match: "'''"
-              scope: punctuation.definition.string.end.python
-              set: after-expression
-            - match: ''
-              push: scope:source.sql
-              with_prototype:
-                - match: (?=''')
-                  pop: true
-                - include: escaped-unicode-char
-                - include: escaped-char
-                - include: constant-placeholder
-        - match: '(?=\S)'
-          set:
-            - meta_scope: meta.string.python string.quoted.single.block.python
-            - match: "'''"
-              scope: punctuation.definition.string.end.python
-              set: after-expression
-            - match: ''
-              push: scope:source.regexp.python
-              with_prototype:
-                - match: (?=''')
-                  pop: true
-                - include: escaped-unicode-char
-    # Triple-quoted raw string, bytes, will use regex
-    - match: ([bB]r|r[bB])(''')
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.single.block.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.single.block.python
-        - match: "'''"
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - match: ''
-          embed: scope:source.regexp.python
-          escape: (?=''')
-    # Triple-quoted raw f-string
-    - match: ([fF]R|R[fF])(''')
-      captures:
-        1: storage.type.string.python
-        2: meta.string.interpolated.python string.quoted.single.block.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.interpolated.python string.quoted.single.block.python
-        - match: "'''"
-          scope: punctuation.definition.string.begin.python
-          set: after-expression
-        - include: f-string-content
-    # Triple-quoted raw f-string, treated as regex
-    - match: ([fF]r|r[fF])(''')
-      captures:
-        1: storage.type.string.python
-        2: meta.string.interpolated.python string.quoted.single.block.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.interpolated.python string.quoted.single.block.python
-        - match: "'''"
-          scope: punctuation.definition.string.begin.python
-          set: after-expression
-        - match: ''
-          push: scope:source.regexp.python
-          with_prototype:
-            - match: (?=''')
-              pop: true
-            - include: line-continuation-inside-string
-            - include: f-string-content-reset
-    # Triple-quoted f-string
-    - match: ([fF])(''')
-      captures:
-        1: storage.type.string.python
-        2: meta.string.interpolated.python string.quoted.single.block.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.interpolated.python string.quoted.single.block.python
-        - match: "'''"
-          scope: punctuation.definition.string.begin.python
-          set: after-expression
-        - include: escaped-unicode-char
-        - include: escaped-char
-        - include: f-string-content
-    # Triple-quoted string, unicode or not, will detect SQL
-    - match: ([uU]?)(''')
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.single.block.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.single.block.python
-        - match: '(?={{sql_indicator}})'
-          set:
-            - meta_scope: meta.string.python string.quoted.single.block.python
-            - match: "'''"
-              scope: punctuation.definition.string.end.python
-              set: after-expression
-            - match: ''
-              push: scope:source.sql
-              with_prototype:
-                - match: (?=''')
-                  pop: true
-                - include: escaped-unicode-char
-                - include: escaped-char
-                - include: constant-placeholder
-        - match: '(?=\S)'
-          set:
-            - meta_scope: meta.string.python string.quoted.single.block.python
-            - match: "'''"
-              scope: punctuation.definition.string.end.python
-              set: after-expression
-            - include: escaped-unicode-char
-            - include: escaped-char
-            - include: constant-placeholder
-    # Triple-quoted string, bytes, no syntax embedding
-    - match: ([bB])(''')
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.single.block.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.single.block.python
-        - match: "'''"
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: escaped-char
-        - include: constant-placeholder
-
-  string-quoted-single:
-    # Single-line capital R raw string, unicode or not, no syntax embedding
-    - match: '([uU]?R)('')'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.single.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.single.python
-        - match: "'"
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: line-continuation-inside-string
-    # Single-line capital R raw string, bytes, no syntax embedding
-    - match: '([bB]R|R[bB])('')'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.single.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.single.python
-        - match: "'"
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: line-continuation-inside-string
-    # Single-line raw string, unicode or not, starting with a SQL keyword
-    - match: '([uU]?r)('')(?={{sql_indicator}})'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.single.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.single.python
-        - match: "'"
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: line-continuation-inside-string
-        - match: ''
-          push: scope:source.sql
-          with_prototype:
-            - match: '(?=''|\n)'
-              pop: true
-            - include: line-continuation-inside-string
-            - include: constant-placeholder
-    # Single-line raw string, unicode or not, treated as regex
-    - match: '([uU]?r)('')'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.single.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.single.python
-        - match: "'"
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: line-continuation-inside-string
-        - match: ''
-          push: scope:source.regexp.python
-          with_prototype:
-            - match: '(?=''|\n)'
-              pop: true
-            - include: line-continuation-inside-string
-    # Single-line raw string, bytes, treated as regex
-    - match: '([bB]r|r[bB])('')'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.single.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.single.python
-        - match: "'"
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: line-continuation-inside-string
-        - match: ''
-          push: scope:source.regexp.python
-          with_prototype:
-            - match: '(?=''|\n)'
-              pop: true
-            - include: line-continuation-inside-string
-    # Single-line raw f-string
-    - match: ([fF]R|R[fF])(')
-      captures:
-        1: storage.type.string.python
-        2: meta.string.interpolated.python string.quoted.single.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.interpolated.python string.quoted.single.python
-        - match: "'"
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: line-continuation-inside-string
-        - include: f-string-content
-    # Single-line raw f-string, treated as regex
-    - match: ([fF]r|r[fF])(')
-      captures:
-        1: storage.type.string.python
-        2: meta.string.interpolated.python string.quoted.single.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.interpolated.python string.quoted.single.python
-        - match: "'"
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: line-continuation-inside-string
-        - match: ''
-          push: scope:source.regexp.python
-          with_prototype:
-            - match: (?='|\n)
-              pop: true
-            - include: line-continuation-inside-string
-            - include: f-string-content-reset
-    # Single-line f-string
-    - match: ((?i)f|f)(')
-      captures:
-        1: storage.type.string.python
-        2: meta.string.interpolated.python string.quoted.single.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.interpolated.python string.quoted.single.python
-        - match: "'"
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: escaped-unicode-char
-        - include: escaped-char
-        - include: line-continuation-inside-string
-        - include: f-string-content
-    # Single-line string, unicode or not, starting with a SQL keyword
-    - match: '([uU]?)('')(?={{sql_indicator}})'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.single.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.single.python
-        - match: "'"
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: line-continuation-inside-string
-        - match: ''
-          push: scope:source.sql
-          with_prototype:
-            - match: '(?=''|\n)'
-              pop: true
-            - include: escaped-unicode-char
-            - include: escaped-char
-            - include: line-continuation-inside-string
-            - include: constant-placeholder
-    # Single-line string, unicode or not
-    - match: '([uU]?)('')'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.single.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.single.python
-        - match: "'"
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: escaped-unicode-char
-        - include: escaped-char
-        - include: line-continuation-inside-string
-        - include: constant-placeholder
-    # Single-line string, bytes
-    - match: '([bB])('')'
-      captures:
-        1: storage.type.string.python
-        2: meta.string.python string.quoted.single.python punctuation.definition.string.begin.python
-      push:
-        - meta_content_scope: meta.string.python string.quoted.single.python
-        - match: "'"
-          scope: punctuation.definition.string.end.python
-          set: after-expression
-        - include: escaped-char
-        - include: line-continuation-inside-string
-        - include: constant-placeholder
-
-  strings:
-    # block versions must be matched first
-    - include: string-quoted-double-block
-    - include: string-quoted-double
-    - include: string-quoted-single-block
-    - include: string-quoted-single
-
-  inline-for:
-    - match: \b(?:(async)\s+)?(for)\b
-      captures:
-        1: storage.modifier.async.python
-        2: keyword.control.flow.for.generator.python
-      push:
-        - include: comments
-        - meta_scope: meta.expression.generator.python
-        - match: \b(in)\b
-          scope: keyword.control.flow.for.in.python
-          pop: true
-        - match: '(?=[)\]}])'
-          scope: invalid.illegal.missing-in.python
-          pop: true
-        - include: illegal-names-pop
-        - include: target-list
-
-  inline-if:
-    - match: \b(if)\b
-      scope: keyword.control.flow.if.inline.python
-    - match: \b(else)\b
-      scope: keyword.control.flow.else.inline.python
-
-  target-list:
-    - match: ','
-      scope: punctuation.separator.target-list.python
-    - match: \(
-      scope: punctuation.section.target-list.begin.python
-      push:
-        - include: comments
-        - match: ','
-          scope: punctuation.separator.target-list.python
-        - match: \)
-          scope: punctuation.section.target-list.end.python
-          pop: true
-        - include: target-list
-        - include: name
-    - include: name
diff --git a/RenpyLanguage.JSON-tmLanguage b/RenpyLanguage.JSON-tmLanguage
index 98aa1a1..0a74290 100644
--- a/RenpyLanguage.JSON-tmLanguage
+++ b/RenpyLanguage.JSON-tmLanguage
@@ -128,7 +128,7 @@
         "source_python":{
             "comment": "Context for python statements + Renpy autocompletes",
             "name": "source.renpy.python",
-            "include": "source.python.compat"
+            "include": "source.python"
         },
         "default":{
             "comment": "Default context",
diff --git a/RenpyLanguage.tmLanguage b/RenpyLanguage.tmLanguage
index c1928a8..a2cacde 100644
--- a/RenpyLanguage.tmLanguage
+++ b/RenpyLanguage.tmLanguage
@@ -638,7 +638,7 @@
 			<key>comment</key>
 			<string>Context for python statements + Renpy autocompletes</string>
 			<key>include</key>
-			<string>source.python.compat</string>
+			<string>source.python</string>
 			<key>name</key>
 			<string>source.renpy.python</string>
 		</dict>
diff --git a/messages.json b/messages.json
index afd3c99..c7ab8da 100644
--- a/messages.json
+++ b/messages.json
@@ -36,5 +36,6 @@
   "1.2.10": "messages/1.2.10.txt",
   "1.2.11": "messages/1.2.11.txt",
   "1.2.12": "messages/1.2.12.txt",
-  "1.2.13": "messages/1.2.13.txt"
+  "1.2.13": "messages/1.2.13.txt",
+  "1.2.14": "messages/1.2.14.txt"
 }
diff --git a/messages/1.2.14.txt b/messages/1.2.14.txt
new file mode 100644
index 0000000..51e6163
--- /dev/null
+++ b/messages/1.2.14.txt
@@ -0,0 +1,11 @@
+Sublime Renpy v1.2.14
+======================
+
+Bugfixes:
+
+Improvements:
+
+Changes:
+-Removed local copy of and dependency on Python.sublime-syntax. This no longer appears to be needed, as long as Sublime Text's bundled version of Python syntax is up to date.
+
+New: