neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

qb64.vim (7965B)


      1 " Vim syntax file
      2 " Language:	QB64
      3 " Maintainer:	Doug Kearns <dougkearns@gmail.com>
      4 " Last Change:	2022 Jan 21
      5 
      6 " Prelude {{{1
      7 if exists("b:current_syntax")
      8  finish
      9 endif
     10 
     11 let s:cpo_save = &cpo
     12 set cpo&vim
     13 
     14 " syn iskeyword set after sourcing of basic.vim
     15 
     16 syn case ignore
     17 
     18 let s:prefix = search('\c^\s*$NOPREFIX\>', 'n') ? '_\=' : '_'
     19 
     20 " Statements {{{1
     21 
     22 let s:statements =<< trim EOL " {{{2
     23  acceptfiledrop
     24  allowfullscreen
     25  assert
     26  console
     27  consolecursor
     28  consolefont
     29  consoletitle
     30  continue
     31  copypalette
     32  define
     33  delay
     34  depthbuffer
     35  displayorder
     36  dontblend
     37  echo
     38  exit\s\+\%(select\|case\)
     39  finishdrop
     40  freefont
     41  freeimage
     42  icon
     43  keyclear
     44  limit
     45  maptriangle
     46  memcopy
     47  memfill
     48  memfree
     49  memput
     50  mousehide
     51  mousemove
     52  mouseshow
     53  printimage
     54  printstring
     55  putimage
     56  screenclick
     57  screenhide
     58  screenmove
     59  screenprint
     60  screenshow
     61  setalpha
     62  sndbal
     63  sndclose
     64  sndlimit
     65  sndloop
     66  sndpause
     67  sndplay
     68  sndplaycopy
     69  sndplayfile
     70  sndraw
     71  sndrawdone
     72  sndsetpos
     73  sndstop
     74  sndvol
     75  title
     76 EOL
     77 " }}}
     78 
     79 for s in s:statements
     80  exe 'syn match qb64Statement "\<' .. s:prefix .. s .. '\>" contained contains=qb64Underscore'
     81 endfor
     82 
     83 " Functions {{{1
     84 
     85 let s:functions =<< trim EOL " {{{2
     86  acos
     87  acosh
     88  alpha
     89  alpha32
     90  arccot
     91  arccsc
     92  arcsec
     93  asin
     94  asinh
     95  atan2
     96  atanh
     97  axis
     98  backgroundcolor
     99  blue
    100  blue32
    101  button
    102  buttonchange
    103  ceil
    104  cinp
    105  commandcount
    106  connected
    107  connectionaddress
    108  connectionaddress$
    109  consoleinput
    110  copyimage
    111  cot
    112  coth
    113  cosh
    114  csc
    115  csch
    116  cv
    117  cwd$
    118  d2g
    119  d2r
    120  defaultcolor
    121  deflate$
    122  desktopheight
    123  desktopwidth
    124  device$
    125  deviceinput
    126  devices
    127  dir$
    128  direxists
    129  droppedfile
    130  droppedfile$
    131  errorline
    132  errormessage$
    133  exit
    134  fileexists
    135  fontheight
    136  fontwidth
    137  freetimer
    138  g2d
    139  g2r
    140  green
    141  green32
    142  height
    143  hypot
    144  inclerrorfile$
    145  inclerrorline
    146  inflate$
    147  instrrev
    148  keyhit
    149  keydown
    150  lastaxis
    151  lastbutton
    152  lastwheel
    153  loadfont
    154  loadimage
    155  mem
    156  memelement
    157  memexists
    158  memimage
    159  memnew
    160  memsound
    161  mk$
    162  mousebutton
    163  mouseinput
    164  mousemovementx
    165  mousemovementy
    166  mousepipeopen
    167  mousewheel
    168  mousex
    169  mousey
    170  newimage
    171  offset
    172  openclient
    173  os$
    174  pi
    175  pixelsize
    176  printwidth
    177  r2d
    178  r2g
    179  red
    180  red32
    181  readbit
    182  resetbit
    183  resizeheight
    184  resizewidth
    185  rgb
    186  rgb32
    187  rgba
    188  rgba32
    189  round
    190  sec
    191  sech
    192  screenexists
    193  screenimage
    194  screenx
    195  screeny
    196  setbit
    197  shellhide
    198  shl
    199  shr
    200  sinh
    201  sndcopy
    202  sndgetpos
    203  sndlen
    204  sndopen
    205  sndopenraw
    206  sndpaused
    207  sndplaying
    208  sndrate
    209  sndrawlen
    210  startdir$
    211  strcmp
    212  stricmp
    213  tanh
    214  title$
    215  togglebit
    216  totaldroppedfiles
    217  trim$
    218  wheel
    219  width
    220  windowhandle
    221  windowhasfocus
    222 EOL
    223 " }}}
    224 
    225 for f in s:functions
    226  exe 'syn match qb64Function "\<' .. s:prefix .. f .. '\>" contains=qb64Underscore'
    227 endfor
    228 
    229 " Functions and statements (same name) {{{1
    230 
    231 let s:common =<< trim EOL " {{{2
    232  autodisplay
    233  blend
    234  blink
    235  capslock
    236  clearcolor
    237  clipboard$
    238  clipboardimage
    239  controlchr
    240  dest
    241  display
    242  font
    243  fullscreen
    244  mapunicode
    245  memget
    246  numlock
    247  palettecolor
    248  printmode
    249  resize
    250  screenicon
    251  scrolllock
    252  source
    253 EOL
    254 " }}}
    255 
    256 for c in s:common
    257  exe 'syn match qb64Statement "\<' .. s:prefix .. c .. '\>" contains=qb64Underscore contained'
    258  exe 'syn match qb64Function  "\<' .. s:prefix .. c .. '\>" contains=qb64Underscore'
    259 endfor
    260 
    261 " Keywords {{{1
    262 
    263 " Non-prefixed keywords {{{2
    264 " TIMER FREE
    265 " _DEPTH_BUFFER LOCK
    266 syn keyword qb64Keyword free lock
    267 
    268 let s:keywords  =<< trim EOL " {{{2
    269  all
    270  anticlockwise
    271  behind
    272  clear
    273  clip
    274  console
    275  dontwait
    276  explicit
    277  explicitarray
    278  fillbackground
    279  hardware
    280  hardware1
    281  hide
    282  keepbackground
    283  middle
    284  none
    285  off
    286  only
    287  onlybackground
    288  ontop
    289  openconnection
    290  openhost
    291  preserve
    292  seamless
    293  smooth
    294  smoothshrunk
    295  smoothstretched
    296  software
    297  squarepixels
    298  stretch
    299  toggle
    300 EOL
    301 " }}}
    302 
    303 for k in s:keywords
    304  exe 'syn match qb64Keyword "\<' .. s:prefix .. k .. '\>" contains=qb64Underscore'
    305 endfor
    306 
    307 syn match qb64Underscore "\<_" contained conceal transparent
    308 
    309 " Source QuickBASIC syntax {{{1
    310 runtime! syntax/basic.vim
    311 
    312 " add after the BASIC syntax file is sourced so cluster already exists
    313 syn cluster basicStatements	add=qb64Statement,qb64Metacommand,qb64IfMetacommand
    314 syn cluster basicLineIdentifier add=qb64LineLabel
    315 syn cluster qb64NotTop		contains=@basicNotTop,qb64Metavariable
    316 
    317 syn iskeyword @,48-57,.,_,!,#,$,%,&,`
    318 
    319 " Unsupported QuickBASIC features {{{1
    320 " TODO: add linux only missing features
    321 syn keyword qb64Unsupported alias any byval calls cdecl erdev erdev$ fileattr
    322 syn keyword qb64Unsupported fre ioctl ioctl$ pen play setmem signal uevent
    323 syn keyword qb64Unsupported tron troff
    324 syn match   qb64Unsupported "\<declare\%(\s\+\%(sub\|function\)\>\)\@="
    325 syn match   qb64Unsupported "\<\%(date\|time\)$\ze\s*=" " statements only
    326 syn match   qb64Unsupported "\<def\zs\s\+FN"
    327 syn match   qb64Unsupported "\<\%(exit\|end\)\s\+def\>"
    328 syn match   qb64Unsupported "\<width\s\+lprint\>"
    329 
    330 " Types {{{1
    331 syn keyword qb64Type _BIT _BYTE _FLOAT _INTEGER64 _MEM _OFFSET _UNSIGNED
    332 
    333 " Type suffixes {{{1
    334 if exists("basic_type_suffixes")
    335  " TODO: handle leading word boundary and __+ prefix
    336  syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=\~\=`\%(\d\+\)\="
    337  syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=\~\=\%(%\|%%\|&\|&&\|%&\)"
    338  syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=\%(!\|##\|#\)"
    339  syn match qb64TypeSuffix "\%(\a[[:alnum:]._]*\)\@<=$\%(\d\+\)\="
    340 endif
    341 
    342 " Numbers {{{1
    343 
    344 " Integers
    345 syn match qb64Number "-\=&b[01]\+&\>\="
    346 
    347 syn match qb64Number "-\=\<[01]\~\=`\>"
    348 syn match qb64Number "-\=\<\d\+`\d\+\>"
    349 
    350 syn match qb64Number "-\=\<\d\+\%(%%\|&&\|%&\)\>"
    351 syn match qb64Number  "\<\d\+\~\%(%%\|&&\|%&\)\>"
    352 
    353 syn match qb64Number "-\=\<&b[01]\+\%(%%\|&&\|%&\)\>"
    354 syn match qb64Number  "\<&b[01]\+\~\%(%%\|&&\|%&\)\>"
    355 
    356 syn match qb64Number "-\=\<&o\=\o\+\%(%%\|&&\|%&\)\>"
    357 syn match qb64Number  "\<&o\=\o\+\~\%(%%\|&&\|%&\)\>"
    358 
    359 syn match qb64Number "-\=\<&h\x\+\%(%%\|&&\|%&\)\>"
    360 syn match qb64Number  "\<&h\x\+\~\%(%%\|&&\|%&\)\>"
    361 
    362 " Floats
    363 syn match qb64Float "-\=\<\d\+\.\=\d*##\>"
    364 syn match qb64Float "-\=\<\.\d\+##\>"
    365 
    366 " Line numbers and labels {{{1
    367 syn match qb64LineLabel  "\%(_\{2,}\)\=\a[[:alnum:]._]*[[:alnum:]]\ze\s*:" nextgroup=@basicStatements skipwhite contained
    368 
    369 " Metacommands {{{1
    370 syn match qb64Metacommand contained "$NOPREFIX\>"
    371 syn match qb64Metacommand contained "$ASSERTS\%(:CONSOLE\)\=\>"
    372 syn match qb64Metacommand contained "$CHECKING:\%(ON\|OFF\)\>"
    373 syn match qb64Metacommand contained "$COLOR:\%(0\|32\)\>"
    374 syn match qb64Metacommand contained "$CONSOLE\%(:ONLY\)\=\>"
    375 syn match qb64Metacommand contained "$EXEICON\s*:\s*'[^']\+'"
    376 syn match qb64Metacommand contained "$ERROR\>"
    377 syn match qb64Metacommand contained "$LET\>"
    378 syn match qb64Metacommand contained "$RESIZE:\%(ON\|OFF\|STRETCH\|SMOOTH\)\>"
    379 syn match qb64Metacommand contained "$SCREEN\%(HIDE\|SHOW\)\>"
    380 syn match qb64Metacommand contained "$VERSIONINFO\s*:.*"
    381 syn match qb64Metacommand contained "$VIRTUALKEYBOARD:\%(ON\|OFF\)\>"
    382 
    383 syn region qb64IfMetacommand contained matchgroup=qb64Metacommand start="$\%(IF\|ELSEIF\)\>" end="\<THEN\>" oneline transparent contains=qb64Metavariable
    384 syn match  qb64Metacommand contained "$\%(ELSE\|END\s*IF\)\>"
    385 
    386 syn keyword qb64Metavariable contained defined undefined
    387 syn keyword qb64Metavariable contained windows win linux mac maxosx
    388 syn keyword qb64Metavariable contained 32bit 64bit version
    389 
    390 " Default Highlighting {{{1
    391 hi def link qb64Float	      basicFloat
    392 hi def link qb64Function      Function
    393 hi def link qb64Keyword       Keyword
    394 hi def link qb64LineLabel     basicLineLabel
    395 hi def link qb64Metacommand   PreProc
    396 hi def link qb64Metavariable  Identifier
    397 hi def link qb64Number	      basicNumber
    398 hi def link qb64Statement     Statement
    399 hi def link qb64TypeSuffix    basicTypeSuffix
    400 hi def link qb64Type	      Type
    401 hi def link qb64Unsupported   Error
    402 
    403 " Postscript {{{1
    404 let b:current_syntax = "qb64"
    405 
    406 let &cpo = s:cpo_save
    407 unlet s:cpo_save
    408 
    409 " vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: