{"name":"harbour","scopeName":"source.harbour","patterns":[{"include":"#block_doc_comment"},{"include":"#block_comment"},{"include":"#line_doc_comment"},{"include":"#line_comment"},{"include":"#line_Ampersand_comment"},{"include":"#line_asterisk_comment"},{"include":"#line_note_comment"},{"include":"#sigils"},{"name":"meta.attribute.harbour","begin":"#\\!?\\[","end":"\\]","patterns":[{"include":"#string_literal"}]},{"name":"string.quoted.single.harbour","begin":"'","end":"'"},{"name":"string.quoted.square.harbour","begin":"(?\u003c=\\s|,|\\(|=)\\[","end":"\\]"},{"include":"#string_literal"},{"name":"constant.numeric.float.harbour","match":"\\b[0-9][0-9_]*\\.[0-9][0-9_]*([eE][+-][0-9_]+)?(f32|f64)?\\b"},{"name":"constant.numeric.float.harbour","match":"\\b[0-9][0-9_]*(\\.[0-9][0-9_]*)?[eE][+-][0-9_]+(f32|f64)?\\b"},{"name":"constant.numeric.float.harbour","match":"\\b[0-9][0-9_]*(\\.[0-9][0-9_]*)?([eE][+-][0-9_]+)?(f32|f64)\\b"},{"name":"constant.numeric.integer.decimal.harbour","match":"\\b[0-9][0-9_]*([ui](8|16|32|64)?)?\\b"},{"name":"constant.numeric.integer.hexadecimal.harbour","match":"\\b0x[a-fA-F0-9_]+([ui](8|16|32|64)?)?\\b"},{"name":"constant.numeric.integer.octal.harbour","match":"\\b0o[0-7_]+([ui](8|16|32|64)?)?\\b"},{"name":"constant.numeric.integer.binary.harbour","match":"\\b0b[01_]+([ui](8|16|32|64)?)?\\b"},{"name":"storage.modifier.static.harbour","match":"\\b(static|STATIC|THREAD STATIC)\\b"},{"name":"constant.language.boolean.harbour","match":"(TRUE|FALSE|\\.T\\.|\\.F\\.)"},{"name":"constant.language.keyboard.harbour","match":"(K_DOWN|K_PGDN|K_CTRL_PGDN|K_UP|K_PGUP|K_CTRL_PGUP|K_RIGHT|K_LEFT|K_HOME|K_END|K_CTRL_LEFT|K_CTRL_RIGHT|K_CTRL_HOME|K_CTRL_END)"},{"name":"variable.name.hungary.harbour","match":"\\b(s_)?(mtx)?[a,b,c,d,h,l,n,o,u,x][A-Z][A-Za-z0-9_]*\\b"},{"name":"variable.name.special.harbour","match":"\\b_[a-z][A-Za-z0-9_]*|\\s(i|j)\\s\\b"},{"name":"keyword.control.harbour","match":"\\b(?i)(EXIT|ELSEIF|ELSE|IF|ENDIF|FOR|EACH|IN|TO|STEP|DESCEND|NEXT|LOOP|DO CASE|ENDCASE|SWITCH|CASE|OTHERWISE|ENDSWITCH|RETURN|ENDCLASS|VAR|DATA|INIT|WHILE|DO WHILE|ENDDO|BEGIN SEQUENCE|END SEQUENCE|RECOVER USING|WITH|BREAK|PARAMETERS|END|REQUEST|ANNOUNCE)\\b"},{"name":"keyword.command.xbase.harbour","match":"\\b(?i)(GO TOP|SELECT|SAY|GET|PICTURE|SEEK|REPLACE|APPEND BLANK|USE|INDEX ON|TAG)\\b"},{"name":"keyword.command.xbase.harbour","match":"\\b(?i)(HSEEK|RREPLACE|START PRINT|ENDPRINT)\\b"},{"name":"keyword.other.harbour","match":"\\b(?i)(LOCAL|PRIVATE|PROTECTED|PUBLIC|FIELD|field|MEMVAR)\\b"},{"include":"#types"},{"include":"#std_types"},{"include":"#self"},{"include":"#nil"},{"include":"#lifetime"},{"include":"#ref_lifetime"},{"name":"meta.preprocessor.diagnostic.harbour","begin":"^\\s*#\\s*(error|warning|stdout)\\b","end":"(?\u003c!\\\\)(?=\\n)","patterns":[{"name":"punctuation.separator.continuation.harbour","match":"(?\u003e\\\\\\s*\\n)"}],"captures":{"1":{"name":"keyword.control.import.error.harbour"}}},{"name":"meta.preprocessor.harbour.include","begin":"^\\s*#\\s*(include|require)\\b\\s+","end":"(?=(?://|/\\*))|(?\u003c!\\\\)(?=\\n)","patterns":[{"name":"punctuation.separator.continuation.harbour","match":"(?\u003e\\\\\\s*\\n)"},{"name":"string.quoted.double.include.harbour","begin":"\"","end":"\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.harbour"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.harbour"}}}],"captures":{"1":{"name":"keyword.control.import.include.harbour"}}},{"name":"meta.preprocessor.harbour","begin":"(?i)^\\s*#\\s*(define|defined|elif|else|if|ifdef|ifndef|endif|line|pragma|undef|command|xcommand|translate|xtranslate)\\b","end":"(?=(?://|/\\*))|(?\u003c!\\\\)(?=\\n)","patterns":[{"name":"punctuation.separator.continuation.harbour","match":"(?\u003e\\\\\\s*\\n)"}],"captures":{"1":{"name":"keyword.control.import.harbour"}}},{"name":"keyword.operator.assignment.harbour","match":"(:=|-\\\u003e|\\+=|-=)"},{"name":"keyword.operator.comparison.harbour","match":"(\\\u003c|\\\u003c=|\\\u003e=|==|!=|!|\\\u003c\\\u003e|\\\u003e|\\$|\\s\\.OR\\.\\s|\\s\\.AND\\.\\s|\\s\\.NOT\\.\\s)"},{"name":"support.function.std.harbour","match":"\\b(?i)(log_write|pp|to_str|RTrim|TRIM|Trim|PadR|Padr|PADR|PadC|PadL|Space)!"},{"match":"\\b([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\(","captures":{"1":{"name":"entity.name.function.harbour"}}},{"match":"\\b([a-zA-Z_][a-zA-Z0-9_]*):([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\(","captures":{"1":{"name":"entity.name.method.harbour"}}},{"match":"\\b([a-zA-Z_][a-zA-Z0-9_]*):([a-zA-Z_][a-zA-Z0-9_]*)","captures":{"1":{"name":"variable.name.object.harbour"},"2":{"name":"variable.name.member.harbour"}}},{"begin":"\\b(?i)((?:(?:static|init|exit)\\s+)?(?:func(?:t(?:i(?:o(?:n)?)?)?)?|PROC(?:E(?:D(?:U(?:R(?:E)?)?)?)?)?))\\s+([a-zA-Z_][a-zA-Z0-9_]*)","end":"[\\n]","patterns":[{"include":"#type_params"},{"include":"$self"}],"beginCaptures":{"1":{"name":"keyword.other.fn.harbour"},"2":{"name":"entity.name.function.harbour"}}},{"begin":"\\b(?i)((?:CREATE\\s+)?(?:CLASS))\\s+([a-zA-Z_][a-zA-Z0-9_]*)(?:\\s+(INHERIT)\\s+([a-zA-Z_][a-zA-Z0-9_]*))?","end":"[\\n]","patterns":[{"include":"#type_params"},{"include":"$self"}],"beginCaptures":{"1":{"name":"keyword.class.harbour"},"2":{"name":"entity.name.class.harbour"},"3":{"name":"keyword.class.inherit.harbour"},"4":{"name":"entity.name.parent.class.harbour"}}},{"begin":"\\b(?i)(METHOD|STATIC METHOD|METHOD PROCEDURE)\\s+((?:(?:[a-zA-Z_][a-zA-Z0-9_]*):)?(?:[a-zA-Z_][a-zA-Z0-9_]*))","end":"[\\n]","patterns":[{"include":"#type_params"},{"include":"$self"}],"beginCaptures":{"1":{"name":"keyword.method.fn.harbour"},"2":{"name":"entity.name.method.harbour"}}},{"begin":":","end":"[=;,\\)\\|]","patterns":[{"include":"#type_params"},{"include":"$self"}]}],"repository":{"block_comment":{"name":"comment.block.harbour","begin":"/\\*","end":"\\*/","patterns":[{"include":"#block_doc_comment"},{"include":"#block_comment"}]},"block_doc_comment":{"name":"comment.block.documentation.harbour","begin":"/\\*[!\\*][^\\*]","end":"\\*/","patterns":[{"include":"#block_doc_comment"},{"include":"#block_comment"}]},"escaped_character":{"name":"constant.character.escape.harbour","match":"\\\\(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)"},"line_Ampersand_comment":{"name":"comment.line.double-slash.harbour","match":"\u0026\u0026.*$"},"line_asterisk_comment":{"name":"comment.line.star.harbour","match":"^\\s*\\*.*$"},"line_comment":{"name":"comment.line.double-slash.harbour","match":"//.*$"},"line_doc_comment":{"name":"comment.line.documentation.harbour","match":"//[!/][^/].*$"},"line_note_comment":{"name":"comment.line.note.harbour","match":"^\\s*NOTE\\s.*$"},"nil":{"name":"variable.nil.language.harbour","match":"\\b(NIL|nil)\\b"},"self":{"name":"variable.self.language.harbour","match":"\\b(Self|SELF|self)\\b"},"sigils":{"name":"keyword.operator.sigil.harbou","match":"[@]|[:]{2}|[+]{2}(?=[a-zA-Z0-9_\\(\\[\\|\\\"]+)"},"std_types":{"name":"support.class.std.harbour","match":"\\b(Vec|StrBuf|Path|Option|Result|Reader|Writer|Stream|Seek|Buffer|IoError|IoResult|Sender|SyncSender|Receiver|Cell|RefCell|Any)\\b"},"string_literal":{"name":"string.quoted.double.harbour","begin":"\"","end":"\""}}}