xref: /vim-8.2.3635/runtime/syntax/freebasic.vim (revision c81e5e79)
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