# Encoding: UTF-8

{fileTypes: ["io"],
 foldingStartMarker: /(?<_1>\/\*\*|\([^\)]*$|if\()/,
 foldingStopMarker: /(?<_1>\*\*\/|^\s*\))/,
 keyEquivalent: "^~I",
 name: "Io",
 patterns: 
  [{captures: {1 => {name: "meta.empty-parenthesis.io"}},
    comment: 
     "we match this to overload return inside () --Allan; scoping rules for what gets the scope have changed, so we now group the ) instead of the ( -- Rob",
    match: /\((?<_1>\))/},
   {captures: {1 => {name: "meta.comma-parenthesis.io"}},
    comment: "We want to do the same for ,) -- Seckar; same as above -- Rob",
    match: /\,(?<_1>\))/},
   {match: 
     /\b(?<_1>if|ifTrue|ifFalse|ifTrueIfFalse|for|loop|reverseForeach|foreach|map|continue|break|while|do|return)\b/,
    name: "keyword.control.io"},
   {begin: /\/\*/,
    captures: {0 => {name: "punctuation.definition.comment.io"}},
    end: "\\*/",
    name: "comment.block.io"},
   {captures: {1 => {name: "punctuation.definition.comment.io"}},
    match: /(?<_1>\/\/).*$\n?/,
    name: "comment.line.double-slash.io"},
   {captures: {1 => {name: "punctuation.definition.comment.io"}},
    match: /(?<_1>#).*$\n?/,
    name: "comment.line.number-sign.io"},
   {comment: 
     "I wonder if some of this isn't variable.other.language? --Allan; scoping this as variable.language to match Objective-C's handling of 'self', which is inconsistent with C++'s handling of 'this' but perhaps intentionally so -- Rob",
    match: /\b(?<_1>self|sender|target|proto|protos|parent)\b/,
    name: "variable.language.io"},
   {match: /<=|>=|=|:=|\*|\||\|\||\+|-|\/|&|&&|>|<|\?|@|@@|\b(?<_1>and|or)\b/,
    name: "keyword.operator.io"},
   {match: /\bGL[\w_]+\b/, name: "constant.other.io"},
   {match: /\b(?<_1>[A-Z](?<_2>\w+)?)\b/, name: "support.class.io"},
   {match: 
     /\b(?<_1>clone|call|init|method|list|vector|block|(?<_2>\w+(?=\s*\()))\b/,
    name: "support.function.io"},
   {match: /\b(?<_1>gl(?<_2>u|ut)?[A-Z]\w+)\b/,
    name: "support.function.open-gl.io"},
   {begin: /"""/,
    beginCaptures: {0 => {name: "punctuation.definition.string.begin.io"}},
    end: "\"\"\"",
    endCaptures: {0 => {name: "punctuation.definition.string.end.io"}},
    name: "string.quoted.triple.io",
    patterns: [{match: /\\./, name: "constant.character.escape.io"}]},
   {begin: /"/,
    beginCaptures: {0 => {name: "punctuation.definition.string.begin.io"}},
    end: "\"",
    endCaptures: {0 => {name: "punctuation.definition.string.end.io"}},
    name: "string.quoted.double.io",
    patterns: [{match: /\\./, name: "constant.character.escape.io"}]},
   {match: 
     /\b(?<_1>(?<_2>0(?<_3>x|X)[0-9a-fA-F]*)|(?<_4>(?<_5>[0-9]+\.?[0-9]*)|(?<_6>\.[0-9]+))(?<_7>(?<_8>e|E)(?<_9>\+|-)?[0-9]+)?)(?<_10>L|l|UL|ul|u|U|F|f)?\b/,
    name: "constant.numeric.io"},
   {match: /(?<_1>Lobby)\b/, name: "variable.other.global.io"},
   {match: /\b(?<_1>TRUE|true|FALSE|false|NULL|null|Null|Nil|nil|YES|NO)\b/,
    name: "constant.language.io"}],
 scopeName: "source.io",
 uuid: "BD798537-3548-47F3-A6AB-7FB95C45DB83"}
