{ "name": "Turtle", "scopeName": "source.turtle", "patterns": [ { "include": "#turtleDoc" } ], "repository": { "ANON": { "name": "meta.spec.ANON.turtle" }, "BLANK_NODE_LABEL": { "name": "meta.spec.BLANK_NODE_LABEL.turtle", "captures": { "1": { "name": "keyword.other.BLANK_NODE_LABEL.turtle" }, "2": { "name": "variable.other.BLANK_NODE_LABEL.turtle" } } }, "BlankNode": { "name": "meta.spec.BlankNode.turtle", "patterns": [ { "include": "#BLANK_NODE_LABEL" }, { "include": "#ANON" } ] }, "IRIREF": { "name": "entity.name.type.IRIREF.turtle", "match": "(?x) (\\\u003c) (?:[^\\x00-\\x20\\\u003c\\\u003e\\\\\\\"\\{\\}\\|\\^`] | (?:\\\\u[0-9A-Fa-f]{4}|\\\\U[0-9A-Fa-f]{8}))* (\\\u003e)", "captures": { "1": { "name": "punctuation.definition.entity.begin.turtle" }, "2": { "name": "punctuation.definition.entity.end.turtle" } } }, "PNAME_LN": { "name": "meta.spec.PNAME_LN.turtle", "captures": { "PNAME_NS": { "name": "variable.other.PNAME_NS.turtle" }, "PN_LOCAL": { "name": "support.variable.PN_LOCAL.turtle" } } }, "PNAME_NS": { "name": "variable.other.PNAME_NS.turtle" }, "PN_LOCAL": { "name": "support.variable.PN_LOCAL.turtle" }, "PrefixedName": { "name": "meta.spec.PrefixedName.turtle", "patterns": [ { "include": "#PNAME_LN" }, { "include": "#PNAME_NS" } ] }, "blankNodePropertyList": { "name": "meta.spec.blankNodePropertyList.turtle", "begin": "\\b(\\[)\\b", "end": "\\b(\\])(?=\\b|\\s|[.;,])", "patterns": [ { "name": "punctuation.terminator.stmt.turtle", "match": "((?\u003c=\\s)[.;,](?=\\b))" }, { "include": "#literal" }, { "include": "#blankNodePropertyList" }, { "include": "#iri" }, { "include": "#BlankNode" }, { "include": "#collection" }, { "name": "keyword.other.typeOf.turtle", "match": "(?\u003c=[ ])(a)(?=[ ])" } ], "captures": { "1": { "name": "punctuation.terminator.blankNodePropertyList.turtle" } } }, "collection": { "name": "meta.spec.collection.turtle", "begin": "(\\b\\(\\b)", "end": "(\\b\\)\\b)", "patterns": [ { "include": "#literal" }, { "include": "#iri" }, { "include": "#BlankNode" }, { "include": "#collection" }, { "name": "keyword.other.typeOf.turtle", "match": "(?\u003c=[ ])(a)(?=[ ])" }, { "include": "#blankNodePropertyList" } ], "captures": { "1": { "name": "punctuation.terminator.collection.turtle" } } }, "directive": { "name": "meta.spec.directive.turtle", "begin": "(?i)(^(?=@prefix|@base|PREFIX|BASE))", "end": "($)", "patterns": [ { "name": "meta.spec.prefixID.turtle", "begin": "^(@prefix)(?=\\s)", "end": "(\\.?)$", "patterns": [ { "include": "#IRIREF" }, { "include": "#PNAME_NS" } ], "beginCaptures": { "1": { "name": "keyword.other.directive.prefix.turtle" } }, "endCaptures": { "1": { "name": "punctuation.terminator.directive.turtle" } } }, { "name": "meta.spec.base.turtle", "begin": "^(@base)", "end": "(\\.?)$", "patterns": [ { "include": "#IRIREF" } ], "beginCaptures": { "1": { "name": "keyword.other.directive.base.turtle" } }, "endCaptures": { "1": { "name": "punctuation.terminator.directive.turtle" } } }, { "name": "meta.spec.sparqlPrefix.turtle", "begin": "^(?i)(PREFIX)(?=\\b)", "end": "$", "patterns": [ { "include": "#IRIREF" }, { "include": "#PNAME_NS" } ], "beginCaptures": { "1": { "name": "keyword.other.directive.sparqlPrefix.turtle" } } }, { "name": "meta.spec.sparqlBase.turtle", "begin": "^(?i)(BASE)(?=\\b)", "end": "$", "patterns": [ { "include": "#IRIREF" } ], "beginCaptures": { "1": { "name": "keyword.other.directive.sparqlBase.turtle" } } } ] }, "iri": { "name": "meta.spec.iri.turtle", "patterns": [ { "include": "#IRIREF" }, { "include": "#PrefixedName" } ] }, "literal": { "name": "meta.spec.literal.turtle", "patterns": [ { "name": "constant.numeric.turtle", "match": "(?x)\n\t\t\t\t\t\t(?\u003c=\\s)[+-]?\t\t\t\t\t\t\n\t\t\t\t\t\t( (?: \\d+?\\.?\\d*[eE][+-]?\\d+) | \\d*\\.\\d+ | \\d+)\n\t\t\t\t\t\t(?=[ ]*[,.;]?)\n\t\t\t\t\t" }, { "name": "constant.language.boolean.turtle", "match": "(?\u003c=\\s)(true|false)(?=[ ]*[,.;]?)" }, { "name": "meta.spec.RDFLiteral.turtle", "patterns": [ { "include": "#literal_triple" }, { "include": "#literal_double" }, { "include": "#literal_single" } ] } ] }, "literal_double": { "name": "string.quoted.double.turtle", "match": "(?x)\n\t\t\t\t(\")[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*(\")\n\t\t\t\t(?\u003clang\u003e@(?:[a-z]{2}(?:-[a-z0-9]{2})*)?)?\n\t\t\t\t(?\u003cdt\u003e\\^\\^\\w*:\\w*|\\\u003c[^\\\u003e]+\\\u003e)?\n\t\t\t", "captures": { "1": { "name": "punctuation.definition.string.begin.turtle" }, "2": { "name": "punctuation.definition.string.end.turtle" }, "dt": { "name": "storage.type.datatype.turtle" }, "lang": { "name": "constant.language.language_tag.turtle" } } }, "literal_single": { "name": "string.quoted.single.turtle", "match": "(?x)\n\t\t\t\t(')[^'\\\\]*(?:\\.[^'\\\\]*)*(')\n\t\t\t\t(?\u003clang\u003e@(?:[a-z]{2}(?:-[a-z0-9]{2})*)?)?\n\t\t\t\t(?\u003cdt\u003e\\^\\^\\w*:\\w*|\\\u003c[^\\\u003e]+\\\u003e)?\n\t\t\t", "captures": { "1": { "name": "punctuation.definition.string.begin.turtle" }, "2": { "name": "punctuation.definition.string.end.turtle" }, "dt": { "name": "storage.type.datatype.turtle" }, "lang": { "name": "constant.language.language_tag.turtle" } } }, "literal_triple": { "name": "string.quoted.triple.turtle", "begin": "(['\"]{3})", "end": "(?x)\n\t\t\t\t(\\1)\n\t\t\t\t(?\u003clang\u003e@(?:[a-z]{2}(?:-[a-z0-9]{2})*)?)?\n\t\t\t\t(?\u003cdt\u003e\\^\\^\\w*:\\w*|\\\u003c[^\\\u003e]+\\\u003e)?\n\t\t\t\t(?=[ ]*[.;,]?)\n\t\t\t", "beginCaptures": { "1": { "name": "punctuation.definition.string.begin.turtle" } }, "endCaptures": { "1": { "name": "punctuation.definition.string.end.turtle" }, "dt": { "name": "storage.type.datatype.turtle" }, "lang": { "name": "constant.language.language_tag.turtle" } } }, "sparqlClausedKeywords": { "begin": "(?x)(\n\t\t\t\t(?# Special case because FILTER can have clauses what makes the lexer dizzy)\n\t\t\t\tFILTER\n\t\t\t)\\s*(\\((?=\\s*))", "end": "\\s*(\\))", "patterns": [ { "include": "#sparqlVars" }, { "include": "#sparqlFilterFns" }, { "include": "#sparqlLangConsts" } ], "beginCaptures": { "1": { "name": "keyword.control.sparql.turtle" }, "2": { "name": "punctuation.terminator.sparqlKeyword.turtle" } }, "endCaptures": { "1": { "name": "punctuation.terminator.sparqlKeyword.turtle" } } }, "sparqlFilterFns": { "begin": "(?x)(\n\t\t\t\t(?# Special case because FILTER can have clauses what makes the lexer dizzy)\n\t\t\t\tFILTER|\n\t\t\t\t(?# Builtin callables )\n\t\t\t\tSTR|LANG|LANGMATCHES|DATATYPE|BOUND|IRI|URI|BNODE|RAND|ABS|CEIL|FLOOR|ROUND|CONCAT|STRLEN|UCASE|LCASE|ENCODE_FOR_URI|CONTAINS|STRSTARTS|STRENDS|STRBEFORE|STRAFTER|YEAR|MONTH|DAY|HOURS|MINUTES|SECONDS|TIMEZONE|TZ|NOW|UUID|STRUUID|MD5|SHA1|SHA256|SHA384|SHA512|COALESCE|IF|STRLANG|STRDT|sameTerm|isIRI|isURI|isBLANK|isLITERAL|isNUMERIC|COUNT|SUM|MIN|MAX|AVG|SAMPLE|GROUP_CONCAT|\n\t\t\t\tBOUND|COALESCE|NOT EXISTS|EXISTS|REGEX|SUBSTR|REPLACE\n\t\t\t)\\s*(\\((?=\\s*))", "end": "\\s*(\\))", "patterns": [ { "include": "#sparqlVars" }, { "include": "#sparqlFilterFns" }, { "include": "#sparqlLangConsts" } ], "beginCaptures": { "1": { "name": "support.function.sparql.turtle" }, "2": { "name": "punctuation.terminator.sparqlFunc.turtle" } }, "endCaptures": { "1": { "name": "punctuation.terminator.sparqlFunc.turtle" } } }, "sparqlKeywords": { "name": "keyword.control.sparql.turtle", "match": "(?x)(\n\t\t\t\t\t(?# SPARQL )\n\t\t\t\t\tSELECT|ASK|CONSTRUCT|DESCRIBE|FROM|NAMED|WHERE|GRAPH|AS|\n\t\t\t\t\tUNION|FILTER|HAVING|VALUES|\n\t\t\t\t\tOPTIONAL|SERVICE|\t\t\t \n\t\t\t\t\t(?# SPARUL )\n\t\t\t\t\tSILENT|DATA|\t\t\t\t\t\n\t\t\t\t\tADD|MOVE|COPY|\n\t\t\t\t\tINSERT|DELETE|\n\t\t\t\t\tLOAD|INTO|\n\t\t\t\t\tGRAPH|ALL|DEFAULT|\t\t\t\t\t\n\t\t\t\t\tCLEAR|CREATE|DROP|\n\t\t\t\t\tWITH|USING|\n\t\t\t\t\t(?# Solution sequence modifiers )\n\t\t\t\t\tDISTINCT|REDUCED|\n\t\t\t\t\tORDER|ASC|DESC|OFFSET|LIMITED|REDUCED|\n\t\t\t\t\tGROUP|BY|LIMIT\t\t\t\t\t\n\t\t\t\t)" }, "sparqlLangConsts": { "name": "constant.language.sparql.turtle", "match": "(true|false)" }, "sparqlVars": { "name": "constant.variable.sparql.turtle", "match": "(\\?\\w+|\\*)" }, "triples": { "name": "meta.spec.triples.turtle", "begin": "(?i)^(?!@|\\#|PREFIX|BASE)", "end": "([.;,]?)$", "patterns": [ { "name": "comment.line.number-sign.turtle", "match": "(#.+$)", "captures": { "1": { "name": "punctuation.definition.comment.turtle" } } }, { "name": "punctuation.terminator.stmt.turtle", "match": "[.;,](?=\\s|\\b)" }, { "include": "#literal" }, { "include": "#sparqlVars" }, { "include": "#sparqlClausedKeywords" }, { "include": "#sparqlKeywords" }, { "include": "#sparqlFilterFns" }, { "include": "#sparqlLangConsts" }, { "include": "#blankNodePropertyList" }, { "include": "#iri" }, { "include": "#BlankNode" }, { "include": "#collection" }, { "name": "keyword.other.typeOf.turtle", "match": "\\b(a)(?=[ ])" } ], "beginCaptures": { "1": { "name": "meta.spec.triples.turtle" } }, "endCaptures": { "1": { "name": "punctuation.terminator.triple.turtle" } } }, "turtleDoc": { "name": "meta.spec.turtleDoc.turtle", "begin": "^", "end": "\\z", "patterns": [ { "name": "comment.line.number-sign.turtle", "match": "^(#).+$", "captures": { "1": { "name": "punctuation.definition.comment.turtle" } } }, { "include": "#directive" }, { "include": "#sparqlClausedKeywords" }, { "include": "#sparqlKeywords" }, { "include": "#sparqlFilterFns" }, { "include": "#sparqlLangConsts" }, { "include": "#sparqlVars" }, { "include": "#triples" } ] } } }