xref: /vim-8.2.3635/runtime/syntax/lpc.vim (revision f37506f6)
1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:	LPC
3071d4279SBram Moolenaar" Maintainer:	Shizhu Pan <[email protected]>
4071d4279SBram Moolenaar" URL:		http://poet.tomud.com/pub/lpc.vim.bz2
5*f37506f6SBram Moolenaar" Last Change:	2016 Aug 31
6071d4279SBram Moolenaar" Comments:	If you are using Vim 6.2 or later, see :h lpc.vim for
7071d4279SBram Moolenaar"		file type recognizing, if not, you had to use modeline.
8071d4279SBram Moolenaar
9071d4279SBram Moolenaar
10071d4279SBram Moolenaar" Nodule: This is the start nodule. {{{1
11071d4279SBram Moolenaar
1289bcfda6SBram Moolenaar" quit when a syntax file was already loaded
1389bcfda6SBram Moolenaarif exists("b:current_syntax")
14071d4279SBram Moolenaar  finish
15071d4279SBram Moolenaarendif
16071d4279SBram Moolenaar
17f1568ecaSBram Moolenaarlet s:cpo_save = &cpo
18f1568ecaSBram Moolenaarset cpo&vim
19f1568ecaSBram Moolenaar
20071d4279SBram Moolenaar" Nodule: Keywords {{{1
21071d4279SBram Moolenaar
22071d4279SBram Moolenaar" LPC keywords
23071d4279SBram Moolenaar" keywords should always be highlighted so "contained" is not used.
24071d4279SBram Moolenaarsyn cluster	lpcKeywdGrp	contains=lpcConditional,lpcLabel,lpcOperator,lpcRepeat,lpcStatement,lpcModifier,lpcReserved
25071d4279SBram Moolenaar
26071d4279SBram Moolenaarsyn keyword	lpcConditional	if else switch
27071d4279SBram Moolenaarsyn keyword	lpcLabel	case default
28071d4279SBram Moolenaarsyn keyword	lpcOperator	catch efun in inherit
29071d4279SBram Moolenaarsyn keyword	lpcRepeat	do for foreach while
30071d4279SBram Moolenaarsyn keyword	lpcStatement	break continue return
31071d4279SBram Moolenaar
32071d4279SBram Moolenaarsyn match	lpcEfunError	/efun[^:]/ display
33071d4279SBram Moolenaar
34071d4279SBram Moolenaar" Illegal to use keyword as function
35071d4279SBram Moolenaar" It's not working, maybe in the next version.
36071d4279SBram Moolenaarsyn keyword	lpcKeywdError	contained if for foreach return switch while
37071d4279SBram Moolenaar
38071d4279SBram Moolenaar" These are keywords only because they take lvalue or type as parameter,
39071d4279SBram Moolenaar" so these keywords should only be used as function but cannot be names of
40071d4279SBram Moolenaar" user-defined functions.
41071d4279SBram Moolenaarsyn keyword	lpcKeywdFunc	new parse_command sscanf time_expression
42071d4279SBram Moolenaar
43071d4279SBram Moolenaar" Nodule: Type and modifiers {{{1
44071d4279SBram Moolenaar
45071d4279SBram Moolenaar" Type names list.
46071d4279SBram Moolenaar
47071d4279SBram Moolenaar" Special types
48071d4279SBram Moolenaarsyn keyword	lpcType		void mixed unknown
49071d4279SBram Moolenaar" Scalar/Value types.
50071d4279SBram Moolenaarsyn keyword	lpcType		int float string
51071d4279SBram Moolenaar" Pointer types.
52071d4279SBram Moolenaarsyn keyword	lpcType		array buffer class function mapping object
53071d4279SBram Moolenaar" Other types.
54071d4279SBram Moolenaarif exists("lpc_compat_32")
55071d4279SBram Moolenaar    syn keyword     lpcType	    closure status funcall
56071d4279SBram Moolenaarelse
57071d4279SBram Moolenaar    syn keyword     lpcError	    closure status
58071d4279SBram Moolenaar    syn keyword     lpcType	    multiset
59071d4279SBram Moolenaarendif
60071d4279SBram Moolenaar
61071d4279SBram Moolenaar" Type modifier.
62071d4279SBram Moolenaarsyn keyword	lpcModifier	nomask private public
63071d4279SBram Moolenaarsyn keyword	lpcModifier	varargs virtual
64071d4279SBram Moolenaar
65071d4279SBram Moolenaar" sensible modifiers
66071d4279SBram Moolenaarif exists("lpc_pre_v22")
67071d4279SBram Moolenaar    syn keyword	lpcReserved	nosave protected ref
68071d4279SBram Moolenaar    syn keyword	lpcModifier	static
69071d4279SBram Moolenaarelse
70071d4279SBram Moolenaar    syn keyword	lpcError	static
71071d4279SBram Moolenaar    syn keyword	lpcModifier	nosave protected ref
72071d4279SBram Moolenaarendif
73071d4279SBram Moolenaar
74071d4279SBram Moolenaar" Nodule: Applies {{{1
75071d4279SBram Moolenaar
76071d4279SBram Moolenaar" Match a function declaration or function pointer
77071d4279SBram Moolenaarsyn match	lpcApplyDecl	excludenl /->\h\w*(/me=e-1 contains=lpcApplies transparent display
78071d4279SBram Moolenaar
79071d4279SBram Moolenaar" We should note that in func_spec.c the efun definition syntax is so
80071d4279SBram Moolenaar" complicated that I use such a long regular expression to describe.
81071d4279SBram Moolenaarsyn match	lpcLongDecl	excludenl /\(\s\|\*\)\h\+\s\h\+(/me=e-1 contains=@lpcEfunGroup,lpcType,@lpcKeywdGrp transparent display
82071d4279SBram Moolenaar
83071d4279SBram Moolenaar" this is form for all functions
84071d4279SBram Moolenaar" ->foo() form had been excluded
85071d4279SBram Moolenaarsyn match	lpcFuncDecl	excludenl /\h\w*(/me=e-1 contains=lpcApplies,@lpcEfunGroup,lpcKeywdError transparent display
86071d4279SBram Moolenaar
87071d4279SBram Moolenaar" The (: :) parenthesis or $() forms a function pointer
88071d4279SBram Moolenaarsyn match	lpcFuncName	/(:\s*\h\+\s*:)/me=e-1 contains=lpcApplies,@lpcEfunGroup transparent display contained
89071d4279SBram Moolenaarsyn match	lpcFuncName	/(:\s*\h\+,/ contains=lpcApplies,@lpcEfunGroup transparent display contained
90071d4279SBram Moolenaarsyn match	lpcFuncName	/\$(\h\+)/ contains=lpcApplies,@lpcEfunGroup transparent display contained
91071d4279SBram Moolenaar
92071d4279SBram Moolenaar" Applies list.
93071d4279SBram Moolenaar"       system applies
94071d4279SBram Moolenaarsyn keyword     lpcApplies      contained __INIT clean_up create destructor heart_beat id init move_or_destruct reset
95071d4279SBram Moolenaar"       interactive
96071d4279SBram Moolenaarsyn keyword     lpcApplies      contained catch_tell logon net_dead process_input receive_message receive_snoop telnet_suboption terminal_type window_size write_prompt
97071d4279SBram Moolenaar"       master applies
98071d4279SBram Moolenaarsyn 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
99071d4279SBram Moolenaarsyn 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
100071d4279SBram Moolenaar"       parsing
101071d4279SBram Moolenaarsyn 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
102071d4279SBram Moolenaar
103071d4279SBram Moolenaar
104071d4279SBram Moolenaar" Nodule: Efuns {{{1
105071d4279SBram Moolenaar
106071d4279SBram Moolenaarsyn cluster	lpcEfunGroup	contains=lpc_efuns,lpcOldEfuns,lpcNewEfuns,lpcKeywdFunc
107071d4279SBram Moolenaar
108071d4279SBram Moolenaar" Compat32 efuns
109071d4279SBram Moolenaarif exists("lpc_compat_32")
110071d4279SBram Moolenaar    syn keyword lpc_efuns	contained closurep heart_beat_info m_delete m_values m_indices query_once_interactive strstr
111071d4279SBram Moolenaarelse
112071d4279SBram Moolenaar    syn match   lpcErrFunc	/#`\h\w*/
113071d4279SBram Moolenaar    " Shell compatible first line comment.
114071d4279SBram Moolenaar    syn region	lpcCommentFunc	start=/^#!/ end=/$/
115071d4279SBram Moolenaarendif
116071d4279SBram Moolenaar
117071d4279SBram Moolenaar" pre-v22 efuns which are removed in newer versions.
118071d4279SBram Moolenaarsyn keyword     lpcOldEfuns     contained tail dump_socket_status
119071d4279SBram Moolenaar
120071d4279SBram Moolenaar" new efuns after v22 should be added here!
121071d4279SBram Moolenaarsyn keyword     lpcNewEfuns     contained socket_status
122071d4279SBram Moolenaar
123071d4279SBram Moolenaar" LPC efuns list.
124071d4279SBram Moolenaar" DEBUG efuns Not included.
125071d4279SBram Moolenaar" New efuns should NOT be added to this list, see v22 efuns above.
126071d4279SBram Moolenaar" Efuns list {{{2
127071d4279SBram Moolenaarsyn keyword     lpc_efuns       contained acos add_action all_inventory all_previous_objects allocate allocate_buffer allocate_mapping apply arrayp asin atan author_stats
128071d4279SBram Moolenaarsyn keyword     lpc_efuns       contained bind break_string bufferp
129071d4279SBram Moolenaarsyn 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
130071d4279SBram Moolenaarsyn 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
131071d4279SBram Moolenaarsyn 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
132071d4279SBram Moolenaarsyn 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
133071d4279SBram Moolenaarsyn keyword     lpc_efuns       contained generate_source get_char get_config get_dir geteuid getuid
134071d4279SBram Moolenaarsyn keyword     lpc_efuns       contained heart_beats
135071d4279SBram Moolenaarsyn keyword     lpc_efuns       contained id_matrix implode in_edit in_input inherit_list inherits input_to interactive intp
136071d4279SBram Moolenaarsyn keyword     lpc_efuns       contained keys
137071d4279SBram Moolenaarsyn keyword     lpc_efuns       contained link living livings load_object localtime log log10 lookat_rotate lower_case lpc_info
138071d4279SBram Moolenaarsyn 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
139071d4279SBram Moolenaarsyn keyword     lpc_efuns       contained named_livings network_stats next_bit next_inventory notify_fail nullp
140071d4279SBram Moolenaarsyn keyword     lpc_efuns       contained objectp objects oldcrypt opcprof origin
141071d4279SBram Moolenaarsyn 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
142071d4279SBram Moolenaarsyn 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
143071d4279SBram Moolenaarsyn 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
144071d4279SBram Moolenaarsyn 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
145071d4279SBram Moolenaarsyn 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
146071d4279SBram Moolenaarsyn keyword     lpc_efuns       contained undefinedp unique_array unique_mapping upper_case uptime userp users
147071d4279SBram Moolenaarsyn keyword     lpc_efuns       contained values variables virtualp
148071d4279SBram Moolenaarsyn keyword     lpc_efuns       contained wizardp write write_buffer write_bytes write_file
149071d4279SBram Moolenaar
150071d4279SBram Moolenaar" Nodule: Constants {{{1
151071d4279SBram Moolenaar
152071d4279SBram Moolenaar" LPC Constants.
153071d4279SBram Moolenaar" like keywords, constants are always highlighted, be careful to choose only
154071d4279SBram Moolenaar" the constants we used to add to this list.
155071d4279SBram Moolenaarsyn keyword     lpcConstant     __ARCH__ __COMPILER__ __DIR__ __FILE__ __OPTIMIZATION__ __PORT__ __VERSION__
156071d4279SBram Moolenaar"       Defines in options.h are all predefined in LPC sources surrounding by
157071d4279SBram Moolenaar"       two underscores. Do we need to include all of that?
158071d4279SBram Moolenaarsyn keyword     lpcConstant     __SAVE_EXTENSION__ __HEARTBEAT_INTERVAL__
159071d4279SBram Moolenaar"       from the documentation we know that these constants remains only for
160071d4279SBram Moolenaar"       backward compatibility and should not be used any more.
161071d4279SBram Moolenaarsyn keyword     lpcConstant     HAS_ED HAS_PRINTF HAS_RUSAGE HAS_DEBUG_LEVEL
162071d4279SBram Moolenaarsyn keyword     lpcConstant     MUD_NAME F__THIS_OBJECT
163071d4279SBram Moolenaar
164071d4279SBram Moolenaar" Nodule: Todo for this file.  {{{1
165071d4279SBram Moolenaar
166071d4279SBram Moolenaar" TODO : need to check for LPC4 syntax and other series of LPC besides
167071d4279SBram Moolenaar" v22, b21 and l32, if you had a good idea, contact me at [email protected]
168071d4279SBram Moolenaar" and I will be appreciated about that.
169071d4279SBram Moolenaar
170071d4279SBram Moolenaar" Notes about some FAQ:
171071d4279SBram Moolenaar"
172071d4279SBram Moolenaar" About variables : We adopts the same behavior for C because almost all the
173071d4279SBram Moolenaar" LPC programmers are also C programmers, so we don't need separate settings
174071d4279SBram Moolenaar" for C and LPC. That is the reason why I don't change variables like
175071d4279SBram Moolenaar" "c_no_utf"s to "lpc_no_utf"s.
176071d4279SBram Moolenaar"
177071d4279SBram Moolenaar" Copy : Some of the following seems to be copied from c.vim but not quite
178071d4279SBram Moolenaar" the same in details because the syntax for C and LPC is different.
179071d4279SBram Moolenaar"
180071d4279SBram Moolenaar" Color scheme : this syntax file had been thouroughly tested to work well
181071d4279SBram Moolenaar" for all of the dark-backgrounded color schemes Vim has provided officially,
182071d4279SBram Moolenaar" and it should be quite Ok for all of the bright-backgrounded color schemes,
183071d4279SBram Moolenaar" of course it works best for the color scheme that I am using, download it
184071d4279SBram Moolenaar" from http://poet.tomud.com/pub/ps_color.vim.bz2 if you want to try it.
185071d4279SBram Moolenaar"
186071d4279SBram Moolenaar
187071d4279SBram Moolenaar" Nodule: String and Character {{{1
188071d4279SBram Moolenaar
189071d4279SBram Moolenaar
190071d4279SBram Moolenaar" String and Character constants
191071d4279SBram Moolenaar" Highlight special characters (those which have a backslash) differently
192071d4279SBram Moolenaarsyn match	lpcSpecial	display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
193071d4279SBram Moolenaarif !exists("c_no_utf")
194071d4279SBram Moolenaar  syn match	lpcSpecial	display contained "\\\(u\x\{4}\|U\x\{8}\)"
195071d4279SBram Moolenaarendif
196071d4279SBram Moolenaar
197071d4279SBram Moolenaar" LPC version of sprintf() format,
198071d4279SBram Moolenaarsyn match	lpcFormat	display "%\(\d\+\)\=[-+ |=#@:.]*\(\d\+\)\=\('\I\+'\|'\I*\\'\I*'\)\=[OsdicoxXf]" contained
199071d4279SBram Moolenaarsyn match	lpcFormat	display "%%" contained
200071d4279SBram Moolenaarsyn region	lpcString	start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=lpcSpecial,lpcFormat
201071d4279SBram Moolenaar" lpcCppString: same as lpcString, but ends at end of line
202071d4279SBram Moolenaarsyn region	lpcCppString	start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=lpcSpecial,lpcFormat
203071d4279SBram Moolenaar
204071d4279SBram Moolenaar" LPC preprocessor for the text formatting short cuts
205071d4279SBram Moolenaar" Thanks to Dr. Charles E. Campbell <[email protected]>
206071d4279SBram Moolenaar"	he suggests the best way to do this.
207071d4279SBram Moolenaarsyn region	lpcTextString	start=/@\z(\h\w*\)$/ end=/^\z1/ contains=lpcSpecial
208071d4279SBram Moolenaarsyn region	lpcArrayString	start=/@@\z(\h\w*\)$/ end=/^\z1/ contains=lpcSpecial
209071d4279SBram Moolenaar
210071d4279SBram Moolenaar" Character
211071d4279SBram Moolenaarsyn match	lpcCharacter	"L\='[^\\]'"
212071d4279SBram Moolenaarsyn match	lpcCharacter	"L'[^']*'" contains=lpcSpecial
213071d4279SBram Moolenaarsyn match	lpcSpecialError	"L\='\\[^'\"?\\abefnrtv]'"
214071d4279SBram Moolenaarsyn match	lpcSpecialCharacter "L\='\\['\"?\\abefnrtv]'"
215071d4279SBram Moolenaarsyn match	lpcSpecialCharacter display "L\='\\\o\{1,3}'"
216071d4279SBram Moolenaarsyn match	lpcSpecialCharacter display "'\\x\x\{1,2}'"
217071d4279SBram Moolenaarsyn match	lpcSpecialCharacter display "L'\\x\x\+'"
218071d4279SBram Moolenaar
219071d4279SBram Moolenaar" Nodule: White space {{{1
220071d4279SBram Moolenaar
221071d4279SBram Moolenaar" when wanted, highlight trailing white space
222071d4279SBram Moolenaarif exists("c_space_errors")
223071d4279SBram Moolenaar  if !exists("c_no_trail_space_error")
224071d4279SBram Moolenaar    syn match	lpcSpaceError	display excludenl "\s\+$"
225071d4279SBram Moolenaar  endif
226071d4279SBram Moolenaar  if !exists("c_no_tab_space_error")
227071d4279SBram Moolenaar    syn match	lpcSpaceError	display " \+\t"me=e-1
228071d4279SBram Moolenaar  endif
229071d4279SBram Moolenaarendif
230071d4279SBram Moolenaar
231071d4279SBram Moolenaar" Nodule: Parenthesis and brackets {{{1
232071d4279SBram Moolenaar
233071d4279SBram Moolenaar" catch errors caused by wrong parenthesis and brackets
234071d4279SBram Moolenaarsyn 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
235071d4279SBram Moolenaarsyn region	lpcParen	transparent start='(' end=')' contains=ALLBUT,@lpcParenGroup,lpcCppParen,lpcErrInBracket,lpcCppBracket,lpcCppString,@lpcEfunGroup,lpcApplies,lpcKeywdError
236071d4279SBram Moolenaar" lpcCppParen: same as lpcParen but ends at end-of-line; used in lpcDefine
237071d4279SBram Moolenaarsyn region	lpcCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@lpcParenGroup,lpcErrInBracket,lpcParen,lpcBracket,lpcString,@lpcEfunGroup,lpcApplies,lpcKeywdError
238071d4279SBram Moolenaarsyn match	lpcParenError	display ")"
239071d4279SBram Moolenaarsyn match	lpcParenError	display "\]"
240071d4279SBram Moolenaar" for LPC:
241071d4279SBram Moolenaar" Here we should consider the array ({ }) parenthesis and mapping ([ ])
242071d4279SBram Moolenaar" parenthesis and multiset (< >) parenthesis.
243071d4279SBram Moolenaarsyn match	lpcErrInParen	display contained "[^^]{"ms=s+1
244071d4279SBram Moolenaarsyn match	lpcErrInParen	display contained "\(}\|\]\)[^)]"me=e-1
245071d4279SBram Moolenaarsyn region	lpcBracket	transparent start='\[' end=']' contains=ALLBUT,@lpcParenGroup,lpcErrInParen,lpcCppParen,lpcCppBracket,lpcCppString,@lpcEfunGroup,lpcApplies,lpcFuncName,lpcKeywdError
246071d4279SBram Moolenaar" lpcCppBracket: same as lpcParen but ends at end-of-line; used in lpcDefine
247071d4279SBram Moolenaarsyn region	lpcCppBracket	transparent start='\[' skip='\\$' excludenl end=']' end='$' contained contains=ALLBUT,@lpcParenGroup,lpcErrInParen,lpcParen,lpcBracket,lpcString,@lpcEfunGroup,lpcApplies,lpcFuncName,lpcKeywdError
248071d4279SBram Moolenaarsyn match	lpcErrInBracket	display contained "[);{}]"
249071d4279SBram Moolenaar
250071d4279SBram Moolenaar" Nodule: Numbers {{{1
251071d4279SBram Moolenaar
252071d4279SBram Moolenaar" integer number, or floating point number without a dot and with "f".
253071d4279SBram Moolenaarsyn case ignore
254071d4279SBram Moolenaarsyn match	lpcNumbers	display transparent "\<\d\|\.\d" contains=lpcNumber,lpcFloat,lpcOctalError,lpcOctal
255071d4279SBram Moolenaar" Same, but without octal error (for comments)
256071d4279SBram Moolenaarsyn match	lpcNumbersCom	display contained transparent "\<\d\|\.\d" contains=lpcNumber,lpcFloat,lpcOctal
257071d4279SBram Moolenaarsyn match	lpcNumber	display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
258071d4279SBram Moolenaar" hex number
259071d4279SBram Moolenaarsyn match	lpcNumber	display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
260071d4279SBram Moolenaar" Flag the first zero of an octal number as something special
261071d4279SBram Moolenaarsyn match	lpcOctal	display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=lpcOctalZero
262071d4279SBram Moolenaarsyn match	lpcOctalZero	display contained "\<0"
263071d4279SBram Moolenaarsyn match	lpcFloat	display contained "\d\+f"
264071d4279SBram Moolenaar" floating point number, with dot, optional exponent
265071d4279SBram Moolenaarsyn match	lpcFloat	display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
266071d4279SBram Moolenaar" floating point number, starting with a dot, optional exponent
267071d4279SBram Moolenaarsyn match	lpcFloat	display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
268071d4279SBram Moolenaar" floating point number, without dot, with exponent
269071d4279SBram Moolenaarsyn match	lpcFloat	display contained "\d\+e[-+]\=\d\+[fl]\=\>"
270071d4279SBram Moolenaar" flag an octal number with wrong digits
271071d4279SBram Moolenaarsyn match	lpcOctalError	display contained "0\o*[89]\d*"
272071d4279SBram Moolenaarsyn case match
273071d4279SBram Moolenaar
274071d4279SBram Moolenaar" Nodule: Comment string {{{1
275071d4279SBram Moolenaar
276071d4279SBram Moolenaar" lpcCommentGroup allows adding matches for special things in comments
277071d4279SBram Moolenaarsyn keyword	lpcTodo		contained TODO FIXME XXX
278071d4279SBram Moolenaarsyn cluster	lpcCommentGroup	contains=lpcTodo
279071d4279SBram Moolenaar
280071d4279SBram Moolenaarif exists("c_comment_strings")
281071d4279SBram Moolenaar  " A comment can contain lpcString, lpcCharacter and lpcNumber.
282071d4279SBram Moolenaar  syntax match	lpcCommentSkip	contained "^\s*\*\($\|\s\+\)"
283071d4279SBram Moolenaar  syntax region lpcCommentString	contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=lpcSpecial,lpcCommentSkip
284071d4279SBram Moolenaar  syntax region lpcComment2String	contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=lpcSpecial
285071d4279SBram Moolenaar  syntax region  lpcCommentL	start="//" skip="\\$" end="$" keepend contains=@lpcCommentGroup,lpcComment2String,lpcCharacter,lpcNumbersCom,lpcSpaceError
286071d4279SBram Moolenaar  syntax region lpcComment	matchgroup=lpcCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@lpcCommentGroup,lpcCommentStartError,lpcCommentString,lpcCharacter,lpcNumbersCom,lpcSpaceError
287071d4279SBram Moolenaarelse
288071d4279SBram Moolenaar  syn region	lpcCommentL	start="//" skip="\\$" end="$" keepend contains=@lpcCommentGroup,lpcSpaceError
289071d4279SBram Moolenaar  syn region	lpcComment	matchgroup=lpcCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@lpcCommentGroup,lpcCommentStartError,lpcSpaceError
290071d4279SBram Moolenaarendif
291071d4279SBram Moolenaar" keep a // comment separately, it terminates a preproc. conditional
292071d4279SBram Moolenaarsyntax match	lpcCommentError	display "\*/"
293071d4279SBram Moolenaarsyntax match	lpcCommentStartError display "/\*"me=e-1 contained
294071d4279SBram Moolenaar
295071d4279SBram Moolenaar" Nodule: Pre-processor {{{1
296071d4279SBram Moolenaar
297071d4279SBram Moolenaarsyn region	lpcPreCondit	start="^\s*#\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=lpcComment,lpcCppString,lpcCharacter,lpcCppParen,lpcParenError,lpcNumbers,lpcCommentError,lpcSpaceError
298071d4279SBram Moolenaarsyn match	lpcPreCondit	display "^\s*#\s*\(else\|endif\)\>"
299071d4279SBram Moolenaarif !exists("c_no_if0")
300071d4279SBram Moolenaar  syn region	lpcCppOut		start="^\s*#\s*if\s\+0\+\>" end=".\|$" contains=lpcCppOut2
301071d4279SBram Moolenaar  syn region	lpcCppOut2	contained start="0" end="^\s*#\s*\(endif\>\|else\>\|elif\>\)" contains=lpcSpaceError,lpcCppSkip
302071d4279SBram Moolenaar  syn region	lpcCppSkip	contained start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*#\s*endif\>" contains=lpcSpaceError,lpcCppSkip
303071d4279SBram Moolenaarendif
304071d4279SBram Moolenaarsyn region	lpcIncluded	display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
305071d4279SBram Moolenaarsyn match	lpcIncluded	display contained "<[^>]*>"
306071d4279SBram Moolenaarsyn match	lpcInclude	display "^\s*#\s*include\>\s*["<]" contains=lpcIncluded
307071d4279SBram Moolenaarsyn match lpcLineSkip	"\\$"
308071d4279SBram Moolenaarsyn 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
309071d4279SBram Moolenaarsyn region	lpcDefine	start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@lpcPreProcGroup
310071d4279SBram Moolenaar
311071d4279SBram Moolenaarif exists("lpc_pre_v22")
312071d4279SBram Moolenaar    syn region	lpcPreProc	start="^\s*#\s*\(pragma\>\|echo\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@lpcPreProcGroup
313071d4279SBram Moolenaarelse
314071d4279SBram Moolenaar    syn region	lpcPreProc	start="^\s*#\s*\(pragma\>\|echo\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@lpcPreProcGroup
315071d4279SBram Moolenaarendif
316071d4279SBram Moolenaar
317071d4279SBram Moolenaar" Nodule: User labels {{{1
318071d4279SBram Moolenaar
319071d4279SBram Moolenaar" Highlight Labels
320071d4279SBram Moolenaar" User labels in LPC is not allowed, only "case x" and "default" is supported
321071d4279SBram Moolenaarsyn 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
322071d4279SBram Moolenaarsyn region	lpcMulti		transparent start='\(case\|default\|public\|protected\|private\)' skip='::' end=':' contains=ALLBUT,@lpcMultiGroup
323071d4279SBram Moolenaar
324071d4279SBram Moolenaarsyn cluster	lpcLabelGroup	contains=lpcUserLabel
325071d4279SBram Moolenaarsyn match	lpcUserCont	display "^\s*lpc:$" contains=@lpcLabelGroup
326071d4279SBram Moolenaar
327071d4279SBram Moolenaar" Don't want to match anything
328071d4279SBram Moolenaarsyn match	lpcUserLabel	display "lpc" contained
329071d4279SBram Moolenaar
330071d4279SBram Moolenaar" Nodule: Initializations {{{1
331071d4279SBram Moolenaar
332071d4279SBram Moolenaarif exists("c_minlines")
333071d4279SBram Moolenaar  let b:c_minlines = c_minlines
334071d4279SBram Moolenaarelse
335071d4279SBram Moolenaar  if !exists("c_no_if0")
336071d4279SBram Moolenaar    let b:c_minlines = 50	" #if 0 constructs can be long
337071d4279SBram Moolenaar  else
338071d4279SBram Moolenaar    let b:c_minlines = 15	" mostly for () constructs
339071d4279SBram Moolenaar  endif
340071d4279SBram Moolenaarendif
341071d4279SBram Moolenaarexec "syn sync ccomment lpcComment minlines=" . b:c_minlines
342071d4279SBram Moolenaar
343071d4279SBram Moolenaar" Make sure these options take place since we no longer depend on file type
344071d4279SBram Moolenaar" plugin for C
345071d4279SBram Moolenaarsetlocal cindent
346071d4279SBram Moolenaarsetlocal fo-=t fo+=croql
347071d4279SBram Moolenaarsetlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
348071d4279SBram Moolenaar
349071d4279SBram Moolenaar" Win32 can filter files in the browse dialog
350071d4279SBram Moolenaarif has("gui_win32") && !exists("b:browsefilter")
351071d4279SBram Moolenaar    let b:browsefilter = "LPC Source Files (*.c *.d *.h)\t*.c;*.d;*.h\n" .
352071d4279SBram Moolenaar	\ "LPC Data Files (*.scr *.o *.dat)\t*.scr;*.o;*.dat\n" .
353071d4279SBram Moolenaar	\ "Text Documentation (*.txt)\t*.txt\n" .
354071d4279SBram Moolenaar	\ "All Files (*.*)\t*.*\n"
355071d4279SBram Moolenaarendif
356071d4279SBram Moolenaar
357071d4279SBram Moolenaar" Nodule: Highlight links {{{1
358071d4279SBram Moolenaar
359071d4279SBram Moolenaar" Define the default highlighting.
36089bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet
361071d4279SBram Moolenaar
362*f37506f6SBram Moolenaarhi def link lpcModifier		lpcStorageClass
363071d4279SBram Moolenaar
364*f37506f6SBram Moolenaarhi def link lpcQuotedFmt		lpcFormat
365*f37506f6SBram Moolenaarhi def link lpcFormat		lpcSpecial
366*f37506f6SBram Moolenaarhi def link lpcCppString		lpcString	" Cpp means
367071d4279SBram Moolenaar					      " C Pre-Processor
368*f37506f6SBram Moolenaarhi def link lpcCommentL		lpcComment
369*f37506f6SBram Moolenaarhi def link lpcCommentStart	lpcComment
370*f37506f6SBram Moolenaarhi def link lpcUserLabel		lpcLabel
371*f37506f6SBram Moolenaarhi def link lpcSpecialCharacter	lpcSpecial
372*f37506f6SBram Moolenaarhi def link lpcOctal		lpcPreProc
373*f37506f6SBram Moolenaarhi def link lpcOctalZero		lpcSpecial  " LPC will treat octal numbers
374071d4279SBram Moolenaar					  " as decimals, programmers should
375071d4279SBram Moolenaar					  " be aware of that.
376*f37506f6SBram Moolenaarhi def link lpcEfunError		lpcError
377*f37506f6SBram Moolenaarhi def link lpcKeywdError		lpcError
378*f37506f6SBram Moolenaarhi def link lpcOctalError		lpcError
379*f37506f6SBram Moolenaarhi def link lpcParenError		lpcError
380*f37506f6SBram Moolenaarhi def link lpcErrInParen		lpcError
381*f37506f6SBram Moolenaarhi def link lpcErrInBracket	lpcError
382*f37506f6SBram Moolenaarhi def link lpcCommentError	lpcError
383*f37506f6SBram Moolenaarhi def link lpcCommentStartError	lpcError
384*f37506f6SBram Moolenaarhi def link lpcSpaceError		lpcError
385*f37506f6SBram Moolenaarhi def link lpcSpecialError	lpcError
386*f37506f6SBram Moolenaarhi def link lpcErrFunc		lpcError
387071d4279SBram Moolenaar
388071d4279SBram Moolenaarif exists("lpc_pre_v22")
389*f37506f6SBram Moolenaar    hi def link lpcOldEfuns	lpc_efuns
390*f37506f6SBram Moolenaar    hi def link lpcNewEfuns	lpcError
391071d4279SBram Moolenaarelse
392*f37506f6SBram Moolenaar    hi def link lpcOldEfuns	lpcReserved
393*f37506f6SBram Moolenaar    hi def link lpcNewEfuns	lpc_efuns
394071d4279SBram Moolenaarendif
395*f37506f6SBram Moolenaarhi def link lpc_efuns		lpcFunction
396071d4279SBram Moolenaar
397*f37506f6SBram Moolenaarhi def link lpcReserved		lpcPreProc
398*f37506f6SBram Moolenaarhi def link lpcTextString		lpcString   " This should be preprocessors, but
399*f37506f6SBram Moolenaarhi def link lpcArrayString		lpcPreProc  " let's make some difference
400071d4279SBram Moolenaar					  " between text and array
401071d4279SBram Moolenaar
402*f37506f6SBram Moolenaarhi def link lpcIncluded		lpcString
403*f37506f6SBram Moolenaarhi def link lpcCommentString	lpcString
404*f37506f6SBram Moolenaarhi def link lpcComment2String	lpcString
405*f37506f6SBram Moolenaarhi def link lpcCommentSkip		lpcComment
406*f37506f6SBram Moolenaarhi def link lpcCommentFunc		lpcComment
407071d4279SBram Moolenaar
408*f37506f6SBram Moolenaarhi def link lpcCppSkip		lpcCppOut
409*f37506f6SBram Moolenaarhi def link lpcCppOut2		lpcCppOut
410*f37506f6SBram Moolenaarhi def link lpcCppOut		lpcComment
411071d4279SBram Moolenaar
412071d4279SBram Moolenaar" Standard type below
413*f37506f6SBram Moolenaarhi def link lpcApplies		Special
414*f37506f6SBram Moolenaarhi def link lpcCharacter		Character
415*f37506f6SBram Moolenaarhi def link lpcComment		Comment
416*f37506f6SBram Moolenaarhi def link lpcConditional		Conditional
417*f37506f6SBram Moolenaarhi def link lpcConstant		Constant
418*f37506f6SBram Moolenaarhi def link lpcDefine		Macro
419*f37506f6SBram Moolenaarhi def link lpcError		Error
420*f37506f6SBram Moolenaarhi def link lpcFloat		Float
421*f37506f6SBram Moolenaarhi def link lpcFunction		Function
422*f37506f6SBram Moolenaarhi def link lpcIdentifier		Identifier
423*f37506f6SBram Moolenaarhi def link lpcInclude		Include
424*f37506f6SBram Moolenaarhi def link lpcLabel		Label
425*f37506f6SBram Moolenaarhi def link lpcNumber		Number
426*f37506f6SBram Moolenaarhi def link lpcOperator		Operator
427*f37506f6SBram Moolenaarhi def link lpcPreCondit		PreCondit
428*f37506f6SBram Moolenaarhi def link lpcPreProc		PreProc
429*f37506f6SBram Moolenaarhi def link lpcRepeat		Repeat
430*f37506f6SBram Moolenaarhi def link lpcStatement		Statement
431*f37506f6SBram Moolenaarhi def link lpcStorageClass	StorageClass
432*f37506f6SBram Moolenaarhi def link lpcString		String
433*f37506f6SBram Moolenaarhi def link lpcStructure		Structure
434*f37506f6SBram Moolenaarhi def link lpcSpecial		LineNr
435*f37506f6SBram Moolenaarhi def link lpcTodo		Todo
436*f37506f6SBram Moolenaarhi def link lpcType		Type
437071d4279SBram Moolenaar
438071d4279SBram Moolenaar
439071d4279SBram Moolenaar" Nodule: This is the end nodule. {{{1
440071d4279SBram Moolenaar
441071d4279SBram Moolenaarlet b:current_syntax = "lpc"
442071d4279SBram Moolenaar
443f1568ecaSBram Moolenaarlet &cpo = s:cpo_save
444f1568ecaSBram Moolenaarunlet s:cpo_save
445f1568ecaSBram Moolenaar
446071d4279SBram Moolenaar" vim:ts=8:nosta:sw=2:ai:si:
447071d4279SBram Moolenaar" vim600:set fdm=marker: }}}1
448