kjelsrud.dev/node_modules/shiki/languages/tasl.tmLanguage.json
2023-07-19 21:31:30 +02:00

290 lines
5.7 KiB
JSON

{
"$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
"scopeName": "source.tasl",
"name": "tasl",
"fileTypes": ["tasl"],
"patterns": [
{
"include": "#comment"
},
{
"include": "#namespace"
},
{
"include": "#type"
},
{
"include": "#class"
},
{
"include": "#edge"
}
],
"repository": {
"comment": {
"match": "(#).*$",
"name": "comment.line.number-sign.tasl",
"captures": {
"1": {
"name": "punctuation.definition.comment.tasl"
}
}
},
"namespace": {
"match": "(?:^\\s*)(namespace)\\b(.*)",
"captures": {
"1": {
"name": "keyword.control.tasl.namespace"
},
"2": {
"patterns": [
{
"include": "#namespaceURI"
},
{
"match": "[a-zA-Z][a-zA-Z0-9]*\\b",
"name": "entity.name"
}
]
}
}
},
"type": {
"begin": "(?:^\\s*)(type)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.tasl.type"
}
},
"end": "$",
"patterns": [
{
"include": "#expression"
}
]
},
"class": {
"begin": "(?:^\\s*)(class)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.tasl.class"
}
},
"end": "$",
"patterns": [
{
"include": "#key"
},
{
"include": "#export"
},
{
"include": "#expression"
}
]
},
"edge": {
"begin": "(?:^\\s*)(edge)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.tasl.edge"
}
},
"end": "$",
"patterns": [
{
"include": "#key"
},
{
"include": "#export"
},
{
"match": "=/",
"name": "punctuation.separator.tasl.edge.source"
},
{
"match": "/=>",
"name": "punctuation.separator.tasl.edge.target"
},
{
"match": "=>",
"name": "punctuation.separator.tasl.edge"
},
{
"include": "#expression"
}
]
},
"export": {
"match": "::",
"name": "keyword.operator.tasl.export"
},
"expression": {
"patterns": [
{
"include": "#literal"
},
{
"include": "#uri"
},
{
"include": "#product"
},
{
"include": "#coproduct"
},
{
"include": "#reference"
},
{
"include": "#optional"
},
{
"include": "#identifier"
}
]
},
"literal": {
"patterns": [
{
"include": "#datatype"
}
]
},
"uri": {
"match": "<>",
"name": "variable.other.constant"
},
"product": {
"begin": "{",
"beginCaptures": {
"0": {
"name": "punctuation.definition.block.tasl.product"
}
},
"end": "}",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.tasl.product"
}
},
"patterns": [
{
"include": "#comment"
},
{
"include": "#term"
},
{
"include": "#component"
}
]
},
"component": {
"begin": "->",
"end": "$",
"beginCaptures": {
"0": {
"name": "punctuation.separator.tasl.component"
}
},
"patterns": [
{
"include": "#expression"
}
]
},
"coproduct": {
"begin": "\\[",
"beginCaptures": {
"0": {
"name": "punctuation.definition.block.tasl.coproduct"
}
},
"end": "\\]",
"endCaptures": {
"0": {
"name": "punctuation.definition.block.tasl.coproduct"
}
},
"patterns": [
{
"include": "#comment"
},
{
"include": "#term"
},
{
"include": "#option"
}
]
},
"option": {
"begin": "<-",
"end": "$",
"beginCaptures": {
"0": {
"name": "punctuation.separator.tasl.option"
}
},
"patterns": [
{
"include": "#expression"
}
]
},
"reference": {
"match": "(\\*)\\s*(.*)",
"captures": {
"1": {
"name": "markup.bold keyword.operator"
},
"2": {
"patterns": [
{
"include": "#key"
}
]
}
}
},
"identifier": {
"match": "([a-zA-Z][a-zA-Z0-9]*)\\b",
"captures": {
"1": {
"name": "variable"
}
}
},
"optional": {
"begin": "\\?",
"beginCaptures": {
"0": {
"name": "keyword.operator"
}
},
"end": "$",
"patterns": [
{
"include": "#expression"
}
]
},
"namespaceURI": {
"match": "[a-z]+:[a-zA-Z0-9-._~:\\/?#\\[\\]@!$&'()*+,;%=]+",
"name": "markup.underline.link"
},
"key": {
"match": "[a-zA-Z][a-zA-Z0-9]*:(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9A-Fa-f]{2})+",
"name": "markup.bold entity.name.class"
},
"datatype": {
"match": "[a-zA-Z][a-zA-Z0-9]*:(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9A-Fa-f]{2})+",
"name": "string.regexp"
},
"term": {
"match": "[a-zA-Z][a-zA-Z0-9]*:(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9A-Fa-f]{2})+",
"name": "entity.other.tasl.key"
}
}
}