1*c81e5e79SBram Moolenaar" Vim syntax file 2*c81e5e79SBram Moolenaar" Language: FreeBasic 3*c81e5e79SBram Moolenaar" Maintainer: Mark Manning <[email protected]> 4*c81e5e79SBram Moolenaar" Updated: 10/22/2006 5*c81e5e79SBram Moolenaar" 6*c81e5e79SBram Moolenaar" Description: 7*c81e5e79SBram Moolenaar" 8*c81e5e79SBram Moolenaar" Based originally on the work done by Allan Kelly <[email protected]> 9*c81e5e79SBram Moolenaar" Updated by Mark Manning <[email protected]> 10*c81e5e79SBram Moolenaar" Applied FreeBasic support to the already excellent support 11*c81e5e79SBram Moolenaar" for standard basic syntax (like QB). 12*c81e5e79SBram Moolenaar" 13*c81e5e79SBram Moolenaar" First version based on Micro$soft QBASIC circa 14*c81e5e79SBram Moolenaar" 1989, as documented in 'Learn BASIC Now' by 15*c81e5e79SBram Moolenaar" Halvorson&Rygmyr. Microsoft Press 1989. This syntax file 16*c81e5e79SBram Moolenaar" not a complete implementation yet. Send suggestions to 17*c81e5e79SBram Moolenaar" the maintainer. 18*c81e5e79SBram Moolenaar" 19*c81e5e79SBram Moolenaar" Quit when a (custom) syntax file was already loaded (Taken from c.vim) 20*c81e5e79SBram Moolenaar" 21*c81e5e79SBram Moolenaarif exists("b:current_syntax") 22*c81e5e79SBram Moolenaar finish 23*c81e5e79SBram Moolenaarendif 24*c81e5e79SBram Moolenaar" 25*c81e5e79SBram Moolenaar" Be sure to turn on the "case ignore" since current versions 26*c81e5e79SBram Moolenaar" of freebasic support both upper as well as lowercase 27*c81e5e79SBram Moolenaar" letters. - MEM 10/1/2006 28*c81e5e79SBram Moolenaar" 29*c81e5e79SBram Moolenaarsyn case ignore 30*c81e5e79SBram Moolenaar" 31*c81e5e79SBram Moolenaar" This list of keywords is taken directly from the FreeBasic 32*c81e5e79SBram Moolenaar" user's guide as presented by the FreeBasic online site. 33*c81e5e79SBram Moolenaar" 34*c81e5e79SBram Moolenaarsyn keyword freebasicArrays ERASE LBOUND REDIM PRESERVE UBOUND 35*c81e5e79SBram Moolenaar 36*c81e5e79SBram Moolenaarsyn keyword freebasicBitManipulation BIT BITRESET BITSET HIBYTE HIWORD LOBYTE LOWORD SHL SHR 37*c81e5e79SBram Moolenaar 38*c81e5e79SBram Moolenaarsyn keyword freebasicCompilerSwitches DEFBYTE DEFDBL DEFINT DEFLNG DEFLNGINT DEFSHORT DEFSNG DEFSTR 39*c81e5e79SBram Moolenaarsyn keyword freebasicCompilerSwitches DEFUBYTE DEFUINT DEFULNGINT DEFUSHORT 40*c81e5e79SBram Moolenaarsyn match freebasicCompilerSwitches "\<option\s+\(BASE\|BYVAL\|DYNAMIC\|ESCAPE\|EXPLICIT\|NOKEYWORD\)\>" 41*c81e5e79SBram Moolenaarsyn match freebasicCompilerSwitches "\<option\s+\(PRIVATE\|STATIC\)\>" 42*c81e5e79SBram Moolenaar 43*c81e5e79SBram Moolenaarsyn region freebasicConditional start="\son\s+" skip=".*" end="gosub" 44*c81e5e79SBram Moolenaarsyn region freebasicConditional start="\son\s+" skip=".*" end="goto" 45*c81e5e79SBram Moolenaarsyn match freebasicConditional "\<select\s+case\>" 46*c81e5e79SBram Moolenaarsyn keyword freebasicConditional if iif then case else elseif with 47*c81e5e79SBram Moolenaar 48*c81e5e79SBram Moolenaarsyn match freebasicConsole "\<open\s+\(CONS\|ERR\|PIPE\|SCRN\)\>" 49*c81e5e79SBram Moolenaarsyn keyword freebasicConsole BEEP CLS CSRLIN LOCATE PRINT POS SPC TAB VIEW WIDTH 50*c81e5e79SBram Moolenaar 51*c81e5e79SBram Moolenaarsyn keyword freebasicDataTypes BYTE AS DIM CONST DOUBLE ENUM INTEGER LONG LONGINT SHARED SHORT STRING 52*c81e5e79SBram Moolenaarsyn keyword freebasicDataTypes SINGLE TYPE UBYTE UINTEGER ULONGINT UNION UNSIGNED USHORT WSTRING ZSTRING 53*c81e5e79SBram Moolenaar 54*c81e5e79SBram Moolenaarsyn keyword freebasicDateTime DATE DATEADD DATEDIFF DATEPART DATESERIAL DATEVALUE DAY HOUR MINUTE 55*c81e5e79SBram Moolenaarsyn keyword freebasicDateTime MONTH MONTHNAME NOW SECOND SETDATE SETTIME TIME TIMESERIAL TIMEVALUE 56*c81e5e79SBram Moolenaarsyn keyword freebasicDateTime TIMER YEAR WEEKDAY WEEKDAYNAME 57*c81e5e79SBram Moolenaar 58*c81e5e79SBram Moolenaarsyn keyword freebasicDebug ASSERT STOP 59*c81e5e79SBram Moolenaar 60*c81e5e79SBram Moolenaarsyn keyword freebasicErrorHandling ERR ERL ERROR LOCAL RESUME 61*c81e5e79SBram Moolenaarsyn match freebasicErrorHandling "\<resume\s+next\>" 62*c81e5e79SBram Moolenaarsyn match freebasicErrorHandling "\<on\s+error\>" 63*c81e5e79SBram Moolenaar 64*c81e5e79SBram Moolenaarsyn match freebasicFiles "\<get\s+#\>" 65*c81e5e79SBram Moolenaarsyn match freebasicFiles "\<input\s+#\>" 66*c81e5e79SBram Moolenaarsyn match freebasicFiles "\<line\s+input\s+#\>" 67*c81e5e79SBram Moolenaarsyn match freebasicFiles "\<put\s+#\>" 68*c81e5e79SBram Moolenaarsyn keyword freebasicFiles ACCESS APPEND BINARY BLOAD BSAVE CLOSE EOF FREEFILE INPUT LOC 69*c81e5e79SBram Moolenaarsyn keyword freebasicFiles LOCK LOF OPEN OUTPUT RANDOM RESET SEEK UNLOCK WRITE 70*c81e5e79SBram Moolenaar 71*c81e5e79SBram Moolenaarsyn keyword freebasicFunctions ALIAS ANY BYREF BYVAL CALL CDECL CONSTRUCTOR DESTRUCTOR 72*c81e5e79SBram Moolenaarsyn keyword freebasicFunctions DECLARE FUNCTION LIB OVERLOAD PASCAL STATIC SUB STDCALL 73*c81e5e79SBram Moolenaarsyn keyword freebasicFunctions VA_ARG VA_FIRST VA_NEXT 74*c81e5e79SBram Moolenaar 75*c81e5e79SBram Moolenaarsyn match freebasicGraphics "\<palette\s+get\>" 76*c81e5e79SBram Moolenaarsyn keyword freebasicGraphics ALPHA CIRCLE CLS COLOR CUSTOM DRAW FLIP GET 77*c81e5e79SBram Moolenaarsyn keyword freebasicGraphics IMAGECREATE IMAGEDESTROY LINE PAINT PALETTE PCOPY PMAP POINT 78*c81e5e79SBram Moolenaarsyn keyword freebasicGraphics PRESET PSET PUT RGB RGBA SCREEN SCREENCOPY SCREENINFO SCREENLIST 79*c81e5e79SBram Moolenaarsyn keyword freebasicGraphics SCREENLOCK SCREENPTR SCREENRES SCREENSET SCREENSYNC SCREENUNLOCK 80*c81e5e79SBram Moolenaarsyn keyword freebasicGraphics TRANS USING VIEW WINDOW 81*c81e5e79SBram Moolenaar 82*c81e5e79SBram Moolenaarsyn match freebasicHardware "\<open\s+com\>" 83*c81e5e79SBram Moolenaarsyn keyword freebasicHardware INP OUT WAIT LPT LPOS LPRINT 84*c81e5e79SBram Moolenaar 85*c81e5e79SBram Moolenaarsyn keyword freebasicLogical AND EQV IMP OR NOT XOR 86*c81e5e79SBram Moolenaar 87*c81e5e79SBram Moolenaarsyn keyword freebasicMath ABS ACOS ASIN ATAN2 ATN COS EXP FIX INT LOG MOD RANDOMIZE 88*c81e5e79SBram Moolenaarsyn keyword freebasicMath RND SGN SIN SQR TAN 89*c81e5e79SBram Moolenaar 90*c81e5e79SBram Moolenaarsyn keyword freebasicMemory ALLOCATE CALLOCATE CLEAR DEALLOCATE FIELD FRE PEEK POKE REALLOCATE 91*c81e5e79SBram Moolenaar 92*c81e5e79SBram Moolenaarsyn keyword freebasicMisc ASM DATA LET TO READ RESTORE SIZEOF SWAP OFFSETOF 93*c81e5e79SBram Moolenaar 94*c81e5e79SBram Moolenaarsyn keyword freebasicModularizing CHAIN COMMON EXPORT EXTERN DYLIBFREE DYLIBLOAD DYLIBSYMBOL 95*c81e5e79SBram Moolenaarsyn keyword freebasicModularizing PRIVATE PUBLIC 96*c81e5e79SBram Moolenaar 97*c81e5e79SBram Moolenaarsyn keyword freebasicMultithreading MUTEXCREATE MUTEXDESTROY MUTEXLOCK MUTEXUNLOCK THREADCREATE THREADWAIT 98*c81e5e79SBram Moolenaar 99*c81e5e79SBram Moolenaarsyn keyword freebasicShell CHDIR DIR COMMAND ENVIRON EXEC EXEPATH KILL NAME MKDIR RMDIR RUN 100*c81e5e79SBram Moolenaar 101*c81e5e79SBram Moolenaarsyn keyword freebasicEnviron SHELL SYSTEM WINDOWTITLE POINTERS 102*c81e5e79SBram Moolenaar 103*c81e5e79SBram Moolenaarsyn keyword freebasicLoops FOR LOOP WHILE WEND DO CONTINUE STEP UNTIL next 104*c81e5e79SBram Moolenaar 105*c81e5e79SBram Moolenaarsyn match freebasicInclude "\<#\s*\(inclib\|include\)\>" 106*c81e5e79SBram Moolenaarsyn match freebasicInclude "\<\$\s*include\>" 107*c81e5e79SBram Moolenaar 108*c81e5e79SBram Moolenaarsyn keyword freebasicPointer PROCPTR PTR SADD STRPTR VARPTR 109*c81e5e79SBram Moolenaar 110*c81e5e79SBram Moolenaarsyn keyword freebasicPredefined __DATE__ __FB_DOS__ __FB_LINUX__ __FB_MAIN__ __FB_MIN_VERSION__ 111*c81e5e79SBram Moolenaarsyn keyword freebasicPredefined __FB_SIGNATURE__ __FB_VERSION__ __FB_WIN32__ __FB_VER_MAJOR__ 112*c81e5e79SBram Moolenaarsyn keyword freebasicPredefined __FB_VER_MINOR__ __FB_VER_PATCH__ __FILE__ __FUNCTION__ 113*c81e5e79SBram Moolenaarsyn keyword freebasicPredefined __LINE__ __TIME__ 114*c81e5e79SBram Moolenaar 115*c81e5e79SBram Moolenaarsyn match freebasicPreProcessor "\<^#\s*\(define\|undef\)\>" 116*c81e5e79SBram Moolenaarsyn match freebasicPreProcessor "\<^#\s*\(ifdef\|ifndef\|else\|elseif\|endif\|if\)\>" 117*c81e5e79SBram Moolenaarsyn match freebasicPreProcessor "\<#\s*error\>" 118*c81e5e79SBram Moolenaarsyn match freebasicPreProcessor "\<#\s*\(print\|dynamic\|static\)\>" 119*c81e5e79SBram Moolenaarsyn keyword freebasicPreProcessor DEFINED ONCE 120*c81e5e79SBram Moolenaar 121*c81e5e79SBram Moolenaarsyn keyword freebasicProgramFlow END EXIT GOSUB GOTO 122*c81e5e79SBram Moolenaarsyn keyword freebasicProgramFlow IS RETURN SCOPE SLEEP 123*c81e5e79SBram Moolenaar 124*c81e5e79SBram Moolenaarsyn keyword freebasicString INSTR LCASE LEFT LEN LSET LTRIM MID RIGHT RSET RTRIM 125*c81e5e79SBram Moolenaarsyn keyword freebasicString SPACE STRING TRIM UCASE ASC BIN CHR CVD CVI CVL CVLONGINT 126*c81e5e79SBram Moolenaarsyn keyword freebasicString CVS CVSHORT FORMAT HEX MKD MKI MKL MKLONGINT MKS MKSHORT 127*c81e5e79SBram Moolenaarsyn keyword freebasicString OCT STR VAL VALLNG VALINT VALUINT VALULNG 128*c81e5e79SBram Moolenaar 129*c81e5e79SBram Moolenaarsyn keyword freebasicTypeCasting CAST CBYTE CDBL CINT CLNG CLNGINT CPTR CSHORT CSIGN CSNG 130*c81e5e79SBram Moolenaarsyn keyword freebasicTypeCasting CUBYTE CUINT CULNGINT CUNSG CURDIR CUSHORT 131*c81e5e79SBram Moolenaar 132*c81e5e79SBram Moolenaarsyn match freebasicUserInput "\<line\s+input\>" 133*c81e5e79SBram Moolenaarsyn keyword freebasicUserInput GETJOYSTICK GETKEY GETMOUSE INKEY INPUT MULTIKEY SETMOUSE 134*c81e5e79SBram Moolenaar" 135*c81e5e79SBram Moolenaar" Do the Basic variables names first. This is because it 136*c81e5e79SBram Moolenaar" is the most inclusive of the tests. Later on we change 137*c81e5e79SBram Moolenaar" this so the identifiers are split up into the various 138*c81e5e79SBram Moolenaar" types of identifiers like functions, basic commands and 139*c81e5e79SBram Moolenaar" such. MEM 9/9/2006 140*c81e5e79SBram Moolenaar" 141*c81e5e79SBram Moolenaarsyn match freebasicIdentifier "\<[a-zA-Z_][a-zA-Z0-9_]*\>" 142*c81e5e79SBram Moolenaarsyn match freebasicGenericFunction "\<[a-zA-Z_][a-zA-Z0-9_]*\>\s*("me=e-1,he=e-1 143*c81e5e79SBram Moolenaar" 144*c81e5e79SBram Moolenaar" Function list 145*c81e5e79SBram Moolenaar" 146*c81e5e79SBram Moolenaarsyn keyword freebasicTodo contained TODO 147*c81e5e79SBram Moolenaar" 148*c81e5e79SBram Moolenaar" Catch errors caused by wrong parenthesis 149*c81e5e79SBram Moolenaar" 150*c81e5e79SBram Moolenaarsyn region freebasicParen transparent start='(' end=')' contains=ALLBUT,@freebasicParenGroup 151*c81e5e79SBram Moolenaarsyn match freebasicParenError ")" 152*c81e5e79SBram Moolenaarsyn match freebasicInParen contained "[{}]" 153*c81e5e79SBram Moolenaarsyn cluster freebasicParenGroup contains=freebasicParenError,freebasicSpecial,freebasicTodo,freebasicUserCont,freebasicUserLabel,freebasicBitField 154*c81e5e79SBram Moolenaar" 155*c81e5e79SBram Moolenaar" Integer number, or floating point number without a dot and with "f". 156*c81e5e79SBram Moolenaar" 157*c81e5e79SBram Moolenaarsyn region freebasicHex start="&h" end="\W" 158*c81e5e79SBram Moolenaarsyn region freebasicHexError start="&h\x*[g-zG-Z]" end="\W" 159*c81e5e79SBram Moolenaarsyn match freebasicInteger "\<\d\+\(u\=l\=\|lu\|f\)\>" 160*c81e5e79SBram Moolenaar" 161*c81e5e79SBram Moolenaar" Floating point number, with dot, optional exponent 162*c81e5e79SBram Moolenaar" 163*c81e5e79SBram Moolenaarsyn match freebasicFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>" 164*c81e5e79SBram Moolenaar" 165*c81e5e79SBram Moolenaar" Floating point number, starting with a dot, optional exponent 166*c81e5e79SBram Moolenaar" 167*c81e5e79SBram Moolenaarsyn match freebasicFloat "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" 168*c81e5e79SBram Moolenaar" 169*c81e5e79SBram Moolenaar" Floating point number, without dot, with exponent 170*c81e5e79SBram Moolenaar" 171*c81e5e79SBram Moolenaarsyn match freebasicFloat "\<\d\+e[-+]\=\d\+[fl]\=\>" 172*c81e5e79SBram Moolenaar" 173*c81e5e79SBram Moolenaar" Hex number 174*c81e5e79SBram Moolenaar" 175*c81e5e79SBram Moolenaarsyn case match 176*c81e5e79SBram Moolenaarsyn match freebasicOctal "\<0\o*\>" 177*c81e5e79SBram Moolenaarsyn match freebasicOctalError "\<0\o*[89]" 178*c81e5e79SBram Moolenaar" 179*c81e5e79SBram Moolenaar" String and Character contstants 180*c81e5e79SBram Moolenaar" 181*c81e5e79SBram Moolenaarsyn region freebasicString start='"' end='"' contains=freebasicSpecial,freebasicTodo 182*c81e5e79SBram Moolenaarsyn region freebasicString start="'" end="'" contains=freebasicSpecial,freebasicTodo 183*c81e5e79SBram Moolenaar" 184*c81e5e79SBram Moolenaar" Comments 185*c81e5e79SBram Moolenaar" 186*c81e5e79SBram Moolenaarsyn match freebasicSpecial contained "\\." 187*c81e5e79SBram Moolenaarsyn region freebasicComment start="^rem" end="$" contains=freebasicSpecial,freebasicTodo 188*c81e5e79SBram Moolenaarsyn region freebasicComment start=":\s*rem" end="$" contains=freebasicSpecial,freebasicTodo 189*c81e5e79SBram Moolenaarsyn region freebasicComment start="\s*'" end="$" contains=freebasicSpecial,freebasicTodo 190*c81e5e79SBram Moolenaarsyn region freebasicComment start="^'" end="$" contains=freebasicSpecial,freebasicTodo 191*c81e5e79SBram Moolenaar" 192*c81e5e79SBram Moolenaar" Now do the comments and labels 193*c81e5e79SBram Moolenaar" 194*c81e5e79SBram Moolenaarsyn match freebasicLabel "^\d" 195*c81e5e79SBram Moolenaarsyn match freebasicLabel "\<^\w+:\>" 196*c81e5e79SBram Moolenaarsyn region freebasicLineNumber start="^\d" end="\s" 197*c81e5e79SBram Moolenaar" 198*c81e5e79SBram Moolenaar" Create the clusters 199*c81e5e79SBram Moolenaar" 200*c81e5e79SBram Moolenaarsyn cluster freebasicNumber contains=freebasicHex,freebasicOctal,freebasicInteger,freebasicFloat 201*c81e5e79SBram Moolenaarsyn cluster freebasicError contains=freebasicHexError,freebasicOctalError 202*c81e5e79SBram Moolenaar" 203*c81e5e79SBram Moolenaar" Used with OPEN statement 204*c81e5e79SBram Moolenaar" 205*c81e5e79SBram Moolenaarsyn match freebasicFilenumber "#\d\+" 206*c81e5e79SBram Moolenaarsyn match freebasicMathOperator "[\+\-\=\|\*\/\>\<\%\()[\]]" contains=freebasicParen 207*c81e5e79SBram Moolenaar" 208*c81e5e79SBram Moolenaar" The default methods for highlighting. Can be overridden later 209*c81e5e79SBram Moolenaar" 210*c81e5e79SBram Moolenaarhi def link freebasicArrays StorageClass 211*c81e5e79SBram Moolenaarhi def link freebasicBitManipulation Operator 212*c81e5e79SBram Moolenaarhi def link freebasicCompilerSwitches PreCondit 213*c81e5e79SBram Moolenaarhi def link freebasicConsole Special 214*c81e5e79SBram Moolenaarhi def link freebasicDataTypes Type 215*c81e5e79SBram Moolenaarhi def link freebasicDateTime Type 216*c81e5e79SBram Moolenaarhi def link freebasicDebug Special 217*c81e5e79SBram Moolenaarhi def link freebasicErrorHandling Special 218*c81e5e79SBram Moolenaarhi def link freebasicFiles Special 219*c81e5e79SBram Moolenaarhi def link freebasicFunctions Function 220*c81e5e79SBram Moolenaarhi def link freebasicGraphics Function 221*c81e5e79SBram Moolenaarhi def link freebasicHardware Special 222*c81e5e79SBram Moolenaarhi def link freebasicLogical Conditional 223*c81e5e79SBram Moolenaarhi def link freebasicMath Function 224*c81e5e79SBram Moolenaarhi def link freebasicMemory Function 225*c81e5e79SBram Moolenaarhi def link freebasicMisc Special 226*c81e5e79SBram Moolenaarhi def link freebasicModularizing Special 227*c81e5e79SBram Moolenaarhi def link freebasicMultithreading Special 228*c81e5e79SBram Moolenaarhi def link freebasicShell Special 229*c81e5e79SBram Moolenaarhi def link freebasicEnviron Special 230*c81e5e79SBram Moolenaarhi def link freebasicPointer Special 231*c81e5e79SBram Moolenaarhi def link freebasicPredefined PreProc 232*c81e5e79SBram Moolenaarhi def link freebasicPreProcessor PreProc 233*c81e5e79SBram Moolenaarhi def link freebasicProgramFlow Statement 234*c81e5e79SBram Moolenaarhi def link freebasicString String 235*c81e5e79SBram Moolenaarhi def link freebasicTypeCasting Type 236*c81e5e79SBram Moolenaarhi def link freebasicUserInput Statement 237*c81e5e79SBram Moolenaarhi def link freebasicComment Comment 238*c81e5e79SBram Moolenaarhi def link freebasicConditional Conditional 239*c81e5e79SBram Moolenaarhi def link freebasicError Error 240*c81e5e79SBram Moolenaarhi def link freebasicIdentifier Identifier 241*c81e5e79SBram Moolenaarhi def link freebasicInclude Include 242*c81e5e79SBram Moolenaarhi def link freebasicGenericFunction Function 243*c81e5e79SBram Moolenaarhi def link freebasicLabel Label 244*c81e5e79SBram Moolenaarhi def link freebasicLineNumber Label 245*c81e5e79SBram Moolenaarhi def link freebasicMathOperator Operator 246*c81e5e79SBram Moolenaarhi def link freebasicNumber Number 247*c81e5e79SBram Moolenaarhi def link freebasicSpecial Special 248*c81e5e79SBram Moolenaarhi def link freebasicTodo Todo 249*c81e5e79SBram Moolenaar 250*c81e5e79SBram Moolenaarlet b:current_syntax = "freebasic" 251*c81e5e79SBram Moolenaar 252*c81e5e79SBram Moolenaar" vim: ts=8 253