BaCon Vim syntax file

Description of the page content

Vim syntax file for BaCon

Tags:

I wrote the following Vim syntax file in order to try the BaCon language more comfortably with my favourite editor.

Source code

" Vim syntax file
" Language: BaCon
" Maintainer:   Peter van Eerten
" Last Change:  February 18, 2023

" 2023-05-16: Modified by Marcos Cruz (programandala.net): `match` was
" replaced with `keyword` in function definitions, because the names were
" highlighted also as suffixes. A `\<` at the start of every name would solve
" it, but it's simpler to use `keyword`.

if version < 600
  syntax clear
elseif exists("b:current_syntax")
  finish
endif

" syntax case ignore

setlocal iskeyword+=$

" BACON string functions
syn keyword basicstrFunction    CHOP$ CA$ CN$ CHR$ CONCAT$ CURDIR$ ERR$ EXEC$ FILL$ HOST$ TYPEOF$ IIF$ REALPATH$ RUN$ LAST$ TOASCII$ ME$
syn keyword basicstrFunction    OBTAIN$ GETENVIRON$ HEX$ LCASE$ LEFT$ MID$ MIN$ MONTH$ MAX$ OS$ REPLACE$ GETPEER$ HOSTNAME$ EXPLODE$ LOOP$
syn keyword basicstrFunction    DIRNAME$ REVERSE$ RIGHT$ SPC$ STR$ TAB$ UCASE$ WEEKDAY$ INTL$ NNTL$ EXTRACT$ BASENAME$ B64ENC$ CIPHER$ COIL$
syn keyword basicstrFunction    INBETWEEN$ OUTBETWEEN$ BIN$ TOKEN$ FLATTEN$ UNFLATTEN$ EXCHANGE$ LOAD$ INSERT$ CHANGE$ FIRST$ B64DEC$ RIP$ REV$
syn keyword basicstrFunction    UNIQ$ SORT$ DELIM$ HEAD$ TAIL$ APPEND$ DEL$ CUT$ ALIGN$ UTF8$ PROPER$ ROTATE$ MERGE$ WALK$ GUIEVENT$
syn keyword basicstrFunction    ESCAPE$ UNESCAPE$ COLLAPSE$ INDEX$

" BACON keywords
syn keyword basicStatement  WHILE DO WEND REPEAT UNTIL FOR TO NEXT SELECT OFF INTERNATIONAL COMPILER BSAVE SAVE SET
syn keyword basicStatement  IF THEN ELSE ELIF ENDIF PRINT FORMAT INPUT TRACE STOP CONTINUE INCLUDE DOTIMES APPEND UNSET
syn keyword basicStatement  LET END OPEN READING WRITING AS STEP BREAK DEFAULT ALIAS VAR PRAGMA IN ENDFORK BAPPEND SCREEN
syn keyword basicStatement  APPENDING READWRITE CLOSE REWIND MEMREWIND READLN CURSOR LOOKUP LDFLAGS LIBRARY QUOTED FTYPE
syn keyword basicStatement  FROM WRITELN SUB READ ENDSUB CALL IMPORT GETLINE INCR DECR FI EXIT EPRINT DONE MAP DQ ESC
syn keyword basicStatement  DECLARE TYPE INCLUDE SYSTEM DATA RESTORE PUTLINE COLLAPSE ARRAY OPTIONS SIGNAL UTF8 FUNCTION
syn keyword basicStatement  ENDFUNCTION ENDFUNC ENDRECORD RETURN POKE PUSH PULL SEEK ON ALARM STARTPOINT SWAP RUN FUNC
syn keyword basicStatement  SLEEP SEED GETBYTE CONST COPY DELETE SETENVIRON CASE RELATE SCTP FORWARD VARTYPE EXPLICIT
syn keyword basicStatement  OFFSET WHENCE RESUME START CURRENT PUTBYTE ENDWITH SOCKET MULTICAST JOIN DOWNTO PROPER
syn keyword basicStatement  SIZE GOTO LABEL TRAP CATCH USEC WITH SPLIT BY COMPARE CHUNK REDIM BACK PARSE RE TLS CLASS
syn keyword basicStatement  ENDUSEC ENDUSEH FILE DIRECTORY GETFILE RENAME CLEAR IS EQ PROTO GOSUB USEH LT LE ENDCLASS
syn keyword basicStatement  COLOR RESET INTENSE NORMAL BLACK RED GREEN RECORD ASSOC TEXTDOMAIN RECURSIVE DELIM TREE
syn keyword basicStatement  YELLOW BLUE MAGENTA CYAN WHITE FG BG GOTOXY NE ISNOT BASE BROADCAST GT GE FRAMEWORK NODE
syn keyword basicStatement  MAKEDIR CHANGEDIR LOCAL GLOBAL RESIZE ENDSELECT OPTION MEMTYPE TCP UP GUI CERTIFICATE BOLD
syn keyword basicStatement  DEF FN FREE NETWORK SEND RECEIVE SERVER SORT DOWN MEMSTREAM UDP SCROLL INVERSE COLLECT BLINK STRIKE
syn keyword basicStatement  SETSERIAL DEVICE SPEED IMODE OTHER OMODE CMODE LMODE STATIC ENUM ENDENUM MONITOR ITALIC UNDERLINE

" BACON functions
syn keyword basicFunction   SQR POW SIN COS TAN ABS ROUND NOT ENDFILE TELL REGEX ISTRUE ASIN ACOS BIT ISTOKEN EXCL EVAL GUIDEFINE FIND BEYOND
syn keyword basicFunction   LEN VAL MOD DIR DEC ASC AND OR INSTR FLOOR ISFALSE IIF NOW MEMCHECK COUNT AMOUNT BETWEEN HASDELIM UBOUND WHERE
syn keyword basicFunction   MEMORY PEEK INSTRREV GETX GETY DAY RND EVEN ODD TIMER ISKEY MAXNUM CEIL BLOAD BYTELEN HASH LOOP GUIGET MATCH
syn keyword basicFunction   SEARCH WEEK MONTH YEAR INT SIZEOF ATN ATN2 LOG EXP SGN GETKEY CMDLINE DEG FORK TALLY SUM SUMF GUISET ACCEPT
syn keyword basicFunction   HOUR MINUTE SECOND ADDRESS FILELEN FILETYPE FILEEXISTS RAD MYPID ROL ROR ISASCII VERIFY GUIWIDGET INDEX
syn keyword basicFunction   COLUMNS ROWS WAIT TIMEVALUE RANDOM EQUAL MEMTELL FP FILETIME MIN MAX REAP ULEN UCS NRKEYS ISUTF8 GUIFN INVERT

" BACON constants
syn keyword basicConstant   TRUE FALSE PI MAXRANDOM REGLEN RETVAL ERROR LINENO SP NULL
syn keyword basicstrConstant    NL$ CR$ DLE$ EL$ CL$ VERSION$ ARGUMENT$ SOURCE$

"integer number, or floating point number without a dot.
syn match  basicNumber      "\<\d\+\>"
"floating point number, with dot
syn match  basicNumber      "\<\d\+\.\d*\>"
"floating point number, starting with a dot
syn match  basicNumber      "\.\d\+\>"

" String and Character contstants
syn match   basicSpecial contained "\\\d\d\d\|\\."
syn region  basicString       start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=basicSpecial

syn region  basicComment        start="/\*" end="\*/" contains=basicTodo
syn region  basicComment    start="REM" end="$" contains=basicTodo
syn region  basicComment    start="'" end="$" contains=basicTodo

syn keyword basicTypeSpecifier  int double float long char short void signed unsigned static extern struct volatile const public private virtual
syn keyword basicTypeSpecifier  intptr_t uintptr_t int8_t uint8_t int16_t uint16_t int32_t uint32_t int64_t uint64_t
syn keyword basicTypeSpecifier  STRING NUMBER FLOATING
syn match   basicTypeSpecifier  "[a-zA-Z0-9]"ms=s+1
syn match   basicMathsOperator   "-\|=\|[:<>+\*^/\\]"

" HUG wrapper functions
syn keyword basicWrapperFunc    INIT HUGOPTIONS QUIT DRAW HIDE SHOW WINDOW DISPLAY TEXT GET VSLIDER
syn keyword basicWrapperFunc    NOTEBOOK BUTTON STOCK TOGGLE CHECK RADIO ENTRY PASSWORD HSLIDER
syn keyword basicWrapperFunc    MARK COMBO HSEPARATOR VSEPARATOR SEPARATOR FRAME EDIT LIST MSGDIALOG SYNC
syn keyword basicWrapperFunc    FILEDIALOG SPIN IMAGE CANVAS CLIPBOARD PROGRESSBAR CALLBACK METHOD
syn keyword basicWrapperFunc    CALLBACKX MOUSE CIRCLE PIXEL LINE SQUARE OUT PICTURE ATTACH REGISTER
syn keyword basicWrapperFunc    TIMEOUT FONT DISABLE ENABLE FOCUS UNFOCUS SCREENSIZE KEY PROPERTY
syn keyword basicWrapperFunc    GETPROPERTY SETPROPERTY RESETKEY WIDGET SLIDER REMOVE
syn keyword basicWrapperstrFunc GRAB$ HUGLIB$ GETCOLOR$$ HUGVERSION$

" GMP wrapper functions
syn keyword basicWrapperFunc    INIT PRECISION FCOMPARE ISPRIME
syn keyword basicWrapperstrFunc ADD$ SUBSTRACT$ MULTIPLY$ DIVIDE$ MODULO$ POWER$ SQUARE$
syn keyword basicWrapperstrFunc ROOT$ FADD$ FSUBSTRACT$ FMULTIPLY$ FDIVIDE$ FPOWER$
syn keyword basicWrapperstrFunc FIBONACCI$ FACTORIAL$ NEXTPRIME$ FSQUARE$ GCD$

if version >= 508 || !exists("did_bacon_syntax_inits")
  if version < 508
    let did_bacon_syntax_inits = 1
    command -nargs=+ HiLink hi link <args>
  else
    command -nargs=+ HiLink hi def link <args>
  endif

  hi def link basicFunction     Identifier
  hi def link basicStatement        Statement
  hi def link basicstrFunction      Function
  hi def link basicNumber       Number
  hi def link basicString       String
  hi def link basicComment      Comment
  hi def link basicSpecial      Special
  hi def link basicTodo         Todo
  hi def link basicTypeSpecifier    Type
  hi def link basicWrapperFunc      PreProc
  hi def link basicWrapperstrFunc   PreProc
  hi def link basicConstant     Constant
  hi def link basicstrConstant      Constant
  hi def link basicFilenumber   basicTypeSpecifier
  hi basicMathsOperator term=bold cterm=bold gui=bold

  delcommand HiLink
endif

let b:current_syntax = "bacon"

Downloads

Related pages

Lowercase BaCon
BaCon program that enables lowercase keywords in BaCon code.