diff options
Diffstat (limited to 'runtime/syntax/freebasic.vim')
-rw-r--r-- | runtime/syntax/freebasic.vim | 252 |
1 files changed, 252 insertions, 0 deletions
diff --git a/runtime/syntax/freebasic.vim b/runtime/syntax/freebasic.vim new file mode 100644 index 0000000..bce7f9e --- /dev/null +++ b/runtime/syntax/freebasic.vim @@ -0,0 +1,252 @@ +" Vim syntax file +" Language: FreeBasic +" Maintainer: Mark Manning <markem@airmail.net> +" Updated: 10/22/2006 +" +" Description: +" +" Based originally on the work done by Allan Kelly <Allan.Kelly@ed.ac.uk> +" Updated by Mark Manning <markem@airmail.net> +" Applied FreeBasic support to the already excellent support +" for standard basic syntax (like QB). +" +" First version based on Micro$soft QBASIC circa +" 1989, as documented in 'Learn BASIC Now' by +" Halvorson&Rygmyr. Microsoft Press 1989. This syntax file +" not a complete implementation yet. Send suggestions to +" the maintainer. +" +" Quit when a (custom) syntax file was already loaded (Taken from c.vim) +" +if exists("b:current_syntax") + finish +endif +" +" Be sure to turn on the "case ignore" since current versions +" of freebasic support both upper as well as lowercase +" letters. - MEM 10/1/2006 +" +syn case ignore +" +" This list of keywords is taken directly from the FreeBasic +" user's guide as presented by the FreeBasic online site. +" +syn keyword freebasicArrays ERASE LBOUND REDIM PRESERVE UBOUND + +syn keyword freebasicBitManipulation BIT BITRESET BITSET HIBYTE HIWORD LOBYTE LOWORD SHL SHR + +syn keyword freebasicCompilerSwitches DEFBYTE DEFDBL DEFINT DEFLNG DEFLNGINT DEFSHORT DEFSNG DEFSTR +syn keyword freebasicCompilerSwitches DEFUBYTE DEFUINT DEFULNGINT DEFUSHORT +syn match freebasicCompilerSwitches "\<option\s+\(BASE\|BYVAL\|DYNAMIC\|ESCAPE\|EXPLICIT\|NOKEYWORD\)\>" +syn match freebasicCompilerSwitches "\<option\s+\(PRIVATE\|STATIC\)\>" + +syn region freebasicConditional start="\son\s+" skip=".*" end="gosub" +syn region freebasicConditional start="\son\s+" skip=".*" end="goto" +syn match freebasicConditional "\<select\s+case\>" +syn keyword freebasicConditional if iif then case else elseif with + +syn match freebasicConsole "\<open\s+\(CONS\|ERR\|PIPE\|SCRN\)\>" +syn keyword freebasicConsole BEEP CLS CSRLIN LOCATE PRINT POS SPC TAB VIEW WIDTH + +syn keyword freebasicDataTypes BYTE AS DIM CONST DOUBLE ENUM INTEGER LONG LONGINT SHARED SHORT STRING +syn keyword freebasicDataTypes SINGLE TYPE UBYTE UINTEGER ULONGINT UNION UNSIGNED USHORT WSTRING ZSTRING + +syn keyword freebasicDateTime DATE DATEADD DATEDIFF DATEPART DATESERIAL DATEVALUE DAY HOUR MINUTE +syn keyword freebasicDateTime MONTH MONTHNAME NOW SECOND SETDATE SETTIME TIME TIMESERIAL TIMEVALUE +syn keyword freebasicDateTime TIMER YEAR WEEKDAY WEEKDAYNAME + +syn keyword freebasicDebug ASSERT STOP + +syn keyword freebasicErrorHandling ERR ERL ERROR LOCAL RESUME +syn match freebasicErrorHandling "\<resume\s+next\>" +syn match freebasicErrorHandling "\<on\s+error\>" + +syn match freebasicFiles "\<get\s+#\>" +syn match freebasicFiles "\<input\s+#\>" +syn match freebasicFiles "\<line\s+input\s+#\>" +syn match freebasicFiles "\<put\s+#\>" +syn keyword freebasicFiles ACCESS APPEND BINARY BLOAD BSAVE CLOSE EOF FREEFILE INPUT LOC +syn keyword freebasicFiles LOCK LOF OPEN OUTPUT RANDOM RESET SEEK UNLOCK WRITE + +syn keyword freebasicFunctions ALIAS ANY BYREF BYVAL CALL CDECL CONSTRUCTOR DESTRUCTOR +syn keyword freebasicFunctions DECLARE FUNCTION LIB OVERLOAD PASCAL STATIC SUB STDCALL +syn keyword freebasicFunctions VA_ARG VA_FIRST VA_NEXT + +syn match freebasicGraphics "\<palette\s+get\>" +syn keyword freebasicGraphics ALPHA CIRCLE CLS COLOR CUSTOM DRAW FLIP GET +syn keyword freebasicGraphics IMAGECREATE IMAGEDESTROY LINE PAINT PALETTE PCOPY PMAP POINT +syn keyword freebasicGraphics PRESET PSET PUT RGB RGBA SCREEN SCREENCOPY SCREENINFO SCREENLIST +syn keyword freebasicGraphics SCREENLOCK SCREENPTR SCREENRES SCREENSET SCREENSYNC SCREENUNLOCK +syn keyword freebasicGraphics TRANS USING VIEW WINDOW + +syn match freebasicHardware "\<open\s+com\>" +syn keyword freebasicHardware INP OUT WAIT LPT LPOS LPRINT + +syn keyword freebasicLogical AND EQV IMP OR NOT XOR + +syn keyword freebasicMath ABS ACOS ASIN ATAN2 ATN COS EXP FIX INT LOG MOD RANDOMIZE +syn keyword freebasicMath RND SGN SIN SQR TAN + +syn keyword freebasicMemory ALLOCATE CALLOCATE CLEAR DEALLOCATE FIELD FRE PEEK POKE REALLOCATE + +syn keyword freebasicMisc ASM DATA LET TO READ RESTORE SIZEOF SWAP OFFSETOF + +syn keyword freebasicModularizing CHAIN COMMON EXPORT EXTERN DYLIBFREE DYLIBLOAD DYLIBSYMBOL +syn keyword freebasicModularizing PRIVATE PUBLIC + +syn keyword freebasicMultithreading MUTEXCREATE MUTEXDESTROY MUTEXLOCK MUTEXUNLOCK THREADCREATE THREADWAIT + +syn keyword freebasicShell CHDIR DIR COMMAND ENVIRON EXEC EXEPATH KILL NAME MKDIR RMDIR RUN + +syn keyword freebasicEnviron SHELL SYSTEM WINDOWTITLE POINTERS + +syn keyword freebasicLoops FOR LOOP WHILE WEND DO CONTINUE STEP UNTIL next + +syn match freebasicInclude "\<#\s*\(inclib\|include\)\>" +syn match freebasicInclude "\<\$\s*include\>" + +syn keyword freebasicPointer PROCPTR PTR SADD STRPTR VARPTR + +syn keyword freebasicPredefined __DATE__ __FB_DOS__ __FB_LINUX__ __FB_MAIN__ __FB_MIN_VERSION__ +syn keyword freebasicPredefined __FB_SIGNATURE__ __FB_VERSION__ __FB_WIN32__ __FB_VER_MAJOR__ +syn keyword freebasicPredefined __FB_VER_MINOR__ __FB_VER_PATCH__ __FILE__ __FUNCTION__ +syn keyword freebasicPredefined __LINE__ __TIME__ + +syn match freebasicPreProcessor "\<^#\s*\(define\|undef\)\>" +syn match freebasicPreProcessor "\<^#\s*\(ifdef\|ifndef\|else\|elseif\|endif\|if\)\>" +syn match freebasicPreProcessor "\<#\s*error\>" +syn match freebasicPreProcessor "\<#\s*\(print\|dynamic\|static\)\>" +syn keyword freebasicPreProcessor DEFINED ONCE + +syn keyword freebasicProgramFlow END EXIT GOSUB GOTO +syn keyword freebasicProgramFlow IS RETURN SCOPE SLEEP + +syn keyword freebasicString INSTR LCASE LEFT LEN LSET LTRIM MID RIGHT RSET RTRIM +syn keyword freebasicString SPACE STRING TRIM UCASE ASC BIN CHR CVD CVI CVL CVLONGINT +syn keyword freebasicString CVS CVSHORT FORMAT HEX MKD MKI MKL MKLONGINT MKS MKSHORT +syn keyword freebasicString OCT STR VAL VALLNG VALINT VALUINT VALULNG + +syn keyword freebasicTypeCasting CAST CBYTE CDBL CINT CLNG CLNGINT CPTR CSHORT CSIGN CSNG +syn keyword freebasicTypeCasting CUBYTE CUINT CULNGINT CUNSG CURDIR CUSHORT + +syn match freebasicUserInput "\<line\s+input\>" +syn keyword freebasicUserInput GETJOYSTICK GETKEY GETMOUSE INKEY INPUT MULTIKEY SETMOUSE +" +" Do the Basic variables names first. This is because it +" is the most inclusive of the tests. Later on we change +" this so the identifiers are split up into the various +" types of identifiers like functions, basic commands and +" such. MEM 9/9/2006 +" +syn match freebasicIdentifier "\<[a-zA-Z_][a-zA-Z0-9_]*\>" +syn match freebasicGenericFunction "\<[a-zA-Z_][a-zA-Z0-9_]*\>\s*("me=e-1,he=e-1 +" +" Function list +" +syn keyword freebasicTodo contained TODO +" +" Catch errors caused by wrong parenthesis +" +syn region freebasicParen transparent start='(' end=')' contains=ALLBUT,@freebasicParenGroup +syn match freebasicParenError ")" +syn match freebasicInParen contained "[{}]" +syn cluster freebasicParenGroup contains=freebasicParenError,freebasicSpecial,freebasicTodo,freebasicUserCont,freebasicUserLabel,freebasicBitField +" +" Integer number, or floating point number without a dot and with "f". +" +syn region freebasicHex start="&h" end="\W" +syn region freebasicHexError start="&h\x*[g-zG-Z]" end="\W" +syn match freebasicInteger "\<\d\+\(u\=l\=\|lu\|f\)\>" +" +" Floating point number, with dot, optional exponent +" +syn match freebasicFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>" +" +" Floating point number, starting with a dot, optional exponent +" +syn match freebasicFloat "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" +" +" Floating point number, without dot, with exponent +" +syn match freebasicFloat "\<\d\+e[-+]\=\d\+[fl]\=\>" +" +" Hex number +" +syn case match +syn match freebasicOctal "\<0\o*\>" +syn match freebasicOctalError "\<0\o*[89]" +" +" String and Character contstants +" +syn region freebasicString start='"' end='"' contains=freebasicSpecial,freebasicTodo +syn region freebasicString start="'" end="'" contains=freebasicSpecial,freebasicTodo +" +" Comments +" +syn match freebasicSpecial contained "\\." +syn region freebasicComment start="^rem" end="$" contains=freebasicSpecial,freebasicTodo +syn region freebasicComment start=":\s*rem" end="$" contains=freebasicSpecial,freebasicTodo +syn region freebasicComment start="\s*'" end="$" contains=freebasicSpecial,freebasicTodo +syn region freebasicComment start="^'" end="$" contains=freebasicSpecial,freebasicTodo +" +" Now do the comments and labels +" +syn match freebasicLabel "^\d" +syn match freebasicLabel "\<^\w+:\>" +syn region freebasicLineNumber start="^\d" end="\s" +" +" Create the clusters +" +syn cluster freebasicNumber contains=freebasicHex,freebasicOctal,freebasicInteger,freebasicFloat +syn cluster freebasicError contains=freebasicHexError,freebasicOctalError +" +" Used with OPEN statement +" +syn match freebasicFilenumber "#\d\+" +syn match freebasicMathOperator "[\+\-\=\|\*\/\>\<\%\()[\]]" contains=freebasicParen +" +" The default methods for highlighting. Can be overridden later +" +hi def link freebasicArrays StorageClass +hi def link freebasicBitManipulation Operator +hi def link freebasicCompilerSwitches PreCondit +hi def link freebasicConsole Special +hi def link freebasicDataTypes Type +hi def link freebasicDateTime Type +hi def link freebasicDebug Special +hi def link freebasicErrorHandling Special +hi def link freebasicFiles Special +hi def link freebasicFunctions Function +hi def link freebasicGraphics Function +hi def link freebasicHardware Special +hi def link freebasicLogical Conditional +hi def link freebasicMath Function +hi def link freebasicMemory Function +hi def link freebasicMisc Special +hi def link freebasicModularizing Special +hi def link freebasicMultithreading Special +hi def link freebasicShell Special +hi def link freebasicEnviron Special +hi def link freebasicPointer Special +hi def link freebasicPredefined PreProc +hi def link freebasicPreProcessor PreProc +hi def link freebasicProgramFlow Statement +hi def link freebasicString String +hi def link freebasicTypeCasting Type +hi def link freebasicUserInput Statement +hi def link freebasicComment Comment +hi def link freebasicConditional Conditional +hi def link freebasicError Error +hi def link freebasicIdentifier Identifier +hi def link freebasicInclude Include +hi def link freebasicGenericFunction Function +hi def link freebasicLabel Label +hi def link freebasicLineNumber Label +hi def link freebasicMathOperator Operator +hi def link freebasicNumber Number +hi def link freebasicSpecial Special +hi def link freebasicTodo Todo + +let b:current_syntax = "freebasic" + +" vim: ts=8 |