neovim/runtime/syntax/nqc.vim

366 lines
14 KiB
VimL

" Vim syntax file
" Language: NQC - Not Quite C, for LEGO mindstorms
" NQC homepage: http://www.enteract.com/~dbaum/nqc/
" Maintainer: Stefan Scherer <stefan@enotes.de>
" Last Change: 2001 May 10
" URL: http://www.enotes.de/twiki/pub/Home/LegoMindstorms/nqc.vim
" Filenames: .nqc
" quit when a syntax file was already loaded
if exists("b:current_syntax")
finish
endif
" Statements
syn keyword nqcStatement break return continue start stop abs sign
syn keyword nqcStatement sub task
syn keyword nqcLabel case default
syn keyword nqcConditional if else switch
syn keyword nqcRepeat while for do until repeat
" Scout and RCX2
syn keyword nqcEvents acquire catch monitor
" types and classes
syn keyword nqcType int true false void
syn keyword nqcStorageClass asm const inline
" Sensors --------------------------------------------
" Input Sensors
syn keyword nqcConstant SENSOR_1 SENSOR_2 SENSOR_3
" Types for SetSensorType()
syn keyword nqcConstant SENSOR_TYPE_TOUCH SENSOR_TYPE_TEMPERATURE
syn keyword nqcConstant SENSOR_TYPE_LIGHT SENSOR_TYPE_ROTATION
syn keyword nqcConstant SENSOR_LIGHT SENSOR_TOUCH
" Modes for SetSensorMode()
syn keyword nqcConstant SENSOR_MODE_RAW SENSOR_MODE_BOOL
syn keyword nqcConstant SENSOR_MODE_EDGE SENSOR_MODE_PULSE
syn keyword nqcConstant SENSOR_MODE_PERCENT SENSOR_MODE_CELSIUS
syn keyword nqcConstant SENSOR_MODE_FAHRENHEIT SENSOR_MODE_ROTATION
" Sensor configurations for SetSensor()
syn keyword nqcConstant SENSOR_TOUCH SENSOR_LIGHT SENSOR_ROTATION
syn keyword nqcConstant SENSOR_CELSIUS SENSOR_FAHRENHEIT SENSOR_PULSE
syn keyword nqcConstant SENSOR_EDGE
" Functions - All
syn keyword nqcFunction ClearSensor
syn keyword nqcFunction SensorValue SensorType
" Functions - RCX
syn keyword nqcFunction SetSensor SetSensorType
syn keyword nqcFunction SensorValueBool
" Functions - RCX, CyberMaster
syn keyword nqcFunction SetSensorMode SensorMode
" Functions - RCX, Scout
syn keyword nqcFunction SensorValueRaw
" Functions - Scout
syn keyword nqcFunction SetSensorLowerLimit SetSensorUpperLimit
syn keyword nqcFunction SetSensorHysteresis CalibrateSensor
" Outputs --------------------------------------------
" Outputs for On(), Off(), etc.
syn keyword nqcConstant OUT_A OUT_B OUT_C
" Modes for SetOutput()
syn keyword nqcConstant OUT_ON OUT_OFF OUT_FLOAT
" Directions for SetDirection()
syn keyword nqcConstant OUT_FWD OUT_REV OUT_TOGGLE
" Output power for SetPower()
syn keyword nqcConstant OUT_LOW OUT_HALF OUT_FULL
" Functions - All
syn keyword nqcFunction SetOutput SetDirection SetPower OutputStatus
syn keyword nqcFunction On Off Float Fwd Rev Toggle
syn keyword nqcFunction OnFwd OnRev OnFor
" Functions - RXC2, Scout
syn keyword nqcFunction SetGlobalOutput SetGlobalDirection SetMaxPower
syn keyword nqcFunction GlobalOutputStatus
" Sound ----------------------------------------------
" Sounds for PlaySound()
syn keyword nqcConstant SOUND_CLICK SOUND_DOUBLE_BEEP SOUND_DOWN
syn keyword nqcConstant SOUND_UP SOUND_LOW_BEEP SOUND_FAST_UP
" Functions - All
syn keyword nqcFunction PlaySound PlayTone
" Functions - RCX2, Scout
syn keyword nqcFunction MuteSound UnmuteSound ClearSound
syn keyword nqcFunction SelectSounds
" LCD ------------------------------------------------
" Modes for SelectDisplay()
syn keyword nqcConstant DISPLAY_WATCH DISPLAY_SENSOR_1 DISPLAY_SENSOR_2
syn keyword nqcConstant DISPLAY_SENSOR_3 DISPLAY_OUT_A DISPLAY_OUT_B
syn keyword nqcConstant DISPLAY_OUT_C
" RCX2
syn keyword nqcConstant DISPLAY_USER
" Functions - RCX
syn keyword nqcFunction SelectDisplay
" Functions - RCX2
syn keyword nqcFunction SetUserDisplay
" Communication --------------------------------------
" Messages - RCX, Scout ------------------------------
" Tx power level for SetTxPower()
syn keyword nqcConstant TX_POWER_LO TX_POWER_HI
" Functions - RCX, Scout
syn keyword nqcFunction Message ClearMessage SendMessage SetTxPower
" Serial - RCX2 --------------------------------------
" for SetSerialComm()
syn keyword nqcConstant SERIAL_COMM_DEFAULT SERIAL_COMM_4800
syn keyword nqcConstant SERIAL_COMM_DUTY25 SERIAL_COMM_76KHZ
" for SetSerialPacket()
syn keyword nqcConstant SERIAL_PACKET_DEFAULT SERIAL_PACKET_PREAMBLE
syn keyword nqcConstant SERIAL_PACKET_NEGATED SERIAL_PACKET_CHECKSUM
syn keyword nqcConstant SERIAL_PACKET_RCX
" Functions - RCX2
syn keyword nqcFunction SetSerialComm SetSerialPacket SetSerialData
syn keyword nqcFunction SerialData SendSerial
" VLL - Scout ----------------------------------------
" Functions - Scout
syn keyword nqcFunction SendVLL
" Timers ---------------------------------------------
" Functions - All
syn keyword nqcFunction ClearTimer Timer
" Functions - RCX2
syn keyword nqcFunction SetTimer FastTimer
" Counters -------------------------------------------
" Functions - RCX2, Scout
syn keyword nqcFunction ClearCounter IncCounter DecCounter Counter
" Access Control -------------------------------------
syn keyword nqcConstant ACQUIRE_OUT_A ACQUIRE_OUT_B ACQUIRE_OUT_C
syn keyword nqcConstant ACQUIRE_SOUND
" RCX2 only
syn keyword nqcConstant ACQUIRE_USER_1 ACQUIRE_USER_2 ACQUIRE_USER_3
syn keyword nqcConstant ACQUIRE_USER_4
" Functions - RCX2, Scout
syn keyword nqcFunction SetPriority
" Events ---------------------------------------------
" RCX2 Events
syn keyword nqcConstant EVENT_TYPE_PRESSED EVENT_TYPE_RELEASED
syn keyword nqcConstant EVENT_TYPE_PULSE EVENT_TYPE_EDGE
syn keyword nqcConstant EVENT_TYPE_FAST_CHANGE EVENT_TYPE_LOW
syn keyword nqcConstant EVENT_TYPE_NORMAL EVENT_TYPE_HIGH
syn keyword nqcConstant EVENT_TYPE_CLICK EVENT_TYPE_DOUBLECLICK
syn keyword nqcConstant EVENT_TYPE_MESSAGE
" Scout Events
syn keyword nqcConstant EVENT_1_PRESSED EVENT_1_RELEASED
syn keyword nqcConstant EVENT_2_PRESSED EVENT_2_RELEASED
syn keyword nqcConstant EVENT_LIGHT_HIGH EVENT_LIGHT_NORMAL
syn keyword nqcConstant EVENT_LIGHT_LOW EVENT_LIGHT_CLICK
syn keyword nqcConstant EVENT_LIGHT_DOUBLECLICK EVENT_COUNTER_0
syn keyword nqcConstant EVENT_COUNTER_1 EVENT_TIMER_0 EVENT_TIMER_1
syn keyword nqcConstant EVENT_TIMER_2 EVENT_MESSAGE
" Functions - RCX2, Scout
syn keyword nqcFunction ActiveEvents Event
" Functions - RCX2
syn keyword nqcFunction CurrentEvents
syn keyword nqcFunction SetEvent ClearEvent ClearAllEvents EventState
syn keyword nqcFunction CalibrateEvent SetUpperLimit UpperLimit
syn keyword nqcFunction SetLowerLimit LowerLimit SetHysteresis
syn keyword nqcFunction Hysteresis
syn keyword nqcFunction SetClickTime ClickTime SetClickCounter
syn keyword nqcFunction ClickCounter
" Functions - Scout
syn keyword nqcFunction SetSensorClickTime SetCounterLimit
syn keyword nqcFunction SetTimerLimit
" Data Logging ---------------------------------------
" Functions - RCX
syn keyword nqcFunction CreateDatalog AddToDatalog
syn keyword nqcFunction UploadDatalog
" General Features -----------------------------------
" Functions - All
syn keyword nqcFunction Wait StopAllTasks Random
syn keyword nqcFunction SetSleepTime SleepNow
" Functions - RCX
syn keyword nqcFunction Program Watch SetWatch
" Functions - RCX2
syn keyword nqcFunction SetRandomSeed SelectProgram
syn keyword nqcFunction BatteryLevel FirmwareVersion
" Functions - Scout
" Parameters for SetLight()
syn keyword nqcConstant LIGHT_ON LIGHT_OFF
syn keyword nqcFunction SetScoutRules ScoutRules SetScoutMode
syn keyword nqcFunction SetEventFeedback EventFeedback SetLight
" additional CyberMaster defines
syn keyword nqcConstant OUT_L OUT_R OUT_X
syn keyword nqcConstant SENSOR_L SENSOR_M SENSOR_R
" Functions - CyberMaster
syn keyword nqcFunction Drive OnWait OnWaitDifferent
syn keyword nqcFunction ClearTachoCounter TachoCount TachoSpeed
syn keyword nqcFunction ExternalMotorRunning AGC
" nqcCommentGroup allows adding matches for special things in comments
syn keyword nqcTodo contained TODO FIXME XXX
syn cluster nqcCommentGroup contains=nqcTodo
"when wanted, highlight trailing white space
if exists("nqc_space_errors")
if !exists("nqc_no_trail_space_error")
syn match nqcSpaceError display excludenl "\s\+$"
endif
if !exists("nqc_no_tab_space_error")
syn match nqcSpaceError display " \+\t"me=e-1
endif
endif
"catch errors caused by wrong parenthesis and brackets
syn cluster nqcParenGroup contains=nqcParenError,nqcIncluded,nqcCommentSkip,@nqcCommentGroup,nqcCommentStartError,nqcCommentSkip,nqcCppOut,nqcCppOut2,nqcCppSkip,nqcNumber,nqcFloat,nqcNumbers
if exists("nqc_no_bracket_error")
syn region nqcParen transparent start='(' end=')' contains=ALLBUT,@nqcParenGroup,nqcCppParen
" nqcCppParen: same as nqcParen but ends at end-of-line; used in nqcDefine
syn region nqcCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@nqcParenGroup,nqcParen
syn match nqcParenError display ")"
syn match nqcErrInParen display contained "[{}]"
else
syn region nqcParen transparent start='(' end=')' contains=ALLBUT,@nqcParenGroup,nqcCppParen,nqcErrInBracket,nqcCppBracket
" nqcCppParen: same as nqcParen but ends at end-of-line; used in nqcDefine
syn region nqcCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@nqcParenGroup,nqcErrInBracket,nqcParen,nqcBracket
syn match nqcParenError display "[\])]"
syn match nqcErrInParen display contained "[\]{}]"
syn region nqcBracket transparent start='\[' end=']' contains=ALLBUT,@nqcParenGroup,nqcErrInParen,nqcCppParen,nqcCppBracket
" nqcCppBracket: same as nqcParen but ends at end-of-line; used in nqcDefine
syn region nqcCppBracket transparent start='\[' skip='\\$' excludenl end=']' end='$' contained contains=ALLBUT,@nqcParenGroup,nqcErrInParen,nqcParen,nqcBracket
syn match nqcErrInBracket display contained "[);{}]"
endif
"integer number, or floating point number without a dot and with "f".
syn case ignore
syn match nqcNumbers display transparent "\<\d\|\.\d" contains=nqcNumber,nqcFloat
" Same, but without octal error (for comments)
syn match nqcNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
"hex number
syn match nqcNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
" Flag the first zero of an octal number as something special
syn match nqcFloat display contained "\d\+f"
"floating point number, with dot, optional exponent
syn match nqcFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
"floating point number, starting with a dot, optional exponent
syn match nqcFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
"floating point number, without dot, with exponent
syn match nqcFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>"
" flag an octal number with wrong digits
syn case match
syn region nqcCommentL start="//" skip="\\$" end="$" keepend contains=@nqcCommentGroup,nqcSpaceError
syn region nqcComment matchgroup=nqcCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@nqcCommentGroup,nqcCommentStartError,nqcSpaceError
" keep a // comment separately, it terminates a preproc. conditional
syntax match nqcCommentError display "\*/"
syntax match nqcCommentStartError display "/\*" contained
syn region nqcPreCondit start="^\s*#\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=nqcComment,nqcCharacter,nqcCppParen,nqcParenError,nqcNumbers,nqcCommentError,nqcSpaceError
syn match nqcPreCondit display "^\s*#\s*\(else\|endif\)\>"
if !exists("nqc_no_if0")
syn region nqcCppOut start="^\s*#\s*if\s\+0\>" end=".\|$" contains=nqcCppOut2
syn region nqcCppOut2 contained start="0" end="^\s*#\s*\(endif\>\|else\>\|elif\>\)" contains=nqcSpaceError,nqcCppSkip
syn region nqcCppSkip contained start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*#\s*endif\>" contains=nqcSpaceError,nqcCppSkip
endif
syn region nqcIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
syn match nqcInclude display "^\s*#\s*include\>\s*["]" contains=nqcIncluded
"syn match nqcLineSkip "\\$"
syn cluster nqcPreProcGroup contains=nqcPreCondit,nqcIncluded,nqcInclude,nqcDefine,nqcErrInParen,nqcErrInBracket,nqcCppOut,nqcCppOut2,nqcCppSkip,nqcNumber,nqcFloat,nqcNumbers,nqcCommentSkip,@nqcCommentGroup,nqcCommentStartError,nqcParen,nqcBracket
syn region nqcDefine start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" contains=ALLBUT,@nqcPreProcGroup
syn region nqcPreProc start="^\s*#\s*\(pragma\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@nqcPreProcGroup
if !exists("nqc_minlines")
if !exists("nqc_no_if0")
let nqc_minlines = 50 " #if 0 constructs can be long
else
let nqc_minlines = 15 " mostly for () constructs
endif
endif
exec "syn sync ccomment nqcComment minlines=" . nqc_minlines
" Define the default highlighting.
" Only when an item doesn't have highlighting yet
" The default methods for highlighting. Can be overridden later
hi def link nqcLabel Label
hi def link nqcConditional Conditional
hi def link nqcRepeat Repeat
hi def link nqcCharacter Character
hi def link nqcNumber Number
hi def link nqcFloat Float
hi def link nqcFunction Function
hi def link nqcParenError nqcError
hi def link nqcErrInParen nqcError
hi def link nqcErrInBracket nqcError
hi def link nqcCommentL nqcComment
hi def link nqcCommentStart nqcComment
hi def link nqcCommentError nqcError
hi def link nqcCommentStartError nqcError
hi def link nqcSpaceError nqcError
hi def link nqcStorageClass StorageClass
hi def link nqcInclude Include
hi def link nqcPreProc PreProc
hi def link nqcDefine Macro
hi def link nqcIncluded String
hi def link nqcError Error
hi def link nqcStatement Statement
hi def link nqcEvents Statement
hi def link nqcPreCondit PreCondit
hi def link nqcType Type
hi def link nqcConstant Constant
hi def link nqcCommentSkip nqcComment
hi def link nqcComment Comment
hi def link nqcTodo Todo
hi def link nqcCppSkip nqcCppOut
hi def link nqcCppOut2 nqcCppOut
hi def link nqcCppOut Comment
let b:current_syntax = "nqc"
" vim: ts=8