" Vim syntax file " Language: NQC - Not Quite C, for LEGO mindstorms " NQC homepage: http://www.enteract.com/~dbaum/nqc/ " Maintainer: Stefan Scherer " 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