freebasic.vim 10 KB

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