--- filetype: freebasic detect: filename: "(\\.bas$|\\.bi$)" rules: # Statements / keywords - statement: "\\b(IF|THEN|ELSE|ELSEIF|END[ ]IF|FOR|TO|STEP|NEXT|WHILE\ |LOOP|SELECT|CASE|DEFAULT|ENDSELECT|EXIT|CONTINUE|RETURN|GOTO|WEND|DO\ |CONST|DIM|REDIM|STATIC|TYPE|ENDTYPE|ENUM|ENDENUM|SUB|END\\s+SUB|FUNCTION\ |END\\s+FUNCTION|DECLARE|OPTION[ ]EXPLICIT|NAMESPACE|END\\s+NAMESPACE|END\ |UCASE|LCASE|AND|OR|NOT|POINTER|EXTERN|END\\s+EXTERN|BYREF|BYVAL\ |CONSTRUCTOR|END\\s+CONSTRUCTOR|PRIVATE|PUBLIC|PROTECTED)\\b" - statement: "\\b(if|then|else|elseif|end[ ]if|for|to|step|next|while\ |loop|select|case|default|endselect|exit|continue|return|goto|wend|do\ |const|dim|redim|static|type|endtype|enum|endenum|sub|end\\s+sub|function\ |end\\s+function|declare|option[ ]explicit|namespace|end\\s+namespace|end\ |ucase|lcase|and|or|not|pointer|extern|end\\s+extern|byref|byval\ |constructor|end\\s+constructor|private|public|protected)\\b" # Types - type: "\\b(INTEGER|LONG|ULONG|BYTE|UBYTE|SHORT|USHORT|SINGLE|DOUBLE\ |BOOLEAN|ZSTRING|WSTRING|VARIANT|ANY|OBJECT|PRINT|PTR)\\b" - type: "\\b(integer|long|ulong|byte|ubyte|short|ushort|single|double\ |boolean|zstring|wstring|variant|any|object|print|ptr)\\b" # Functions - identifier: "\\b(AS|IS|UNTIL|ABS|LEN|MID|LEFT|RIGHT|INSTR|TRIM|LTRIM|RTRIM\ |CHR|ASC|SPACE|STRING|VAL|SIN|COS|TAN|ATN|SQR|EXP|LOG|RND|TIMER|SGN|INT|STR\ |FIX|CLS|REPLACE|SPLIT|JOIN|STRPTR|VARPTR|CURDIR|DIR|ENVIRON\ |FREEFILE|LOF|LOC|SEEK|PUT|GET|INPUT|LINE|WRITE|OPEN|CLOSE|MKDIR\ |RMDIR|KILL|NAME|CHDIR|FILES|BEEP|SLEEP|DATE|TIME|NOW|PSET|LINE\ |CIRCLE|PAINT|VIEW|WINDOW|SCREEN|WIDTH|COLOR|LOCATE|PCOPY|PMAP|POINT\ |PALETTE|RGB|RGBA|USINGABS|FORMAT|INSTRREV|OPTION)\\b" - identifier: "\\b(as|is|until|abs|len|mid|left|right|instr|trim|ltrim|rtrim\ |chr|asc|space|string|val|sin|cos|tan|atn|sqr|exp|log|rnd|timer|sgn|int|str\ |fix|cls|replace|split|join|strptr|varptr|curdir|dir|environ\ |freefile|lof|loc|seek|put|get|input|line|write|open|close|mkdir\ |rmdir|kill|name|chdir|files|beep|sleep|date|time|now|pset|line\ |circle|paint|view|window|screen|width|color|locate|pcopy|pmap|point\ |palette|rgb|rgba|usingabs|format|instrrev|option)\\b" # Numbers - constant.number: "\\b\\d+(\\.\\d+)?([eE][+-]?\\d+)?\\b" - constant.number: "&H[0-9A-Fa-f]+" - constant.number: "&O[0-7]+" - constant.number: "&B[01]+" # Strings (double-quoted and single-quoted) - constant.string: "\"([^\"\\\\]|\\\\.)*\"" - constant.string: "'([^'\\\\]|\\\\.)*'" # Boolean / Null constants - constant.language: "\\b(TRUE|FALSE|NULL|NOTHING)\\b" - constant.language: "\\b(true|false|null|nothing)\\b" # Symbols - symbol: "\\+|\\-|\\*|\\/|\\=|\\<>|\\<|\\>|\\<=|\\>=|\\(|\\)|\\[|\\]|,|:" # Comments (single line and REM) - comment.line: "'[^\n]*" - comment.line: "\\bREM\\b[^\n]*" - comment.line: "\\brem\\b[^\n]*" # Block comments style (like C-style in FreeBASIC) - comment: start: "/\\'" end: "\\'/" rules: - todo: "(TODO|XXX|FIXME):?" # Preprocessor directives - preproc.bright: "^\\s*#(INCLUDE|DEFINE|IFDEF|ELSE|ENDIF|ENDMACRO|MACRO\ |ERROR|ELSEIF|PRINT|UNDEF|IFNDEF|IF|INCLIB)\\b" - preproc.bright: "^\\s*#(include|define|ifdef|else|endif|endmacro|macro\ |error|elseif|print|undef|ifndef|if|inclib)\\b"