Merge branch 'vim-runtime'
[vim_mainline.git] / runtime / syntax / freebasic.vim
blobbce7f9ebc18c2418e523c58483852400d607e076
1 " Vim syntax file
2 " Language:    FreeBasic
3 " Maintainer:  Mark Manning <markem@airmail.net>
4 " Updated:     10/22/2006
6 " Description:
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
17 "       the maintainer.
19 "       Quit when a (custom) syntax file was already loaded (Taken from c.vim)
21 if exists("b:current_syntax")
22   finish
23 endif
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
29 syn case ignore
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
139 "       such. MEM 9/9/2006
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
144 "       Function list
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]\=\>"
173 "       Hex number
175 syn case match
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
184 "       Comments
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"
252 " vim: ts=8