1" Vim syntax file
2" Language:	LPC
3" Maintainer:	Shizhu Pan <poet@mudbuilder.net>
4" URL:		http://poet.tomud.com/pub/lpc.vim.bz2
5" Last Change:	2016 Aug 31
6" Comments:	If you are using Vim 6.2 or later, see :h lpc.vim for
7"		file type recognizing, if not, you had to use modeline.
8
9
10" Nodule: This is the start nodule. {{{1
11
12" quit when a syntax file was already loaded
13if exists("b:current_syntax")
14  finish
15endif
16
17let s:cpo_save = &cpo
18set cpo&vim
19
20" Nodule: Keywords {{{1
21
22" LPC keywords
23" keywords should always be highlighted so "contained" is not used.
24syn cluster	lpcKeywdGrp	contains=lpcConditional,lpcLabel,lpcOperator,lpcRepeat,lpcStatement,lpcModifier,lpcReserved
25
26syn keyword	lpcConditional	if else switch
27syn keyword	lpcLabel	case default
28syn keyword	lpcOperator	catch efun in inherit
29syn keyword	lpcRepeat	do for foreach while
30syn keyword	lpcStatement	break continue return
31
32syn match	lpcEfunError	/efun[^:]/ display
33
34" Illegal to use keyword as function
35" It's not working, maybe in the next version.
36syn keyword	lpcKeywdError	contained if for foreach return switch while
37
38" These are keywords only because they take lvalue or type as parameter,
39" so these keywords should only be used as function but cannot be names of
40" user-defined functions.
41syn keyword	lpcKeywdFunc	new parse_command sscanf time_expression
42
43" Nodule: Type and modifiers {{{1
44
45" Type names list.
46
47" Special types
48syn keyword	lpcType		void mixed unknown
49" Scalar/Value types.
50syn keyword	lpcType		int float string
51" Pointer types.
52syn keyword	lpcType		array buffer class function mapping object
53" Other types.
54if exists("lpc_compat_32")
55    syn keyword     lpcType	    closure status funcall
56else
57    syn keyword     lpcError	    closure status
58    syn keyword     lpcType	    multiset
59endif
60
61" Type modifier.
62syn keyword	lpcModifier	nomask private public
63syn keyword	lpcModifier	varargs virtual
64
65" sensible modifiers
66if exists("lpc_pre_v22")
67    syn keyword	lpcReserved	nosave protected ref
68    syn keyword	lpcModifier	static
69else
70    syn keyword	lpcError	static
71    syn keyword	lpcModifier	nosave protected ref
72endif
73
74" Nodule: Applies {{{1
75
76" Match a function declaration or function pointer
77syn match	lpcApplyDecl	excludenl /->\h\w*(/me=e-1 contains=lpcApplies transparent display
78
79" We should note that in func_spec.c the efun definition syntax is so
80" complicated that I use such a long regular expression to describe.
81syn match	lpcLongDecl	excludenl /\(\s\|\*\)\h\+\s\h\+(/me=e-1 contains=@lpcEfunGroup,lpcType,@lpcKeywdGrp transparent display
82
83" this is form for all functions
84" ->foo() form had been excluded
85syn match	lpcFuncDecl	excludenl /\h\w*(/me=e-1 contains=lpcApplies,@lpcEfunGroup,lpcKeywdError transparent display
86
87" The (: :) parenthesis or $() forms a function pointer
88syn match	lpcFuncName	/(:\s*\h\+\s*:)/me=e-1 contains=lpcApplies,@lpcEfunGroup transparent display contained
89syn match	lpcFuncName	/(:\s*\h\+,/ contains=lpcApplies,@lpcEfunGroup transparent display contained
90syn match	lpcFuncName	/\$(\h\+)/ contains=lpcApplies,@lpcEfunGroup transparent display contained
91
92" Applies list.
93"       system applies
94syn keyword     lpcApplies      contained __INIT clean_up create destructor heart_beat id init move_or_destruct reset
95"       interactive
96syn keyword     lpcApplies      contained catch_tell logon net_dead process_input receive_message receive_snoop telnet_suboption terminal_type window_size write_prompt
97"       master applies
98syn keyword     lpcApplies      contained author_file compile_object connect crash creator_file domain_file epilog error_handler flag get_bb_uid get_root_uid get_save_file_name log_error make_path_absolute object_name preload privs_file retrieve_ed_setup save_ed_setup slow_shutdown
99syn keyword     lpcApplies      contained valid_asm valid_bind valid_compile_to_c valid_database valid_hide valid_link valid_object valid_override valid_read valid_save_binary valid_seteuid valid_shadow valid_socket valid_write
100"       parsing
101syn keyword     lpcApplies      contained inventory_accessible inventory_visible is_living parse_command_adjectiv_id_list parse_command_adjective_id_list parse_command_all_word parse_command_id_list parse_command_plural_id_list parse_command_prepos_list parse_command_users parse_get_environment parse_get_first_inventory parse_get_next_inventory parser_error_message
102
103
104" Nodule: Efuns {{{1
105
106syn cluster	lpcEfunGroup	contains=lpc_efuns,lpcOldEfuns,lpcNewEfuns,lpcKeywdFunc
107
108" Compat32 efuns
109if exists("lpc_compat_32")
110    syn keyword lpc_efuns	contained closurep heart_beat_info m_delete m_values m_indices query_once_interactive strstr
111else
112    syn match   lpcErrFunc	/#`\h\w*/
113    " Shell compatible first line comment.
114    syn region	lpcCommentFunc	start=/^#!/ end=/$/
115endif
116
117" pre-v22 efuns which are removed in newer versions.
118syn keyword     lpcOldEfuns     contained tail dump_socket_status
119
120" new efuns after v22 should be added here!
121syn keyword     lpcNewEfuns     contained socket_status
122
123" LPC efuns list.
124" DEBUG efuns Not included.
125" New efuns should NOT be added to this list, see v22 efuns above.
126" Efuns list {{{2
127syn keyword     lpc_efuns       contained acos add_action all_inventory all_previous_objects allocate allocate_buffer allocate_mapping apply arrayp asin atan author_stats
128syn keyword     lpc_efuns       contained bind break_string bufferp
129syn keyword     lpc_efuns       contained cache_stats call_other call_out call_out_info call_stack capitalize catch ceil check_memory children classp clear_bit clone_object clonep command commands copy cos cp crc32 crypt ctime
130syn keyword     lpc_efuns       contained db_close db_commit db_connect db_exec db_fetch db_rollback db_status debug_info debugmalloc debug_message deep_inherit_list deep_inventory destruct disable_commands disable_wizard domain_stats dumpallobj dump_file_descriptors dump_prog
131syn keyword     lpc_efuns       contained each ed ed_cmd ed_start enable_commands enable_wizard environment error errorp eval_cost evaluate exec exp explode export_uid external_start
132syn keyword     lpc_efuns       contained fetch_variable file_length file_name file_size filter filter_array filter_mapping find_call_out find_living find_object find_player first_inventory floatp floor flush_messages function_exists function_owner function_profile functionp functions
133syn keyword     lpc_efuns       contained generate_source get_char get_config get_dir geteuid getuid
134syn keyword     lpc_efuns       contained heart_beats
135syn keyword     lpc_efuns       contained id_matrix implode in_edit in_input inherit_list inherits input_to interactive intp
136syn keyword     lpc_efuns       contained keys
137syn keyword     lpc_efuns       contained link living livings load_object localtime log log10 lookat_rotate lower_case lpc_info
138syn keyword     lpc_efuns       contained malloc_check malloc_debug malloc_status map map_array map_delete map_mapping mapp master match_path max_eval_cost member_array memory_info memory_summary message mkdir moncontrol move_object mud_status
139syn keyword     lpc_efuns       contained named_livings network_stats next_bit next_inventory notify_fail nullp
140syn keyword     lpc_efuns       contained objectp objects oldcrypt opcprof origin
141syn keyword     lpc_efuns       contained parse_add_rule parse_add_synonym parse_command parse_dump parse_init parse_my_rules parse_refresh parse_remove parse_sentence pluralize pointerp pow present previous_object printf process_string process_value program_info
142syn keyword     lpc_efuns       contained query_ed_mode query_heart_beat query_host_name query_idle query_ip_name query_ip_number query_ip_port query_load_average query_notify_fail query_privs query_replaced_program query_shadowing query_snoop query_snooping query_verb
143syn keyword     lpc_efuns       contained random read_buffer read_bytes read_file receive reclaim_objects refs regexp reg_assoc reload_object remove_action remove_call_out remove_interactive remove_shadow rename repeat_string replace_program replace_string replaceable reset_eval_cost resolve restore_object restore_variable rm rmdir rotate_x rotate_y rotate_z rusage
144syn keyword     lpc_efuns       contained save_object save_variable say scale set_author set_bit set_eval_limit set_heart_beat set_hide set_light set_living_name set_malloc_mask set_privs set_reset set_this_player set_this_user seteuid shadow shallow_inherit_list shout shutdown sin sizeof snoop socket_accept socket_acquire socket_address socket_bind socket_close socket_connect socket_create socket_error socket_listen socket_release socket_write sort_array sprintf sqrt stat store_variable strcmp stringp strlen strsrch
145syn keyword     lpc_efuns       contained tan tell_object tell_room terminal_colour test_bit this_interactive this_object this_player this_user throw time to_float to_int trace traceprefix translate typeof
146syn keyword     lpc_efuns       contained undefinedp unique_array unique_mapping upper_case uptime userp users
147syn keyword     lpc_efuns       contained values variables virtualp
148syn keyword     lpc_efuns       contained wizardp write write_buffer write_bytes write_file
149
150" Nodule: Constants {{{1
151
152" LPC Constants.
153" like keywords, constants are always highlighted, be careful to choose only
154" the constants we used to add to this list.
155syn keyword     lpcConstant     __ARCH__ __COMPILER__ __DIR__ __FILE__ __OPTIMIZATION__ __PORT__ __VERSION__
156"       Defines in options.h are all predefined in LPC sources surrounding by
157"       two underscores. Do we need to include all of that?
158syn keyword     lpcConstant     __SAVE_EXTENSION__ __HEARTBEAT_INTERVAL__
159"       from the documentation we know that these constants remains only for
160"       backward compatibility and should not be used any more.
161syn keyword     lpcConstant     HAS_ED HAS_PRINTF HAS_RUSAGE HAS_DEBUG_LEVEL
162syn keyword     lpcConstant     MUD_NAME F__THIS_OBJECT
163
164" Nodule: Todo for this file.  {{{1
165
166" TODO : need to check for LPC4 syntax and other series of LPC besides
167" v22, b21 and l32, if you had a good idea, contact me at poet@mudbuilder.net
168" and I will be appreciated about that.
169
170" Notes about some FAQ:
171"
172" About variables : We adopts the same behavior for C because almost all the
173" LPC programmers are also C programmers, so we don't need separate settings
174" for C and LPC. That is the reason why I don't change variables like
175" "c_no_utf"s to "lpc_no_utf"s.
176"
177" Copy : Some of the following seems to be copied from c.vim but not quite
178" the same in details because the syntax for C and LPC is different.
179"
180" Color scheme : this syntax file had been thouroughly tested to work well
181" for all of the dark-backgrounded color schemes Vim has provided officially,
182" and it should be quite Ok for all of the bright-backgrounded color schemes,
183" of course it works best for the color scheme that I am using, download it
184" from http://poet.tomud.com/pub/ps_color.vim.bz2 if you want to try it.
185"
186
187" Nodule: String and Character {{{1
188
189
190" String and Character constants
191" Highlight special characters (those which have a backslash) differently
192syn match	lpcSpecial	display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
193if !exists("c_no_utf")
194  syn match	lpcSpecial	display contained "\\\(u\x\{4}\|U\x\{8}\)"
195endif
196
197" LPC version of sprintf() format,
198syn match	lpcFormat	display "%\(\d\+\)\=[-+ |=#@:.]*\(\d\+\)\=\('\I\+'\|'\I*\\'\I*'\)\=[OsdicoxXf]" contained
199syn match	lpcFormat	display "%%" contained
200syn region	lpcString	start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=lpcSpecial,lpcFormat
201" lpcCppString: same as lpcString, but ends at end of line
202syn region	lpcCppString	start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=lpcSpecial,lpcFormat
203
204" LPC preprocessor for the text formatting short cuts
205" Thanks to Dr. Charles E. Campbell <cec@gryphon.gsfc.nasa.gov>
206"	he suggests the best way to do this.
207syn region	lpcTextString	start=/@\z(\h\w*\)$/ end=/^\z1/ contains=lpcSpecial
208syn region	lpcArrayString	start=/@@\z(\h\w*\)$/ end=/^\z1/ contains=lpcSpecial
209
210" Character
211syn match	lpcCharacter	"L\='[^\\]'"
212syn match	lpcCharacter	"L'[^']*'" contains=lpcSpecial
213syn match	lpcSpecialError	"L\='\\[^'\"?\\abefnrtv]'"
214syn match	lpcSpecialCharacter "L\='\\['\"?\\abefnrtv]'"
215syn match	lpcSpecialCharacter display "L\='\\\o\{1,3}'"
216syn match	lpcSpecialCharacter display "'\\x\x\{1,2}'"
217syn match	lpcSpecialCharacter display "L'\\x\x\+'"
218
219" Nodule: White space {{{1
220
221" when wanted, highlight trailing white space
222if exists("c_space_errors")
223  if !exists("c_no_trail_space_error")
224    syn match	lpcSpaceError	display excludenl "\s\+$"
225  endif
226  if !exists("c_no_tab_space_error")
227    syn match	lpcSpaceError	display " \+\t"me=e-1
228  endif
229endif
230
231" Nodule: Parenthesis and brackets {{{1
232
233" catch errors caused by wrong parenthesis and brackets
234syn cluster	lpcParenGroup	contains=lpcParenError,lpcIncluded,lpcSpecial,lpcCommentSkip,lpcCommentString,lpcComment2String,@lpcCommentGroup,lpcCommentStartError,lpcUserCont,lpcUserLabel,lpcBitField,lpcCommentSkip,lpcOctalZero,lpcCppOut,lpcCppOut2,lpcCppSkip,lpcFormat,lpcNumber,lpcFloat,lpcOctal,lpcOctalError,lpcNumbersCom
235syn region	lpcParen	transparent start='(' end=')' contains=ALLBUT,@lpcParenGroup,lpcCppParen,lpcErrInBracket,lpcCppBracket,lpcCppString,@lpcEfunGroup,lpcApplies,lpcKeywdError
236" lpcCppParen: same as lpcParen but ends at end-of-line; used in lpcDefine
237syn region	lpcCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@lpcParenGroup,lpcErrInBracket,lpcParen,lpcBracket,lpcString,@lpcEfunGroup,lpcApplies,lpcKeywdError
238syn match	lpcParenError	display ")"
239syn match	lpcParenError	display "\]"
240" for LPC:
241" Here we should consider the array ({ }) parenthesis and mapping ([ ])
242" parenthesis and multiset (< >) parenthesis.
243syn match	lpcErrInParen	display contained "[^^]{"ms=s+1
244syn match	lpcErrInParen	display contained "\(}\|\]\)[^)]"me=e-1
245syn region	lpcBracket	transparent start='\[' end=']' contains=ALLBUT,@lpcParenGroup,lpcErrInParen,lpcCppParen,lpcCppBracket,lpcCppString,@lpcEfunGroup,lpcApplies,lpcFuncName,lpcKeywdError
246" lpcCppBracket: same as lpcParen but ends at end-of-line; used in lpcDefine
247syn region	lpcCppBracket	transparent start='\[' skip='\\$' excludenl end=']' end='$' contained contains=ALLBUT,@lpcParenGroup,lpcErrInParen,lpcParen,lpcBracket,lpcString,@lpcEfunGroup,lpcApplies,lpcFuncName,lpcKeywdError
248syn match	lpcErrInBracket	display contained "[);{}]"
249
250" Nodule: Numbers {{{1
251
252" integer number, or floating point number without a dot and with "f".
253syn case ignore
254syn match	lpcNumbers	display transparent "\<\d\|\.\d" contains=lpcNumber,lpcFloat,lpcOctalError,lpcOctal
255" Same, but without octal error (for comments)
256syn match	lpcNumbersCom	display contained transparent "\<\d\|\.\d" contains=lpcNumber,lpcFloat,lpcOctal
257syn match	lpcNumber	display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
258" hex number
259syn match	lpcNumber	display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
260" Flag the first zero of an octal number as something special
261syn match	lpcOctal	display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=lpcOctalZero
262syn match	lpcOctalZero	display contained "\<0"
263syn match	lpcFloat	display contained "\d\+f"
264" floating point number, with dot, optional exponent
265syn match	lpcFloat	display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
266" floating point number, starting with a dot, optional exponent
267syn match	lpcFloat	display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
268" floating point number, without dot, with exponent
269syn match	lpcFloat	display contained "\d\+e[-+]\=\d\+[fl]\=\>"
270" flag an octal number with wrong digits
271syn match	lpcOctalError	display contained "0\o*[89]\d*"
272syn case match
273
274" Nodule: Comment string {{{1
275
276" lpcCommentGroup allows adding matches for special things in comments
277syn keyword	lpcTodo		contained TODO FIXME XXX
278syn cluster	lpcCommentGroup	contains=lpcTodo
279
280if exists("c_comment_strings")
281  " A comment can contain lpcString, lpcCharacter and lpcNumber.
282  syntax match	lpcCommentSkip	contained "^\s*\*\($\|\s\+\)"
283  syntax region lpcCommentString	contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=lpcSpecial,lpcCommentSkip
284  syntax region lpcComment2String	contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=lpcSpecial
285  syntax region  lpcCommentL	start="//" skip="\\$" end="$" keepend contains=@lpcCommentGroup,lpcComment2String,lpcCharacter,lpcNumbersCom,lpcSpaceError
286  syntax region lpcComment	matchgroup=lpcCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@lpcCommentGroup,lpcCommentStartError,lpcCommentString,lpcCharacter,lpcNumbersCom,lpcSpaceError
287else
288  syn region	lpcCommentL	start="//" skip="\\$" end="$" keepend contains=@lpcCommentGroup,lpcSpaceError
289  syn region	lpcComment	matchgroup=lpcCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@lpcCommentGroup,lpcCommentStartError,lpcSpaceError
290endif
291" keep a // comment separately, it terminates a preproc. conditional
292syntax match	lpcCommentError	display "\*/"
293syntax match	lpcCommentStartError display "/\*"me=e-1 contained
294
295" Nodule: Pre-processor {{{1
296
297syn region	lpcPreCondit	start="^\s*#\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=lpcComment,lpcCppString,lpcCharacter,lpcCppParen,lpcParenError,lpcNumbers,lpcCommentError,lpcSpaceError
298syn match	lpcPreCondit	display "^\s*#\s*\(else\|endif\)\>"
299if !exists("c_no_if0")
300  syn region	lpcCppOut		start="^\s*#\s*if\s\+0\+\>" end=".\|$" contains=lpcCppOut2
301  syn region	lpcCppOut2	contained start="0" end="^\s*#\s*\(endif\>\|else\>\|elif\>\)" contains=lpcSpaceError,lpcCppSkip
302  syn region	lpcCppSkip	contained start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*#\s*endif\>" contains=lpcSpaceError,lpcCppSkip
303endif
304syn region	lpcIncluded	display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
305syn match	lpcIncluded	display contained "<[^>]*>"
306syn match	lpcInclude	display "^\s*#\s*include\>\s*["<]" contains=lpcIncluded
307syn match lpcLineSkip	"\\$"
308syn cluster	lpcPreProcGroup	contains=lpcPreCondit,lpcIncluded,lpcInclude,lpcDefine,lpcErrInParen,lpcErrInBracket,lpcUserLabel,lpcSpecial,lpcOctalZero,lpcCppOut,lpcCppOut2,lpcCppSkip,lpcFormat,lpcNumber,lpcFloat,lpcOctal,lpcOctalError,lpcNumbersCom,lpcString,lpcCommentSkip,lpcCommentString,lpcComment2String,@lpcCommentGroup,lpcCommentStartError,lpcParen,lpcBracket,lpcMulti,lpcKeywdError
309syn region	lpcDefine	start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@lpcPreProcGroup
310
311if exists("lpc_pre_v22")
312    syn region	lpcPreProc	start="^\s*#\s*\(pragma\>\|echo\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@lpcPreProcGroup
313else
314    syn region	lpcPreProc	start="^\s*#\s*\(pragma\>\|echo\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@lpcPreProcGroup
315endif
316
317" Nodule: User labels {{{1
318
319" Highlight Labels
320" User labels in LPC is not allowed, only "case x" and "default" is supported
321syn cluster	lpcMultiGroup	contains=lpcIncluded,lpcSpecial,lpcCommentSkip,lpcCommentString,lpcComment2String,@lpcCommentGroup,lpcCommentStartError,lpcUserCont,lpcUserLabel,lpcBitField,lpcOctalZero,lpcCppOut,lpcCppOut2,lpcCppSkip,lpcFormat,lpcNumber,lpcFloat,lpcOctal,lpcOctalError,lpcNumbersCom,lpcCppParen,lpcCppBracket,lpcCppString,lpcKeywdError
322syn region	lpcMulti		transparent start='\(case\|default\|public\|protected\|private\)' skip='::' end=':' contains=ALLBUT,@lpcMultiGroup
323
324syn cluster	lpcLabelGroup	contains=lpcUserLabel
325syn match	lpcUserCont	display "^\s*lpc:$" contains=@lpcLabelGroup
326
327" Don't want to match anything
328syn match	lpcUserLabel	display "lpc" contained
329
330" Nodule: Initializations {{{1
331
332if exists("c_minlines")
333  let b:c_minlines = c_minlines
334else
335  if !exists("c_no_if0")
336    let b:c_minlines = 50	" #if 0 constructs can be long
337  else
338    let b:c_minlines = 15	" mostly for () constructs
339  endif
340endif
341exec "syn sync ccomment lpcComment minlines=" . b:c_minlines
342
343" Make sure these options take place since we no longer depend on file type
344" plugin for C
345setlocal cindent
346setlocal fo-=t fo+=croql
347setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
348
349" Win32 can filter files in the browse dialog
350if has("gui_win32") && !exists("b:browsefilter")
351    let b:browsefilter = "LPC Source Files (*.c *.d *.h)\t*.c;*.d;*.h\n" .
352	\ "LPC Data Files (*.scr *.o *.dat)\t*.scr;*.o;*.dat\n" .
353	\ "Text Documentation (*.txt)\t*.txt\n" .
354	\ "All Files (*.*)\t*.*\n"
355endif
356
357" Nodule: Highlight links {{{1
358
359" Define the default highlighting.
360" Only when an item doesn't have highlighting yet
361
362hi def link lpcModifier		lpcStorageClass
363
364hi def link lpcQuotedFmt		lpcFormat
365hi def link lpcFormat		lpcSpecial
366hi def link lpcCppString		lpcString	" Cpp means
367					      " C Pre-Processor
368hi def link lpcCommentL		lpcComment
369hi def link lpcCommentStart	lpcComment
370hi def link lpcUserLabel		lpcLabel
371hi def link lpcSpecialCharacter	lpcSpecial
372hi def link lpcOctal		lpcPreProc
373hi def link lpcOctalZero		lpcSpecial  " LPC will treat octal numbers
374					  " as decimals, programmers should
375					  " be aware of that.
376hi def link lpcEfunError		lpcError
377hi def link lpcKeywdError		lpcError
378hi def link lpcOctalError		lpcError
379hi def link lpcParenError		lpcError
380hi def link lpcErrInParen		lpcError
381hi def link lpcErrInBracket	lpcError
382hi def link lpcCommentError	lpcError
383hi def link lpcCommentStartError	lpcError
384hi def link lpcSpaceError		lpcError
385hi def link lpcSpecialError	lpcError
386hi def link lpcErrFunc		lpcError
387
388if exists("lpc_pre_v22")
389    hi def link lpcOldEfuns	lpc_efuns
390    hi def link lpcNewEfuns	lpcError
391else
392    hi def link lpcOldEfuns	lpcReserved
393    hi def link lpcNewEfuns	lpc_efuns
394endif
395hi def link lpc_efuns		lpcFunction
396
397hi def link lpcReserved		lpcPreProc
398hi def link lpcTextString		lpcString   " This should be preprocessors, but
399hi def link lpcArrayString		lpcPreProc  " let's make some difference
400					  " between text and array
401
402hi def link lpcIncluded		lpcString
403hi def link lpcCommentString	lpcString
404hi def link lpcComment2String	lpcString
405hi def link lpcCommentSkip		lpcComment
406hi def link lpcCommentFunc		lpcComment
407
408hi def link lpcCppSkip		lpcCppOut
409hi def link lpcCppOut2		lpcCppOut
410hi def link lpcCppOut		lpcComment
411
412" Standard type below
413hi def link lpcApplies		Special
414hi def link lpcCharacter		Character
415hi def link lpcComment		Comment
416hi def link lpcConditional		Conditional
417hi def link lpcConstant		Constant
418hi def link lpcDefine		Macro
419hi def link lpcError		Error
420hi def link lpcFloat		Float
421hi def link lpcFunction		Function
422hi def link lpcIdentifier		Identifier
423hi def link lpcInclude		Include
424hi def link lpcLabel		Label
425hi def link lpcNumber		Number
426hi def link lpcOperator		Operator
427hi def link lpcPreCondit		PreCondit
428hi def link lpcPreProc		PreProc
429hi def link lpcRepeat		Repeat
430hi def link lpcStatement		Statement
431hi def link lpcStorageClass	StorageClass
432hi def link lpcString		String
433hi def link lpcStructure		Structure
434hi def link lpcSpecial		LineNr
435hi def link lpcTodo		Todo
436hi def link lpcType		Type
437
438
439" Nodule: This is the end nodule. {{{1
440
441let b:current_syntax = "lpc"
442
443let &cpo = s:cpo_save
444unlet s:cpo_save
445
446" vim:ts=8:nosta:sw=2:ai:si:
447" vim600:set fdm=marker: }}}1
448