{ "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": "\"" } } }