{"name":"Spin","scopeName":"source.spin","patterns":[{"name":"comment.block.spin","begin":"{","end":"}(?!.*})","captures":{"0":{"name":"punctuation.definition.comment.php"}}},{"name":"comment.line.single-quote.spin","match":"(').*$\\n?","captures":{"1":{"name":"punctuation.definition.comment.spin"}}},{"name":"constant.numeric.integer.long.hexadecimal.spin","match":"(?i:(%[0-9A-Fa-f]*)L)"},{"name":"constant.numeric.integer.hexadecimal.spin","match":"(?i:(\\$[0-9A-Fa-f_]*)|(%[01_]*))"},{"name":"constant.numeric.complex.spin","match":"\\b(?i:(((\\d+(\\.(?=[^a-zA-Z])\\d*)?|(?\u003c=[^0-9a-zA-Z])\\.\\d+)(e[\\-\\+]?\\d+)?))J)"},{"name":"constant.numeric.float.spin","match":"\\b(?i:(\\d+\\.\\d*(e[\\-\\+]?\\d+)?))(?=[^a-zA-Z])"},{"name":"constant.numeric.float.spin","match":"(?\u003c=[^0-9a-zA-Z])(?i:(\\.\\d+(e[\\-\\+]?\\d+)?))"},{"name":"constant.numeric.float.spin","match":"\\b(?i:(\\d+e[\\-\\+]?\\d+))"},{"name":"constant.numeric.integer.long.decimal.spin","match":"\\b(?i:([0-9]+[0-9_]*)L)"},{"name":"constant.numeric.integer.decimal.spin","match":"\\b([0-9]+[0-9_]*)"},{"match":"\\b(global)\\b","captures":{"1":{"name":"storage.modifier.global.spin"}}},{"match":"\\b(?:(import)|(from))\\b","captures":{"1":{"name":"keyword.control.import.spin"},"2":{"name":"keyword.control.import.from.spin"}}},{"name":"keyword.control.flow.spin","match":"\\b((?i:if)|(?i:repeat)|(?i:else)|(?i:elseif))\\b"},{"name":"keyword.operator.logical.spin","match":"\\b(and|in|is|not|or)\\b"},{"match":"\\b(_CLKMODE|_clkmode|_clkMode|_Clkmode|_XINFREQ|_xinfreq|_xinFreq|_Xinfreq|ABORT|Abort|abort|QUIT|Quit|quit|NEXT|Next|next|WHILE|While|while|UNTIL|Until|until|FROM|From|from|TO|To|to|RETURN|Return|return|DIR[a-zA-Z](?=\\[)|Dir[a-zA-Z](?=\\[)|dir[a-zA-Z](?=\\[)|OUT[a-zA-Z](?=\\[)|Out[a-zA-Z](?=\\[)|out[a-zA-Z](?=\\[)|IN[a-zA-Z](?=\\[)|In[a-zA-Z](?=\\[)|in[a-zA-Z](?=\\[))\\b","captures":{"1":{"name":"keyword.other.spin"}}},{"name":"invalid.deprecated.operator.spin","match":"\u003c\u003e"},{"name":"keyword.operator.comparison.spin","match":"\u003c\\=|\u003e\\=|\\=\\=|\u003c|\u003e|\\!\\="},{"name":"keyword.operator.assignment.augmented.spin","match":"\\+\\=|-\\=|:\\=|:|\\*\\=|/\\=|//\\=|%\\=|\u0026\\=|\\|\\=|\\^\\=|\u003e\u003e\\=|\u003c\u003c\\=|\\*\\*\\="},{"name":"keyword.operator.arithmetic.spin","match":"\\+|\\-|\\*|\\*\\*|/|//|\u003c\u003c|\u003e\u003e|\u0026|\\||\\^|~|\\!"},{"name":"keyword.operator.assignment.spin","match":"\\="},{"name":"meta.class.old-style.spin","contentName":"entity.name.type.class.spin","begin":"^\\s*(class)\\s+(?=[a-zA-Z_][a-zA-Z_0-9]*\\s*\\:)","end":"\\s*(:)","patterns":[{"include":"#entity_name_class"}],"beginCaptures":{"1":{"name":"storage.type.class.spin"}},"endCaptures":{"1":{"name":"punctuation.section.class.begin.spin"}}},{"name":"meta.class.spin","begin":"^\\s*(class)\\s+(?=[a-zA-Z_][a-zA-Z_0-9]*\\s*\\()","end":"(\\))\\s*(?:(\\:)|(.*$\\n?))","patterns":[{"contentName":"entity.name.type.class.spin","begin":"(?=[A-Za-z_][A-Za-z0-9_]*)","end":"(?![A-Za-z0-9_])","patterns":[{"include":"#entity_name_class"}]},{"contentName":"meta.class.inheritance.spin","begin":"(\\()","end":"(?=\\)|:)","patterns":[{"contentName":"entity.other.inherited-class.spin","begin":"(?\u003c=\\(|,)\\s*","end":"\\s*(?:(,)|(?=\\)))","patterns":[{"include":"$self"}],"endCaptures":{"1":{"name":"punctuation.separator.inheritance.spin"}}}],"beginCaptures":{"1":{"name":"punctuation.definition.inheritance.begin.spin"}}}],"beginCaptures":{"1":{"name":"storage.type.class.spin"}},"endCaptures":{"1":{"name":"punctuation.definition.inheritance.end.spin"},"2":{"name":"punctuation.section.class.begin.spin"},"3":{"name":"invalid.illegal.missing-section-begin.spin"}}},{"name":"meta.class.spin","begin":"^\\s*(class)\\s+(?=[a-zA-Z_][a-zA-Z_0-9])","end":"(\\()|\\s*($\\n?|#.*$\\n?)","patterns":[{"contentName":"entity.name.type.class.spin","begin":"(?=[A-Za-z_][A-Za-z0-9_]*)","end":"(?![A-Za-z0-9_])","patterns":[{"include":"#entity_name_function"}]}],"beginCaptures":{"1":{"name":"storage.type.class.spin"}},"endCaptures":{"1":{"name":"punctuation.definition.inheritance.begin.spin"},"2":{"name":"invalid.illegal.missing-inheritance.spin"}}},{"name":"meta.function.spin","begin":"^(PUB|Pub|pub|PRI|Pri|pri)\\s+(?=[A-Za-z_][A-Za-z0-9_]*\\s*\\()","end":"(\\)|\\n)\\s*(?:(\\:|(?=\\||'))|(.*$\\n?))","patterns":[{"contentName":"entity.name.function.spin","begin":"(?=[A-Za-z_][A-Za-z0-9_]*)","end":"(?![A-Za-z0-9_])","patterns":[{"include":"#entity_name_function"}]},{"contentName":"meta.function.parameters.spin","begin":"(\\()","end":"(?![a-zA-Z0-9_])","patterns":[{"include":"#keyword_arguments"},{"match":"\\b([a-zA-Z_][a-zA-Z_0-9]*)\\s*(?:(,\\s*)|(?=[\\n\\)]))","captures":{"1":{"name":"variable.parameter.function.spin"},"2":{"name":"punctuation.separator.parameters.spin"}}}],"beginCaptures":{"1":{"name":"punctuation.definition.parameters.begin.spin"}}}],"beginCaptures":{"1":{"name":"storage.type.function.spin"}},"endCaptures":{"1":{"name":"punctuation.definition.parameters.end.spin"},"2":{"name":"punctuation.section.function.begin.spin"},"3":{"name":"invalid.illegal.missing-section-begin.spin"}}},{"name":"meta.function.spin","begin":"^(PUB|Pub|pub|PRI|Pri|pri)\\s+(?=[A-Za-z_][A-Za-z0-9_]*)","end":"(?![A-Za-z0-9_,])","patterns":[{"contentName":"entity.name.function.spin","begin":"(?=[A-Za-z_][A-Za-z0-9_]*)","end":"(?![A-Za-z0-9_])","patterns":[{"include":"#entity_name_function"}]}],"beginCaptures":{"1":{"name":"storage.type.function.spin"}},"endCaptures":{"1":{"name":"punctuation.definition.parameters.begin.spin"},"2":{"name":"invalid.illegal.missing-parameters.spin"}}},{},{"name":"meta.function.decorator.spin","begin":"^\\s*(?=@\\s*[A-Za-z_][A-Za-z0-9_]*(?:[a-zA-Z_][a-zA-Z_0-9]*)*\\s*\\()","end":"(\\))","patterns":[{"contentName":"entity.name.function.decorator.spin","begin":"(?=(@)\\s*[A-Za-z_][A-Za-z0-9_]*(?:[A-Za-z_][A-Za-z0-9_]*)*\\s*\\()","end":"(?=\\s*\\()","patterns":[{"include":"#dotted_name"}],"beginCaptures":{"1":{"name":"punctuation.definition.decorator.spin"}}},{"contentName":"meta.function.decorator.arguments.spin","begin":"(\\()","end":"(?=\\))","patterns":[{"include":"#keyword_arguments"},{"include":"$self"}],"beginCaptures":{"1":{"name":"punctuation.definition.arguments.begin.spin"}}}],"endCaptures":{"1":{"name":"punctuation.definition.arguments.end.spin"}}},{"name":"meta.function.decorator.spin","contentName":"entity.name.function.decorator.spin","begin":"[(,]\\s*(?=@[A-Za-z_][A-Za-z0-9_]*(?:[a-zA-Z_][a-zA-Z_0-9]*)*)","end":"(?![@A-Za-z0-9_])","patterns":[{"begin":"(?=(@)\\s*[A-Za-z_][A-Za-z0-9_]*([A-Za-z_][A-Za-z0-9_]*)*)","end":"(?![@A-Za-z0-9_])","patterns":[{"include":"#dotted_name"}],"beginCaptures":{"1":{"name":"punctuation.definition.decorator.spin"}}}]},{"name":"meta.function-call.spin","contentName":"meta.function-call.arguments.spin","begin":"(?\u003c=\\)|\\])\\s*(\\()","end":"(\\))","patterns":[{"include":"#keyword_arguments"},{"include":"$self"}],"beginCaptures":{"1":{"name":"punctuation.definition.arguments.begin.spin"}},"endCaptures":{"1":{"name":"punctuation.definition.arguments.end.spin"}}},{"name":"meta.function-call.spin","begin":"(?=[A-Za-z_][A-Za-z0-9_]*(?:\\.[a-zA-Z_][a-zA-Z_0-9]*)*\\s*\\()","end":"(\\))","patterns":[{"begin":"(?=[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*\\s*\\()","end":"(?=\\s*\\()","patterns":[{"include":"#dotted_name"}]},{"contentName":"meta.function-call.arguments.spin","begin":"(\\()","end":"(?=\\))","patterns":[{"include":"#keyword_arguments"},{"include":"$self"}],"beginCaptures":{"1":{"name":"punctuation.definition.arguments.begin.spin"}}}],"endCaptures":{"1":{"name":"punctuation.definition.arguments.end.spin"}}},{"name":"meta.item-access.spin","begin":"(?=[A-Za-z_][A-Za-z0-9_]*(?:\\.[a-zA-Z_][a-zA-Z_0-9]*)*\\s*\\[)","end":"(\\])","patterns":[{"begin":"(?=[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*\\s*\\[)","end":"(?=\\s*\\[)","patterns":[{"include":"#dotted_name"}]},{"contentName":"meta.item-access.arguments.spin","begin":"(\\[)","end":"(?=\\])","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"punctuation.definition.arguments.begin.spin"}}}],"endCaptures":{"1":{"name":"punctuation.definition.arguments.end.spin"}}},{"name":"meta.item-access.spin","contentName":"meta.item-access.arguments.spin","begin":"(?\u003c=\\)|\\])\\s*(\\[)","end":"(\\])","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"punctuation.definition.arguments.begin.spin"}},"endCaptures":{"1":{"name":"punctuation.definition.arguments.end.spin"}}},{"match":"\\b(def|lambda)\\b","captures":{"1":{"name":"storage.type.function.spin"}}},{"match":"^\\b(class|OBJ|Obj|obj|DAT|Dat|dat|CON|Con|con|VAR|Var|var)\\b","captures":{"1":{"name":"storage.type.class.spin"}}},{"include":"#line_continuation"},{"include":"#language_variables"},{"name":"constant.language.spin","match":"\\b(cnt|CNT|Cnt|CLKFREQ|ClkFreq|clkFreq|clkfreq|P8X32A|P8x32a|P8X32a|p8x32a|XTAL([0-9]+)|Xtal([0-9]+)|xtal([0-9]+)|PLL([0-9]+)X|PLL([0-9]+)x|Pll([0-9]+)x|pll([0-9]+)X|pll([0-9]+)x)\\b"},{"include":"#string_quoted_double"},{"include":"#dotted_name"},{"begin":"(\\()","end":"(\\))","patterns":[{"include":"$self"}]},{"match":"(\\[)(\\s*(\\]))\\b","captures":{"1":{"name":"punctuation.definition.list.begin.spin"},"2":{"name":"meta.empty-list.spin"},"3":{"name":"punctuation.definition.list.end.spin"}}},{"name":"meta.structure.list.spin","begin":"(\\[)","end":"(\\])","patterns":[{"contentName":"meta.structure.list.item.spin","begin":"(?\u003c=\\[|\\,)\\s*(?![\\],])","end":"\\s*(?:(,)|(?=\\]))","patterns":[{"include":"$self"}],"endCaptures":{"1":{"name":"punctuation.separator.list.spin"}}}],"beginCaptures":{"1":{"name":"punctuation.definition.list.begin.spin"}},"endCaptures":{"1":{"name":"punctuation.definition.list.end.spin"}}},{"name":"meta.structure.tuple.spin","match":"(\\()(\\s*(\\)))","captures":{"1":{"name":"punctuation.definition.tuple.begin.spin"},"2":{"name":"meta.empty-tuple.spin"},"3":{"name":"punctuation.definition.tuple.end.spin"}}},{"name":"meta.structure.dictionary.spin","match":"(\\{)(\\s*(\\}))","captures":{"1":{"name":"punctuation.definition.dictionary.begin.spin"},"2":{"name":"meta.empty-dictionary.spin"},"3":{"name":"punctuation.definition.dictionary.end.spin"}}},{"begin":"(\\{)","end":"(\\})","beginCaptures":{"1":{"name":"punctuation.definition.dictionary.begin.spin"}},"endCaptures":{"1":{"name":"punctuation.definition.dictionary.end.spin"}}}],"repository":{"builtin_exceptions":{"name":"support.type.exception.spin","match":"(?x)\\b(\n (\n Arithmetic|Assertion|Attribute|Buffer|EOF|Environment|FloatingPoint|IO|\n Import|Indentation|Index|Key|Lookup|Memory|Name|NotImplemented|OS|Overflow|\n Reference|Runtime|Standard|Syntax|System|Tab|Type|UnboundLocal|\n Unicode(Encode|Decode|Translate)?|\n Value|VMS|Windows|ZeroDivision\n )Error|\n ((Pending)?Deprecation|Runtime|Syntax|User|Future|Import|Unicode|Bytes)?Warning|\n (Base)?Exception|\n SystemExit|StopIteration|NotImplemented|KeyboardInterrupt|GeneratorExit\n\t\t\t)\\b"},"builtin_functions":{"name":"support.function.builtin.spin","match":"(?x)\\b(\n STRING|String|string|WAITCNT|Waitcnt|WaitCnt|waitcnt|waitCnt|COGNEW|CogNew|Cognew|cogNew|cognew|COGSTOP|CogStop|Cogstop|cogStop|cogstop|ABS|Abs|abs|MAX|Max|max|MIN|Min|min|NEG|Neg|neg|STRSIZE|StrSize|StrSIZE|strSIZE|strSize|Strsize|strsize|LONGFILL|LongFILL|longFILL|LongFill|longFill|Longfill|longfill|BYTEMOVE|ByteMove|ByteMOVE|byteMOVE|byteMove|Bytemove|bytemove|BYTEFILL|ByteFILL|ByteFill|Bytefill|byteFILL|ByteFILL|byteFill|bytefill|LOOKUPZ|LookUpz|lookUpz|LookUpZ|lookUpZ|LookUPZ|Lookupz|lookupz|CONSTANT|Constant|constant\n\t\t\t)\\b(?=\\s*\\()"},"builtin_types":{"name":"support.type.spin","match":"(?x)\\b(\n\t\t\t\tLONG|Long|long|BYTE|Byte|byte|WORD|Word|word|RES|Res|res\n\t\t\t)\\b"},"constant_placeholder":{"name":"constant.other.placeholder.spin","match":"(?i:(\\([a-z_]+\\))?#?0?\\-?[ ]?\\+?([0-9]*|\\*)(\\.([0-9]*|\\*))?[hL]?[a-z])"},"docstrings":{"patterns":[{"name":"comment.block.spin","begin":"^\\s*(?=[uU]?[rR]?\\{\\{)","end":"(?\u003c=\\}\\})","patterns":[{"include":"#string_quoted_double"}]}]},"dotted_name":{"begin":"(?=[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*)","end":"(?![A-Za-z0-9_\\.])","patterns":[{"begin":"(\\.)(?=[A-Za-z_][A-Za-z0-9_]*)","end":"(?![A-Za-z0-9_])","patterns":[{"include":"#magic_function_names"},{"include":"#magic_variable_names"},{"include":"#illegal_names"},{"include":"#generic_names"}]},{"begin":"(?\u003c!\\.)(?=[A-Za-z_][A-Za-z0-9_]*)","end":"(?![A-Za-z0-9_])","patterns":[{"include":"#builtin_functions"},{"include":"#builtin_types"},{"include":"#builtin_exceptions"},{"include":"#illegal_names"},{"include":"#magic_function_names"},{"include":"#magic_variable_names"},{"include":"#language_variables"},{"include":"#generic_names"}]}]},"entity_name_class":{"patterns":[{"include":"#illegal_names"},{"include":"#generic_names"}]},"entity_name_function":{"patterns":[{"include":"#magic_function_names"},{"include":"#illegal_names"},{"include":"#generic_names"}]},"escaped_char":{"match":"(\\\\x[0-9A-F]{2})|(\\\\[0-7]{3})|(\\\\\\n)|(\\\\\\\\)|(\\\\\\\")|(\\\\')|(\\\\a)|(\\\\b)|(\\\\f)|(\\\\n)|(\\\\r)|(\\\\t)|(\\\\v)","captures":{"1":{"name":"constant.character.escape.hex.spin"},"10":{"name":"constant.character.escape.linefeed.spin"},"11":{"name":"constant.character.escape.return.spin"},"12":{"name":"constant.character.escape.tab.spin"},"13":{"name":"constant.character.escape.vertical-tab.spin"},"2":{"name":"constant.character.escape.octal.spin"},"3":{"name":"constant.character.escape.newline.spin"},"4":{"name":"constant.character.escape.backlash.spin"},"5":{"name":"constant.character.escape.double-quote.spin"},"6":{"name":"constant.character.escape.single-quote.spin"},"7":{"name":"constant.character.escape.bell.spin"},"8":{"name":"constant.character.escape.backspace.spin"},"9":{"name":"constant.character.escape.formfeed.spin"}}},"escaped_unicode_char":{"match":"(\\\\U[0-9A-Fa-f]{8})|(\\\\u[0-9A-Fa-f]{4})|(\\\\N\\{[a-zA-Z ]+\\})","captures":{"1":{"name":"constant.character.escape.unicode.16-bit-hex.spin"},"2":{"name":"constant.character.escape.unicode.32-bit-hex.spin"},"3":{"name":"constant.character.escape.unicode.name.spin"}}},"function_name":{"patterns":[{"include":"#magic_function_names"},{"include":"#magic_variable_names"},{"include":"#builtin_exceptions"},{"include":"#builtin_functions"},{"include":"#builtin_types"},{"include":"#generic_names"}]},"generic_names":{"match":"[A-Za-z_][A-Za-z0-9_]*"},"illegal_names":{"name":"invalid.illegal.name.spin","match":"\\b(and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|with|yield)\\b"},"keyword_arguments":{"begin":"\\b([a-zA-Z_][a-zA-Z_0-9]*)\\s*(=)(?!=)","end":"\\s*(?:(?=$\\n?|[\\)\\:]))","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"variable.parameter.function.spin"},"2":{"name":"keyword.operator.assignment.spin"}},"endCaptures":{"1":{"name":"punctuation.separator.parameters.spin"}}},"language_variables":{"name":"variable.language.spin","match":"\\b(self|cls)\\b"},"line_continuation":{"match":"(\\\\)(.*)$\\n?","captures":{"1":{"name":"punctuation.separator.continuation.line.spin"},"2":{"name":"invalid.illegal.unexpected-text.spin"}}},"magic_function_names":{"name":"support.function.magic.spin","match":"(?x)\\b(__(?:\n\t\t\t\t\t\tabs|add|AND|And|and|OR|NOT|Not|not|Or|or|call|cmp|coerce|complex|contains|del|delattr|\n\t\t\t\t\t\tdelete|delitem|delslice|div|divmod|enter|eq|exit|float|\n\t\t\t\t\t\tfloordiv|ge|get|getattr|getattribute|getitem|getslice|gt|\n\t\t\t\t\t\thash|hex|iadd|iand|idiv|ifloordiv|ilshift|imod|imul|init|\n\t\t\t\t\t\tint|invert|ior|ipow|irshift|isub|iter|itruediv|ixor|le|len|\n\t\t\t\t\t\tlong|lshift|lt|mod|mul|ne|neg|new|nonzero|oct|or|pos|pow|\n\t\t\t\t\t\tradd|rand|rdiv|rdivmod|repr|rfloordiv|rlshift|rmod|rmul|ror|\n\t\t\t\t\t\trpow|rrshift|rshift|rsub|rtruediv|rxor|set|setattr|setitem|\n\t\t\t\t\t\tsetslice|str|sub|truediv|unicode|xor\n\t\t\t\t\t)__)\\b"},"magic_variable_names":{"name":"support.variable.magic.spin","match":"\\b__(all|bases|class|debug|dict|doc|file|members|metaclass|methods|name|slots|weakref)__\\b"},"regular_expressions":{"patterns":[{"include":"source.regexp.spin"}]},"string_quoted_double":{"patterns":[{"name":"string.quoted.double.single-line.spin","begin":"(\")","end":"((?\u003c=\")(\")|\")|(\\n)","patterns":[{"include":"#escaped_char"}],"beginCaptures":{"1":{"name":"punctuation.definition.string.begin.spin"}},"endCaptures":{"1":{"name":"punctuation.definition.string.end.spin"},"2":{"name":"meta.empty-string.double.spin"},"3":{"name":"invalid.illegal.unclosed-string.spin"}}}]},"strings":{"patterns":[{"include":"#string_quoted_double"}]}}}