{
  "displayName": "BibTeX",
  "name": "bibtex",
  "patterns": [
    {
      "captures": {
        "0": {
          "name": "punctuation.definition.comment.bibtex"
        }
      },
      "match": "@(?i:comment)(?=[({\\s])",
      "name": "comment.block.at-sign.bibtex"
    },
    {
      "include": "#preamble"
    },
    {
      "include": "#string"
    },
    {
      "include": "#entry"
    },
    {
      "begin": "[^\\n@]",
      "end": "(?=@)",
      "name": "comment.block.bibtex"
    }
  ],
  "repository": {
    "entry": {
      "patterns": [
        {
          "begin": "((@)[-!$\\&*+./:;<>-z|~][!$\\&*+\\--<>-z|~]*)\\s*(\\{)\\s*([^,}\\s]*)",
          "beginCaptures": {
            "1": {
              "name": "keyword.other.entry-type.bibtex"
            },
            "2": {
              "name": "punctuation.definition.keyword.bibtex"
            },
            "3": {
              "name": "punctuation.section.entry.begin.bibtex"
            },
            "4": {
              "name": "entity.name.type.entry-key.bibtex"
            }
          },
          "end": "}",
          "endCaptures": {
            "0": {
              "name": "punctuation.section.entry.end.bibtex"
            }
          },
          "name": "meta.entry.braces.bibtex",
          "patterns": [
            {
              "begin": "([-!$\\&*+./:;<>-z|~][!$\\&*+\\--<>-z|~]*)\\s*(=)",
              "beginCaptures": {
                "1": {
                  "name": "support.function.key.bibtex"
                },
                "2": {
                  "name": "punctuation.separator.key-value.bibtex"
                }
              },
              "end": "(?=[,}])",
              "name": "meta.key-assignment.bibtex",
              "patterns": [
                {
                  "include": "#field_value"
                }
              ]
            }
          ]
        },
        {
          "begin": "((@)[-!$\\&*+./:;<>-z|~][!$\\&*+\\--<>-z|~]*)\\s*(\\()\\s*([^,\\s]*)",
          "beginCaptures": {
            "1": {
              "name": "keyword.other.entry-type.bibtex"
            },
            "2": {
              "name": "punctuation.definition.keyword.bibtex"
            },
            "3": {
              "name": "punctuation.section.entry.begin.bibtex"
            },
            "4": {
              "name": "entity.name.type.entry-key.bibtex"
            }
          },
          "end": "\\)",
          "endCaptures": {
            "0": {
              "name": "punctuation.section.entry.end.bibtex"
            }
          },
          "name": "meta.entry.parenthesis.bibtex",
          "patterns": [
            {
              "begin": "([-!$\\&*+./:;<>-z|~][!$\\&*+\\--<>-z|~]*)\\s*(=)",
              "beginCaptures": {
                "1": {
                  "name": "support.function.key.bibtex"
                },
                "2": {
                  "name": "punctuation.separator.key-value.bibtex"
                }
              },
              "end": "(?=[),])",
              "name": "meta.key-assignment.bibtex",
              "patterns": [
                {
                  "include": "#field_value"
                }
              ]
            }
          ]
        }
      ]
    },
    "field_value": {
      "patterns": [
        {
          "include": "#string_content"
        },
        {
          "include": "#integer"
        },
        {
          "include": "#string_var"
        },
        {
          "match": "#",
          "name": "keyword.operator.bibtex"
        }
      ]
    },
    "integer": {
      "captures": {
        "1": {
          "name": "constant.numeric.bibtex"
        }
      },
      "match": "\\s*(\\d+)\\s*"
    },
    "nested_braces": {
      "begin": "\\{",
      "beginCaptures": {
        "0": {
          "name": "punctuation.definition.group.begin.bibtex"
        }
      },
      "end": "}",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.group.end.bibtex"
        }
      },
      "patterns": [
        {
          "include": "#nested_braces"
        }
      ]
    },
    "preamble": {
      "patterns": [
        {
          "begin": "((@)(?i:preamble))\\s*(\\{)\\s*",
          "beginCaptures": {
            "1": {
              "name": "keyword.other.preamble.bibtex"
            },
            "2": {
              "name": "punctuation.definition.keyword.bibtex"
            },
            "3": {
              "name": "punctuation.section.preamble.begin.bibtex"
            }
          },
          "end": "}",
          "endCaptures": {
            "0": {
              "name": "punctuation.section.preamble.end.bibtex"
            }
          },
          "name": "meta.preamble.braces.bibtex",
          "patterns": [
            {
              "include": "#field_value"
            }
          ]
        },
        {
          "begin": "((@)(?i:preamble))\\s*(\\()\\s*",
          "beginCaptures": {
            "1": {
              "name": "keyword.other.preamble.bibtex"
            },
            "2": {
              "name": "punctuation.definition.keyword.bibtex"
            },
            "3": {
              "name": "punctuation.section.preamble.begin.bibtex"
            }
          },
          "end": "\\)",
          "endCaptures": {
            "0": {
              "name": "punctuation.section.preamble.end.bibtex"
            }
          },
          "name": "meta.preamble.parenthesis.bibtex",
          "patterns": [
            {
              "include": "#field_value"
            }
          ]
        }
      ]
    },
    "string": {
      "patterns": [
        {
          "begin": "((@)(?i:string))\\s*(\\{)\\s*([-!$\\&*+./:;<>-z|~][!$\\&*+\\--<>-z|~]*)",
          "beginCaptures": {
            "1": {
              "name": "keyword.other.string-constant.bibtex"
            },
            "2": {
              "name": "punctuation.definition.keyword.bibtex"
            },
            "3": {
              "name": "punctuation.section.string-constant.begin.bibtex"
            },
            "4": {
              "name": "variable.other.bibtex"
            }
          },
          "end": "}",
          "endCaptures": {
            "0": {
              "name": "punctuation.section.string-constant.end.bibtex"
            }
          },
          "name": "meta.string-constant.braces.bibtex",
          "patterns": [
            {
              "include": "#field_value"
            }
          ]
        },
        {
          "begin": "((@)(?i:string))\\s*(\\()\\s*([-!$\\&*+./:;<>-z|~][!$\\&*+\\--<>-z|~]*)",
          "beginCaptures": {
            "1": {
              "name": "keyword.other.string-constant.bibtex"
            },
            "2": {
              "name": "punctuation.definition.keyword.bibtex"
            },
            "3": {
              "name": "punctuation.section.string-constant.begin.bibtex"
            },
            "4": {
              "name": "variable.other.bibtex"
            }
          },
          "end": "\\)",
          "endCaptures": {
            "0": {
              "name": "punctuation.section.string-constant.end.bibtex"
            }
          },
          "name": "meta.string-constant.parenthesis.bibtex",
          "patterns": [
            {
              "include": "#field_value"
            }
          ]
        }
      ]
    },
    "string_content": {
      "patterns": [
        {
          "begin": "\\{",
          "beginCaptures": {
            "0": {
              "name": "punctuation.definition.string.begin.bibtex"
            }
          },
          "end": "}",
          "endCaptures": {
            "0": {
              "name": "punctuation.definition.string.end.bibtex"
            }
          },
          "patterns": [
            {
              "include": "#nested_braces"
            }
          ]
        },
        {
          "begin": "\"",
          "beginCaptures": {
            "0": {
              "name": "punctuation.definition.string.begin.bibtex"
            }
          },
          "end": "\"",
          "endCaptures": {
            "0": {
              "name": "punctuation.definition.string.end.bibtex"
            }
          },
          "patterns": [
            {
              "include": "#nested_braces"
            }
          ]
        }
      ]
    },
    "string_var": {
      "captures": {
        "0": {
          "name": "support.variable.bibtex"
        }
      },
      "match": "[-!$\\&*+./:;<>-z|~][!$\\&*+\\--<>-z|~]*"
    }
  },
  "scopeName": "text.bibtex"
}
