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