{
  "name": "turtle",
  "scopeName": "source.turtle",
  "fileTypes": ["turtle", "ttl", "acl"],
  "patterns": [
    {
      "include": "#rule-constraint"
    },
    {
      "include": "#iriref"
    },
    {
      "include": "#prefix"
    },
    {
      "include": "#prefixed-name"
    },
    {
      "include": "#comment"
    },
    {
      "include": "#special-predicate"
    },
    {
      "include": "#literals"
    },
    {
      "include": "#language-tag"
    }
  ],
  "uuid": "230498230498sdfkj8909-34df-23dfs",
  "repository": {
    "prefix": {
      "name": "keyword.operator.turtle",
      "match": "(?i:@?base|@?prefix)\\s"
    },
    "iriref": {
      "name": "entity.name.type.iriref.turtle",
      "match": "<[^\\x20-\\x20<>\"{}|^`\\\\]*>"
    },
    "prefixed-name": {
      "name": "constant.complex.turtle",
      "match": "(\\w*:)(\\w*)",
      "captures": {
        "1": {
          "name": "storage.type.PNAME_NS.turtle"
        },
        "2": {
          "name": "support.variable.PN_LOCAL.turtle"
        }
      }
    },
    "comment": {
      "name": "comment.line.number-sign.turtle",
      "match": "#.*$"
    },
    "special-predicate": {
      "name": "meta.specialPredicate.turtle",
      "match": "\\s(a)\\s",
      "captures": {
        "1": {
          "name": "keyword.control.turtle"
        }
      }
    },
    "literals": {
      "patterns": [
        {
          "include": "#string"
        },
        {
          "include": "#numeric"
        },
        {
          "include": "#boolean"
        }
      ]
    },
    "string": {
      "patterns": [
        {
          "include": "#triple-squote-string-literal"
        },
        {
          "include": "#triple-dquote-string-literal"
        },
        {
          "include": "#single-squote-string-literal"
        },
        {
          "include": "#single-dquote-string-literal"
        },
        {
          "include": "#triple-tick-string-literal"
        }
      ]
    },
    "single-squote-string-literal": {
      "name": "string.quoted.single.turtle",
      "begin": "'",
      "beginCaptures": {
        "0": {
          "name": "punctuation.definition.string.begin.turtle"
        }
      },
      "end": "'",
      "endCaptures": {
        "1": {
          "name": "punctuation.definition.string.end.turtle"
        },
        "2": {
          "name": "invalid.illegal.newline.turtle"
        }
      },
      "patterns": [
        {
          "include": "#string-character-escape"
        }
      ]
    },
    "single-dquote-string-literal": {
      "name": "string.quoted.double.turtle",
      "begin": "\"",
      "beginCaptures": {
        "0": {
          "name": "punctuation.definition.string.begin.turtle"
        }
      },
      "end": "\"",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.string.end.turtle"
        }
      },
      "patterns": [
        {
          "include": "#string-character-escape"
        }
      ]
    },
    "triple-squote-string-literal": {
      "name": "string.quoted.triple.turtle",
      "begin": "'''",
      "end": "'''",
      "beginCaptures": {
        "0": {
          "name": "punctuation.definition.string.begin.turtle"
        }
      },
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.string.end.turtle"
        }
      },
      "patterns": [
        {
          "include": "#string-character-escape"
        }
      ]
    },
    "triple-dquote-string-literal": {
      "name": "string.quoted.triple.turtle",
      "begin": "\"\"\"",
      "end": "\"\"\"",
      "beginCaptures": {
        "0": {
          "name": "punctuation.definition.string.begin.turtle"
        }
      },
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.string.end.turtle"
        }
      },
      "patterns": [
        {
          "include": "#string-character-escape"
        }
      ]
    },
    "triple-tick-string-literal": {
      "name": "string.quoted.triple.turtle",
      "begin": "```",
      "end": "```",
      "beginCaptures": {
        "0": {
          "name": "punctuation.definition.string.begin.turtle"
        }
      },
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.string.end.turtle"
        }
      },
      "patterns": [
        {
          "include": "#string-character-escape"
        }
      ]
    },
    "string-character-escape": {
      "name": "constant.character.escape.turtle",
      "match": "\\\\(x\\h{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)"
    },
    "numeric": {
      "patterns": [
        {
          "include": "#integer"
        }
      ]
    },
    "integer": {
      "name": "constant.numeric.turtle",
      "match": "[+-]?(?:\\d+|[0-9]+\\.[0-9]*|\\.[0-9]+(?:[eE][+-]?\\d+)?)"
    },
    "boolean": {
      "name": "constant.language.sparql",
      "match": "\\b(?i:true|false)\\b"
    },
    "language-tag": {
      "name": "meta.string-literal-language-tag.turtle",
      "match": "@(\\w+)",
      "captures": {
        "1": {
          "name": "entity.name.class.turtle"
        }
      }
    },
    "rule-constraint": {
      "name": "meta.rule-constraint.turtle",
      "begin": "(rule:content) (\"\"\")",
      "beginCaptures": {
        "1": {
          "patterns": [
            {
              "include": "#prefixed-name"
            }
          ]
        },
        "2": {
          "name": "string.quoted.triple.turtle"
        }
      },
      "end": "\"\"\"",
      "endCaptures": {
        "0": {
          "name": "string.quoted.triple.turtle"
        }
      },
      "patterns": [
        {
          "include": "source.srs"
        }
      ]
    }
  }
}
