freebasic.vim (26621B)
1 " Vim syntax file 2 " Language: FreeBASIC 3 " Maintainer: Doug Kearns <dougkearns@gmail.com> 4 " Previous Maintainer: Mark Manning <markem@sim1.us> 5 " Last Change: 2023 Aug 14 6 " 7 " Description: 8 " 9 " Based originally on the work done by Allan Kelly <Allan.Kelly@ed.ac.uk> 10 " Updated by Mark Manning <markem@sim1.us> 11 " Applied FreeBASIC support to the already excellent support 12 " for standard basic syntax (like QB). 13 " 14 " First version based on Micro$soft QBASIC circa 15 " 1989, as documented in 'Learn BASIC Now' by 16 " Halvorson&Rygmyr. Microsoft Press 1989. This syntax file 17 " not a complete implementation yet. Send suggestions to 18 " the maintainer. 19 " 20 " TODO: split this into separate dialect-based files, possibly with a common base 21 " 22 " Quit when a (custom) syntax file was already loaded (Taken from c.vim) 23 " 24 if exists("b:current_syntax") 25 finish 26 endif 27 " 28 " Dialect detection 29 " 30 let s:lang = freebasic#GetDialect() 31 " 32 " Whitespace Errors 33 " 34 if exists("freebasic_space_errors") 35 if !exists("freebasic_no_trail_space_error") 36 syn match freebasicSpaceError display excludenl "\s\+$" 37 endif 38 if !exists("freebasic_no_tab_space_error") 39 syn match freebasicSpaceError display " \+\t"me=e-1 40 endif 41 endif 42 " 43 " Be sure to turn on the "case ignore" since current versions 44 " of freebasic support both upper as well as lowercase 45 " letters. - MEM 10/1/2006 46 " 47 syn case ignore 48 " 49 " Do the Basic variables names first. This is because it 50 " is the most inclusive of the tests. Later on we change 51 " this so the identifiers are split up into the various 52 " types of identifiers like functions, basic commands and 53 " such. MEM 9/9/2006 54 " 55 if s:lang =~# '\<\%(qb\|fblite\)\>' 56 syn iskeyword @,48-57,_,192-255,. 57 syn match freebasicIdentifier "\<\h\%(\w\|\.\)*\>" 58 syn match freebasicGenericFunction "\<\h\%(\w\|\.\)*\>\ze\s*(" 59 else 60 syn iskeyword @,48-57,_,192-255 61 syn match freebasicIdentifier "\<\h\w*\>" 62 syn match freebasicGenericFunction "\<\h\w*\>\ze\s*(" 63 endif 64 " 65 " This list of keywords is taken directly from the FreeBASIC 66 " user's guide as presented by the FreeBASIC online site. 67 " 68 syn keyword freebasicArrays ERASE LBOUND PRESERVE REDIM UBOUND 69 70 " array.bi 71 syn keyword freebasicArrays ARRAYLEN ARRAYSIZE 72 if s:lang == "fb" 73 syn keyword freebasicArrays ArrayConstDescriptorPtr ArrayDescriptorPtr FBARRAY 74 endif 75 76 if s:lang == "qb" 77 syn keyword freebasicAsm __ASM 78 syn match freebasicAsm "\<end\s\+__asm\>" 79 else 80 syn keyword freebasicAsm ASM 81 syn match freebasicAsm "\<end\s\+asm\>" 82 endif 83 84 if s:lang == "qb" 85 syn keyword freebasicBitManipulation __BIT __BITRESET __BITSET __HIBYTE __HIWORD __LOBYTE __LOWORD 86 else 87 syn keyword freebasicBitManipulation BIT BITRESET BITSET HIBYTE HIWORD LOBYTE LOWORD 88 endif 89 90 if s:lang != "fb" 91 syn keyword freebasicCompilerSwitches DEFDBL DEFINT DEFLNG DEFSNG DEFSTR 92 endif 93 if s:lang == "qb" 94 syn keyword freebasicCompilerSwitches __DEFBYTE __DEFLONGINT __DEFSHORT __DEFUBYTE __DEFUINT __DEFULONGINT __DEFUSHORT 95 elseif s:lang == "fblite" || s:lang == "deprecated" 96 syn keyword freebasicCompilerSwitches DEFBYTE DEFLONGINT DEFSHORT DEFUBYTE DEFUINT DEFUILONGINT DEFUSHORT 97 endif 98 99 syn match freebasicCompilerSwitches "\<option\s\+\%(BASE\|BYVAL\|DYNAMIC\|ESCAPE\|EXPLICIT\|GOSUB\|NOGOSUB\)\>" 100 syn match freebasicCompilerSwitches "\<option\s\+\%(NOKEYWORD\|PRIVATE\|STATIC\)\>" 101 102 syn keyword freebasicData DATA READ RESTORE 103 104 syn keyword freebasicProgramFlow EXIT GOTO RETURN SLEEP 105 syn match freebasicProgramFlow "\<end\>" 106 if s:lang == "qb" 107 syn keyword freebasicProgramFlow __SLEEP 108 endif 109 if s:lang == "fblite" || s:lang == "qb" 110 syn keyword freebasicProgramFlow GOSUB 111 endif 112 if s:lang == "fb" || s:lang == "deprecated" 113 syn keyword freebasicProgramFlow SCOPE 114 syn match freebasicProgramFlow "\<end\s\+scope\>" 115 endif 116 117 if s:lang == "fblite" || s:lang == "qb" 118 syn region freebasicConditional matchgroup=freebasicConditional start="\<on\>" end="\<gosub\>" transparent 119 syn region freebasicConditional matchgroup=freebasicConditional start="\<on\>" end="\<goto\>" transparent 120 endif 121 syn keyword freebasicConditional IF THEN ELSE ELSEIF 122 if s:lang == "qb" 123 syn keyword freebasicConditional __IIF __WITH 124 syn match freebasicConditional "\<end\s\+__with\>" 125 else 126 syn keyword freebasicConditional IIF WITH 127 syn match freebasicConditional "\<end\s\+with\>" 128 endif 129 syn match freebasicConditional "\<end\s\+if\>" 130 syn match freebasicConditional "\<select\s\+case\>" 131 syn match freebasicConditional "\<case\>" 132 syn match freebasicConditional "\<case\s\+is\>" 133 syn match freebasicConditional "\<end\s\+select\>" 134 135 syn keyword freebasicConsole BEEP CLS CSRLIN LOCATE PRINT POS SPC TAB USING VIEW WIDTH 136 syn match freebasicConsole "?" 137 138 syn keyword freebasicDataTypes SINGLE DOUBLE INTEGER LONG 139 syn match freebasicDataTypes "\<string\>" 140 syn keyword freebasicDataTypes AS DIM CONST ENUM SHARED TYPE 141 syn match freebasicDataTypes "\<end\s\+enum\>" 142 syn match freebasicDataTypes "\<end\s\+type\>" 143 if s:lang == "qb" 144 syn keyword freebasicDataTypes __BOOLEAN __BYTE __LONGINT __SHORT __UBYTE __UINTEGER __ULONG __ULONGINT __UNSIGNED __USHORT __ZSTRING 145 syn match freebasicDataTypes "\<__WSTRING\>" 146 syn keyword freebasicDataTypes __EXPLICIT __EXTENDS __IMPLEMENTS __OBJECT __POINTER __PTR __SIZEOF __TYPEOF 147 syn keyword freebasicDataTypes __UNION 148 syn match freebasicDataTypes "\<end\s\+__union\>" 149 else 150 syn keyword freebasicDataTypes BOOLEAN BYTE LONGINT SHORT UBYTE UINTEGER ULONG ULONGINT UNSIGNED USHORT ZSTRING 151 syn match freebasicDataTypes "\<WSTRING\>" 152 syn keyword freebasicDataTypes EXPLICIT EXTENDS IMPLEMENTS OBJECT POINTER PTR SIZEOF TYPEOF 153 syn keyword freebasicDataTypes UNION 154 syn match freebasicDataTypes "\<end\s\+union\>" 155 endif 156 if s:lang == "fb" 157 syn keyword freebasicDataTypes BASE CLASS THIS VAR 158 endif 159 160 if s:lang == "qb" 161 syn match freebasicDateTime "\<\%(date\|time\)\$" 162 elseif s:lang == "fblite" || s:lang == "deprecated" 163 syn match freebasicDateTime "\<\%(date\|time\)\>\$\=" 164 else " fb 165 syn keyword freebasicDateTime DATE TIME 166 endif 167 syn keyword freebasicDateTime SETDATE SETTIME 168 169 " datetime.bi 170 syn keyword freebasicDateTime DATEADD DATEDIFF DATEPART DATESERIAL DATEVALUE DAY HOUR ISDATE MINUTE 171 syn keyword freebasicDateTime MONTH MONTHNAME NOW SECOND TIMESERIAL TIMEVALUE 172 syn keyword freebasicDateTime TIMER YEAR WEEKDAY WEEKDAYNAME 173 174 syn keyword freebasicDebug STOP 175 if s:lang == "qb" 176 syn keyword freebasicDebug __ASSERT __ASSERTWARN 177 else 178 syn keyword freebasicDebug ASSERT ASSERTWARN 179 endif 180 181 syn keyword freebasicErrorHandling ERR ERL ERROR 182 if s:lang == "qb" 183 syn keyword freebasicErrorHandling __ERFN __ERMN 184 syn match freebasicErrorHandling "\<on\s\+error\>" 185 else 186 syn keyword freebasicErrorHandling ERFN ERMN 187 syn match freebasicErrorHandling "\<on\s\+\%(local\s\+\)\=error\>" 188 endif 189 if s:lang != "fb" 190 syn match freebasicErrorHandling "\<resume\%(\s\+next\)\=\>" 191 endif 192 193 syn match freebasicFiles "\<get\s\+#\>" 194 syn match freebasicFiles "\<input\s\+#\>" 195 syn match freebasicFiles "\<line\s\+input\s\+#\>" 196 syn match freebasicFiles "\<put\s\+#\>" 197 syn keyword freebasicFiles ACCESS APPEND BINARY CLOSE EOF FREEFILE INPUT LOC 198 syn keyword freebasicFiles LOCK LOF OUTPUT RANDOM RESET SEEK UNLOCK WRITE 199 syn match freebasicFiles "\<open\>" 200 if s:lang == "qb" 201 syn keyword freebasicFiles __ENCODING 202 else 203 syn keyword freebasicFiles ENCODING WINPUT 204 syn match freebasicFiles "\<open\s\+\%(cons\|err\|pipe\|scrn\)\>" 205 endif 206 207 " file.bi 208 syn keyword freebasicFiles FILEATTR FILECOPY FILEDATETIME FILEEXISTS FILEFLUSH FILELEN FILESETEOF 209 210 syn keyword freebasicFunctions ALIAS BYREF BYVAL CDECL DECLARE LIB NAKED PASCAL STATIC STDCALL 211 syn match freebasicFunctions "\<option\ze\s*(" 212 213 if s:lang == "qb" 214 syn keyword freebasicFunctions __CVA_ARG __CVA_COPY __CVA_END __CVA_LIST __CVA_START 215 syn keyword freebasicFunctions __VA_ARG __VA_FIRST __VA_NEXT 216 else 217 syn keyword freebasicFunctions CVA_ARG CVA_COPY CVA_END CVA_LIST CVA_START 218 syn keyword freebasicFunctions VA_ARG VA_FIRST VA_NEXT 219 syn keyword freebasicFunctions ANY OVERLOAD 220 endif 221 222 syn keyword freebasicFunctions FUNCTION SUB 223 syn match freebasicFunctions "\<end\s\+function\>" 224 syn match freebasicFunctions "\<end\s\+sub\>" 225 226 if s:lang == "fb" 227 syn keyword freebasicFunctions ABSTRACT OVERRIDE VIRTUAL __THISCALL 228 syn keyword freebasicFunctions CONSTRUCTOR DESTRUCTOR OPERATOR PROPERTY 229 syn match freebasicFunctions "\<end\s\+constructor\>" 230 syn match freebasicFunctions "\<end\s\+destructor\>" 231 syn match freebasicFunctions "\<end\s\+operator\>" 232 syn match freebasicFunctions "\<end\s\+property\>" 233 else 234 syn keyword freebasicFunctions CALL 235 endif 236 237 syn match freebasicGraphics "\<palette\s\+get\>" 238 syn keyword freebasicGraphics ADD ALPHA BLOAD BSAVE CIRCLE CLS COLOR DRAW GET 239 syn keyword freebasicGraphics LINE PAINT PALETTE PCOPY PMAP POINT 240 syn keyword freebasicGraphics PRESET PSET PUT SCREEN 241 syn keyword freebasicGraphics TRANS WINDOW 242 if s:lang == "qb" 243 syn keyword freebasicGraphics __FLIP __IMAGECONVERTROW __IMAGECREATE __IMAGEDESTROY __IMAGEINFO __POINTCOORD 244 syn keyword freebasicGraphics __RGB __RGBA __SCREENCOPY __SCREENCONTROL __SCREENEVENT __SCREENGLPROC __SCREENINFO 245 syn keyword freebasicGraphics __SCREENLIST __SCREENLOCK __SCREENPTR __SCREENRES __SCREENSET __SCREENSYNC 246 syn keyword freebasicGraphics __SCREENUNLOCK __WINDOWTITLE 247 else 248 syn keyword freebasicGraphics CUSTOM 249 syn keyword freebasicGraphics FLIP IMAGECONVERTROW IMAGECREATE IMAGEDESTROY IMAGEINFO POINTCOORD 250 syn keyword freebasicGraphics RGB RGBA SCREENCOPY SCREENCONTROL SCREENEVENT SCREENGLPROC SCREENINFO 251 syn keyword freebasicGraphics SCREENLIST SCREENLOCK SCREENPTR SCREENRES SCREENSET SCREENSYNC 252 syn keyword freebasicGraphics SCREENUNLOCK WINDOWTITLE 253 endif 254 255 if s:lang != "qb" 256 syn match freebasicHardware "\<open\s\+\%(com\|lpt\)\>" 257 endif 258 syn keyword freebasicHardware INP OUT WAIT LPOS LPRINT 259 260 syn keyword freebasicMath ABS ATN COS EXP FIX FRAC INT LOG MOD RANDOMIZE RND SGN SIN SQR TAN 261 262 if s:lang == "qb" 263 syn keyword freebasicMath __ACOS __ASIN __ATAN2 264 else 265 syn keyword freebasicMath ACOS ASIN ATAN2 266 endif 267 268 if s:lang == "qb" 269 syn keyword freebasicMemory __ALLOCATE __CALLOCATE __DEALLOCATE __REALLOCATE 270 else 271 syn keyword freebasicMemory ALLOCATE CALLOCATE DEALLOCATE REALLOCATE 272 syn keyword freebasicMemory PEEK POKE CLEAR FB_MEMCOPY FB_MEMCOPYCLEAR FB_MEMMOVE SWAP SADD 273 syn keyword freebasicMemory FIELD FRE 274 endif 275 276 syn keyword freebasicMisc LET TO 277 if s:lang == "qb" 278 syn keyword freebasicMisc __OFFSETOF 279 else 280 syn keyword freebasicMisc OFFSETOF 281 endif 282 283 syn keyword freebasicModularizing CHAIN COMMON 284 if s:lang == "fb" 285 syn keyword freebasicModularizing EXTERN 286 syn match freebasicModularizing "\<end\s\+extern\>" 287 syn keyword freebasicModularizing PROTECTED 288 endif 289 if s:lang == "qb" 290 syn keyword freebasicModularizing __EXPORT __IMPORT __DYLIBFREE __DYLIBLOAD __DYLIBSYMBOL 291 else 292 syn keyword freebasicModularizing EXPORT IMPORT DYLIBFREE DYLIBLOAD DYLIBSYMBOL 293 syn keyword freebasicModularizing PRIVATE PUBLIC 294 syn keyword freebasicModularizing NAMESPACE 295 syn match freebasicModularizing "\<end\s\+namespace\>" 296 endif 297 298 if s:lang != "qb" 299 syn keyword freebasicMultithreading MUTEXCREATE MUTEXDESTROY MUTEXLOCK MUTEXUNLOCK THREADCREATE THREADWAIT 300 syn keyword freebasicMultithreading CONDBROADCAST CONDCREATE CONDDESTROY CONDSIGNAL CONDWAIT 301 syn keyword freebasicMultithreading THREADCALL THREADDETACH THREADSELF 302 endif 303 304 syn keyword freebasicShell CHDIR KILL NAME MKDIR RMDIR RUN SETENVIRON 305 if s:lang == "qb" 306 syn keyword freebasicShell __CURDIR __DIR __EXEC __EXEPATH 307 syn match freebasicString "\<\%(command\|environ\)\$" 308 else 309 " fbio.bi 310 syn keyword freebasicShell ISREDIRECTED 311 syn keyword freebasicShell CURDIR DIR EXEC EXEPATH 312 syn match freebasicString "\<\%(command\|environ\)\>\$\=" 313 endif 314 315 syn keyword freebasicEnviron SHELL SYSTEM 316 317 syn keyword freebasicLoops FOR LOOP WHILE WEND DO STEP UNTIL NEXT 318 if s:lang == "qb" 319 syn keyword freebasicLoops __CONTINUE 320 else 321 syn keyword freebasicLoops CONTINUE 322 endif 323 " 324 " File numbers 325 " 326 syn match freebasicFilenumber "#\d\+" 327 syn match freebasicFilenumber "#\a[[:alpha:].]*[%&!#]\=" 328 329 syn match freebasicMetacommand "$\s*\%(dynamic\|static\)" 330 syn match freebasicMetacommand "$\s*include\s*\%(once\)\=\s*:\s*'[^']\+'" 331 syn match freebasicMetacommand '$\s*include\s*\%(once\)\=\s*:\s*"[^"]\+"' 332 syn match freebasicMetacommand '$\s*lang\s*:\s*"[^"]\+"' 333 " 334 " Intrinsic defines 335 " 336 syn keyword freebasicPredefined __DATE__ __DATE_ISO__ 337 syn keyword freebasicPredefined __FB_64BIT__ __FB_ARGC__ __FB_ARG_COUNT__ __FB_ARG_EXTRACT__ __FB_ARG_LEFTOF__ 338 syn keyword freebasicPredefined __FB_ARG_RIGHTOF__ __FB_ARGV__ __FB_ARM__ __FB_ASM__ __FB_BACKEND__ 339 syn keyword freebasicPredefined __FB_BIGENDIAN__ __FB_BUILD_DATE__ __FB_BUILD_DATE_ISO__ __FB_BUILD_SHA1__ 340 syn keyword freebasicPredefined __FB_CYGWIN__ __FB_DARWIN__ __FB_DEBUG__ __FB_DOS__ __FB_ERR__ __FB_EVAL__ 341 syn keyword freebasicPredefined __FB_FPMODE__ __FB_FPU__ __FB_FREEBSD__ __FB_GCC__ __FB_GUI__ __FB_IIF__ __FB_JOIN__ 342 syn keyword freebasicPredefined __FB_LANG__ __FB_LINUX__ __FB_MAIN__ __FB_MIN_VERSION__ __FB_MT__ __FB_NETBSD__ 343 syn keyword freebasicPredefined __FB_OPENBSD__ __FB_OPTIMIZE__ __FB_OPTION_BYVAL__ __FB_OPTION_DYNAMIC__ 344 syn keyword freebasicPredefined __FB_OPTION_ESCAPE__ __FB_OPTION_EXPLICIT__ __FB_OPTION_GOSUB__ 345 syn keyword freebasicPredefined __FB_OPTION_PRIVATE__ __FB_OUT_DLL__ __FB_OUT_EXE__ __FB_OUT_LIB__ __FB_OUT_OBJ__ 346 syn keyword freebasicPredefined __FB_PCOS__ __FB_PPC__ __FB_QUERY_SYMBOL__ __FB_QUOTE__ __FB_SIGNATURE__ __FB_SSE__ 347 syn keyword freebasicPredefined __FB_UNIQUEID__ __FB_UNIQUEID_POP__ __FB_UNIQUEID_PUSH__ __FB_UNIX__ __FB_UNQUOTE__ 348 syn keyword freebasicPredefined __FB_VECTORIZE__ __FB_VER_MAJOR__ __FB_VER_MINOR__ __FB_VER_PATCH__ __FB_VERSION__ 349 syn keyword freebasicPredefined __FB_WIN32__ __FB_X86__ __FB_XBOX__ 350 syn keyword freebasicPredefined __FILE__ __FILE_NQ__ __FUNCTION__ __FUNCTION_NQ__ 351 syn keyword freebasicPredefined __LINE__ __PATH__ __TIME__ 352 " 353 " Preprocessor directives 354 " 355 syn match freebasicInclude "#\s*\%(inclib\|include\%(\s\+once\)\=\|libpath\)\>" 356 357 syn match freebasicPreProcessor "#\s*assert\>" 358 syn match freebasicPreProcessor "#\s*cmdline\>" 359 syn match freebasicPreProcessor "#\s*\%(define\|undef\)\>" 360 syn match freebasicPreProcessor "#\s*\%(if\|ifdef\|ifndef\|else\|elseif\|endif\)\>" 361 syn match freebasicPreProcessor "#\s*\%(macro\|endmacro\)\>" 362 syn match freebasicPreProcessor "#\s*error\>" 363 syn match freebasicPreProcessor "#\s*lang\>" 364 syn match freebasicPreProcessor "#\s*line\>" 365 syn match freebasicPreProcessor "#\s*pragma\%(\s\+reserve\)\=\>" 366 syn match freebasicPreProcessor "#\s*\%(print\|dynamic\|static\)\>" 367 syn keyword freebasicPreProcessor DEFINED 368 369 syn keyword freebasicString LEN 370 syn keyword freebasicString ASC 371 " string.bi 372 syn keyword freebasicString FORMAT 373 syn keyword freebasicString VAL 374 syn keyword freebasicString CVD CVI CVL CVS 375 syn keyword freebasicString INSTR 376 syn keyword freebasicString LSET RSET 377 378 if s:lang == "qb" 379 syn match freebasicString "\<string\$\ze\s*(" 380 syn match freebasicString "\<__wstring\ze\s*(" 381 syn match freebasicString "\<space\$" 382 syn keyword freebasicString __WSPACE 383 syn match freebasicString "\<chr\$" 384 syn keyword freebasicString __WCHR 385 syn keyword freebasicString __WBIN __WHEX __WOCT __WSTR 386 syn match freebasicString "\<\%(bin\|hex\|oct\|str\)\$" 387 syn keyword freebasicString __VALLNG __VALINT __VALUINT __VALULNG 388 syn match freebasicString "\<\%(mkd\|mki\|mkl\|mks\)\$" 389 syn keyword freebasicString __MKLONGINT __MKSHORT 390 syn keyword freebasicString __CVLONGINT __CVSHORT 391 syn match freebasicString "\<\%(left\|mid\|right\|lcase\|ucase\|ltrim\|rtrim\)\$" 392 syn keyword freebasicString __TRIM 393 syn keyword freebasicString __INSTRREV 394 else 395 syn match freebasicString "\<string\$\=\ze\s*(" 396 syn match freebasicString "\<wstring\ze\s*(" 397 syn match freebasicString "\<space\>\$\=" 398 syn keyword freebasicString WSPACE 399 syn match freebasicString "\<chr\>\$\=" 400 syn keyword freebasicString WCHR 401 syn keyword freebasicString WBIN WHEX WOCT WSTR 402 syn match freebasicString "\<\%(bin\|hex\|oct\|str\)\>\$\=" 403 syn keyword freebasicString VALLNG VALINT VALUINT VALULNG 404 syn match freebasicString "\<\%(mkd\|mki\|mkl\|mks\)\>\$\=" 405 syn match freebasicString "\<\%(mklongint\|mkshort\)\>\$\=" 406 syn keyword freebasicString CVLONGINT CVSHORT 407 syn match freebasicString "\<\%(left\|mid\|right\|lcase\|ucase\|ltrim\|rtrim\)\>\$\=" 408 syn match freebasicString "\<trim\>\$\=" 409 syn keyword freebasicString INSTRREV 410 endif 411 412 syn keyword freebasicTypeCasting CDBL CINT CLNG CSNG 413 if s:lang == "qb" 414 syn keyword freebasicTypeCasting __CAST __CBOOL __CBYTE __CLNGINT __CPTR __CSHORT __CSIGN __CYBTE __CUINT __CULNG 415 syn keyword freebasicTypeCasting __CULNGINT __CUNSG __CUSHORT 416 else 417 syn keyword freebasicTypeCasting CAST CBOOL CBYTE CLNGINT CPTR CSHORT CSIGN CUBYTE CUINT CULNG CULNGINT CUNSG CUSHORT 418 endif 419 420 syn match freebasicUserInput "\<line\s\+input\>" 421 syn keyword freebasicUserInput INKEY INPUT 422 if s:lang == "qb" 423 syn keyword freebasicUserInput __GETJOYSTICK __GETKEY __GETMOUSE __MULTIKEY __SETMOUSE STICK STRIG 424 else 425 syn keyword freebasicUserInput GETJOYSTICK GETKEY GETMOUSE MULTIKEY SETMOUSE 426 endif 427 " 428 " Operators 429 " 430 " TODO: make these context sensitive to remove the overlap of common operators 431 " : alpha operators should probably always be highlighted 432 " -- DJK 20/11/19 433 if s:lang == "qb" 434 syn match freebasicArithmeticOperator "\<\%(MOD\|__SHL\|__SHR\)\>" 435 else 436 syn match freebasicArithmeticOperator "\<\%(MOD\|SHL\|SHR\)\>" 437 endif 438 syn match freebasicBitwiseOperator "\<\%(AND\|EQV\|IMP\|NOT\|OR\|XOR\)\>" " freebaseLogical? 439 if s:lang == "qb" 440 syn match freebasicAssignmentOperator "\<\%(MOD\|AND\|EQV\|IMP\|OR\|XOR\|__SHL\|__SHR\)=\@=" " exclude trailing '=' 441 else 442 syn match freebasicAssignmentOperator "\<\%(MOD\|AND\|EQV\|IMP\|OR\|XOR\|SHL\|SHR\)=\@=" 443 endif 444 syn match freebasicShortcircuitOperator "\<\%(ANDALSO\|ORELSE\)\>" 445 if s:lang == "fb" 446 syn match freebasicMemoryOperator '\<\%(new\|delete\)\>' 447 endif 448 syn keyword freebasicPointerOperator STRPTR VARPTR 449 if s:lang == "qb" 450 syn keyword freebasicPointerOperator __PROCPTR 451 else 452 syn keyword freebasicPointerOperator PROCPTR 453 endif 454 syn match freebasicTypeOperator '\<is\>' 455 syn match freebasicTypeOperator '\.' nextgroup=freebasicIdentifier skipwhite 456 if s:lang == "fb" 457 syn match freebasicTypeOperator '->' nextgroup=freebasicIdentifier skipwhite 458 endif 459 460 if exists("freebasic_operators") 461 syn match freebasicAssignmentOperator "=>\=\|[-+&/\\*^]=" 462 if s:lang == "qb" 463 syn match freebasicAssignmentOperator "\<\%(MOD\|AND\|EQV\|IMP\|OR\|XOR\|__SHL\|__SHR\)=" " include trailing '=' 464 else 465 syn match freebasicAssignmentOperator "\<\%(MOD\|AND\|EQV\|IMP\|OR\|XOR\|SHL\|SHR\)=" 466 endif 467 syn match freebasicArithmeticOperator "[-+&/\\*^]" 468 " syn match freebasicIndexingOperator "[[\]()]" " FIXME 469 syn match freebasicRelationalOperator "=\|<>\|<=\|<\|>=\|>" 470 syn match freebasicPreprocessorOperator '\%(^\s*\)\@<!\%(##\|#\)\|[$!]"\@=' 471 syn match freebasicPointerOperator '[@*]' 472 syn match freebasicTypeOperator '\.' nextgroup=freebasicIdentifier skipwhite 473 if s:lang == "fb" 474 syn match freebasicTypeOperator '->' nextgroup=freebasicIdentifier skipwhite 475 endif 476 endif 477 478 syn cluster freebasicOperator contains=freebasic.*Operator 479 " 480 " Catch errors caused by wrong parenthesis 481 " 482 " syn region freebasicParen transparent start='(' end=')' contains=ALLBUT,@freebasicParenGroup 483 " syn match freebasicParenError ")" 484 " syn match freebasicInParen contained "[{}]" 485 " syn cluster freebasicParenGroup contains=freebasicParenError,freebasicSpecial,freebasicTodo,freebasicUserCont,freebasicUserLabel,freebasicBitField 486 " 487 " Integer number 488 " 489 syn match freebasicHexError "&h\w*\>" 490 syn match freebasicOctalError "&o\w*\>" 491 syn match freebasicBinaryError "&b\w*\>" 492 syn match freebasicHex "&h\x\+\%([%L&U]\|UL\|LL\|ULL\)\=\>" 493 syn match freebasicOctal "&o\o\+\%([%L&U]\|UL\|LL\|ULL\)\=\>" 494 syn match freebasicBinary "&b[10]\+\%([%L&U]\|UL\|LL\|ULL\)\=\>" 495 syn match freebasicInteger "\<\d\+\%([%L&U]\|UL\|LL\|ULL\)\=\>" 496 " 497 " Floating point 498 " See: https://www.freebasic.net/forum/viewtopic.php?t=20323 499 " 500 " Floating point number, with dot, optional exponent, optional suffix 501 " 502 syn match freebasicFloat "\<\d\+\.\d*\%([de][-+]\=\d*\)\=[f!#]\=" 503 " 504 " Floating point number, starting with a dot, optional exponent, optional suffix 505 " 506 syn match freebasicFloat "\.\d\+\%([de][-+]\=\d*\)\=[f!#]\=" 507 " 508 " Floating point number, without dot, with optional exponent, optional suffix 509 " 510 syn match freebasicFloat "\<\d\+\%([de][-+]\=\d*\)[f!#]\=" 511 " 512 " Floating point number, without dot, without exponent, with suffix 513 " 514 syn match freebasicFloat "\<\d\+[f!#]" 515 " 516 " Create the clusters 517 " 518 syn cluster freebasicNumber contains=freebasicHex,freebasicOctal,freebasicBinary,freebasicInteger,freebasicFloat 519 syn cluster freebasicNumberError contains=freebasicHexError,freebasicOctalError,freebasicBinaryError 520 " 521 " Booleans 522 " 523 if s:lang != "qb" 524 syn keyword freebasicBoolean TRUE FALSE 525 endif 526 " 527 " 528 " String and escape sequences 529 " 530 syn match freebasicSpecial contained "\\." 531 syn match freebasicSpecial contained "\\\d\{1,3}" 532 syn match freebasicSpecial contained "\\&h\x\{1,2}" 533 syn match freebasicSpecial contained "\\&o\o\{1,3}" 534 syn match freebasicSpecial contained "\\&b[01]\{1,8}" 535 syn match freebasicSpecial contained "\\u\x\{1,4}" 536 syn region freebasicString start='"' end='"' " TODO: Toggle contains on Option Escape in fblite and qb? -- DJK 20/11/19 537 syn region freebasicString start='!\zs"' end='"' contains=freebasicSpecial 538 syn region freebasicString start='$\zs"' end='"' 539 " 540 " Line labels 541 " 542 if s:lang =~# '\<\%(qb\|fblite\)\>' 543 syn match freebasicLineLabel "^\s*\zs\h\%(\w\|\.\)*\ze\s*:" 544 else 545 syn match freebasicLineLabel "^\s*\zs\h\w*\ze\s*:" 546 endif 547 syn match freebasicLineNumber "^\s*\zs\d\+" 548 " 549 " Line continuations 550 " 551 " syn match freebasicLineContinuation "\<_\>" nextgroup=freebasicComment,freebasicPostLineContinuation skipwhite 552 syn keyword freebasicLineContinuation _ nextgroup=freebasicComment,freebasicPostLineContinuation skipwhite 553 syn match freebasicPostLineContinuation ".*" contained 554 " 555 " 556 " Type suffixes 557 if exists("freebasic_type_suffixes") && s:lang =~# '\<\%(qb\|fblite\)\>' 558 syn match freebasicTypeSuffix "\h\%(\w\|.\)*\zs[$%&!#]" 559 endif 560 " 561 " Comments 562 " 563 syn keyword freebasicTodo TODO FIXME XXX NOTE contained 564 syn region freebasicComment start="\<rem\>" end="$" contains=freebasicTodo,@Spell,freebasicMetacommand 565 syn region freebasicComment start="'" end="$" contains=freebasicTodo,@Spell,freebasicMetacommand 566 syn region freebasicDoubleComment start="''" end="$" contains=freebasicTodo,@Spell 567 568 if !exists("freebasic_no_comment_fold") 569 syn region freebasicMultilineComment start="/'" end="'/" contains=freebasicTodo,@Spell,freeBasicMultilineComment fold keepend extend 570 syn region freebasicMultilineComment2 start="^\s*'.*\n\%(\s*'\)\@=" end="^\s*'.*\n\%(\s*'\)\@!" contains=freebasicComment,freebasicDoubleComment keepend fold 571 else 572 syn region freebasicMultilineComment start="/'" end="'/" contains=freebasicTodo,@Spell,freeBasicMultilineComment 573 endif 574 575 syn case match 576 577 syn sync linebreaks=1 578 579 " 580 " The default methods for highlighting. Can be overridden later 581 " 582 hi def link freebasicArrays StorageClass 583 hi def link freebasicAsm Special 584 hi def link freebasicBitManipulation Operator 585 hi def link freebasicBoolean Boolean 586 if s:lang == "fb" 587 hi def link freebasicCompilerSwitches freebasicUnsupportedError 588 else 589 hi def link freebasicCompilerSwitches PreCondit 590 endif 591 hi def link freebasicConsole Special 592 hi def link freebasicData Special 593 hi def link freebasicDataTypes Type 594 hi def link freebasicDateTime Type 595 hi def link freebasicDebug Special 596 hi def link freebasicErrorHandling Special 597 hi def link freebasicFilenumber Special 598 hi def link freebasicFiles Special 599 hi def link freebasicFunctions Function 600 hi def link freebasicGraphics Function 601 hi def link freebasicHardware Special 602 hi def link freebasicLoops Repeat 603 hi def link freebasicMath Function 604 if s:lang == "fb" 605 hi def link freebasicMetacommand freebasicUnsupportedError 606 else 607 hi def link freebasicMetacommand SpecialComment 608 endif 609 hi def link freebasicMemory Function 610 hi def link freebasicMisc Special 611 hi def link freebasicModularizing Special 612 hi def link freebasicMultithreading Special 613 hi def link freebasicShell Special 614 hi def link freebasicEnviron Special 615 hi def link freebasicPointer Special 616 hi def link freebasicPredefined PreProc 617 hi def link freebasicPreProcessor PreProc 618 hi def link freebasicProgramFlow Statement 619 hi def link freebasicString String 620 hi def link freebasicTypeCasting Type 621 hi def link freebasicUserInput Statement 622 hi def link freebasicComment Comment 623 hi def link freebasicDoubleComment Comment 624 hi def link freebasicMultilineComment Comment 625 hi def link freebasicConditional Conditional 626 hi def link freebasicError Error 627 hi def link freebasicIdentifier Identifier 628 hi def link freebasicInclude Include 629 hi def link freebasicGenericFunction Function 630 hi def link freebasicLineContinuation Special 631 hi def link freebasicLineLabel LineNr 632 if s:lang == "fb" 633 hi def link freebasicLineNumber freebasicUnsupportedError 634 else 635 hi def link freebasicLineNumber LineNr 636 endif 637 hi def link freebasicMathOperator Operator 638 639 hi def link freebasicHex Number 640 hi def link freebasicOctal Number 641 hi def link freebasicBinary Number 642 hi def link freebasicInteger Number 643 hi def link freebasicFloat Float 644 645 hi def link freebasicHexError Error 646 hi def link freebasicOctalError Error 647 hi def link freebasicBinaryError Error 648 649 hi def link freebasicAssignmentOperator Operator 650 hi def link freebasicArithmeticOperator Operator 651 hi def link freebasicIndexingOperator Operator 652 hi def link freebasicRelationalOperator Operator 653 hi def link freebasicBitwiseOperator Operator 654 hi def link freebasicShortcircuitOperator Operator 655 hi def link freebasicPreprocessorOperator Operator 656 hi def link freebasicPointerOperator Operator 657 if exists("freebasic_operators") 658 hi def link freebasicTypeOperator Operator 659 endif 660 hi def link freebasicMemoryOperator Operator 661 662 hi def link freebasicSpaceError Error 663 664 hi def link freebasicSpecial Special 665 hi def link freebasicTodo Todo 666 667 hi def link freebasicUnsupported freebasicUnsupportedError 668 hi def link freebasicUnsupportedError Error 669 670 unlet s:lang 671 672 let b:current_syntax = "freebasic" 673 674 " vim: ts=8 tw=132 fdm=marker