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