{"name":"ooc","scopeName":"source.ooc","patterns":[{"include":"#comments"},{"include":"#keywords"},{"include":"#imports"},{"include":"#literals"},{"include":"#block"},{"include":"#function_decl"},{"include":"#class_decl"},{"include":"#interface_decl"},{"include":"#cover_decl"},{"include":"#function_call"},{"include":"#variable_decl"},{"include":"#member_access"}],"repository":{"block":{"name":"meta.block.ooc","begin":"\\{","end":"}","patterns":[{"include":"#comments"},{"include":"#keywords"},{"include":"#literals"},{"include":"#block"},{"include":"#function_decl"},{"include":"#variable_decl"},{"include":"#function_call"},{"include":"#member_access"}]},"class_decl":{"name":"meta.class.ooc","match":"(?mx)\n ([_A-Z]\\w* \\s*) : \\s* (abstract\\s+)? (class)\n (?:\n \\s*\u003c\\s*([^\u003c]+)\\s*\u003e\\s*\n )?\n\t\t (?:\n \\s* (extends)\n )?\n ","captures":{"1":{"name":"entity.name.type.class.ooc"},"2":{"name":"storage.modifier.abstract.ooc"},"3":{"name":"storage.type.class.ooc"},"4":{"name":"support.type.generic.ooc"},"5":{"name":"storage.modifier.extends.class.ooc"},"6":{"name":"entity.other.inherited-class.ooc"}}},"comments":{"patterns":[{"name":"comment.block.ooc","match":"^/\\* =(\\s*.*?)\\s*= \\*/$\\n?","captures":{"1":{"name":"meta.toc-list.banner.block.ooc"}}},{"name":"comment.block.ooc","begin":"/\\*","end":"\\*/","captures":{"0":{"name":"punctuation.definition.comment.ooc"}}},{"name":"invalid.illegal.stray-comment-end.ooc","match":"\\*/.*\\n"},{"name":"comment.line.banner.ooc","match":"^// =(\\s*.*?)\\s*=\\s*$\\n?","captures":{"1":{"name":"meta.toc-list.banner.line.ooc"}}},{"name":"comment.line.double-slash.ooc","begin":"//","end":"$\\n?","patterns":[{"name":"punctuation.separator.continuation.ooc","match":"(?\u003e\\\\\\s*\\n)"}],"beginCaptures":{"0":{"name":"punctuation.definition.comment.ooc"}}}]},"cover_decl":{"name":"meta.definition.cover.ooc","match":"(?mx)\n ([_A-Z]\\w* \\s*) : \\s* (cover)\n (?:\n (?:\n \\s+(from)\\s+(?:([\\s\\w\\d_\\*]+?)\\s*(?= \\s extends | [/{;] | $) )\n )\n |\n (?:\n \\s+(extends)\\s+([_A-Z]\\w*)\\s*\n )\n )*\n ","captures":{"1":{"name":"entity.name.type.cover.ooc"},"2":{"name":"storage.type.cover.ooc"},"3":{"name":"storage.modifier.extends.from.ooc"},"4":{"name":"entity.other.inherited-class.overtype.ooc"},"5":{"name":"storage.modifier.extends.cover.ooc"},"6":{"name":"entity.other.inherited-class.supertype.ooc"}}},"escaped_char":{"name":"constant.character.escape.ooc","match":"\\\\."},"function_call":{"name":"meta.function.call.ooc","begin":"(?:((?:\\.[a-z_]\\w*)|(?:[a-z_]\\w*)(?:~[a-z_]\\w*)?))\\(","end":"\\)","patterns":[{"include":"#comments"},{"include":"#keywords"},{"include":"#literals"},{"include":"#block"},{"include":"#function_call"},{"include":"#member_access"}],"beginCaptures":{"1":{"name":"support.function.any-method.ooc"},"2":{"name":"support.function.any-method.ooc"}}},"function_decl":{"patterns":[{"name":"meta.function.operator.ooc","begin":"(?mx)\n \t (operator\\s+(?:(?:[+\\-/\\*=!\u003c\u003e]|\\[\\])=?|\\[\\]|[\u003c\u003e=]|=|as))\n \t [\\s\\w~]*?\n \t \\(","end":"(?mx)\\)\n\n \t\t\t(?:\\s*(-\u003e) \\s*\n \t\t (?:\n\t\t\t\t\t\t(?:(This) |\n \t\t ([A-Z_]\\w*))\n \t\t ([@*]*)\n \t\t ))?","patterns":[{"include":"#comments"},{"include":"#keywords"},{"include":"#parameters"}],"beginCaptures":{"1":{"name":"entity.name.function.ooc"}},"endCaptures":{"1":{"name":"keyword.other.return-type.ooc"},"2":{"name":"storage.type.class.this.ooc"},"3":{"name":"storage.type.ooc"},"4":{"name":"storage.modifier.pointer-arith.ooc"}}},{"name":"meta.function.params.ooc","begin":"(?mx)\n \t\t ([_a-z]\\w*) \\s* : \\s*\n \t\t ((?:(?:static|proto|inline|final|abstract)\\s+)*)\n \t\t (?:(extern|unmangled)(?:\\s*\\(([^\\)]+)\\))?\\s+\n \t\t ((?:(?:static|proto|inline|final|abstract)\\s+)*)\n \t\t )?\n \t\t \n \t\t (func)\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t(?:\\s*@)?\n\t\t\t\t\t\t\t\n \t\t (?:\\s*(~[A-Za-z_]\\w*))?\n \n (?:\n \\s*\u003c\\s*([^\u003c]+)\\s*\u003e\n )?\n \n \t\t \\s* \\(","end":"(?mx)\\)\n\t\t\t\t\t(?:\\s*(-\u003e) \\s*\n \t\t (?:\n\t\t\t\t\t\t(?:(This) | \n \t\t ([A-Z_]\\w*))\n \t\t ([@*]*)\n \t\t ))?","patterns":[{"include":"#comments"},{"include":"#keywords"},{"include":"#parameters"}],"beginCaptures":{"1":{"name":"entity.name.function.ooc"},"10":{"name":"storage.type.ooc"},"11":{"name":"storage.modifier.pointer-arith.ooc"},"2":{"name":"keyword.other.ooc"},"3":{"name":"keyword.other.extern.ooc"},"4":{"name":"support.function.c"},"5":{"name":"keyword.other.ooc"},"6":{"name":"storage.type.function.ooc"},"7":{"name":"storage.modifier.func-tag.ooc"},"8":{"name":"support.type.generic.ooc"},"9":{"name":"keyword.other.return-type.ooc"}},"endCaptures":{"1":{"name":"keyword.other.ooc"},"2":{"name":"storage.type.class.this.ooc"},"3":{"name":"storage.type.ooc"},"4":{"name":"storage.modifier.pointer-arith.ooc"}}},{"name":"meta.function.noparams.ooc","match":"(?mx)\n \t\t ([_a-z]\\w*) \\s* : \\s*\n \t\t \n \t\t ((?:(?:static|proto|inline|final|abstract)\\s+)*)\n \t\t (?:(extern|unmangled)(?:\\s*\\(([^\\)]+)\\))?\\s+\n \t\t ((?:(?:static|proto|inline|final|abstract)\\s+)*)\n \t\t )?\n \t\t \n \t\t (func)\n\n \t\t (?:\\s*(~[A-Za-z_]\\w*))?\n \n (?:\n \\s*\u003c\\s*([^\u003c]+)\\s*\u003e\n )?\n \n (?:\\s*(-\u003e) \\s*\n \t\t (?:\n\t\t\t\t\t\t\t\t(?:(This) |\n \t\t ([A-Z_]\\w*))\n \t\t ([@*]*)\n \t\t ))?\n \t\t ","captures":{"1":{"name":"entity.name.function.ooc"},"10":{"name":"storage.type.class.this.ooc"},"11":{"name":"storage.type.ooc"},"12":{"name":"storage.modifier.pointer-arith.ooc"},"2":{"name":"keyword.other.ooc"},"3":{"name":"keyword.other.extern.ooc"},"4":{"name":"support.function.c"},"5":{"name":"keyword.other.ooc"},"6":{"name":"storage.type.function.ooc"},"7":{"name":"storage.modifier.func-tag.ooc"},"8":{"name":"support.type.generic.ooc"},"9":{"name":"keyword.other.return-type.ooc"}}}]},"imports":{"name":"keyword.control.import.ooc","begin":"\\b(?:use|include|import)\\b","end":";|$","patterns":[{"include":"#comments"}]},"interface_decl":{"name":"meta.interface.ooc","match":"(?mx)\n ([_A-Z]\\w* \\s*) : \\s* (interface)\n (?:\n \\s*\u003c\\s*([^\u003c]+)\\s*\u003e\\s*\n )?\n ","captures":{"1":{"name":"entity.name.type.class.ooc"},"2":{"name":"storage.modifier.abstract.ooc"},"3":{"name":"storage.type.class.ooc"},"4":{"name":"support.type.generic.ooc"},"5":{"name":"storage.modifier.extends.class.ooc"},"6":{"name":"entity.other.inherited-class.ooc"}}},"keywords":{"patterns":[{"name":"keyword.control.ooc","match":"\\b(?:if|else|while|do|for|in|switch|match|case|return|break|continue|default)\\b"},{"name":"variable.language.this.ooc","match":"\\bthis\\b"},{"name":"meta.type.class.this.ooc","match":"\\b(This)([@\u0026*]*|\\b)","captures":{"1":{"name":"storage.type.class.this.ooc"},"2":{"name":"storage.modifier.pointer-arith.ooc"}}},{"name":"keyword.operator.logical.ooc","match":"(?:\u0026\u0026|\\|\\||\\#|!)"},{"include":"#return_type"},{"name":"keyword.operator.comparison.ooc","match":"(?:[\u003c\u003e!=]=|=\u003e|[\u003e\u003c])"},{"name":"keyword.operator.assignment.ooc","match":"(?:[\\*+\\-/|\u0026:]|\u003c{2,3}|\u003e{2,3})?="},{"name":"keyword.operator.arithmetic.ooc","match":"(?:[\\*\\-\\+/|\u0026]|\u003c{2,3}|\u003e{2,3})"},{"name":"constant.language.boolean.ooc","match":"\\b(?:true|false)\\b"},{"name":"constant.language.null.ooc","match":"\\bnull\\b"},{"name":"keyword.other.directive.const.ooc","match":"\\bconst\\b"},{"name":"keyword.other.directive.static.ooc","match":"\\bstatic\\b"},{"name":"meta.operator.as.ooc","match":"\\b(as)\\s*([A-Z_]\\w*)([@\u0026]*)","captures":{"1":{"name":"keyword.operator.logical.as.ooc"},"2":{"name":"storage.type.ooc"},"3":{"name":"storage.modifier.pointer-arith.ooc"}}},{"name":"meta.function.pointer.ooc","begin":"\\b(Func)\\s*\\(","end":"\\)","patterns":[{"include":"#keywords"},{"include":"#parameters"}],"beginCaptures":{"1":{"name":"storage.type.function.pointer.ooc"}}},{"name":"meta.function.pointer.ooc","match":"(?mx)\\bFunc\\b","captures":{"1":{"name":"storage.type.function.pointer.ooc"}}}]},"literals":{"patterns":[{"include":"#ooc_numbers"},{"include":"#ooc_char"},{"include":"#ooc_string"}]},"member_access":{"name":"variable.other.accessed.ooc","match":"([a-zA-Z_]\\w*)\\s+(?=[a-zA-Z_])"},"ooc_char":{"name":"string.quoted.single.ooc","begin":"'","end":"'","patterns":[{"include":"#escaped_char"}]},"ooc_numbers":{"patterns":[{"name":"constant.numeric.integer.octal.ooc","match":"(0c[0-7]+)"},{"name":"constant.numeric.integer.hexadecimal.ooc","match":"(0x[0-9a-fA-F]+)"},{"name":"constant.numeric.integer.binary.ooc","match":"(0b[01]+)"},{"name":"constant.numeric.float.ooc","match":"(?x) (?\u003c! 0[bcx] ) (\n (?: (?:[0-9]*)\\.(?:[0-9]+) | (?:[0-9]+)\\.(?:[0-9]*) )\n (?: [eE][+\\-]?\\d+)?\n )"},{"name":"constant.numeric.integer.ooc","match":"(?x)\\b([0-9]+)(?: [eE][+\\-]?\\d+)?"}]},"ooc_string":{"name":"string.quoted.double.ooc","begin":"\"","end":"\"","patterns":[{"include":"#escaped_char"}]},"parameters":{"patterns":[{"include":"#comments"},{"include":"#keywords"},{"name":"meta.function.nameless-typed.ooc","match":"([_A-Z]\\w*)([\u0026@*]*)","captures":{"1":{"name":"storage.type.ooc"},"2":{"name":"storage.modifier.pointer-arith.ooc"}}},{"name":"meta.function.parameter.type.ooc","match":":\\s*([A-Z_]\\w*([@\u0026*]*))","captures":{"1":{"name":"storage.type.ooc"},"2":{"name":"storage.modifier.pointer-arith.ooc"}}},{"name":"meta.function.parameter.name.ooc","match":"([=.])?([a-zA-Z_]\\w*)","captures":{"1":{"name":"keyword.operator.assignment.parameter.ooc"},"2":{"name":"variable.parameter.ooc"}}}]},"return_type":{"name":"meta.function.return-type.ooc","match":"(?mx)\n\t\t (\\-\\\u003e) \\s*\n\t\t (?:\n\t\t\t\t(?:(This) |\n\t\t ([A-Z_]\\w*))\n\t\t ([@*]*)\n\t\t )","captures":{"1":{"name":"keyword.other.return-type.ooc"},"2":{"name":"storage.type.class.this.ooc"},"3":{"name":"storage.type.ooc"},"4":{"name":"storage.modifier.pointer-arith.ooc"}}},"var_explicit_decl":{"name":"meta.definition.variable.explicit.ooc","begin":"[_a-zA-Z]\\w*\\s*(?=,|:[^=])","end":"(?mx)(?:\n\t\t\t(?:\n\t\t\t :\\s*\n\t\t\t (?:\n\t\t\t (?:\n\t\t\t (?:\n\t\t\t (static) |\n\t\t\t (const) |\n\t\t\t (extern) (?:\\s* \\( \\s* ([^\\)]+) \\s* \\) )?\n\t\t\t ) \\s+\n\t\t\t )*\n )\n\t\t\t (?: (?: (This) | ([A-Z_]\\w*)) ([@\u0026]*) )\n\t\t\t\t(?: \\s* \\\u003c\\s*([A-Z_]\\w*)\\s*\\\u003e )?\n\t\t\t) | ; | $ )","patterns":[{"include":"#comments"},{"name":"variable.other.ooc","match":"[_a-zA-Z]\\w*"}],"beginCaptures":{"0":{"name":"variable.other.ooc"}},"endCaptures":{"1":{"name":"keyword.other.ooc"},"2":{"name":"keyword.other.ooc"},"3":{"name":"keyword.other.ooc"},"4":{"name":"storage.type.c"},"5":{"name":"storage.type.class.this.ooc"},"6":{"name":"storage.type.ooc"},"7":{"name":"storage.modifier.pointer-arith.ooc"},"8":{"name":"support.type.generic.ooc"}}},"var_inferred_decl":{"name":"meta.definition.variable.inferred.ooc","match":"(?x)([a-zA-Z_]\\w*)\\s*(?= := )","captures":{"1":{"name":"variable.other.ooc"},"2":{"name":"storage.type.ooc"}}},"variable_decl":{"patterns":[{"include":"#var_inferred_decl"},{"include":"#var_explicit_decl"}]}}}