{
"name": "Sprak Language Extension",
"scopeName": "source.sprak",
"fileTypes": [
"sprak",
"Sprak",
"SPRAK"
],
"uuid": "92b7c74c-cde8-4611-979e-a162a03c37fb",
"patterns": [
{
"comment": "Comment",
"name": "comment.line.sprak",
"match": "(#).*",
"captures": {
"1": {
"name": "punctuation.definition.comment.sprak"
}
}
},
{
"comment": "Keywords",
"name": "keyword.control.sprak",
"match": "\\b(else if|(end )?if|(end )?void|end|else|loop|in|from|to|break|return)\\b"
},
{
"comment": "Operators",
"name": "keyword.operator.sprak",
"match": "^(?:(?i)and|(?i)or|[!<->]=|&&|\\|\\||[!<->]|[*+\\-/])$"
},
{
"comment": "Types",
"name": "storage.type.sprak",
"match": "\\b(void|bool|number|string|array|var)\\b"
},
{
"comment": "Functions",
"name": "support.function.sprak",
"match": "\\b(Allow|Append|Blip|BootFromFloppy|Broadcast|ChangeBalance|CharToInt|Charisma|ClearData|ClearMemories|ClearText|Color|Connect|CopyToClipBoard|Corruption|Cos|Count|DisconnectAll|DisplayGraphics|Drink|Drunkenness|EnableAPI|EraseMemory|FastForward|FindPath|GetAction|GetAllRooms|GetBalanceForPerson|GetChannel|GetConnections|GetHour|GetIndexes|GetMemories|GetMinute|GetNumericData|GetPosition|GetPeople|GetRain|GetRoom|GetThingsInRoom|GetThingsOfType|GetTypeOfThing|GetUser|HD|HSVtoRGB|HasFloppy|HasFunction|HasIndex|HasMemory|Height|Info|Input|Int|InteractWith|IntToChar|IsKeyPressed|IsUser|Line|Lines|LoadData|LoadMemory|Lock|Log|Mod|Move|MovePerson|Name|OnHack|OnIntruder|Pitch|PlaySound|Position|Print|PrintS|QuickBoost|Quit|RGBToHSV|Random|Range|Rect|RegisterSeller|RemoteFunctionCall|Remove|RemoveAll|Repeat|RestoreCode|Round|SaveData|SaveMemory|Say|SetChannel|SetMaxTime|SetMhz|SetNumericData|SetPosition|SetRain|Sin|Sleep|Sleepiness|Slurp|Smelliness|Speed|StringContains|Switch|TeleportSetWorldPosition|Text|Time|Toggle|Trippy|TurnLeft|TurnOff|TurnOffSound|TurnOn|TurnOnSound|TurnRight|Type|Unlock|Width|ZapPerson|ZapPersonGently)\\b"
},
{
"comment": "Numeric",
"name": "constant.numeric.sprak",
"match": "\\b(\\d(\\.\\d)?)+"
},
{
"comment": "Global",
"name": "constant.global.sprak",
"match": "\\b\\w+\\$"
},
{
"comment": "SUB",
"name": "meta.function.sprak",
"match": "^(\\w+):",
"captures": {
"1": {
"name": "entity.name.function.sprak"
}
}
},
{
"comment": "Brace, round",
"name": "meta.brace.round.sprak",
"match": "[\\(\\)]"
},
{
"comment": "Brace, curly",
"name": "meta.brace.curly.sprak",
"match": "[\\{\\}]"
},
{
"comment": "Array",
"name": "other.array.sprak",
"begin": "(\\w+\\()",
"beginCaptures": {
"1": {
"name": "constant.array.sprak"
}
},
"end": "(\\))",
"endCaptures": {
"1": {
"name": "constant.array.sprak"
}
},
"patterns": [
{
"include": "$self"
}
]
},
{
"comment": "String, double-quoted",
"name": "string.quoted.double.sprak",
"match": "\\\"[^\"]*\\\""
},
{
"comment": "String, single-quoted",
"name": "string.quoted.single.sprak",
"match": "\\'[^']*\\'"
}
]
}