Tizen 2.0 Release
[external/vim.git] / runtime / syntax / lpc.vim
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:  2011 Dec 10 by Thilo Six
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 " 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
19
20 let s:cpo_save = &cpo
21 set cpo&vim
22
23 " Nodule: Keywords {{{1
24
25 " LPC keywords
26 " keywords should always be highlighted so "contained" is not used.
27 syn cluster     lpcKeywdGrp     contains=lpcConditional,lpcLabel,lpcOperator,lpcRepeat,lpcStatement,lpcModifier,lpcReserved
28
29 syn keyword     lpcConditional  if else switch
30 syn keyword     lpcLabel        case default
31 syn keyword     lpcOperator     catch efun in inherit
32 syn keyword     lpcRepeat       do for foreach while
33 syn keyword     lpcStatement    break continue return
34
35 syn match       lpcEfunError    /efun[^:]/ display
36
37 " Illegal to use keyword as function
38 " It's not working, maybe in the next version.
39 syn keyword     lpcKeywdError   contained if for foreach return switch while
40
41 " These are keywords only because they take lvalue or type as parameter,
42 " so these keywords should only be used as function but cannot be names of
43 " user-defined functions.
44 syn keyword     lpcKeywdFunc    new parse_command sscanf time_expression
45
46 " Nodule: Type and modifiers {{{1
47
48 " Type names list.
49
50 " Special types
51 syn keyword     lpcType         void mixed unknown
52 " Scalar/Value types.
53 syn keyword     lpcType         int float string
54 " Pointer types.
55 syn keyword     lpcType         array buffer class function mapping object
56 " Other types.
57 if exists("lpc_compat_32")
58     syn keyword     lpcType         closure status funcall
59 else
60     syn keyword     lpcError        closure status
61     syn keyword     lpcType         multiset
62 endif
63
64 " Type modifier.
65 syn keyword     lpcModifier     nomask private public
66 syn keyword     lpcModifier     varargs virtual
67
68 " sensible modifiers
69 if exists("lpc_pre_v22")
70     syn keyword lpcReserved     nosave protected ref
71     syn keyword lpcModifier     static
72 else
73     syn keyword lpcError        static
74     syn keyword lpcModifier     nosave protected ref
75 endif
76
77 " Nodule: Applies {{{1
78
79 " Match a function declaration or function pointer
80 syn match       lpcApplyDecl    excludenl /->\h\w*(/me=e-1 contains=lpcApplies transparent display
81
82 " We should note that in func_spec.c the efun definition syntax is so
83 " complicated that I use such a long regular expression to describe.
84 syn match       lpcLongDecl     excludenl /\(\s\|\*\)\h\+\s\h\+(/me=e-1 contains=@lpcEfunGroup,lpcType,@lpcKeywdGrp transparent display
85
86 " this is form for all functions
87 " ->foo() form had been excluded
88 syn match       lpcFuncDecl     excludenl /\h\w*(/me=e-1 contains=lpcApplies,@lpcEfunGroup,lpcKeywdError transparent display
89
90 " The (: :) parenthesis or $() forms a function pointer
91 syn match       lpcFuncName     /(:\s*\h\+\s*:)/me=e-1 contains=lpcApplies,@lpcEfunGroup transparent display contained
92 syn match       lpcFuncName     /(:\s*\h\+,/ contains=lpcApplies,@lpcEfunGroup transparent display contained
93 syn match       lpcFuncName     /\$(\h\+)/ contains=lpcApplies,@lpcEfunGroup transparent display contained
94
95 " Applies list.
96 "       system applies
97 syn keyword     lpcApplies      contained __INIT clean_up create destructor heart_beat id init move_or_destruct reset
98 "       interactive
99 syn keyword     lpcApplies      contained catch_tell logon net_dead process_input receive_message receive_snoop telnet_suboption terminal_type window_size write_prompt
100 "       master applies
101 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
102 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
103 "       parsing
104 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
105
106
107 " Nodule: Efuns {{{1
108
109 syn cluster     lpcEfunGroup    contains=lpc_efuns,lpcOldEfuns,lpcNewEfuns,lpcKeywdFunc
110
111 " Compat32 efuns
112 if exists("lpc_compat_32")
113     syn keyword lpc_efuns       contained closurep heart_beat_info m_delete m_values m_indices query_once_interactive strstr
114 else
115     syn match   lpcErrFunc      /#`\h\w*/
116     " Shell compatible first line comment.
117     syn region  lpcCommentFunc  start=/^#!/ end=/$/
118 endif
119
120 " pre-v22 efuns which are removed in newer versions.
121 syn keyword     lpcOldEfuns     contained tail dump_socket_status
122
123 " new efuns after v22 should be added here!
124 syn keyword     lpcNewEfuns     contained socket_status
125
126 " LPC efuns list.
127 " DEBUG efuns Not included.
128 " New efuns should NOT be added to this list, see v22 efuns above.
129 " Efuns list {{{2
130 syn keyword     lpc_efuns       contained acos add_action all_inventory all_previous_objects allocate allocate_buffer allocate_mapping apply arrayp asin atan author_stats
131 syn keyword     lpc_efuns       contained bind break_string bufferp
132 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
133 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
134 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
135 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
136 syn keyword     lpc_efuns       contained generate_source get_char get_config get_dir geteuid getuid
137 syn keyword     lpc_efuns       contained heart_beats
138 syn keyword     lpc_efuns       contained id_matrix implode in_edit in_input inherit_list inherits input_to interactive intp
139 syn keyword     lpc_efuns       contained keys
140 syn keyword     lpc_efuns       contained link living livings load_object localtime log log10 lookat_rotate lower_case lpc_info
141 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
142 syn keyword     lpc_efuns       contained named_livings network_stats next_bit next_inventory notify_fail nullp
143 syn keyword     lpc_efuns       contained objectp objects oldcrypt opcprof origin
144 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
145 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
146 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
147 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
148 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
149 syn keyword     lpc_efuns       contained undefinedp unique_array unique_mapping upper_case uptime userp users
150 syn keyword     lpc_efuns       contained values variables virtualp
151 syn keyword     lpc_efuns       contained wizardp write write_buffer write_bytes write_file
152
153 " Nodule: Constants {{{1
154
155 " LPC Constants.
156 " like keywords, constants are always highlighted, be careful to choose only
157 " the constants we used to add to this list.
158 syn keyword     lpcConstant     __ARCH__ __COMPILER__ __DIR__ __FILE__ __OPTIMIZATION__ __PORT__ __VERSION__
159 "       Defines in options.h are all predefined in LPC sources surrounding by
160 "       two underscores. Do we need to include all of that?
161 syn keyword     lpcConstant     __SAVE_EXTENSION__ __HEARTBEAT_INTERVAL__
162 "       from the documentation we know that these constants remains only for
163 "       backward compatibility and should not be used any more.
164 syn keyword     lpcConstant     HAS_ED HAS_PRINTF HAS_RUSAGE HAS_DEBUG_LEVEL
165 syn keyword     lpcConstant     MUD_NAME F__THIS_OBJECT
166
167 " Nodule: Todo for this file.  {{{1
168
169 " TODO : need to check for LPC4 syntax and other series of LPC besides
170 " v22, b21 and l32, if you had a good idea, contact me at poet@mudbuilder.net
171 " and I will be appreciated about that.
172
173 " Notes about some FAQ:
174 "
175 " About variables : We adopts the same behavior for C because almost all the
176 " LPC programmers are also C programmers, so we don't need separate settings
177 " for C and LPC. That is the reason why I don't change variables like
178 " "c_no_utf"s to "lpc_no_utf"s.
179 "
180 " Copy : Some of the following seems to be copied from c.vim but not quite
181 " the same in details because the syntax for C and LPC is different.
182 "
183 " Color scheme : this syntax file had been thouroughly tested to work well
184 " for all of the dark-backgrounded color schemes Vim has provided officially,
185 " and it should be quite Ok for all of the bright-backgrounded color schemes,
186 " of course it works best for the color scheme that I am using, download it
187 " from http://poet.tomud.com/pub/ps_color.vim.bz2 if you want to try it.
188 "
189
190 " Nodule: String and Character {{{1
191
192
193 " String and Character constants
194 " Highlight special characters (those which have a backslash) differently
195 syn match       lpcSpecial      display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
196 if !exists("c_no_utf")
197   syn match     lpcSpecial      display contained "\\\(u\x\{4}\|U\x\{8}\)"
198 endif
199
200 " LPC version of sprintf() format,
201 syn match       lpcFormat       display "%\(\d\+\)\=[-+ |=#@:.]*\(\d\+\)\=\('\I\+'\|'\I*\\'\I*'\)\=[OsdicoxXf]" contained
202 syn match       lpcFormat       display "%%" contained
203 syn region      lpcString       start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=lpcSpecial,lpcFormat
204 " lpcCppString: same as lpcString, but ends at end of line
205 syn region      lpcCppString    start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=lpcSpecial,lpcFormat
206
207 " LPC preprocessor for the text formatting short cuts
208 " Thanks to Dr. Charles E. Campbell <cec@gryphon.gsfc.nasa.gov>
209 "       he suggests the best way to do this.
210 syn region      lpcTextString   start=/@\z(\h\w*\)$/ end=/^\z1/ contains=lpcSpecial
211 syn region      lpcArrayString  start=/@@\z(\h\w*\)$/ end=/^\z1/ contains=lpcSpecial
212
213 " Character
214 syn match       lpcCharacter    "L\='[^\\]'"
215 syn match       lpcCharacter    "L'[^']*'" contains=lpcSpecial
216 syn match       lpcSpecialError "L\='\\[^'\"?\\abefnrtv]'"
217 syn match       lpcSpecialCharacter "L\='\\['\"?\\abefnrtv]'"
218 syn match       lpcSpecialCharacter display "L\='\\\o\{1,3}'"
219 syn match       lpcSpecialCharacter display "'\\x\x\{1,2}'"
220 syn match       lpcSpecialCharacter display "L'\\x\x\+'"
221
222 " Nodule: White space {{{1
223
224 " when wanted, highlight trailing white space
225 if exists("c_space_errors")
226   if !exists("c_no_trail_space_error")
227     syn match   lpcSpaceError   display excludenl "\s\+$"
228   endif
229   if !exists("c_no_tab_space_error")
230     syn match   lpcSpaceError   display " \+\t"me=e-1
231   endif
232 endif
233
234 " Nodule: Parenthesis and brackets {{{1
235
236 " catch errors caused by wrong parenthesis and brackets
237 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
238 syn region      lpcParen        transparent start='(' end=')' contains=ALLBUT,@lpcParenGroup,lpcCppParen,lpcErrInBracket,lpcCppBracket,lpcCppString,@lpcEfunGroup,lpcApplies,lpcKeywdError
239 " lpcCppParen: same as lpcParen but ends at end-of-line; used in lpcDefine
240 syn region      lpcCppParen     transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@lpcParenGroup,lpcErrInBracket,lpcParen,lpcBracket,lpcString,@lpcEfunGroup,lpcApplies,lpcKeywdError
241 syn match       lpcParenError   display ")"
242 syn match       lpcParenError   display "\]"
243 " for LPC:
244 " Here we should consider the array ({ }) parenthesis and mapping ([ ])
245 " parenthesis and multiset (< >) parenthesis.
246 syn match       lpcErrInParen   display contained "[^^]{"ms=s+1
247 syn match       lpcErrInParen   display contained "\(}\|\]\)[^)]"me=e-1
248 syn region      lpcBracket      transparent start='\[' end=']' contains=ALLBUT,@lpcParenGroup,lpcErrInParen,lpcCppParen,lpcCppBracket,lpcCppString,@lpcEfunGroup,lpcApplies,lpcFuncName,lpcKeywdError
249 " lpcCppBracket: same as lpcParen but ends at end-of-line; used in lpcDefine
250 syn region      lpcCppBracket   transparent start='\[' skip='\\$' excludenl end=']' end='$' contained contains=ALLBUT,@lpcParenGroup,lpcErrInParen,lpcParen,lpcBracket,lpcString,@lpcEfunGroup,lpcApplies,lpcFuncName,lpcKeywdError
251 syn match       lpcErrInBracket display contained "[);{}]"
252
253 " Nodule: Numbers {{{1
254
255 " integer number, or floating point number without a dot and with "f".
256 syn case ignore
257 syn match       lpcNumbers      display transparent "\<\d\|\.\d" contains=lpcNumber,lpcFloat,lpcOctalError,lpcOctal
258 " Same, but without octal error (for comments)
259 syn match       lpcNumbersCom   display contained transparent "\<\d\|\.\d" contains=lpcNumber,lpcFloat,lpcOctal
260 syn match       lpcNumber       display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
261 " hex number
262 syn match       lpcNumber       display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
263 " Flag the first zero of an octal number as something special
264 syn match       lpcOctal        display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=lpcOctalZero
265 syn match       lpcOctalZero    display contained "\<0"
266 syn match       lpcFloat        display contained "\d\+f"
267 " floating point number, with dot, optional exponent
268 syn match       lpcFloat        display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
269 " floating point number, starting with a dot, optional exponent
270 syn match       lpcFloat        display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
271 " floating point number, without dot, with exponent
272 syn match       lpcFloat        display contained "\d\+e[-+]\=\d\+[fl]\=\>"
273 " flag an octal number with wrong digits
274 syn match       lpcOctalError   display contained "0\o*[89]\d*"
275 syn case match
276
277 " Nodule: Comment string {{{1
278
279 " lpcCommentGroup allows adding matches for special things in comments
280 syn keyword     lpcTodo         contained TODO FIXME XXX
281 syn cluster     lpcCommentGroup contains=lpcTodo
282
283 if exists("c_comment_strings")
284   " A comment can contain lpcString, lpcCharacter and lpcNumber.
285   syntax match  lpcCommentSkip  contained "^\s*\*\($\|\s\+\)"
286   syntax region lpcCommentString        contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=lpcSpecial,lpcCommentSkip
287   syntax region lpcComment2String       contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=lpcSpecial
288   syntax region  lpcCommentL    start="//" skip="\\$" end="$" keepend contains=@lpcCommentGroup,lpcComment2String,lpcCharacter,lpcNumbersCom,lpcSpaceError
289   syntax region lpcComment      matchgroup=lpcCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@lpcCommentGroup,lpcCommentStartError,lpcCommentString,lpcCharacter,lpcNumbersCom,lpcSpaceError
290 else
291   syn region    lpcCommentL     start="//" skip="\\$" end="$" keepend contains=@lpcCommentGroup,lpcSpaceError
292   syn region    lpcComment      matchgroup=lpcCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@lpcCommentGroup,lpcCommentStartError,lpcSpaceError
293 endif
294 " keep a // comment separately, it terminates a preproc. conditional
295 syntax match    lpcCommentError display "\*/"
296 syntax match    lpcCommentStartError display "/\*"me=e-1 contained
297
298 " Nodule: Pre-processor {{{1
299
300 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
301 syn match       lpcPreCondit    display "^\s*#\s*\(else\|endif\)\>"
302 if !exists("c_no_if0")
303   syn region    lpcCppOut               start="^\s*#\s*if\s\+0\+\>" end=".\|$" contains=lpcCppOut2
304   syn region    lpcCppOut2      contained start="0" end="^\s*#\s*\(endif\>\|else\>\|elif\>\)" contains=lpcSpaceError,lpcCppSkip
305   syn region    lpcCppSkip      contained start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*#\s*endif\>" contains=lpcSpaceError,lpcCppSkip
306 endif
307 syn region      lpcIncluded     display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
308 syn match       lpcIncluded     display contained "<[^>]*>"
309 syn match       lpcInclude      display "^\s*#\s*include\>\s*["<]" contains=lpcIncluded
310 syn match lpcLineSkip   "\\$"
311 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
312 syn region      lpcDefine       start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@lpcPreProcGroup
313
314 if exists("lpc_pre_v22")
315     syn region  lpcPreProc      start="^\s*#\s*\(pragma\>\|echo\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@lpcPreProcGroup
316 else
317     syn region  lpcPreProc      start="^\s*#\s*\(pragma\>\|echo\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@lpcPreProcGroup
318 endif
319
320 " Nodule: User labels {{{1
321
322 " Highlight Labels
323 " User labels in LPC is not allowed, only "case x" and "default" is supported
324 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
325 syn region      lpcMulti                transparent start='\(case\|default\|public\|protected\|private\)' skip='::' end=':' contains=ALLBUT,@lpcMultiGroup
326
327 syn cluster     lpcLabelGroup   contains=lpcUserLabel
328 syn match       lpcUserCont     display "^\s*lpc:$" contains=@lpcLabelGroup
329
330 " Don't want to match anything
331 syn match       lpcUserLabel    display "lpc" contained
332
333 " Nodule: Initializations {{{1
334
335 if exists("c_minlines")
336   let b:c_minlines = c_minlines
337 else
338   if !exists("c_no_if0")
339     let b:c_minlines = 50       " #if 0 constructs can be long
340   else
341     let b:c_minlines = 15       " mostly for () constructs
342   endif
343 endif
344 exec "syn sync ccomment lpcComment minlines=" . b:c_minlines
345
346 " Make sure these options take place since we no longer depend on file type
347 " plugin for C
348 setlocal cindent
349 setlocal fo-=t fo+=croql
350 setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
351
352 " Win32 can filter files in the browse dialog
353 if has("gui_win32") && !exists("b:browsefilter")
354     let b:browsefilter = "LPC Source Files (*.c *.d *.h)\t*.c;*.d;*.h\n" .
355         \ "LPC Data Files (*.scr *.o *.dat)\t*.scr;*.o;*.dat\n" .
356         \ "Text Documentation (*.txt)\t*.txt\n" .
357         \ "All Files (*.*)\t*.*\n"
358 endif
359
360 " Nodule: Highlight links {{{1
361
362 " Define the default highlighting.
363 " For version 5.7 and earlier: only when not done already
364 " For version 5.8 and later: only when an item doesn't have highlighting yet
365 if version >= 508 || !exists("did_lpc_syn_inits")
366   if version < 508
367     let did_lpc_syn_inits = 1
368     command -nargs=+ HiLink hi link <args>
369   else
370     command -nargs=+ HiLink hi def link <args>
371   endif
372
373   HiLink lpcModifier            lpcStorageClass
374
375   HiLink lpcQuotedFmt           lpcFormat
376   HiLink lpcFormat              lpcSpecial
377   HiLink lpcCppString           lpcString       " Cpp means
378                                                 " C Pre-Processor
379   HiLink lpcCommentL            lpcComment
380   HiLink lpcCommentStart        lpcComment
381   HiLink lpcUserLabel           lpcLabel
382   HiLink lpcSpecialCharacter    lpcSpecial
383   HiLink lpcOctal               lpcPreProc
384   HiLink lpcOctalZero           lpcSpecial  " LPC will treat octal numbers
385                                             " as decimals, programmers should
386                                             " be aware of that.
387   HiLink lpcEfunError           lpcError
388   HiLink lpcKeywdError          lpcError
389   HiLink lpcOctalError          lpcError
390   HiLink lpcParenError          lpcError
391   HiLink lpcErrInParen          lpcError
392   HiLink lpcErrInBracket        lpcError
393   HiLink lpcCommentError        lpcError
394   HiLink lpcCommentStartError   lpcError
395   HiLink lpcSpaceError          lpcError
396   HiLink lpcSpecialError        lpcError
397   HiLink lpcErrFunc             lpcError
398
399   if exists("lpc_pre_v22")
400       HiLink lpcOldEfuns        lpc_efuns
401       HiLink lpcNewEfuns        lpcError
402   else
403       HiLink lpcOldEfuns        lpcReserved
404       HiLink lpcNewEfuns        lpc_efuns
405   endif
406   HiLink lpc_efuns              lpcFunction
407
408   HiLink lpcReserved            lpcPreProc
409   HiLink lpcTextString          lpcString   " This should be preprocessors, but
410   HiLink lpcArrayString         lpcPreProc  " let's make some difference
411                                             " between text and array
412
413   HiLink lpcIncluded            lpcString
414   HiLink lpcCommentString       lpcString
415   HiLink lpcComment2String      lpcString
416   HiLink lpcCommentSkip         lpcComment
417   HiLink lpcCommentFunc         lpcComment
418
419   HiLink lpcCppSkip             lpcCppOut
420   HiLink lpcCppOut2             lpcCppOut
421   HiLink lpcCppOut              lpcComment
422
423   " Standard type below
424   HiLink lpcApplies             Special
425   HiLink lpcCharacter           Character
426   HiLink lpcComment             Comment
427   HiLink lpcConditional         Conditional
428   HiLink lpcConstant            Constant
429   HiLink lpcDefine              Macro
430   HiLink lpcError               Error
431   HiLink lpcFloat               Float
432   HiLink lpcFunction            Function
433   HiLink lpcIdentifier          Identifier
434   HiLink lpcInclude             Include
435   HiLink lpcLabel               Label
436   HiLink lpcNumber              Number
437   HiLink lpcOperator            Operator
438   HiLink lpcPreCondit           PreCondit
439   HiLink lpcPreProc             PreProc
440   HiLink lpcRepeat              Repeat
441   HiLink lpcStatement           Statement
442   HiLink lpcStorageClass        StorageClass
443   HiLink lpcString              String
444   HiLink lpcStructure           Structure
445   HiLink lpcSpecial             LineNr
446   HiLink lpcTodo                Todo
447   HiLink lpcType                Type
448
449   delcommand HiLink
450 endif
451
452 " Nodule: This is the end nodule. {{{1
453
454 let b:current_syntax = "lpc"
455
456 let &cpo = s:cpo_save
457 unlet s:cpo_save
458
459 " vim:ts=8:nosta:sw=2:ai:si:
460 " vim600:set fdm=marker: }}}1