Merged from the latest developing branch.
[MacVim.git] / runtime / syntax / lpc.vim
blob7665c1a6d6d440a3d1e4276cc3122e41df5de9a5
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:  2003 May 11
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.
10 " Nodule: This is the start nodule. {{{1
12 " For version 5.x: Clear all syntax items
13 " For version 6.x: Quit when a syntax file was already loaded
14 if version < 600
15   syntax clear
16 elseif exists("b:current_syntax")
17   finish
18 endif
20 " Nodule: Keywords {{{1
22 " LPC keywords
23 " keywords should always be highlighted so "contained" is not used.
24 syn cluster     lpcKeywdGrp     contains=lpcConditional,lpcLabel,lpcOperator,lpcRepeat,lpcStatement,lpcModifier,lpcReserved
26 syn keyword     lpcConditional  if else switch
27 syn keyword     lpcLabel        case default
28 syn keyword     lpcOperator     catch efun in inherit
29 syn keyword     lpcRepeat       do for foreach while
30 syn keyword     lpcStatement    break continue return
32 syn match       lpcEfunError    /efun[^:]/ display
34 " Illegal to use keyword as function
35 " It's not working, maybe in the next version.
36 syn keyword     lpcKeywdError   contained if for foreach return switch while
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.
41 syn keyword     lpcKeywdFunc    new parse_command sscanf time_expression
43 " Nodule: Type and modifiers {{{1
45 " Type names list.
47 " Special types
48 syn keyword     lpcType         void mixed unknown
49 " Scalar/Value types.
50 syn keyword     lpcType         int float string
51 " Pointer types.
52 syn keyword     lpcType         array buffer class function mapping object
53 " Other types.
54 if exists("lpc_compat_32")
55     syn keyword     lpcType         closure status funcall
56 else
57     syn keyword     lpcError        closure status
58     syn keyword     lpcType         multiset
59 endif
61 " Type modifier.
62 syn keyword     lpcModifier     nomask private public
63 syn keyword     lpcModifier     varargs virtual
65 " sensible modifiers
66 if exists("lpc_pre_v22")
67     syn keyword lpcReserved     nosave protected ref
68     syn keyword lpcModifier     static
69 else
70     syn keyword lpcError        static
71     syn keyword lpcModifier     nosave protected ref
72 endif
74 " Nodule: Applies {{{1
76 " Match a function declaration or function pointer
77 syn match       lpcApplyDecl    excludenl /->\h\w*(/me=e-1 contains=lpcApplies transparent display
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.
81 syn match       lpcLongDecl     excludenl /\(\s\|\*\)\h\+\s\h\+(/me=e-1 contains=@lpcEfunGroup,lpcType,@lpcKeywdGrp transparent display
83 " this is form for all functions
84 " ->foo() form had been excluded
85 syn match       lpcFuncDecl     excludenl /\h\w*(/me=e-1 contains=lpcApplies,@lpcEfunGroup,lpcKeywdError transparent display
87 " The (: :) parenthesis or $() forms a function pointer
88 syn match       lpcFuncName     /(:\s*\h\+\s*:)/me=e-1 contains=lpcApplies,@lpcEfunGroup transparent display contained
89 syn match       lpcFuncName     /(:\s*\h\+,/ contains=lpcApplies,@lpcEfunGroup transparent display contained
90 syn match       lpcFuncName     /\$(\h\+)/ contains=lpcApplies,@lpcEfunGroup transparent display contained
92 " Applies list.
93 "       system applies
94 syn keyword     lpcApplies      contained __INIT clean_up create destructor heart_beat id init move_or_destruct reset
95 "       interactive
96 syn 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
98 syn 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
99 syn 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
101 syn 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
104 " Nodule: Efuns {{{1
106 syn cluster     lpcEfunGroup    contains=lpc_efuns,lpcOldEfuns,lpcNewEfuns,lpcKeywdFunc
108 " Compat32 efuns
109 if exists("lpc_compat_32")
110     syn keyword lpc_efuns       contained closurep heart_beat_info m_delete m_values m_indices query_once_interactive strstr
111 else
112     syn match   lpcErrFunc      /#`\h\w*/
113     " Shell compatible first line comment.
114     syn region  lpcCommentFunc  start=/^#!/ end=/$/
115 endif
117 " pre-v22 efuns which are removed in newer versions.
118 syn keyword     lpcOldEfuns     contained tail dump_socket_status
120 " new efuns after v22 should be added here!
121 syn keyword     lpcNewEfuns     contained socket_status
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
127 syn keyword     lpc_efuns       contained acos add_action all_inventory all_previous_objects allocate allocate_buffer allocate_mapping apply arrayp asin atan author_stats
128 syn keyword     lpc_efuns       contained bind break_string bufferp
129 syn 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
130 syn 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
131 syn 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
132 syn 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
133 syn keyword     lpc_efuns       contained generate_source get_char get_config get_dir geteuid getuid
134 syn keyword     lpc_efuns       contained heart_beats
135 syn keyword     lpc_efuns       contained id_matrix implode in_edit in_input inherit_list inherits input_to interactive intp
136 syn keyword     lpc_efuns       contained keys
137 syn keyword     lpc_efuns       contained link living livings load_object localtime log log10 lookat_rotate lower_case lpc_info
138 syn 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
139 syn keyword     lpc_efuns       contained named_livings network_stats next_bit next_inventory notify_fail nullp
140 syn keyword     lpc_efuns       contained objectp objects oldcrypt opcprof origin
141 syn 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
142 syn 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
143 syn 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
144 syn 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
145 syn 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
146 syn keyword     lpc_efuns       contained undefinedp unique_array unique_mapping upper_case uptime userp users
147 syn keyword     lpc_efuns       contained values variables virtualp
148 syn keyword     lpc_efuns       contained wizardp write write_buffer write_bytes write_file
150 " Nodule: Constants {{{1
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.
155 syn 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?
158 syn 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.
161 syn keyword     lpcConstant     HAS_ED HAS_PRINTF HAS_RUSAGE HAS_DEBUG_LEVEL
162 syn keyword     lpcConstant     MUD_NAME F__THIS_OBJECT
164 " Nodule: Todo for this file.  {{{1
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.
170 " Notes about some FAQ:
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.
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.
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.
187 " Nodule: String and Character {{{1
190 " String and Character constants
191 " Highlight special characters (those which have a backslash) differently
192 syn match       lpcSpecial      display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
193 if !exists("c_no_utf")
194   syn match     lpcSpecial      display contained "\\\(u\x\{4}\|U\x\{8}\)"
195 endif
197 " LPC version of sprintf() format,
198 syn match       lpcFormat       display "%\(\d\+\)\=[-+ |=#@:.]*\(\d\+\)\=\('\I\+'\|'\I*\\'\I*'\)\=[OsdicoxXf]" contained
199 syn match       lpcFormat       display "%%" contained
200 syn region      lpcString       start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=lpcSpecial,lpcFormat
201 " lpcCppString: same as lpcString, but ends at end of line
202 syn region      lpcCppString    start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=lpcSpecial,lpcFormat
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.
207 syn region      lpcTextString   start=/@\z(\h\w*\)$/ end=/^\z1/ contains=lpcSpecial
208 syn region      lpcArrayString  start=/@@\z(\h\w*\)$/ end=/^\z1/ contains=lpcSpecial
210 " Character
211 syn match       lpcCharacter    "L\='[^\\]'"
212 syn match       lpcCharacter    "L'[^']*'" contains=lpcSpecial
213 syn match       lpcSpecialError "L\='\\[^'\"?\\abefnrtv]'"
214 syn match       lpcSpecialCharacter "L\='\\['\"?\\abefnrtv]'"
215 syn match       lpcSpecialCharacter display "L\='\\\o\{1,3}'"
216 syn match       lpcSpecialCharacter display "'\\x\x\{1,2}'"
217 syn match       lpcSpecialCharacter display "L'\\x\x\+'"
219 " Nodule: White space {{{1
221 " when wanted, highlight trailing white space
222 if 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
229 endif
231 " Nodule: Parenthesis and brackets {{{1
233 " catch errors caused by wrong parenthesis and brackets
234 syn 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
235 syn 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
237 syn region      lpcCppParen     transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@lpcParenGroup,lpcErrInBracket,lpcParen,lpcBracket,lpcString,@lpcEfunGroup,lpcApplies,lpcKeywdError
238 syn match       lpcParenError   display ")"
239 syn match       lpcParenError   display "\]"
240 " for LPC:
241 " Here we should consider the array ({ }) parenthesis and mapping ([ ])
242 " parenthesis and multiset (< >) parenthesis.
243 syn match       lpcErrInParen   display contained "[^^]{"ms=s+1
244 syn match       lpcErrInParen   display contained "\(}\|\]\)[^)]"me=e-1
245 syn 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
247 syn region      lpcCppBracket   transparent start='\[' skip='\\$' excludenl end=']' end='$' contained contains=ALLBUT,@lpcParenGroup,lpcErrInParen,lpcParen,lpcBracket,lpcString,@lpcEfunGroup,lpcApplies,lpcFuncName,lpcKeywdError
248 syn match       lpcErrInBracket display contained "[);{}]"
250 " Nodule: Numbers {{{1
252 " integer number, or floating point number without a dot and with "f".
253 syn case ignore
254 syn match       lpcNumbers      display transparent "\<\d\|\.\d" contains=lpcNumber,lpcFloat,lpcOctalError,lpcOctal
255 " Same, but without octal error (for comments)
256 syn match       lpcNumbersCom   display contained transparent "\<\d\|\.\d" contains=lpcNumber,lpcFloat,lpcOctal
257 syn match       lpcNumber       display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
258 " hex number
259 syn match       lpcNumber       display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
260 " Flag the first zero of an octal number as something special
261 syn match       lpcOctal        display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=lpcOctalZero
262 syn match       lpcOctalZero    display contained "\<0"
263 syn match       lpcFloat        display contained "\d\+f"
264 " floating point number, with dot, optional exponent
265 syn match       lpcFloat        display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
266 " floating point number, starting with a dot, optional exponent
267 syn match       lpcFloat        display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
268 " floating point number, without dot, with exponent
269 syn match       lpcFloat        display contained "\d\+e[-+]\=\d\+[fl]\=\>"
270 " flag an octal number with wrong digits
271 syn match       lpcOctalError   display contained "0\o*[89]\d*"
272 syn case match
274 " Nodule: Comment string {{{1
276 " lpcCommentGroup allows adding matches for special things in comments
277 syn keyword     lpcTodo         contained TODO FIXME XXX
278 syn cluster     lpcCommentGroup contains=lpcTodo
280 if 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
287 else
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
290 endif
291 " keep a // comment separately, it terminates a preproc. conditional
292 syntax match    lpcCommentError display "\*/"
293 syntax match    lpcCommentStartError display "/\*"me=e-1 contained
295 " Nodule: Pre-processor {{{1
297 syn region      lpcPreCondit    start="^\s*#\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=lpcComment,lpcCppString,lpcCharacter,lpcCppParen,lpcParenError,lpcNumbers,lpcCommentError,lpcSpaceError
298 syn match       lpcPreCondit    display "^\s*#\s*\(else\|endif\)\>"
299 if !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
303 endif
304 syn region      lpcIncluded     display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
305 syn match       lpcIncluded     display contained "<[^>]*>"
306 syn match       lpcInclude      display "^\s*#\s*include\>\s*["<]" contains=lpcIncluded
307 syn match lpcLineSkip   "\\$"
308 syn 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
309 syn region      lpcDefine       start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@lpcPreProcGroup
311 if exists("lpc_pre_v22")
312     syn region  lpcPreProc      start="^\s*#\s*\(pragma\>\|echo\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@lpcPreProcGroup
313 else
314     syn region  lpcPreProc      start="^\s*#\s*\(pragma\>\|echo\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@lpcPreProcGroup
315 endif
317 " Nodule: User labels {{{1
319 " Highlight Labels
320 " User labels in LPC is not allowed, only "case x" and "default" is supported
321 syn 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
322 syn region      lpcMulti                transparent start='\(case\|default\|public\|protected\|private\)' skip='::' end=':' contains=ALLBUT,@lpcMultiGroup
324 syn cluster     lpcLabelGroup   contains=lpcUserLabel
325 syn match       lpcUserCont     display "^\s*lpc:$" contains=@lpcLabelGroup
327 " Don't want to match anything
328 syn match       lpcUserLabel    display "lpc" contained
330 " Nodule: Initializations {{{1
332 if exists("c_minlines")
333   let b:c_minlines = c_minlines
334 else
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
340 endif
341 exec "syn sync ccomment lpcComment minlines=" . b:c_minlines
343 " Make sure these options take place since we no longer depend on file type
344 " plugin for C
345 setlocal cindent
346 setlocal fo-=t fo+=croql
347 setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
348 set cpo-=C
350 " Win32 can filter files in the browse dialog
351 if has("gui_win32") && !exists("b:browsefilter")
352     let b:browsefilter = "LPC Source Files (*.c *.d *.h)\t*.c;*.d;*.h\n" .
353         \ "LPC Data Files (*.scr *.o *.dat)\t*.scr;*.o;*.dat\n" .
354         \ "Text Documentation (*.txt)\t*.txt\n" .
355         \ "All Files (*.*)\t*.*\n"
356 endif
358 " Nodule: Highlight links {{{1
360 " Define the default highlighting.
361 " For version 5.7 and earlier: only when not done already
362 " For version 5.8 and later: only when an item doesn't have highlighting yet
363 if version >= 508 || !exists("did_lpc_syn_inits")
364   if version < 508
365     let did_lpc_syn_inits = 1
366     command -nargs=+ HiLink hi link <args>
367   else
368     command -nargs=+ HiLink hi def link <args>
369   endif
371   HiLink lpcModifier            lpcStorageClass
373   HiLink lpcQuotedFmt           lpcFormat
374   HiLink lpcFormat              lpcSpecial
375   HiLink lpcCppString           lpcString       " Cpp means
376                                                 " C Pre-Processor
377   HiLink lpcCommentL            lpcComment
378   HiLink lpcCommentStart        lpcComment
379   HiLink lpcUserLabel           lpcLabel
380   HiLink lpcSpecialCharacter    lpcSpecial
381   HiLink lpcOctal               lpcPreProc
382   HiLink lpcOctalZero           lpcSpecial  " LPC will treat octal numbers
383                                             " as decimals, programmers should
384                                             " be aware of that.
385   HiLink lpcEfunError           lpcError
386   HiLink lpcKeywdError          lpcError
387   HiLink lpcOctalError          lpcError
388   HiLink lpcParenError          lpcError
389   HiLink lpcErrInParen          lpcError
390   HiLink lpcErrInBracket        lpcError
391   HiLink lpcCommentError        lpcError
392   HiLink lpcCommentStartError   lpcError
393   HiLink lpcSpaceError          lpcError
394   HiLink lpcSpecialError        lpcError
395   HiLink lpcErrFunc             lpcError
397   if exists("lpc_pre_v22")
398       HiLink lpcOldEfuns        lpc_efuns
399       HiLink lpcNewEfuns        lpcError
400   else
401       HiLink lpcOldEfuns        lpcReserved
402       HiLink lpcNewEfuns        lpc_efuns
403   endif
404   HiLink lpc_efuns              lpcFunction
406   HiLink lpcReserved            lpcPreProc
407   HiLink lpcTextString          lpcString   " This should be preprocessors, but
408   HiLink lpcArrayString         lpcPreProc  " let's make some difference
409                                             " between text and array
411   HiLink lpcIncluded            lpcString
412   HiLink lpcCommentString       lpcString
413   HiLink lpcComment2String      lpcString
414   HiLink lpcCommentSkip         lpcComment
415   HiLink lpcCommentFunc         lpcComment
417   HiLink lpcCppSkip             lpcCppOut
418   HiLink lpcCppOut2             lpcCppOut
419   HiLink lpcCppOut              lpcComment
421   " Standard type below
422   HiLink lpcApplies             Special
423   HiLink lpcCharacter           Character
424   HiLink lpcComment             Comment
425   HiLink lpcConditional         Conditional
426   HiLink lpcConstant            Constant
427   HiLink lpcDefine              Macro
428   HiLink lpcError               Error
429   HiLink lpcFloat               Float
430   HiLink lpcFunction            Function
431   HiLink lpcIdentifier          Identifier
432   HiLink lpcInclude             Include
433   HiLink lpcLabel               Label
434   HiLink lpcNumber              Number
435   HiLink lpcOperator            Operator
436   HiLink lpcPreCondit           PreCondit
437   HiLink lpcPreProc             PreProc
438   HiLink lpcRepeat              Repeat
439   HiLink lpcStatement           Statement
440   HiLink lpcStorageClass        StorageClass
441   HiLink lpcString              String
442   HiLink lpcStructure           Structure
443   HiLink lpcSpecial             LineNr
444   HiLink lpcTodo                Todo
445   HiLink lpcType                Type
447   delcommand HiLink
448 endif
450 " Nodule: This is the end nodule. {{{1
452 let b:current_syntax = "lpc"
454 " vim:ts=8:nosta:sw=2:ai:si:
455 " vim600:set fdm=marker: }}}1