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