410 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			410 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
| " Vim syntax file
 | |
| " Language:	QB64
 | |
| " Maintainer:	Doug Kearns <dougkearns@gmail.com>
 | |
| " Last Change:	2022 Jan 21
 | |
| 
 | |
| " Prelude {{{1
 | |
| if exists("b:current_syntax")
 | |
|   finish
 | |
| endif
 | |
| 
 | |
| let s:cpo_save = &cpo
 | |
| set cpo&vim
 | |
| 
 | |
| " syn iskeyword set after sourcing of basic.vim
 | |
| 
 | |
| syn case ignore
 | |
| 
 | |
| let s:prefix = search('\c^\s*$NOPREFIX\>', 'n') ? '_\=' : '_'
 | |
| 
 | |
| " Statements {{{1
 | |
| 
 | |
| let s:statements =<< trim EOL " {{{2
 | |
|   acceptfiledrop
 | |
|   allowfullscreen
 | |
|   assert
 | |
|   console
 | |
|   consolecursor
 | |
|   consolefont
 | |
|   consoletitle
 | |
|   continue
 | |
|   copypalette
 | |
|   define
 | |
|   delay
 | |
|   depthbuffer
 | |
|   displayorder
 | |
|   dontblend
 | |
|   echo
 | |
|   exit\s\+\%(select\|case\)
 | |
|   finishdrop
 | |
|   freefont
 | |
|   freeimage
 | |
|   icon
 | |
|   keyclear
 | |
|   limit
 | |
|   maptriangle
 | |
|   memcopy
 | |
|   memfill
 | |
|   memfree
 | |
|   memput
 | |
|   mousehide
 | |
|   mousemove
 | |
|   mouseshow
 | |
|   printimage
 | |
|   printstring
 | |
|   putimage
 | |
|   screenclick
 | |
|   screenhide
 | |
|   screenmove
 | |
|   screenprint
 | |
|   screenshow
 | |
|   setalpha
 | |
|   sndbal
 | |
|   sndclose
 | |
|   sndlimit
 | |
|   sndloop
 | |
|   sndpause
 | |
|   sndplay
 | |
|   sndplaycopy
 | |
|   sndplayfile
 | |
|   sndraw
 | |
|   sndrawdone
 | |
|   sndsetpos
 | |
|   sndstop
 | |
|   sndvol
 | |
|   title
 | |
| EOL
 | |
| " }}}
 | |
| 
 | |
| for s in s:statements
 | |
|   exe 'syn match qb64Statement "\<' .. s:prefix .. s .. '\>" contained contains=qb64Underscore'
 | |
| endfor
 | |
| 
 | |
| " Functions {{{1
 | |
| 
 | |
| let s:functions =<< trim EOL " {{{2
 | |
|   acos
 | |
|   acosh
 | |
|   alpha
 | |
|   alpha32
 | |
|   arccot
 | |
|   arccsc
 | |
|   arcsec
 | |
|   asin
 | |
|   asinh
 | |
|   atan2
 | |
|   atanh
 | |
|   axis
 | |
|   backgroundcolor
 | |
|   blue
 | |
|   blue32
 | |
|   button
 | |
|   buttonchange
 | |
|   ceil
 | |
|   cinp
 | |
|   commandcount
 | |
|   connected
 | |
|   connectionaddress
 | |
|   connectionaddress$
 | |
|   consoleinput
 | |
|   copyimage
 | |
|   cot
 | |
|   coth
 | |
|   cosh
 | |
|   csc
 | |
|   csch
 | |
|   cv
 | |
|   cwd$
 | |
|   d2g
 | |
|   d2r
 | |
|   defaultcolor
 | |
|   deflate$
 | |
|   desktopheight
 | |
|   desktopwidth
 | |
|   device$
 | |
|   deviceinput
 | |
|   devices
 | |
|   dir$
 | |
|   direxists
 | |
|   droppedfile
 | |
|   droppedfile$
 | |
|   errorline
 | |
|   errormessage$
 | |
|   exit
 | |
|   fileexists
 | |
|   fontheight
 | |
|   fontwidth
 | |
|   freetimer
 | |
|   g2d
 | |
|   g2r
 | |
|   green
 | |
|   green32
 | |
|   height
 | |
|   hypot
 | |
|   inclerrorfile$
 | |
|   inclerrorline
 | |
|   inflate$
 | |
|   instrrev
 | |
|   keyhit
 | |
|   keydown
 | |
|   lastaxis
 | |
|   lastbutton
 | |
|   lastwheel
 | |
|   loadfont
 | |
|   loadimage
 | |
|   mem
 | |
|   memelement
 | |
|   memexists
 | |
|   memimage
 | |
|   memnew
 | |
|   memsound
 | |
|   mk$
 | |
|   mousebutton
 | |
|   mouseinput
 | |
|   mousemovementx
 | |
|   mousemovementy
 | |
|   mousepipeopen
 | |
|   mousewheel
 | |
|   mousex
 | |
|   mousey
 | |
|   newimage
 | |
|   offset
 | |
|   openclient
 | |
|   os$
 | |
|   pi
 | |
|   pixelsize
 | |
|   printwidth
 | |
|   r2d
 | |
|   r2g
 | |
|   red
 | |
|   red32
 | |
|   readbit
 | |
|   resetbit
 | |
|   resizeheight
 | |
|   resizewidth
 | |
|   rgb
 | |
|   rgb32
 | |
|   rgba
 | |
|   rgba32
 | |
|   round
 | |
|   sec
 | |
|   sech
 | |
|   screenexists
 | |
|   screenimage
 | |
|   screenx
 | |
|   screeny
 | |
|   setbit
 | |
|   shellhide
 | |
|   shl
 | |
|   shr
 | |
|   sinh
 | |
|   sndcopy
 | |
|   sndgetpos
 | |
|   sndlen
 | |
|   sndopen
 | |
|   sndopenraw
 | |
|   sndpaused
 | |
|   sndplaying
 | |
|   sndrate
 | |
|   sndrawlen
 | |
|   startdir$
 | |
|   strcmp
 | |
|   stricmp
 | |
|   tanh
 | |
|   title$
 | |
|   togglebit
 | |
|   totaldroppedfiles
 | |
|   trim$
 | |
|   wheel
 | |
|   width
 | |
|   windowhandle
 | |
|   windowhasfocus
 | |
| EOL
 | |
| " }}}
 | |
| 
 | |
| for f in s:functions
 | |
|   exe 'syn match qb64Function "\<' .. s:prefix .. f .. '\>" contains=qb64Underscore'
 | |
| endfor
 | |
| 
 | |
| " Functions and statements (same name) {{{1
 | |
| 
 | |
| let s:common =<< trim EOL " {{{2
 | |
|   autodisplay
 | |
|   blend
 | |
|   blink
 | |
|   capslock
 | |
|   clearcolor
 | |
|   clipboard$
 | |
|   clipboardimage
 | |
|   controlchr
 | |
|   dest
 | |
|   display
 | |
|   font
 | |
|   fullscreen
 | |
|   mapunicode
 | |
|   memget
 | |
|   numlock
 | |
|   palettecolor
 | |
|   printmode
 | |
|   resize
 | |
|   screenicon
 | |
|   scrolllock
 | |
|   source
 | |
| EOL
 | |
| " }}}
 | |
| 
 | |
| for c in s:common
 | |
|   exe 'syn match qb64Statement "\<' .. s:prefix .. c .. '\>" contains=qb64Underscore contained'
 | |
|   exe 'syn match qb64Function  "\<' .. s:prefix .. c .. '\>" contains=qb64Underscore'
 | |
| endfor
 | |
| 
 | |
| " Keywords {{{1
 | |
| 
 | |
| " Non-prefixed keywords {{{2
 | |
| " TIMER FREE
 | |
| " _DEPTH_BUFFER LOCK
 | |
| syn keyword qb64Keyword free lock
 | |
| 
 | |
| let s:keywords  =<< trim EOL " {{{2
 | |
|   all
 | |
|   anticlockwise
 | |
|   behind
 | |
|   clear
 | |
|   clip
 | |
|   console
 | |
|   dontwait
 | |
|   explicit
 | |
|   explicitarray
 | |
|   fillbackground
 | |
|   hardware
 | |
|   hardware1
 | |
|   hide
 | |
|   keepbackground
 | |
|   middle
 | |
|   none
 | |
|   off
 | |
|   only
 | |
|   onlybackground
 | |
|   ontop
 | |
|   openconnection
 | |
|   openhost
 | |
|   preserve
 | |
|   seamless
 | |
|   smooth
 | |
|   smoothshrunk
 | |
|   smoothstretched
 | |
|   software
 | |
|   squarepixels
 | |
|   stretch
 | |
|   toggle
 | |
| EOL
 | |
| " }}}
 | |
| 
 | |
| for k in s:keywords
 | |
|   exe 'syn match qb64Keyword "\<' .. s:prefix .. k .. '\>" contains=qb64Underscore'
 | |
| endfor
 | |
| 
 | |
| syn match qb64Underscore "\<_" contained conceal transparent
 | |
| 
 | |
| " Source QuickBASIC syntax {{{1
 | |
| runtime! syntax/basic.vim
 | |
| 
 | |
| " add after the BASIC syntax file is sourced so cluster already exists
 | |
| syn cluster basicStatements	add=qb64Statement,qb64Metacommand,qb64IfMetacommand
 | |
| syn cluster basicLineIdentifier add=qb64LineLabel
 | |
| syn cluster qb64NotTop		contains=@basicNotTop,qb64Metavariable
 | |
| 
 | |
| syn iskeyword @,48-57,.,_,!,#,$,%,&,`
 | |
| 
 | |
| " Unsupported QuickBASIC features {{{1
 | |
| " TODO: add linux only missing features
 | |
| syn keyword qb64Unsupported alias any byval calls cdecl erdev erdev$ fileattr
 | |
| syn keyword qb64Unsupported fre ioctl ioctl$ pen play setmem signal uevent
 | |
| syn keyword qb64Unsupported tron troff
 | |
| syn match   qb64Unsupported "\<declare\%(\s\+\%(sub\|function\)\>\)\@="
 | |
| syn match   qb64Unsupported "\<\%(date\|time\)$\ze\s*=" " statements only
 | |
| syn match   qb64Unsupported "\<def\zs\s\+FN"
 | |
| syn match   qb64Unsupported "\<\%(exit\|end\)\s\+def\>"
 | |
| syn match   qb64Unsupported "\<width\s\+lprint\>"
 | |
| 
 | |
| " Types {{{1
 | |
| syn keyword qb64Type _BIT _BYTE _FLOAT _INTEGER64 _MEM _OFFSET _UNSIGNED
 | |
| 
 | |
| " Type suffixes {{{1
 | |
| if exists("basic_type_suffixes")
 | |
|   " TODO: handle leading word boundary and __+ prefix
 | |
|   syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=\~\=`\%(\d\+\)\="
 | |
|   syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=\~\=\%(%\|%%\|&\|&&\|%&\)"
 | |
|   syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=\%(!\|##\|#\)"
 | |
|   syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=$\%(\d\+\)\="
 | |
| endif
 | |
| 
 | |
| " Numbers {{{1
 | |
| 
 | |
| " Integers
 | |
| syn match qb64Number "-\=&b[01]\+&\>\="
 | |
| 
 | |
| syn match qb64Number "-\=\<[01]\~\=`\>"
 | |
| syn match qb64Number "-\=\<\d\+`\d\+\>"
 | |
| 
 | |
| syn match qb64Number "-\=\<\d\+\%(%%\|&&\|%&\)\>"
 | |
| syn match qb64Number  "\<\d\+\~\%(%%\|&&\|%&\)\>"
 | |
| 
 | |
| syn match qb64Number "-\=\<&b[01]\+\%(%%\|&&\|%&\)\>"
 | |
| syn match qb64Number  "\<&b[01]\+\~\%(%%\|&&\|%&\)\>"
 | |
| 
 | |
| syn match qb64Number "-\=\<&o\=\o\+\%(%%\|&&\|%&\)\>"
 | |
| syn match qb64Number  "\<&o\=\o\+\~\%(%%\|&&\|%&\)\>"
 | |
| 
 | |
| syn match qb64Number "-\=\<&h\x\+\%(%%\|&&\|%&\)\>"
 | |
| syn match qb64Number  "\<&h\x\+\~\%(%%\|&&\|%&\)\>"
 | |
| 
 | |
| " Floats
 | |
| syn match qb64Float "-\=\<\d\+\.\=\d*##\>"
 | |
| syn match qb64Float "-\=\<\.\d\+##\>"
 | |
| 
 | |
| " Line numbers and labels {{{1
 | |
| syn match qb64LineLabel  "\%(_\{2,}\)\=\a[[:alnum:]._]*[[:alnum:]]\ze\s*:" nextgroup=@basicStatements skipwhite contained
 | |
| 
 | |
| " Metacommands {{{1
 | |
| syn match qb64Metacommand contained "$NOPREFIX\>"
 | |
| syn match qb64Metacommand contained "$ASSERTS\%(:CONSOLE\)\=\>"
 | |
| syn match qb64Metacommand contained "$CHECKING:\%(ON\|OFF\)\>"
 | |
| syn match qb64Metacommand contained "$COLOR:\%(0\|32\)\>"
 | |
| syn match qb64Metacommand contained "$CONSOLE\%(:ONLY\)\=\>"
 | |
| syn match qb64Metacommand contained "$EXEICON\s*:\s*'[^']\+'"
 | |
| syn match qb64Metacommand contained "$ERROR\>"
 | |
| syn match qb64Metacommand contained "$LET\>"
 | |
| syn match qb64Metacommand contained "$RESIZE:\%(ON\|OFF\|STRETCH\|SMOOTH\)\>"
 | |
| syn match qb64Metacommand contained "$SCREEN\%(HIDE\|SHOW\)\>"
 | |
| syn match qb64Metacommand contained "$VERSIONINFO\s*:.*"
 | |
| syn match qb64Metacommand contained "$VIRTUALKEYBOARD:\%(ON\|OFF\)\>"
 | |
| 
 | |
| syn region qb64IfMetacommand contained matchgroup=qb64Metacommand start="$\%(IF\|ELSEIF\)\>" end="\<THEN\>" oneline transparent contains=qb64Metavariable
 | |
| syn match  qb64Metacommand contained "$\%(ELSE\|END\s*IF\)\>"
 | |
| 
 | |
| syn keyword qb64Metavariable contained defined undefined
 | |
| syn keyword qb64Metavariable contained windows win linux mac maxosx
 | |
| syn keyword qb64Metavariable contained 32bit 64bit version
 | |
| 
 | |
| " Default Highlighting {{{1
 | |
| hi def link qb64Float	      basicFloat
 | |
| hi def link qb64Function      Function
 | |
| hi def link qb64Keyword       Keyword
 | |
| hi def link qb64LineLabel     basicLineLabel
 | |
| hi def link qb64Metacommand   PreProc
 | |
| hi def link qb64Metavariable  Identifier
 | |
| hi def link qb64Number	      basicNumber
 | |
| hi def link qb64Statement     Statement
 | |
| hi def link qb64TypeSuffix    basicTypeSuffix
 | |
| hi def link qb64Type	      Type
 | |
| hi def link qb64Unsupported   Error
 | |
| 
 | |
| " Postscript {{{1
 | |
| let b:current_syntax = "qb64"
 | |
| 
 | |
| let &cpo = s:cpo_save
 | |
| unlet s:cpo_save
 | |
| 
 | |
| " vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker:
 |