7
|
1 " Vim syntax file
|
|
2 " Language: LPC
|
|
3 " Maintainer: Shizhu Pan <poet@mudbuilder.net>
|
|
4 " URL: http://poet.tomud.com/pub/lpc.vim.bz2
|
3224
|
5 " Last Change: 2011 Dec 10 by Thilo Six
|
7
|
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
|
3224
|
20 let s:cpo_save = &cpo
|
|
21 set cpo&vim
|
|
22
|
7
|
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
|
3224
|
456 let &cpo = s:cpo_save
|
|
457 unlet s:cpo_save
|
|
458
|
7
|
459 " vim:ts=8:nosta:sw=2:ai:si:
|
|
460 " vim600:set fdm=marker: }}}1
|