7
|
1 " Vim syntax file
|
|
2 " Language: NQC - Not Quite C, for LEGO mindstorms
|
|
3 " NQC homepage: http://www.enteract.com/~dbaum/nqc/
|
|
4 " Maintainer: Stefan Scherer <stefan@enotes.de>
|
|
5 " Last Change: 2001 May 10
|
|
6 " URL: http://www.enotes.de/twiki/pub/Home/LegoMindstorms/nqc.vim
|
|
7 " Filenames: .nqc
|
|
8
|
|
9 " For version 5.x: Clear all syntax items
|
|
10 " For version 6.x: Quit when a syntax file was already loaded
|
|
11 if version < 600
|
|
12 syntax clear
|
|
13 elseif exists("b:current_syntax")
|
|
14 finish
|
|
15 endif
|
|
16
|
|
17 " Statements
|
|
18 syn keyword nqcStatement break return continue start stop abs sign
|
|
19 syn keyword nqcStatement sub task
|
|
20 syn keyword nqcLabel case default
|
|
21 syn keyword nqcConditional if else switch
|
|
22 syn keyword nqcRepeat while for do until repeat
|
|
23
|
|
24 " Scout and RCX2
|
|
25 syn keyword nqcEvents acquire catch monitor
|
|
26
|
|
27 " types and classes
|
|
28 syn keyword nqcType int true false void
|
|
29 syn keyword nqcStorageClass asm const inline
|
|
30
|
|
31
|
|
32
|
|
33 " Sensors --------------------------------------------
|
|
34 " Input Sensors
|
|
35 syn keyword nqcConstant SENSOR_1 SENSOR_2 SENSOR_3
|
|
36
|
|
37 " Types for SetSensorType()
|
|
38 syn keyword nqcConstant SENSOR_TYPE_TOUCH SENSOR_TYPE_TEMPERATURE
|
|
39 syn keyword nqcConstant SENSOR_TYPE_LIGHT SENSOR_TYPE_ROTATION
|
|
40 syn keyword nqcConstant SENSOR_LIGHT SENSOR_TOUCH
|
|
41
|
|
42 " Modes for SetSensorMode()
|
|
43 syn keyword nqcConstant SENSOR_MODE_RAW SENSOR_MODE_BOOL
|
|
44 syn keyword nqcConstant SENSOR_MODE_EDGE SENSOR_MODE_PULSE
|
|
45 syn keyword nqcConstant SENSOR_MODE_PERCENT SENSOR_MODE_CELSIUS
|
|
46 syn keyword nqcConstant SENSOR_MODE_FAHRENHEIT SENSOR_MODE_ROTATION
|
|
47
|
|
48 " Sensor configurations for SetSensor()
|
|
49 syn keyword nqcConstant SENSOR_TOUCH SENSOR_LIGHT SENSOR_ROTATION
|
|
50 syn keyword nqcConstant SENSOR_CELSIUS SENSOR_FAHRENHEIT SENSOR_PULSE
|
|
51 syn keyword nqcConstant SENSOR_EDGE
|
|
52
|
|
53 " Functions - All
|
|
54 syn keyword nqcFunction ClearSensor
|
|
55 syn keyword nqcFunction SensorValue SensorType
|
|
56
|
|
57 " Functions - RCX
|
|
58 syn keyword nqcFunction SetSensor SetSensorType
|
|
59 syn keyword nqcFunction SensorValueBool
|
|
60
|
|
61 " Functions - RCX, CyberMaster
|
|
62 syn keyword nqcFunction SetSensorMode SensorMode
|
|
63
|
|
64 " Functions - RCX, Scout
|
|
65 syn keyword nqcFunction SensorValueRaw
|
|
66
|
|
67 " Functions - Scout
|
|
68 syn keyword nqcFunction SetSensorLowerLimit SetSensorUpperLimit
|
|
69 syn keyword nqcFunction SetSensorHysteresis CalibrateSensor
|
|
70
|
|
71
|
|
72 " Outputs --------------------------------------------
|
|
73 " Outputs for On(), Off(), etc.
|
|
74 syn keyword nqcConstant OUT_A OUT_B OUT_C
|
|
75
|
|
76 " Modes for SetOutput()
|
|
77 syn keyword nqcConstant OUT_ON OUT_OFF OUT_FLOAT
|
|
78
|
|
79 " Directions for SetDirection()
|
|
80 syn keyword nqcConstant OUT_FWD OUT_REV OUT_TOGGLE
|
|
81
|
|
82 " Output power for SetPower()
|
|
83 syn keyword nqcConstant OUT_LOW OUT_HALF OUT_FULL
|
|
84
|
|
85 " Functions - All
|
|
86 syn keyword nqcFunction SetOutput SetDirection SetPower OutputStatus
|
|
87 syn keyword nqcFunction On Off Float Fwd Rev Toggle
|
|
88 syn keyword nqcFunction OnFwd OnRev OnFor
|
|
89
|
|
90 " Functions - RXC2, Scout
|
|
91 syn keyword nqcFunction SetGlobalOutput SetGlobalDirection SetMaxPower
|
|
92 syn keyword nqcFunction GlobalOutputStatus
|
|
93
|
|
94
|
|
95 " Sound ----------------------------------------------
|
|
96 " Sounds for PlaySound()
|
|
97 syn keyword nqcConstant SOUND_CLICK SOUND_DOUBLE_BEEP SOUND_DOWN
|
|
98 syn keyword nqcConstant SOUND_UP SOUND_LOW_BEEP SOUND_FAST_UP
|
|
99
|
|
100 " Functions - All
|
|
101 syn keyword nqcFunction PlaySound PlayTone
|
|
102
|
|
103 " Functions - RCX2, Scout
|
|
104 syn keyword nqcFunction MuteSound UnmuteSound ClearSound
|
|
105 syn keyword nqcFunction SelectSounds
|
|
106
|
|
107
|
|
108 " LCD ------------------------------------------------
|
|
109 " Modes for SelectDisplay()
|
|
110 syn keyword nqcConstant DISPLAY_WATCH DISPLAY_SENSOR_1 DISPLAY_SENSOR_2
|
|
111 syn keyword nqcConstant DISPLAY_SENSOR_3 DISPLAY_OUT_A DISPLAY_OUT_B
|
|
112 syn keyword nqcConstant DISPLAY_OUT_C
|
|
113 " RCX2
|
|
114 syn keyword nqcConstant DISPLAY_USER
|
|
115
|
|
116 " Functions - RCX
|
|
117 syn keyword nqcFunction SelectDisplay
|
|
118 " Functions - RCX2
|
|
119 syn keyword nqcFunction SetUserDisplay
|
|
120
|
|
121
|
|
122 " Communication --------------------------------------
|
|
123 " Messages - RCX, Scout ------------------------------
|
|
124 " Tx power level for SetTxPower()
|
|
125 syn keyword nqcConstant TX_POWER_LO TX_POWER_HI
|
|
126
|
|
127 " Functions - RCX, Scout
|
|
128 syn keyword nqcFunction Message ClearMessage SendMessage SetTxPower
|
|
129
|
|
130 " Serial - RCX2 --------------------------------------
|
|
131 " for SetSerialComm()
|
|
132 syn keyword nqcConstant SERIAL_COMM_DEFAULT SERIAL_COMM_4800
|
|
133 syn keyword nqcConstant SERIAL_COMM_DUTY25 SERIAL_COMM_76KHZ
|
|
134
|
|
135 " for SetSerialPacket()
|
|
136 syn keyword nqcConstant SERIAL_PACKET_DEFAULT SERIAL_PACKET_PREAMBLE
|
|
137 syn keyword nqcConstant SERIAL_PACKET_NEGATED SERIAL_PACKET_CHECKSUM
|
|
138 syn keyword nqcConstant SERIAL_PACKET_RCX
|
|
139
|
|
140 " Functions - RCX2
|
|
141 syn keyword nqcFunction SetSerialComm SetSerialPacket SetSerialData
|
|
142 syn keyword nqcFunction SerialData SendSerial
|
|
143
|
|
144 " VLL - Scout ----------------------------------------
|
|
145 " Functions - Scout
|
|
146 syn keyword nqcFunction SendVLL
|
|
147
|
|
148
|
|
149 " Timers ---------------------------------------------
|
|
150 " Functions - All
|
|
151 syn keyword nqcFunction ClearTimer Timer
|
|
152
|
|
153 " Functions - RCX2
|
|
154 syn keyword nqcFunction SetTimer FastTimer
|
|
155
|
|
156
|
|
157 " Counters -------------------------------------------
|
|
158 " Functions - RCX2, Scout
|
|
159 syn keyword nqcFunction ClearCounter IncCounter DecCounter Counter
|
|
160
|
|
161
|
|
162 " Access Control -------------------------------------
|
|
163 syn keyword nqcConstant ACQUIRE_OUT_A ACQUIRE_OUT_B ACQUIRE_OUT_C
|
|
164 syn keyword nqcConstant ACQUIRE_SOUND
|
|
165 " RCX2 only
|
|
166 syn keyword nqcConstant ACQUIRE_USER_1 ACQUIRE_USER_2 ACQUIRE_USER_3
|
|
167 syn keyword nqcConstant ACQUIRE_USER_4
|
|
168
|
|
169 " Functions - RCX2, Scout
|
|
170 syn keyword nqcFunction SetPriority
|
|
171
|
|
172
|
|
173 " Events ---------------------------------------------
|
|
174 " RCX2 Events
|
|
175 syn keyword nqcConstant EVENT_TYPE_PRESSED EVENT_TYPE_RELEASED
|
|
176 syn keyword nqcConstant EVENT_TYPE_PULSE EVENT_TYPE_EDGE
|
|
177 syn keyword nqcConstant EVENT_TYPE_FAST_CHANGE EVENT_TYPE_LOW
|
|
178 syn keyword nqcConstant EVENT_TYPE_NORMAL EVENT_TYPE_HIGH
|
|
179 syn keyword nqcConstant EVENT_TYPE_CLICK EVENT_TYPE_DOUBLECLICK
|
|
180 syn keyword nqcConstant EVENT_TYPE_MESSAGE
|
|
181
|
|
182 " Scout Events
|
|
183 syn keyword nqcConstant EVENT_1_PRESSED EVENT_1_RELEASED
|
|
184 syn keyword nqcConstant EVENT_2_PRESSED EVENT_2_RELEASED
|
|
185 syn keyword nqcConstant EVENT_LIGHT_HIGH EVENT_LIGHT_NORMAL
|
|
186 syn keyword nqcConstant EVENT_LIGHT_LOW EVENT_LIGHT_CLICK
|
|
187 syn keyword nqcConstant EVENT_LIGHT_DOUBLECLICK EVENT_COUNTER_0
|
|
188 syn keyword nqcConstant EVENT_COUNTER_1 EVENT_TIMER_0 EVENT_TIMER_1
|
|
189 syn keyword nqcConstant EVENT_TIMER_2 EVENT_MESSAGE
|
|
190
|
|
191 " Functions - RCX2, Scout
|
|
192 syn keyword nqcFunction ActiveEvents Event
|
|
193
|
|
194 " Functions - RCX2
|
|
195 syn keyword nqcFunction CurrentEvents
|
|
196 syn keyword nqcFunction SetEvent ClearEvent ClearAllEvents EventState
|
|
197 syn keyword nqcFunction CalibrateEvent SetUpperLimit UpperLimit
|
|
198 syn keyword nqcFunction SetLowerLimit LowerLimit SetHysteresis
|
|
199 syn keyword nqcFunction Hysteresis
|
|
200 syn keyword nqcFunction SetClickTime ClickTime SetClickCounter
|
|
201 syn keyword nqcFunction ClickCounter
|
|
202
|
|
203 " Functions - Scout
|
|
204 syn keyword nqcFunction SetSensorClickTime SetCounterLimit
|
|
205 syn keyword nqcFunction SetTimerLimit
|
|
206
|
|
207
|
|
208 " Data Logging ---------------------------------------
|
|
209 " Functions - RCX
|
|
210 syn keyword nqcFunction CreateDatalog AddToDatalog
|
|
211 syn keyword nqcFunction UploadDatalog
|
|
212
|
|
213
|
|
214 " General Features -----------------------------------
|
|
215 " Functions - All
|
|
216 syn keyword nqcFunction Wait StopAllTasks Random
|
|
217 syn keyword nqcFunction SetSleepTime SleepNow
|
|
218
|
|
219 " Functions - RCX
|
|
220 syn keyword nqcFunction Program Watch SetWatch
|
|
221
|
|
222 " Functions - RCX2
|
|
223 syn keyword nqcFunction SetRandomSeed SelectProgram
|
|
224 syn keyword nqcFunction BatteryLevel FirmwareVersion
|
|
225
|
|
226 " Functions - Scout
|
|
227 " Parameters for SetLight()
|
|
228 syn keyword nqcConstant LIGHT_ON LIGHT_OFF
|
|
229 syn keyword nqcFunction SetScoutRules ScoutRules SetScoutMode
|
|
230 syn keyword nqcFunction SetEventFeedback EventFeedback SetLight
|
|
231
|
|
232 " additional CyberMaster defines
|
|
233 syn keyword nqcConstant OUT_L OUT_R OUT_X
|
|
234 syn keyword nqcConstant SENSOR_L SENSOR_M SENSOR_R
|
|
235 " Functions - CyberMaster
|
|
236 syn keyword nqcFunction Drive OnWait OnWaitDifferent
|
|
237 syn keyword nqcFunction ClearTachoCounter TachoCount TachoSpeed
|
|
238 syn keyword nqcFunction ExternalMotorRunning AGC
|
|
239
|
|
240
|
|
241
|
|
242 " nqcCommentGroup allows adding matches for special things in comments
|
|
243 syn keyword nqcTodo contained TODO FIXME XXX
|
|
244 syn cluster nqcCommentGroup contains=nqcTodo
|
|
245
|
|
246 "when wanted, highlight trailing white space
|
|
247 if exists("nqc_space_errors")
|
|
248 if !exists("nqc_no_trail_space_error")
|
|
249 syn match nqcSpaceError display excludenl "\s\+$"
|
|
250 endif
|
|
251 if !exists("nqc_no_tab_space_error")
|
|
252 syn match nqcSpaceError display " \+\t"me=e-1
|
|
253 endif
|
|
254 endif
|
|
255
|
|
256 "catch errors caused by wrong parenthesis and brackets
|
|
257 syn cluster nqcParenGroup contains=nqcParenError,nqcIncluded,nqcCommentSkip,@nqcCommentGroup,nqcCommentStartError,nqcCommentSkip,nqcCppOut,nqcCppOut2,nqcCppSkip,nqcNumber,nqcFloat,nqcNumbers
|
|
258 if exists("nqc_no_bracket_error")
|
|
259 syn region nqcParen transparent start='(' end=')' contains=ALLBUT,@nqcParenGroup,nqcCppParen
|
|
260 " nqcCppParen: same as nqcParen but ends at end-of-line; used in nqcDefine
|
|
261 syn region nqcCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@nqcParenGroup,nqcParen
|
|
262 syn match nqcParenError display ")"
|
|
263 syn match nqcErrInParen display contained "[{}]"
|
|
264 else
|
|
265 syn region nqcParen transparent start='(' end=')' contains=ALLBUT,@nqcParenGroup,nqcCppParen,nqcErrInBracket,nqcCppBracket
|
|
266 " nqcCppParen: same as nqcParen but ends at end-of-line; used in nqcDefine
|
|
267 syn region nqcCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@nqcParenGroup,nqcErrInBracket,nqcParen,nqcBracket
|
|
268 syn match nqcParenError display "[\])]"
|
|
269 syn match nqcErrInParen display contained "[\]{}]"
|
|
270 syn region nqcBracket transparent start='\[' end=']' contains=ALLBUT,@nqcParenGroup,nqcErrInParen,nqcCppParen,nqcCppBracket
|
|
271 " nqcCppBracket: same as nqcParen but ends at end-of-line; used in nqcDefine
|
|
272 syn region nqcCppBracket transparent start='\[' skip='\\$' excludenl end=']' end='$' contained contains=ALLBUT,@nqcParenGroup,nqcErrInParen,nqcParen,nqcBracket
|
|
273 syn match nqcErrInBracket display contained "[);{}]"
|
|
274 endif
|
|
275
|
|
276 "integer number, or floating point number without a dot and with "f".
|
|
277 syn case ignore
|
|
278 syn match nqcNumbers display transparent "\<\d\|\.\d" contains=nqcNumber,nqcFloat
|
|
279 " Same, but without octal error (for comments)
|
|
280 syn match nqcNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
|
|
281 "hex number
|
|
282 syn match nqcNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
|
|
283 " Flag the first zero of an octal number as something special
|
|
284 syn match nqcFloat display contained "\d\+f"
|
|
285 "floating point number, with dot, optional exponent
|
|
286 syn match nqcFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
|
|
287 "floating point number, starting with a dot, optional exponent
|
|
288 syn match nqcFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
|
|
289 "floating point number, without dot, with exponent
|
|
290 syn match nqcFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>"
|
|
291 " flag an octal number with wrong digits
|
|
292 syn case match
|
|
293
|
|
294 syn region nqcCommentL start="//" skip="\\$" end="$" keepend contains=@nqcCommentGroup,nqcSpaceError
|
|
295 syn region nqcComment matchgroup=nqcCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@nqcCommentGroup,nqcCommentStartError,nqcSpaceError
|
|
296
|
|
297 " keep a // comment separately, it terminates a preproc. conditional
|
|
298 syntax match nqcCommentError display "\*/"
|
|
299 syntax match nqcCommentStartError display "/\*" contained
|
|
300
|
|
301
|
|
302
|
|
303
|
|
304
|
|
305 syn region nqcPreCondit start="^\s*#\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=nqcComment,nqcCharacter,nqcCppParen,nqcParenError,nqcNumbers,nqcCommentError,nqcSpaceError
|
|
306 syn match nqcPreCondit display "^\s*#\s*\(else\|endif\)\>"
|
|
307 if !exists("nqc_no_if0")
|
|
308 syn region nqcCppOut start="^\s*#\s*if\s\+0\>" end=".\|$" contains=nqcCppOut2
|
|
309 syn region nqcCppOut2 contained start="0" end="^\s*#\s*\(endif\>\|else\>\|elif\>\)" contains=nqcSpaceError,nqcCppSkip
|
|
310 syn region nqcCppSkip contained start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*#\s*endif\>" contains=nqcSpaceError,nqcCppSkip
|
|
311 endif
|
|
312 syn region nqcIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
|
|
313 syn match nqcInclude display "^\s*#\s*include\>\s*["]" contains=nqcIncluded
|
|
314 "syn match nqcLineSkip "\\$"
|
|
315 syn cluster nqcPreProcGroup contains=nqcPreCondit,nqcIncluded,nqcInclude,nqcDefine,nqcErrInParen,nqcErrInBracket,nqcCppOut,nqcCppOut2,nqcCppSkip,nqcNumber,nqcFloat,nqcNumbers,nqcCommentSkip,@nqcCommentGroup,nqcCommentStartError,nqcParen,nqcBracket
|
|
316 syn region nqcDefine start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" contains=ALLBUT,@nqcPreProcGroup
|
|
317 syn region nqcPreProc start="^\s*#\s*\(pragma\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@nqcPreProcGroup
|
|
318
|
|
319 if !exists("nqc_minlines")
|
|
320 if !exists("nqc_no_if0")
|
|
321 let nqc_minlines = 50 " #if 0 constructs can be long
|
|
322 else
|
|
323 let nqc_minlines = 15 " mostly for () constructs
|
|
324 endif
|
|
325 endif
|
|
326 exec "syn sync ccomment nqcComment minlines=" . nqc_minlines
|
|
327
|
|
328 " Define the default highlighting.
|
|
329 " For version 5.7 and earlier: only when not done already
|
|
330 " For version 5.8 and later: only when an item doesn't have highlighting yet
|
|
331 if version >= 508 || !exists("did_nqc_syn_inits")
|
|
332 if version < 508
|
|
333 let did_nqc_syn_inits = 1
|
|
334 command -nargs=+ HiLink hi link <args>
|
|
335 else
|
|
336 command -nargs=+ HiLink hi def link <args>
|
|
337 endif
|
|
338
|
|
339 " The default methods for highlighting. Can be overridden later
|
|
340 HiLink nqcLabel Label
|
|
341 HiLink nqcConditional Conditional
|
|
342 HiLink nqcRepeat Repeat
|
|
343 HiLink nqcCharacter Character
|
|
344 HiLink nqcNumber Number
|
|
345 HiLink nqcFloat Float
|
|
346 HiLink nqcFunction Function
|
|
347 HiLink nqcParenError nqcError
|
|
348 HiLink nqcErrInParen nqcError
|
|
349 HiLink nqcErrInBracket nqcError
|
|
350 HiLink nqcCommentL nqcComment
|
|
351 HiLink nqcCommentStart nqcComment
|
|
352 HiLink nqcCommentError nqcError
|
|
353 HiLink nqcCommentStartError nqcError
|
|
354 HiLink nqcSpaceError nqcError
|
|
355 HiLink nqcStorageClass StorageClass
|
|
356 HiLink nqcInclude Include
|
|
357 HiLink nqcPreProc PreProc
|
|
358 HiLink nqcDefine Macro
|
|
359 HiLink nqcIncluded String
|
|
360 HiLink nqcError Error
|
|
361 HiLink nqcStatement Statement
|
|
362 HiLink nqcEvents Statement
|
|
363 HiLink nqcPreCondit PreCondit
|
|
364 HiLink nqcType Type
|
|
365 HiLink nqcConstant Constant
|
|
366 HiLink nqcCommentSkip nqcComment
|
|
367 HiLink nqcComment Comment
|
|
368 HiLink nqcTodo Todo
|
|
369 HiLink nqcCppSkip nqcCppOut
|
|
370 HiLink nqcCppOut2 nqcCppOut
|
|
371 HiLink nqcCppOut Comment
|
|
372
|
|
373 delcommand HiLink
|
|
374 endif
|
|
375
|
|
376 let b:current_syntax = "nqc"
|
|
377
|
|
378 " vim: ts=8
|