   }
 
 # Unfortunate necessity (mainly making a unique grammar for each coding language)
+mintGeneric: {
+  comment: 'A catch all for any other languages.'
+  name: 'meta.environment.embedded.$11.latex'
+  contentName: 'markup.raw.verbatim.latex'
+  begin: '((\\\\)begin)(\\{)((minted)\\*?)(\\})(?:(\\[)(.*?)(\\]))?(\\{)([a-zA-Z]*)(\\})'
+  beginCaptures:
+    1: name: 'support.function.environment.begin.latex'
+    2: name: 'punctuation.definition.function.begin.latex'
+    3: name: 'punctuation.definition.arguments.begin.latex'
+    4: name: 'variable.parameter.environment.$5.latex'
+    # 5: Used for meta scope name (basically just non starred version)
+    6: name: 'punctuation.definition.arguments.end.latex'
+    7: name: 'punctuation.definition.arguments.optional.begin.latex'
+    8: name: 'variable.parameter.optional.function.environment.latex'
+    9: name: 'punctuation.definition.arguments.optional.end.latex'
+    10: name: 'punctuation.definition.arguments.begin.latex'
+    11: name: 'variable.parameter.language.$11.latex'
+    12: name: 'punctuation.definition.arguments.end.latex'
+  end: '((\\\\)end)(\\{)(\\4)(\\})'
+  endCaptures:
+    1: name: 'support.function.environment.end.latex'
+    2: name: 'punctuation.definition.function.latex'
+    3: name: 'punctuation.definition.arguments.begin.latex'
+    4: name: 'variable.parameter.environment.latex'
+    5: name: 'punctuation.definition.arguments.end.latex'
+}
+mintPython: {
+  name: 'meta.environment.embedded.python.latex'
+  contentName: 'source.embedded.python'
+  begin: '((\\\\)begin)(\\{)((minted)\\*?)(\\})(?:(\\[)(.*?)(\\]))?(\\{)(python3?|py3?)(\\})'
+  beginCaptures:
+    1: name: 'support.function.environment.begin.latex'
+    2: name: 'punctuation.definition.function.begin.latex'
+    3: name: 'punctuation.definition.arguments.begin.latex'
+    4: name: 'variable.parameter.environment.minted.latex'
+    # 5: Used for meta scope name (basically just non starred version)
+    6: name: 'punctuation.definition.arguments.end.latex'
+    7: name: 'punctuation.definition.arguments.optional.begin.latex'
+    8: name: 'variable.parameter.optional.function.environment.latex'
+    9: name: 'punctuation.definition.arguments.optional.end.latex'
+    10: name: 'punctuation.definition.arguments.begin.latex'
+    11: name: 'variable.parameter.language.python.latex'
+    12: name: 'punctuation.definition.arguments.end.latex'
+  end: '((\\\\)end)(\\{)(minted)(\\})'
+  endCaptures:
+    1: name: 'support.function.environment.end.latex'
+    2: name: 'punctuation.definition.function.latex'
+    3: name: 'punctuation.definition.arguments.begin.latex'
+    4: name: 'variable.parameter.environment.latex'
+    5: name: 'punctuation.definition.arguments.end.latex'
+  patterns: [{ include: 'source.python' }]
+}
+mintJavascript: {
+  name: 'meta.environment.embedded.js.latex'
+  contentName: 'source.embedded.js'
+  begin: '((\\\\)begin)(\\{)((minted)\\*?)(\\})(?:(\\[)(.*?)(\\]))?(\\{)(js)(\\})'
+  beginCaptures:
+    1: name: 'support.function.environment.begin.latex'
+    2: name: 'punctuation.definition.function.begin.latex'
+    3: name: 'punctuation.definition.arguments.begin.latex'
+    4: name: 'variable.parameter.environment.minted.latex'
+    # 5: Used for meta scope name (basically just non starred version)
+    6: name: 'punctuation.definition.arguments.end.latex'
+    7: name: 'punctuation.definition.arguments.optional.begin.latex'
+    8: name: 'variable.parameter.optional.function.environment.latex'
+    9: name: 'punctuation.definition.arguments.optional.end.latex'
+    10: name: 'punctuation.definition.arguments.begin.latex'
+    11: name: 'variable.parameter.language.js.latex'
+    12: name: 'punctuation.definition.arguments.end.latex'
+  end: '((\\\\)end)(\\{)(minted)(\\})'
+  endCaptures:
+    1: name: 'support.function.environment.end.latex'
+    2: name: 'punctuation.definition.function.latex'
+    3: name: 'punctuation.definition.arguments.begin.latex'
+    4: name: 'variable.parameter.environment.latex'
+    5: name: 'punctuation.definition.arguments.end.latex'
+  patterns: [{ include: 'source.js' }]
+}
+mintJSON: {
+  name: 'meta.environment.embedded.json.latex'
+  contentName: 'source.embedded.json'
+  begin: '((\\\\)begin)(\\{)((minted)\\*?)(\\})(?:(\\[)(.*?)(\\]))?(\\{)(json)(\\})'
+  beginCaptures:
+    1: name: 'support.function.environment.begin.latex'
+    2: name: 'punctuation.definition.function.begin.latex'
+    3: name: 'punctuation.definition.arguments.begin.latex'
+    4: name: 'variable.parameter.environment.minted.latex'
+    # 5: Used for meta scope name (basically just non starred version)
+    6: name: 'punctuation.definition.arguments.end.latex'
+    7: name: 'punctuation.definition.arguments.optional.begin.latex'
+    8: name: 'variable.parameter.optional.function.environment.latex'
+    9: name: 'punctuation.definition.arguments.optional.end.latex'
+    10: name: 'punctuation.definition.arguments.begin.latex'
+    11: name: 'variable.parameter.language.json.latex'
+    12: name: 'punctuation.definition.arguments.end.latex'
+  end: '((\\\\)end)(\\{)(minted)(\\})'
+  endCaptures:
+    1: name: 'support.function.environment.end.latex'
+    2: name: 'punctuation.definition.function.latex'
+    3: name: 'punctuation.definition.arguments.begin.latex'
+    4: name: 'variable.parameter.environment.latex'
+    5: name: 'punctuation.definition.arguments.end.latex'
+  patterns: [{ include: 'source.json' }]
+}
+mintCoffeescript: {
+  name: 'meta.environment.embedded.coffee.latex'
+  contentName: 'source.embedded.coffee'
+  begin: '((\\\\)begin)(\\{)((minted)\\*?)(\\})(?:(\\[)(.*?)(\\]))?(\\{)(coffee(?:\\-?script)?)(\\})'
+  beginCaptures:
+    1: name: 'support.function.environment.begin.latex'
+    2: name: 'punctuation.definition.function.begin.latex'
+    3: name: 'punctuation.definition.arguments.begin.latex'
+    4: name: 'variable.parameter.environment.minted.latex'
+    # 5: Used for meta scope name (basically just non starred version)
+    6: name: 'punctuation.definition.arguments.end.latex'
+    7: name: 'punctuation.definition.arguments.optional.begin.latex'
+    8: name: 'variable.parameter.optional.function.environment.latex'
+    9: name: 'punctuation.definition.arguments.optional.end.latex'
+    10: name: 'punctuation.definition.arguments.begin.latex'
+    11: name: 'variable.parameter.language.coffee.latex'
+    12: name: 'punctuation.definition.arguments.end.latex'
+  end: '((\\\\)end)(\\{)(minted)(\\})'
+  endCaptures:
+    1: name: 'support.function.environment.end.latex'
+    2: name: 'punctuation.definition.function.latex'
+    3: name: 'punctuation.definition.arguments.begin.latex'
+    4: name: 'variable.parameter.environment.latex'
+    5: name: 'punctuation.definition.arguments.end.latex'
+  patterns: [{ include: 'source.coffee' }]
+}
+mintCSS: {
+  name: 'meta.environment.embedded.css.latex'
+  contentName: 'source.embedded.css'
+  begin: '((\\\\)begin)(\\{)((minted)\\*?)(\\})(?:(\\[)(.*?)(\\]))?(\\{)(css)(\\})'
+  beginCaptures:
+    1: name: 'support.function.environment.begin.latex'
+    2: name: 'punctuation.definition.function.begin.latex'
+    3: name: 'punctuation.definition.arguments.begin.latex'
+    4: name: 'variable.parameter.environment.minted.latex'
+    # 5: Used for meta scope name (basically just non starred version)
+    6: name: 'punctuation.definition.arguments.end.latex'
+    7: name: 'punctuation.definition.arguments.optional.begin.latex'
+    8: name: 'variable.parameter.optional.function.environment.latex'
+    9: name: 'punctuation.definition.arguments.optional.end.latex'
+    10: name: 'punctuation.definition.arguments.begin.latex'
+    11: name: 'variable.parameter.language.css.latex'
+    12: name: 'punctuation.definition.arguments.end.latex'
+  end: '((\\\\)end)(\\{)(minted)(\\})'
+  endCaptures:
+    1: name: 'support.function.environment.end.latex'
+    2: name: 'punctuation.definition.function.latex'
+    3: name: 'punctuation.definition.arguments.begin.latex'
+    4: name: 'variable.parameter.environment.latex'
+    5: name: 'punctuation.definition.arguments.end.latex'
+  patterns: [{ include: 'source.css' }]
+}
+mintLess: {
+  name: 'meta.environment.embedded.less.latex'
+  contentName: 'source.embedded.less'
+  begin: '((\\\\)begin)(\\{)((minted)\\*?)(\\})(?:(\\[)(.*?)(\\]))?(\\{)(less)(\\})'
+  beginCaptures:
+    1: name: 'support.function.environment.begin.latex'
+    2: name: 'punctuation.definition.function.begin.latex'
+    3: name: 'punctuation.definition.arguments.begin.latex'
+    4: name: 'variable.parameter.environment.minted.latex'
+    # 5: Used for meta scope name (basically just non starred version)
+    6: name: 'punctuation.definition.arguments.end.latex'
+    7: name: 'punctuation.definition.arguments.optional.begin.latex'
+    8: name: 'variable.parameter.optional.function.environment.latex'
+    9: name: 'punctuation.definition.arguments.optional.end.latex'
+    10: name: 'punctuation.definition.arguments.begin.latex'
+    11: name: 'variable.parameter.language.less.latex'
+    12: name: 'punctuation.definition.arguments.end.latex'
+  end: '((\\\\)end)(\\{)(minted)(\\})'
+  endCaptures:
+    1: name: 'support.function.environment.end.latex'
+    2: name: 'punctuation.definition.function.latex'
+    3: name: 'punctuation.definition.arguments.begin.latex'
+    4: name: 'variable.parameter.environment.latex'
+    5: name: 'punctuation.definition.arguments.end.latex'
+  patterns: [{ include: 'source.less' }]
+}
+mintXML: {
+  name: 'meta.environment.embedded.xml.latex'
+  contentName: 'source.embedded.xml'
+  begin: '((\\\\)begin)(\\{)((minted)\\*?)(\\})(?:(\\[)(.*?)(\\]))?(\\{)(xml)(\\})'
+  beginCaptures:
+    1: name: 'support.function.environment.begin.latex'
+    2: name: 'punctuation.definition.function.begin.latex'
+    3: name: 'punctuation.definition.arguments.begin.latex'
+    4: name: 'variable.parameter.environment.minted.latex'
+    # 5: Used for meta scope name (basically just non starred version)
+    6: name: 'punctuation.definition.arguments.end.latex'
+    7: name: 'punctuation.definition.arguments.optional.begin.latex'
+    8: name: 'variable.parameter.optional.function.environment.latex'
+    9: name: 'punctuation.definition.arguments.optional.end.latex'
+    10: name: 'punctuation.definition.arguments.begin.latex'
+    11: name: 'variable.parameter.language.xml.latex'
+    12: name: 'punctuation.definition.arguments.end.latex'
+  end: '((\\\\)end)(\\{)(minted)(\\})'
+  endCaptures:
+    1: name: 'support.function.environment.end.latex'
+    2: name: 'punctuation.definition.function.latex'
+    3: name: 'punctuation.definition.arguments.begin.latex'
+    4: name: 'variable.parameter.environment.latex'
+    5: name: 'punctuation.definition.arguments.end.latex'
+  patterns: [{ include: 'source.xml' }]
+}
+mintRuby: {
+  name: 'meta.environment.embedded.ruby.latex'
+  contentName: 'source.embedded.ruby'
+  begin: '((\\\\)begin)(\\{)((minted)\\*?)(\\})(?:(\\[)(.*?)(\\]))?(\\{)(ruby|rb)(\\})'
+  beginCaptures:
+    1: name: 'support.function.environment.begin.latex'
+    2: name: 'punctuation.definition.function.begin.latex'
+    3: name: 'punctuation.definition.arguments.begin.latex'
+    4: name: 'variable.parameter.environment.minted.latex'
+    # 5: Used for meta scope name (basically just non starred version)
+    6: name: 'punctuation.definition.arguments.end.latex'
+    7: name: 'punctuation.definition.arguments.optional.begin.latex'
+    8: name: 'variable.parameter.optional.function.environment.latex'
+    9: name: 'punctuation.definition.arguments.optional.end.latex'
+    10: name: 'punctuation.definition.arguments.begin.latex'
+    11: name: 'variable.parameter.language.ruby.latex'
+    12: name: 'punctuation.definition.arguments.end.latex'
+  end: '((\\\\)end)(\\{)(minted)(\\})'
+  endCaptures:
+    1: name: 'support.function.environment.end.latex'
+    2: name: 'punctuation.definition.function.latex'
+    3: name: 'punctuation.definition.arguments.begin.latex'
+    4: name: 'variable.parameter.environment.latex'
+    5: name: 'punctuation.definition.arguments.end.latex'
+  patterns: [{ include: 'source.ruby' }]
+}
 
 # Removed
-  controlWordWithAt: {
-    comment: 'To be used when @ is a letter'
-    name: 'support.function.general.latex'
-    match: '\\\\[a-zA-Z@]+'
-  }
-  underscoreWithArgument: {
-    comment: 'Matches an underscore and between curly brackets'
-    name: 'punctuation.subscript.latex'
-    begin: '_\\s*(?={)'
-    end: '(?<=\\})'
-    patterns: [{ include: '#argumentScope' }]
-  }
-  underscoreNoArgument: {
-    comment: 'Matches an underscore and next character or macro. Considering making this give a warning, as brackets is best practice'
-    name: 'punctuation.subscript.latex'
-    match: '_\\s*(\\\\[a-zA-Z]+|\\\\[.]|.)?'
-  }
-  caretWithArgument: {
-    comment: 'Matches a caret and between curly brackets'
-    name: 'markup.other.superscript.latex'
-    begin: '\\^\\s*'
-    beginCaptures:
-      0: name: 'punctuation.superscript.latex'
-    end: '(?<=[^\\^])'
-    patterns: [{ include: '$self' }]
-  }
-  caretNoArgument: {
-    comment: 'Matches a caret and next character or macro. Considering making this give a warning, as brackets is best practice'
-    name: 'punctuation.superscript.latex'
-    match: '\\^\\s*(\\\\[a-zA-Z]+|\\\\[.]|.)?'
-  }
-  endArgumentsMeta: {
-    patterns: [
-      { include: '#doubleBackslash' }
-      { include: '#escapedCurlyBracket' }
-    ]
-  }

        comment: 'Matches generic math environments'
        name: 'meta.environment.math.$5.latex'
        contentName: 'string.other.math.block.$5.latex'
        begin: '((\\\\)begin)(\\{)((align(ed)?|equation|multline|split|gather(ed)?)\\*?)(\\})(?:(\\[)(.*?)(\\]))?'
        beginCaptures:
          1: name: 'support.function.environment.begin.latex'
          2: name: 'punctuation.definition.function.begin.latex'

      { include: '#mintGeneric' }
    ]
  }

  # Experimental
  unitMeasure: {
