# [PackageDev] target_format: plist, ext: tmLanguage
---
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: \'[^']*\'

...