3 " Maintainer: Mark Manning <markem@airmail.net>
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).
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
19 " Quit when a (custom) syntax file was already loaded (Taken from c.vim)
21 if exists("b:current_syntax")
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
31 " This list of keywords is taken directly from the FreeBasic
32 " user's guide as presented by the FreeBasic online site.
34 syn keyword freebasicArrays ERASE LBOUND REDIM PRESERVE UBOUND
36 syn keyword freebasicBitManipulation BIT BITRESET BITSET HIBYTE HIWORD LOBYTE LOWORD SHL SHR
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\)\>"
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
48 syn match freebasicConsole "\<open\s+\(CONS\|ERR\|PIPE\|SCRN\)\>"
49 syn keyword freebasicConsole BEEP CLS CSRLIN LOCATE PRINT POS SPC TAB VIEW WIDTH
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
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
58 syn keyword freebasicDebug ASSERT STOP
60 syn keyword freebasicErrorHandling ERR ERL ERROR LOCAL RESUME
61 syn match freebasicErrorHandling "\<resume\s+next\>"
62 syn match freebasicErrorHandling "\<on\s+error\>"
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
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
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
82 syn match freebasicHardware "\<open\s+com\>"
83 syn keyword freebasicHardware INP OUT WAIT LPT LPOS LPRINT
85 syn keyword freebasicLogical AND EQV IMP OR NOT XOR
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
90 syn keyword freebasicMemory ALLOCATE CALLOCATE CLEAR DEALLOCATE FIELD FRE PEEK POKE REALLOCATE
92 syn keyword freebasicMisc ASM DATA LET TO READ RESTORE SIZEOF SWAP OFFSETOF
94 syn keyword freebasicModularizing CHAIN COMMON EXPORT EXTERN DYLIBFREE DYLIBLOAD DYLIBSYMBOL
95 syn keyword freebasicModularizing PRIVATE PUBLIC
97 syn keyword freebasicMultithreading MUTEXCREATE MUTEXDESTROY MUTEXLOCK MUTEXUNLOCK THREADCREATE THREADWAIT
99 syn keyword freebasicShell CHDIR DIR COMMAND ENVIRON EXEC EXEPATH KILL NAME MKDIR RMDIR RUN
101 syn keyword freebasicEnviron SHELL SYSTEM WINDOWTITLE POINTERS
103 syn keyword freebasicLoops FOR LOOP WHILE WEND DO CONTINUE STEP UNTIL next
105 syn match freebasicInclude "\<#\s*\(inclib\|include\)\>"
106 syn match freebasicInclude "\<\$\s*include\>"
108 syn keyword freebasicPointer PROCPTR PTR SADD STRPTR VARPTR
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__
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
121 syn keyword freebasicProgramFlow END EXIT GOSUB GOTO
122 syn keyword freebasicProgramFlow IS RETURN SCOPE SLEEP
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
129 syn keyword freebasicTypeCasting CAST CBYTE CDBL CINT CLNG CLNGINT CPTR CSHORT CSIGN CSNG
130 syn keyword freebasicTypeCasting CUBYTE CUINT CULNGINT CUNSG CURDIR CUSHORT
132 syn match freebasicUserInput "\<line\s+input\>"
133 syn keyword freebasicUserInput GETJOYSTICK GETKEY GETMOUSE INKEY INPUT MULTIKEY SETMOUSE
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
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
146 syn keyword freebasicTodo contained TODO
148 " Catch errors caused by wrong parenthesis
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
155 " Integer number, or floating point number without a dot and with "f".
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\)\>"
161 " Floating point number, with dot, optional exponent
163 syn match freebasicFloat "\<\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=\>"
165 " Floating point number, starting with a dot, optional exponent
167 syn match freebasicFloat "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
169 " Floating point number, without dot, with exponent
171 syn match freebasicFloat "\<\d\+e[-+]\=\d\+[fl]\=\>"
176 syn match freebasicOctal "\<0\o*\>"
177 syn match freebasicOctalError "\<0\o*[89]"
179 " String and Character contstants
181 syn region freebasicString start='"' end='"' contains=freebasicSpecial,freebasicTodo
182 syn region freebasicString start="'" end="'" contains=freebasicSpecial,freebasicTodo
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
192 " Now do the comments and labels
194 syn match freebasicLabel "^\d"
195 syn match freebasicLabel "\<^\w+:\>"
196 syn region freebasicLineNumber start="^\d" end="\s"
198 " Create the clusters
200 syn cluster freebasicNumber contains=freebasicHex,freebasicOctal,freebasicInteger,freebasicFloat
201 syn cluster freebasicError contains=freebasicHexError,freebasicOctalError
203 " Used with OPEN statement
205 syn match freebasicFilenumber "#\d\+"
206 syn match freebasicMathOperator "[\+\-\=\|\*\/\>\<\%\()[\]]" contains=freebasicParen
208 " The default methods for highlighting. Can be overridden later
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
250 let b:current_syntax = "freebasic"