name: Language Grammar fileTypes:

firstLineMatch: ^{s*scopeName = .*$ scopeName: source.plist.tm-grammar repository:

invalid-keyword: 
  patterns: 
  - name: invalid.illegal.constant.misplaced-keyword.tm-grammar
    match: \b(fileTypes|foldingStartMarker|foldingStopMarker|patterns|match|begin|end|include|scopeName|captures|beginCaptures|endCaptures|firstLineMatch|comment|repository|disabled|contentName|applyEndPatternLast)\b(?=\s*=)
  - name: invalid.deprecated.constant.tm-grammar
    match: \b(swallow|mode)\b(?=\s*=)
  - name: invalid.illegal.constant.outdated.tm-grammar
    match: \b(foregroundColor|backgroundColor|fontStyle|elementForegroundColor|elementBackgroundColor|elementFontStyle|highlightPairs|smartTypingPairs|increaseIndentPattern)\b(?=\s*=)
  - name: invalid.illegal.constant.unknown-keyword.tm-grammar
    match: "[-a-zA-Z_.]+(?=\\s*=)"
any: 
  patterns: 
  - include: "#comment"
  - include: "#string"
  - include: "#array"
  - include: "#dictionary"
  - include: "#catch-all"
scope: 
  patterns: 
  - name: string.quoted.single.scope.tm-grammar
    captures: 
      "1": 
        name: punctuation.definition.string.begin.tm-grammar
      "2": 
        name: constant.other.scope.tm-grammar
      "3": 
        name: constant.other.scope.tm-grammar
      "4": 
        name: invalid.deprecated.scope_not_allowed.tm-grammar
      "5": 
        name: punctuation.definition.string.end.tm-grammar
    match: "(?x)\n\
      \t\t\t\t\t\t(')\t\t\t\t\t\t\t\t# Open String\n\
      \t\t\t\t\t\t\t(\t\t\t\t\t\t\t# Optionally match the valid\n\
      \t\t\t\t\t\t\t\t\t\t\t\t\t\t# scopes, and the following\n\
      \t\t\t\t\t\t\t\t\t\t\t\t\t\t# part of the scope, meaning\n\
      \t\t\t\t\t\t\t\t\t\t\t\t\t\t# anything else is invalid\n\
      \t\t\t\t\t\t\t\tcomment(?:\n\
      \t\t\t\t\t\t\t\t\t\\.(?:line|block)\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t  | constant(?:\n\
      \t\t\t\t\t\t\t\t\t\\.(?:numeric|character|language|other)\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t  | entity(?:\n\
      \t\t\t\t\t\t\t\t\t\\.name(?:\n\
      \t\t\t\t\t\t\t\t\t\t\\.(?:function|type|tag|section)\n\
      \t\t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t\t  | \\.other(?:\n\
      \t\t\t\t\t\t\t\t\t\t\\.(?:inherited-class|attribute-name)\n\
      \t\t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t  | invalid(?:\n\
      \t\t\t\t\t\t\t\t\t\\.(?:illegal|deprecated)\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t  | keyword(?:\n\
      \t\t\t\t\t\t\t\t\t\\.(?:control|operator|other)\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t  | markup(?:\n\
      \t\t\t\t\t\t\t\t\t\\.(?:underline|bold|heading|italic|list|quote|raw|other)\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t  | meta\n\
      \t\t\t\t\t\t\t  | punctuation(?:\n\
      \t\t\t\t\t\t\t\t\t\\.(?:definition|section|separator|terminator|whitespace)\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t  | source\n\
      \t\t\t\t\t\t\t  | storage(?:\n\
      \t\t\t\t\t\t\t\t\t\\.(?:type|modifier)\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t  | string(?:\n\
      \t\t\t\t\t\t\t\t\t\\.(?:\n\
      \t\t\t\t\t\t\t\t\t\tquoted(?:\n\
      \t\t\t\t\t\t\t\t\t\t\t\\.(?:single|double|triple|other)\n\
      \t\t\t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t\t\t  | (?:unquoted|interpolated|regexp|other)\n\
      \t\t\t\t\t\t\t\t\t)\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t  | support(?:\n\
      \t\t\t\t\t\t\t\t\t\\.(?:function|class|type|constant|variable|other)\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t  | text\n\
      \t\t\t\t\t\t\t  | variable(?:\n\
      \t\t\t\t\t\t\t\t\t\\.(?:parameter|language|other)\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t((?<!')[^\\s,()&|\\[\\]:\"'{}<>*?=^;]*(?<!\\.))?\n\
      \t\t\t\t\t\t\t([^']*)?\n\
      \t\t\t\t\t\t(')\t\t\t\t\t\t\t\t# Close String\n\
      \t\t\t\t\t"
  - name: string.quoted.double.scope.tm-grammar
    captures: 
      "1": 
        name: punctuation.definition.string.begin.tm-grammar
      "2": 
        name: constant.other.scope.tm-grammar
      "3": 
        name: constant.other.scope.tm-grammar
      "4": 
        name: invalid.deprecated.scope_not_allowed.tm-grammar
      "5": 
        name: punctuation.definition.string.end.tm-grammar
    match: "(?x)\n\
      \t\t\t\t\t\t(\")\t\t\t\t\t\t\t\t# Open String\n\
      \t\t\t\t\t\t\t(\t\t\t\t\t\t\t# Optionally match the valid\n\
      \t\t\t\t\t\t\t\t\t\t\t\t\t\t# scopes, and the following\n\
      \t\t\t\t\t\t\t\t\t\t\t\t\t\t# part of the scope, meaning\n\
      \t\t\t\t\t\t\t\t\t\t\t\t\t\t# anything else is invalid\n\
      \t\t\t\t\t\t\t\tcomment(?:\n\
      \t\t\t\t\t\t\t\t\t\\.(?:line|block)\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t  | constant(?:\n\
      \t\t\t\t\t\t\t\t\t\\.(?:numeric|character|language|other)\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t  | entity(?:\n\
      \t\t\t\t\t\t\t\t\t\\.name(?:\n\
      \t\t\t\t\t\t\t\t\t\t\\.(?:function|type|tag|section)\n\
      \t\t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t\t  | \\.other(?:\n\
      \t\t\t\t\t\t\t\t\t\t\\.(?:inherited-class|attribute-name)\n\
      \t\t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t  | invalid(?:\n\
      \t\t\t\t\t\t\t\t\t\\.(?:illegal|deprecated)\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t  | keyword(?:\n\
      \t\t\t\t\t\t\t\t\t\\.(?:control|operator|other)\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t  | markup(?:\n\
      \t\t\t\t\t\t\t\t\t\\.(?:underline|bold|heading|italic|list|quote|raw|other)\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t  | meta\n\
      \t\t\t\t\t\t\t  | punctuation(?:\n\
      \t\t\t\t\t\t\t\t\t\\.(?:definition|section|separator|terminator|whitespace)\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t  | source\n\
      \t\t\t\t\t\t\t  | storage(?:\n\
      \t\t\t\t\t\t\t\t\t\\.(?:type|modifier)\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t  | string(?:\n\
      \t\t\t\t\t\t\t\t\t\\.(?:\n\
      \t\t\t\t\t\t\t\t\t\tquoted(?:\n\
      \t\t\t\t\t\t\t\t\t\t\t\\.(?:single|double|triple|other)\n\
      \t\t\t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t\t\t  | (?:unquoted|interpolated|regexp|other)\n\
      \t\t\t\t\t\t\t\t\t)\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t  | support(?:\n\
      \t\t\t\t\t\t\t\t\t\\.(?:function|class|type|constant|variable|other)\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t  | text\n\
      \t\t\t\t\t\t\t  | variable(?:\n\
      \t\t\t\t\t\t\t\t\t\\.(?:parameter|language|other)\n\
      \t\t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t)?\n\
      \t\t\t\t\t\t\t((?<!\")[^\\s,()&|\\[\\]:\"'{}<>*?=^;]*(?<!\\.))?\n\
      \t\t\t\t\t\t\t([^\"]*)?\n\
      \t\t\t\t\t\t(\")\t\t\t\t\t\t\t\t# Close String\n\
      \t\t\t\t\t"
regexp: 
  patterns: 
  - name: string.regexp.oniguruma.single.tm-grammar
    endCaptures: 
      "1": 
        name: punctuation.definition.string.end.tm-grammar
    begin: (')
    beginCaptures: 
      "1": 
        name: punctuation.definition.string.begin.tm-grammar
    end: (')(?!')
    patterns: 
    - name: constant.character.escape.apostrophe.tm-grammar
      match: "''"
    - include: source.regexp.oniguruma
  - name: string.regexp.oniguruma.double.tm-grammar
    endCaptures: 
      "1": 
        name: punctuation.definition.string.end.tm-grammar
    begin: (")
    beginCaptures: 
      "1": 
        name: punctuation.definition.string.begin.tm-grammar
    end: (")
    patterns: 
    - name: constant.character.escape.tm-grammar
      match: \\\\|\\"
    - include: source.regexp.oniguruma
dictionary: 
  captures: 
    "1": 
      name: punctuation.section.dictionary.tm-grammar
  begin: (\{)
  end: (\})
  patterns: 
  - include: "#comment"
  - include: "#string"
  - endCaptures: 
      "1": 
        name: punctuation.terminator.dictionary.tm-grammar
    begin: (=)
    beginCaptures: 
      "1": 
        name: punctuation.separator.key-value.tm-grammar
    end: (;)
    patterns: 
    - include: "#any"
  - name: punctuation.terminator.dictionary.tm-grammar
    match: ;
  - include: "#catch-all"
catch-all: 
  patterns: 
  - match: \s+
  - name: invalid.illegal.unrecognized-character.tm-grammar
    match: .
scope-root: 
  patterns: 
  - name: string.quoted.single.scope.root.tm-grammar
    captures: 
      "1": 
        name: punctuation.definition.string.begin.tm-grammar
      "2": 
        name: constant.other.scope.tm-grammar
      "3": 
        name: invalid.deprecated.scope_not_allowed.tm-grammar
      "4": 
        name: punctuation.definition.string.end.tm-grammar
    match: (')(?:((?:source|text)(?='|\.)[^']*)|([^']*))(')
  - name: string.quoted.double.scope.root.tm-grammar
    captures: 
      "1": 
        name: punctuation.definition.string.begin.tm-grammar
      "2": 
        name: constant.other.scope.tm-grammar
      "3": 
        name: invalid.deprecated.scope_not_allowed.tm-grammar
      "4": 
        name: punctuation.definition.string.end.tm-grammar
    match: (")(?:((?:source|text)(?="|\.)[^"]*)|([^"]*))(")
patterns: 
  name: meta.array.patterns.tm-grammar
  endCaptures: 
    "1": 
      name: punctuation.terminator.dictionary.tm-grammar
  begin: \b(patterns)\s*(=)
  beginCaptures: 
    "1": 
      name: support.constant.tm-grammar
    "2": 
      name: punctuation.separator.key-value.tm-grammar
  end: (;)
  patterns: 
  - include: "#comment"
  - captures: 
      "1": 
        name: punctuation.section.array.tm-grammar
    begin: (\()
    end: (\))
    patterns: 
    - include: "#comment"
    - endCaptures: 
        "1": 
          name: punctuation.separator.array.tm-grammar
      begin: (?=[^\s,])
      end: (,)|(?=\))
      patterns: 
      - include: "#comment"
      - match: \s+(?=//|/\*)
      - name: invalid.illegal.missing-comma.tm-grammar
        begin: "[[^\\n]&&\\s](?!\\s*(,|\\)|$)).*"
        end: ^$not possible$^
      - include: "#rule"
      - include: "#catch-all"
    - include: "#catch-all"
  - include: "#catch-all"
array: 
  captures: 
    "1": 
      name: punctuation.section.array.tm-grammar
  begin: (\()
  end: (\))
  patterns: 
  - include: "#comment"
  - endCaptures: 
      "1": 
        name: punctuation.separator.array.tm-grammar
    begin: (?=[^\s,])
    end: (,)|(?=\))
    patterns: 
    - include: "#comment"
    - match: \s+(?=//|/\*)
    - name: invalid.illegal.missing-comma.tm-grammar
      begin: "[[^\\n]&&\\s](?!\\s*(,|\\)|$)).*"
      end: ^$not possible$^
    - include: "#any"
  - include: "#catch-all"
comment-keyword: 
  endCaptures: 
    "1": 
      name: punctuation.terminator.dictionary.tm-grammar
  begin: \b(comment)\s*(=)
  beginCaptures: 
    "1": 
      name: support.constant.tm-grammar
    "2": 
      name: punctuation.separator.key-value.tm-grammar
  end: (;)
  patterns: 
  - include: "#comment"
  - name: string.quoted.single.tm-grammar
    endCaptures: 
      "1": 
        name: punctuation.definition.string.end.tm-grammar
    begin: (')
    applyEndPatternLast: 1
    contentName: comment.block.string.tm-grammar
    beginCaptures: 
      "1": 
        name: punctuation.definition.string.begin.tm-grammar
    end: (')(?!')
    patterns: 
    - name: constant.character.escape.apostrophe.tm-grammar
      match: "''"
  - name: string.quoted.double.tm-grammar
    endCaptures: 
      "1": 
        name: punctuation.definition.string.end.tm-grammar
    begin: (")
    contentName: comment.block.string.tm-grammar
    beginCaptures: 
      "1": 
        name: punctuation.definition.string.begin.tm-grammar
    end: (")
    patterns: 
    - name: constant.character.escape.tm-grammar
      match: \\[\\"]
  - include: "#catch-all"
comment: 
  patterns: 
  - name: comment.block.tm-grammar
    begin: /\*
    end: \*/
  - name: comment.line.double-slash.tm-grammar
    match: //.*$\n?
string: 
  patterns: 
  - name: constant.numeric.tm-grammar
    match: \b[0-9]+\b
  - name: string.unquoted.tm-grammar
    match: "[-a-zA-Z0-9_.]+"
  - name: string.quoted.single.tm-grammar
    endCaptures: 
      "1": 
        name: punctuation.definition.string.end.tm-grammar
    begin: (')
    applyEndPatternLast: 1
    beginCaptures: 
      "1": 
        name: punctuation.definition.string.begin.tm-grammar
    end: ('(?!'))
    patterns: 
    - name: constant.character.escape.apostrophe.tm-grammar
      match: "''"
  - name: string.quoted.double.tm-grammar
    endCaptures: 
      "1": 
        name: punctuation.definition.string.end.tm-grammar
    begin: (")
    beginCaptures: 
      "1": 
        name: punctuation.definition.string.begin.tm-grammar
    end: (")
    patterns: 
    - name: constant.character.escape.tm-grammar
      match: \\[\\"]
rule: 
  name: meta.dictionary.rule.tm-grammar
  captures: 
    "1": 
      name: punctuation.section.dictionary.tm-grammar
  begin: (\{)
  end: (\})
  patterns: 
  - include: "#comment"
  - name: meta.value-pair.tm-grammar
    endCaptures: 
      "1": 
        name: punctuation.terminator.dictionary.tm-grammar
    begin: \b((contentN|n)ame)\s*(=)
    beginCaptures: 
      "1": 
        name: support.constant.tm-grammar
      "3": 
        name: punctuation.separator.key-value.tm-grammar
    end: (;)
    patterns: 
    - include: "#comment"
    - include: "#scope"
    - include: "#catch-all"
    comment: name, contentName
  - endCaptures: 
      "1": 
        name: punctuation.terminator.dictionary.tm-grammar
    begin: \b(begin|end|while|match)\s*(=)
    beginCaptures: 
      "1": 
        name: support.constant.tm-grammar
      "2": 
        name: punctuation.separator.key-value.tm-grammar
    end: (;)
    patterns: 
    - include: "#comment"
    - include: "#regexp"
    - include: "#catch-all"
    comment: begin, end, while, match
  - endCaptures: 
      "1": 
        name: punctuation.terminator.dictionary.tm-grammar
    begin: \b(include)\s*(=)
    beginCaptures: 
      "1": 
        name: support.constant.tm-grammar
      "2": 
        name: punctuation.separator.key-value.tm-grammar
    end: (;)
    patterns: 
    - include: "#comment"
    - name: string.quoted.single.include.tm-grammar
      captures: 
        "6": 
          name: punctuation.definition.string.end.tm-grammar
        "1": 
          name: punctuation.definition.string.begin.tm-grammar
        "2": 
          name: constant.other.reference.repository-item.tm-grammar
        "3": 
          name: punctuation.definition.constant.tm-grammar
        "4": 
          name: constant.other.reference.grammar.tm-grammar
        "5": 
          name: punctuation.definition.constant.tm-grammar
      match: (')(?:((#)[-a-zA-Z0-9._]+)|((\$)(?:base|self)))?(')
    - name: string.quoted.double.include.tm-grammar
      captures: 
        "6": 
          name: punctuation.definition.string.end.tm-grammar
        "1": 
          name: punctuation.definition.string.begin.tm-grammar
        "2": 
          name: constant.other.reference.repository-item.tm-grammar
        "3": 
          name: punctuation.definition..tm-grammar
        "4": 
          name: constant.other.reference.grammar.tm-grammar
        "5": 
          name: punctuation.definition..tm-grammar
      match: (')(?:((#)[-a-zA-Z0-9._]+)|((\$)(?:base|self)))?(')
    - include: "#scope-root"
    - include: "#catch-all"
    comment: include
  - name: meta.dictionary.captures.tm-grammar
    endCaptures: 
      "1": 
        name: punctuation.terminator.dictionary.tm-grammar
    begin: \b((beginC|endC|whileC|c)aptures)\s*(=)
    beginCaptures: 
      "1": 
        name: support.constant.tm-grammar
      "3": 
        name: punctuation.separator.key-value.tm-grammar
    end: (;)
    patterns: 
    - captures: 
        "1": 
          name: punctuation.section.dictionary.tm-grammar
      begin: (\{)
      end: (\})
      patterns: 
      - include: "#comment"
      - include: "#string"
      - endCaptures: 
          "1": 
            name: punctuation.terminator.dictionary.tm-grammar
        begin: (=)
        beginCaptures: 
          "1": 
            name: punctuation.separator.key-value.tm-grammar
        end: (;)
        patterns: 
        - include: "#comment"
        - captures: 
            "1": 
              name: punctuation.section.dictionary.tm-grammar
          begin: (\{)
          end: (\})
          patterns: 
          - include: "#comment"
          - include: "#comment-keyword"
          - name: meta.value-pair.tm-grammar
            endCaptures: 
              "1": 
                name: punctuation.terminator.dictionary.tm-grammar
            begin: \b(name)\s*(=)
            beginCaptures: 
              "1": 
                name: support.constant.tm-grammar
              "2": 
                name: punctuation.separator.key-value.tm-grammar
            end: (;)
            patterns: 
            - include: "#comment"
            - include: "#scope"
            - include: "#catch-all"
            comment: name
        - include: "#catch-all"
      - name: punctuation.terminator.dictionary.tm-grammar
        match: ;
      - include: "#catch-all"
    comment: captures
  - captures: 
      "6": 
        name: constant.numeric.tm-grammar
      "11": 
        name: punctuation.definition.string.end.tm-grammar
      "7": 
        name: punctuation.definition.string.end.tm-grammar
      "12": 
        name: punctuation.terminator.dictionary.tm-grammar
      "8": 
        name: string.quoted.single.tm-grammar
      "9": 
        name: punctuation.definition.string.begin.tm-grammar
      "1": 
        name: support.constant.tm-grammar
      "2": 
        name: punctuation.separator.key-value.tm-grammar
      "3": 
        name: constant.numeric.tm-grammar
      "4": 
        name: string.quoted.double.tm-grammar
      "10": 
        name: constant.numeric.tm-grammar
      "5": 
        name: punctuation.definition.string.begin.tm-grammar
    match: \b(disabled|applyEndPatternLast)\s*(=)\s*(?:(0|1)|((")(0|1)("))|((')(0|1)(')))\s*(;)
    comment: disabled, applyEndPatternLast
  - include: "#patterns"
  - include: "#comment-keyword"
  - include: "#invalid-keyword"
  - include: "#string"
  - endCaptures: 
      "1": 
        name: punctuation.terminator.dictionary.tm-grammar
    begin: (=)
    beginCaptures: 
      "1": 
        name: punctuation.separator.key-value.tm-grammar
    end: (;)
    patterns: 
    - include: "#any"
  - name: punctuation.terminator.dictionary.tm-grammar
    match: ;
  - include: "#catch-all"

uuid: 101D6FC2-6CBD-11D9-B329-000D93347A42 foldingStartMarker: ^s*(+ = )?[{(](?!.*[)}][;,]?s*$) patterns:

foldingStopMarker: ^s*(}|)) keyEquivalent: ^~L