Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1 | " Vim syntax file |
| 2 | " Language: LPC |
| 3 | " Maintainer: Shizhu Pan <poet@mudbuilder.net> |
| 4 | " URL: http://poet.tomud.com/pub/lpc.vim.bz2 |
| 5 | " Last Change: 2003 May 11 |
| 6 | " Comments: If you are using Vim 6.2 or later, see :h lpc.vim for |
| 7 | " file type recognizing, if not, you had to use modeline. |
| 8 | |
| 9 | |
| 10 | " Nodule: This is the start nodule. {{{1 |
| 11 | |
| 12 | " For version 5.x: Clear all syntax items |
| 13 | " For version 6.x: Quit when a syntax file was already loaded |
| 14 | if version < 600 |
| 15 | syntax clear |
| 16 | elseif exists("b:current_syntax") |
| 17 | finish |
| 18 | endif |
| 19 | |
| 20 | " Nodule: Keywords {{{1 |
| 21 | |
| 22 | " LPC keywords |
| 23 | " keywords should always be highlighted so "contained" is not used. |
| 24 | syn cluster lpcKeywdGrp contains=lpcConditional,lpcLabel,lpcOperator,lpcRepeat,lpcStatement,lpcModifier,lpcReserved |
| 25 | |
| 26 | syn keyword lpcConditional if else switch |
| 27 | syn keyword lpcLabel case default |
| 28 | syn keyword lpcOperator catch efun in inherit |
| 29 | syn keyword lpcRepeat do for foreach while |
| 30 | syn keyword lpcStatement break continue return |
| 31 | |
| 32 | syn match lpcEfunError /efun[^:]/ display |
| 33 | |
| 34 | " Illegal to use keyword as function |
| 35 | " It's not working, maybe in the next version. |
| 36 | syn keyword lpcKeywdError contained if for foreach return switch while |
| 37 | |
| 38 | " These are keywords only because they take lvalue or type as parameter, |
| 39 | " so these keywords should only be used as function but cannot be names of |
| 40 | " user-defined functions. |
| 41 | syn keyword lpcKeywdFunc new parse_command sscanf time_expression |
| 42 | |
| 43 | " Nodule: Type and modifiers {{{1 |
| 44 | |
| 45 | " Type names list. |
| 46 | |
| 47 | " Special types |
| 48 | syn keyword lpcType void mixed unknown |
| 49 | " Scalar/Value types. |
| 50 | syn keyword lpcType int float string |
| 51 | " Pointer types. |
| 52 | syn keyword lpcType array buffer class function mapping object |
| 53 | " Other types. |
| 54 | if exists("lpc_compat_32") |
| 55 | syn keyword lpcType closure status funcall |
| 56 | else |
| 57 | syn keyword lpcError closure status |
| 58 | syn keyword lpcType multiset |
| 59 | endif |
| 60 | |
| 61 | " Type modifier. |
| 62 | syn keyword lpcModifier nomask private public |
| 63 | syn keyword lpcModifier varargs virtual |
| 64 | |
| 65 | " sensible modifiers |
| 66 | if exists("lpc_pre_v22") |
| 67 | syn keyword lpcReserved nosave protected ref |
| 68 | syn keyword lpcModifier static |
| 69 | else |
| 70 | syn keyword lpcError static |
| 71 | syn keyword lpcModifier nosave protected ref |
| 72 | endif |
| 73 | |
| 74 | " Nodule: Applies {{{1 |
| 75 | |
| 76 | " Match a function declaration or function pointer |
| 77 | syn match lpcApplyDecl excludenl /->\h\w*(/me=e-1 contains=lpcApplies transparent display |
| 78 | |
| 79 | " We should note that in func_spec.c the efun definition syntax is so |
| 80 | " complicated that I use such a long regular expression to describe. |
| 81 | syn match lpcLongDecl excludenl /\(\s\|\*\)\h\+\s\h\+(/me=e-1 contains=@lpcEfunGroup,lpcType,@lpcKeywdGrp transparent display |
| 82 | |
| 83 | " this is form for all functions |
| 84 | " ->foo() form had been excluded |
| 85 | syn match lpcFuncDecl excludenl /\h\w*(/me=e-1 contains=lpcApplies,@lpcEfunGroup,lpcKeywdError transparent display |
| 86 | |
| 87 | " The (: :) parenthesis or $() forms a function pointer |
| 88 | syn match lpcFuncName /(:\s*\h\+\s*:)/me=e-1 contains=lpcApplies,@lpcEfunGroup transparent display contained |
| 89 | syn match lpcFuncName /(:\s*\h\+,/ contains=lpcApplies,@lpcEfunGroup transparent display contained |
| 90 | syn match lpcFuncName /\$(\h\+)/ contains=lpcApplies,@lpcEfunGroup transparent display contained |
| 91 | |
| 92 | " Applies list. |
| 93 | " system applies |
| 94 | syn keyword lpcApplies contained __INIT clean_up create destructor heart_beat id init move_or_destruct reset |
| 95 | " interactive |
| 96 | syn keyword lpcApplies contained catch_tell logon net_dead process_input receive_message receive_snoop telnet_suboption terminal_type window_size write_prompt |
| 97 | " master applies |
| 98 | syn keyword lpcApplies contained author_file compile_object connect crash creator_file domain_file epilog error_handler flag get_bb_uid get_root_uid get_save_file_name log_error make_path_absolute object_name preload privs_file retrieve_ed_setup save_ed_setup slow_shutdown |
| 99 | syn keyword lpcApplies contained valid_asm valid_bind valid_compile_to_c valid_database valid_hide valid_link valid_object valid_override valid_read valid_save_binary valid_seteuid valid_shadow valid_socket valid_write |
| 100 | " parsing |
| 101 | syn keyword lpcApplies contained inventory_accessible inventory_visible is_living parse_command_adjectiv_id_list parse_command_adjective_id_list parse_command_all_word parse_command_id_list parse_command_plural_id_list parse_command_prepos_list parse_command_users parse_get_environment parse_get_first_inventory parse_get_next_inventory parser_error_message |
| 102 | |
| 103 | |
| 104 | " Nodule: Efuns {{{1 |
| 105 | |
| 106 | syn cluster lpcEfunGroup contains=lpc_efuns,lpcOldEfuns,lpcNewEfuns,lpcKeywdFunc |
| 107 | |
| 108 | " Compat32 efuns |
| 109 | if exists("lpc_compat_32") |
| 110 | syn keyword lpc_efuns contained closurep heart_beat_info m_delete m_values m_indices query_once_interactive strstr |
| 111 | else |
| 112 | syn match lpcErrFunc /#`\h\w*/ |
| 113 | " Shell compatible first line comment. |
| 114 | syn region lpcCommentFunc start=/^#!/ end=/$/ |
| 115 | endif |
| 116 | |
| 117 | " pre-v22 efuns which are removed in newer versions. |
| 118 | syn keyword lpcOldEfuns contained tail dump_socket_status |
| 119 | |
| 120 | " new efuns after v22 should be added here! |
| 121 | syn keyword lpcNewEfuns contained socket_status |
| 122 | |
| 123 | " LPC efuns list. |
| 124 | " DEBUG efuns Not included. |
| 125 | " New efuns should NOT be added to this list, see v22 efuns above. |
| 126 | " Efuns list {{{2 |
| 127 | syn keyword lpc_efuns contained acos add_action all_inventory all_previous_objects allocate allocate_buffer allocate_mapping apply arrayp asin atan author_stats |
| 128 | syn keyword lpc_efuns contained bind break_string bufferp |
| 129 | syn keyword lpc_efuns contained cache_stats call_other call_out call_out_info call_stack capitalize catch ceil check_memory children classp clear_bit clone_object clonep command commands copy cos cp crc32 crypt ctime |
| 130 | syn keyword lpc_efuns contained db_close db_commit db_connect db_exec db_fetch db_rollback db_status debug_info debugmalloc debug_message deep_inherit_list deep_inventory destruct disable_commands disable_wizard domain_stats dumpallobj dump_file_descriptors dump_prog |
| 131 | syn keyword lpc_efuns contained each ed ed_cmd ed_start enable_commands enable_wizard environment error errorp eval_cost evaluate exec exp explode export_uid external_start |
| 132 | syn keyword lpc_efuns contained fetch_variable file_length file_name file_size filter filter_array filter_mapping find_call_out find_living find_object find_player first_inventory floatp floor flush_messages function_exists function_owner function_profile functionp functions |
| 133 | syn keyword lpc_efuns contained generate_source get_char get_config get_dir geteuid getuid |
| 134 | syn keyword lpc_efuns contained heart_beats |
| 135 | syn keyword lpc_efuns contained id_matrix implode in_edit in_input inherit_list inherits input_to interactive intp |
| 136 | syn keyword lpc_efuns contained keys |
| 137 | syn keyword lpc_efuns contained link living livings load_object localtime log log10 lookat_rotate lower_case lpc_info |
| 138 | syn keyword lpc_efuns contained malloc_check malloc_debug malloc_status map map_array map_delete map_mapping mapp master match_path max_eval_cost member_array memory_info memory_summary message mkdir moncontrol move_object mud_status |
| 139 | syn keyword lpc_efuns contained named_livings network_stats next_bit next_inventory notify_fail nullp |
| 140 | syn keyword lpc_efuns contained objectp objects oldcrypt opcprof origin |
| 141 | syn keyword lpc_efuns contained parse_add_rule parse_add_synonym parse_command parse_dump parse_init parse_my_rules parse_refresh parse_remove parse_sentence pluralize pointerp pow present previous_object printf process_string process_value program_info |
| 142 | syn keyword lpc_efuns contained query_ed_mode query_heart_beat query_host_name query_idle query_ip_name query_ip_number query_ip_port query_load_average query_notify_fail query_privs query_replaced_program query_shadowing query_snoop query_snooping query_verb |
| 143 | syn keyword lpc_efuns contained random read_buffer read_bytes read_file receive reclaim_objects refs regexp reg_assoc reload_object remove_action remove_call_out remove_interactive remove_shadow rename repeat_string replace_program replace_string replaceable reset_eval_cost resolve restore_object restore_variable rm rmdir rotate_x rotate_y rotate_z rusage |
| 144 | syn keyword lpc_efuns contained save_object save_variable say scale set_author set_bit set_eval_limit set_heart_beat set_hide set_light set_living_name set_malloc_mask set_privs set_reset set_this_player set_this_user seteuid shadow shallow_inherit_list shout shutdown sin sizeof snoop socket_accept socket_acquire socket_address socket_bind socket_close socket_connect socket_create socket_error socket_listen socket_release socket_write sort_array sprintf sqrt stat store_variable strcmp stringp strlen strsrch |
| 145 | syn keyword lpc_efuns contained tan tell_object tell_room terminal_colour test_bit this_interactive this_object this_player this_user throw time to_float to_int trace traceprefix translate typeof |
| 146 | syn keyword lpc_efuns contained undefinedp unique_array unique_mapping upper_case uptime userp users |
| 147 | syn keyword lpc_efuns contained values variables virtualp |
| 148 | syn keyword lpc_efuns contained wizardp write write_buffer write_bytes write_file |
| 149 | |
| 150 | " Nodule: Constants {{{1 |
| 151 | |
| 152 | " LPC Constants. |
| 153 | " like keywords, constants are always highlighted, be careful to choose only |
| 154 | " the constants we used to add to this list. |
| 155 | syn keyword lpcConstant __ARCH__ __COMPILER__ __DIR__ __FILE__ __OPTIMIZATION__ __PORT__ __VERSION__ |
| 156 | " Defines in options.h are all predefined in LPC sources surrounding by |
| 157 | " two underscores. Do we need to include all of that? |
| 158 | syn keyword lpcConstant __SAVE_EXTENSION__ __HEARTBEAT_INTERVAL__ |
| 159 | " from the documentation we know that these constants remains only for |
| 160 | " backward compatibility and should not be used any more. |
| 161 | syn keyword lpcConstant HAS_ED HAS_PRINTF HAS_RUSAGE HAS_DEBUG_LEVEL |
| 162 | syn keyword lpcConstant MUD_NAME F__THIS_OBJECT |
| 163 | |
| 164 | " Nodule: Todo for this file. {{{1 |
| 165 | |
| 166 | " TODO : need to check for LPC4 syntax and other series of LPC besides |
| 167 | " v22, b21 and l32, if you had a good idea, contact me at poet@mudbuilder.net |
| 168 | " and I will be appreciated about that. |
| 169 | |
| 170 | " Notes about some FAQ: |
| 171 | " |
| 172 | " About variables : We adopts the same behavior for C because almost all the |
| 173 | " LPC programmers are also C programmers, so we don't need separate settings |
| 174 | " for C and LPC. That is the reason why I don't change variables like |
| 175 | " "c_no_utf"s to "lpc_no_utf"s. |
| 176 | " |
| 177 | " Copy : Some of the following seems to be copied from c.vim but not quite |
| 178 | " the same in details because the syntax for C and LPC is different. |
| 179 | " |
| 180 | " Color scheme : this syntax file had been thouroughly tested to work well |
| 181 | " for all of the dark-backgrounded color schemes Vim has provided officially, |
| 182 | " and it should be quite Ok for all of the bright-backgrounded color schemes, |
| 183 | " of course it works best for the color scheme that I am using, download it |
| 184 | " from http://poet.tomud.com/pub/ps_color.vim.bz2 if you want to try it. |
| 185 | " |
| 186 | |
| 187 | " Nodule: String and Character {{{1 |
| 188 | |
| 189 | |
| 190 | " String and Character constants |
| 191 | " Highlight special characters (those which have a backslash) differently |
| 192 | syn match lpcSpecial display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)" |
| 193 | if !exists("c_no_utf") |
| 194 | syn match lpcSpecial display contained "\\\(u\x\{4}\|U\x\{8}\)" |
| 195 | endif |
| 196 | |
| 197 | " LPC version of sprintf() format, |
| 198 | syn match lpcFormat display "%\(\d\+\)\=[-+ |=#@:.]*\(\d\+\)\=\('\I\+'\|'\I*\\'\I*'\)\=[OsdicoxXf]" contained |
| 199 | syn match lpcFormat display "%%" contained |
| 200 | syn region lpcString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=lpcSpecial,lpcFormat |
| 201 | " lpcCppString: same as lpcString, but ends at end of line |
| 202 | syn region lpcCppString start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=lpcSpecial,lpcFormat |
| 203 | |
| 204 | " LPC preprocessor for the text formatting short cuts |
| 205 | " Thanks to Dr. Charles E. Campbell <cec@gryphon.gsfc.nasa.gov> |
| 206 | " he suggests the best way to do this. |
| 207 | syn region lpcTextString start=/@\z(\h\w*\)$/ end=/^\z1/ contains=lpcSpecial |
| 208 | syn region lpcArrayString start=/@@\z(\h\w*\)$/ end=/^\z1/ contains=lpcSpecial |
| 209 | |
| 210 | " Character |
| 211 | syn match lpcCharacter "L\='[^\\]'" |
| 212 | syn match lpcCharacter "L'[^']*'" contains=lpcSpecial |
| 213 | syn match lpcSpecialError "L\='\\[^'\"?\\abefnrtv]'" |
| 214 | syn match lpcSpecialCharacter "L\='\\['\"?\\abefnrtv]'" |
| 215 | syn match lpcSpecialCharacter display "L\='\\\o\{1,3}'" |
| 216 | syn match lpcSpecialCharacter display "'\\x\x\{1,2}'" |
| 217 | syn match lpcSpecialCharacter display "L'\\x\x\+'" |
| 218 | |
| 219 | " Nodule: White space {{{1 |
| 220 | |
| 221 | " when wanted, highlight trailing white space |
| 222 | if exists("c_space_errors") |
| 223 | if !exists("c_no_trail_space_error") |
| 224 | syn match lpcSpaceError display excludenl "\s\+$" |
| 225 | endif |
| 226 | if !exists("c_no_tab_space_error") |
| 227 | syn match lpcSpaceError display " \+\t"me=e-1 |
| 228 | endif |
| 229 | endif |
| 230 | |
| 231 | " Nodule: Parenthesis and brackets {{{1 |
| 232 | |
| 233 | " catch errors caused by wrong parenthesis and brackets |
| 234 | syn cluster lpcParenGroup contains=lpcParenError,lpcIncluded,lpcSpecial,lpcCommentSkip,lpcCommentString,lpcComment2String,@lpcCommentGroup,lpcCommentStartError,lpcUserCont,lpcUserLabel,lpcBitField,lpcCommentSkip,lpcOctalZero,lpcCppOut,lpcCppOut2,lpcCppSkip,lpcFormat,lpcNumber,lpcFloat,lpcOctal,lpcOctalError,lpcNumbersCom |
| 235 | syn region lpcParen transparent start='(' end=')' contains=ALLBUT,@lpcParenGroup,lpcCppParen,lpcErrInBracket,lpcCppBracket,lpcCppString,@lpcEfunGroup,lpcApplies,lpcKeywdError |
| 236 | " lpcCppParen: same as lpcParen but ends at end-of-line; used in lpcDefine |
| 237 | syn region lpcCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@lpcParenGroup,lpcErrInBracket,lpcParen,lpcBracket,lpcString,@lpcEfunGroup,lpcApplies,lpcKeywdError |
| 238 | syn match lpcParenError display ")" |
| 239 | syn match lpcParenError display "\]" |
| 240 | " for LPC: |
| 241 | " Here we should consider the array ({ }) parenthesis and mapping ([ ]) |
| 242 | " parenthesis and multiset (< >) parenthesis. |
| 243 | syn match lpcErrInParen display contained "[^^]{"ms=s+1 |
| 244 | syn match lpcErrInParen display contained "\(}\|\]\)[^)]"me=e-1 |
| 245 | syn region lpcBracket transparent start='\[' end=']' contains=ALLBUT,@lpcParenGroup,lpcErrInParen,lpcCppParen,lpcCppBracket,lpcCppString,@lpcEfunGroup,lpcApplies,lpcFuncName,lpcKeywdError |
| 246 | " lpcCppBracket: same as lpcParen but ends at end-of-line; used in lpcDefine |
| 247 | syn region lpcCppBracket transparent start='\[' skip='\\$' excludenl end=']' end='$' contained contains=ALLBUT,@lpcParenGroup,lpcErrInParen,lpcParen,lpcBracket,lpcString,@lpcEfunGroup,lpcApplies,lpcFuncName,lpcKeywdError |
| 248 | syn match lpcErrInBracket display contained "[);{}]" |
| 249 | |
| 250 | " Nodule: Numbers {{{1 |
| 251 | |
| 252 | " integer number, or floating point number without a dot and with "f". |
| 253 | syn case ignore |
| 254 | syn match lpcNumbers display transparent "\<\d\|\.\d" contains=lpcNumber,lpcFloat,lpcOctalError,lpcOctal |
| 255 | " Same, but without octal error (for comments) |
| 256 | syn match lpcNumbersCom display contained transparent "\<\d\|\.\d" contains=lpcNumber,lpcFloat,lpcOctal |
| 257 | syn match lpcNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>" |
| 258 | " hex number |
| 259 | syn match lpcNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>" |
| 260 | " Flag the first zero of an octal number as something special |
| 261 | syn match lpcOctal display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=lpcOctalZero |
| 262 | syn match lpcOctalZero display contained "\<0" |
| 263 | syn match lpcFloat display contained "\d\+f" |
| 264 | " floating point number, with dot, optional exponent |
| 265 | syn match lpcFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=" |
| 266 | " floating point number, starting with a dot, optional exponent |
| 267 | syn match lpcFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" |
| 268 | " floating point number, without dot, with exponent |
| 269 | syn match lpcFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>" |
| 270 | " flag an octal number with wrong digits |
| 271 | syn match lpcOctalError display contained "0\o*[89]\d*" |
| 272 | syn case match |
| 273 | |
| 274 | " Nodule: Comment string {{{1 |
| 275 | |
| 276 | " lpcCommentGroup allows adding matches for special things in comments |
| 277 | syn keyword lpcTodo contained TODO FIXME XXX |
| 278 | syn cluster lpcCommentGroup contains=lpcTodo |
| 279 | |
| 280 | if exists("c_comment_strings") |
| 281 | " A comment can contain lpcString, lpcCharacter and lpcNumber. |
| 282 | syntax match lpcCommentSkip contained "^\s*\*\($\|\s\+\)" |
| 283 | syntax region lpcCommentString contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=lpcSpecial,lpcCommentSkip |
| 284 | syntax region lpcComment2String contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=lpcSpecial |
| 285 | syntax region lpcCommentL start="//" skip="\\$" end="$" keepend contains=@lpcCommentGroup,lpcComment2String,lpcCharacter,lpcNumbersCom,lpcSpaceError |
| 286 | syntax region lpcComment matchgroup=lpcCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@lpcCommentGroup,lpcCommentStartError,lpcCommentString,lpcCharacter,lpcNumbersCom,lpcSpaceError |
| 287 | else |
| 288 | syn region lpcCommentL start="//" skip="\\$" end="$" keepend contains=@lpcCommentGroup,lpcSpaceError |
| 289 | syn region lpcComment matchgroup=lpcCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@lpcCommentGroup,lpcCommentStartError,lpcSpaceError |
| 290 | endif |
| 291 | " keep a // comment separately, it terminates a preproc. conditional |
| 292 | syntax match lpcCommentError display "\*/" |
| 293 | syntax match lpcCommentStartError display "/\*"me=e-1 contained |
| 294 | |
| 295 | " Nodule: Pre-processor {{{1 |
| 296 | |
| 297 | syn region lpcPreCondit start="^\s*#\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=lpcComment,lpcCppString,lpcCharacter,lpcCppParen,lpcParenError,lpcNumbers,lpcCommentError,lpcSpaceError |
| 298 | syn match lpcPreCondit display "^\s*#\s*\(else\|endif\)\>" |
| 299 | if !exists("c_no_if0") |
| 300 | syn region lpcCppOut start="^\s*#\s*if\s\+0\+\>" end=".\|$" contains=lpcCppOut2 |
| 301 | syn region lpcCppOut2 contained start="0" end="^\s*#\s*\(endif\>\|else\>\|elif\>\)" contains=lpcSpaceError,lpcCppSkip |
| 302 | syn region lpcCppSkip contained start="^\s*#\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*#\s*endif\>" contains=lpcSpaceError,lpcCppSkip |
| 303 | endif |
| 304 | syn region lpcIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ |
| 305 | syn match lpcIncluded display contained "<[^>]*>" |
| 306 | syn match lpcInclude display "^\s*#\s*include\>\s*["<]" contains=lpcIncluded |
| 307 | syn match lpcLineSkip "\\$" |
| 308 | syn cluster lpcPreProcGroup contains=lpcPreCondit,lpcIncluded,lpcInclude,lpcDefine,lpcErrInParen,lpcErrInBracket,lpcUserLabel,lpcSpecial,lpcOctalZero,lpcCppOut,lpcCppOut2,lpcCppSkip,lpcFormat,lpcNumber,lpcFloat,lpcOctal,lpcOctalError,lpcNumbersCom,lpcString,lpcCommentSkip,lpcCommentString,lpcComment2String,@lpcCommentGroup,lpcCommentStartError,lpcParen,lpcBracket,lpcMulti,lpcKeywdError |
| 309 | syn region lpcDefine start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@lpcPreProcGroup |
| 310 | |
| 311 | if exists("lpc_pre_v22") |
| 312 | syn region lpcPreProc start="^\s*#\s*\(pragma\>\|echo\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@lpcPreProcGroup |
| 313 | else |
| 314 | syn region lpcPreProc start="^\s*#\s*\(pragma\>\|echo\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@lpcPreProcGroup |
| 315 | endif |
| 316 | |
| 317 | " Nodule: User labels {{{1 |
| 318 | |
| 319 | " Highlight Labels |
| 320 | " User labels in LPC is not allowed, only "case x" and "default" is supported |
| 321 | syn cluster lpcMultiGroup contains=lpcIncluded,lpcSpecial,lpcCommentSkip,lpcCommentString,lpcComment2String,@lpcCommentGroup,lpcCommentStartError,lpcUserCont,lpcUserLabel,lpcBitField,lpcOctalZero,lpcCppOut,lpcCppOut2,lpcCppSkip,lpcFormat,lpcNumber,lpcFloat,lpcOctal,lpcOctalError,lpcNumbersCom,lpcCppParen,lpcCppBracket,lpcCppString,lpcKeywdError |
| 322 | syn region lpcMulti transparent start='\(case\|default\|public\|protected\|private\)' skip='::' end=':' contains=ALLBUT,@lpcMultiGroup |
| 323 | |
| 324 | syn cluster lpcLabelGroup contains=lpcUserLabel |
| 325 | syn match lpcUserCont display "^\s*lpc:$" contains=@lpcLabelGroup |
| 326 | |
| 327 | " Don't want to match anything |
| 328 | syn match lpcUserLabel display "lpc" contained |
| 329 | |
| 330 | " Nodule: Initializations {{{1 |
| 331 | |
| 332 | if exists("c_minlines") |
| 333 | let b:c_minlines = c_minlines |
| 334 | else |
| 335 | if !exists("c_no_if0") |
| 336 | let b:c_minlines = 50 " #if 0 constructs can be long |
| 337 | else |
| 338 | let b:c_minlines = 15 " mostly for () constructs |
| 339 | endif |
| 340 | endif |
| 341 | exec "syn sync ccomment lpcComment minlines=" . b:c_minlines |
| 342 | |
| 343 | " Make sure these options take place since we no longer depend on file type |
| 344 | " plugin for C |
| 345 | setlocal cindent |
| 346 | setlocal fo-=t fo+=croql |
| 347 | setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// |
| 348 | set cpo-=C |
| 349 | |
| 350 | " Win32 can filter files in the browse dialog |
| 351 | if has("gui_win32") && !exists("b:browsefilter") |
| 352 | let b:browsefilter = "LPC Source Files (*.c *.d *.h)\t*.c;*.d;*.h\n" . |
| 353 | \ "LPC Data Files (*.scr *.o *.dat)\t*.scr;*.o;*.dat\n" . |
| 354 | \ "Text Documentation (*.txt)\t*.txt\n" . |
| 355 | \ "All Files (*.*)\t*.*\n" |
| 356 | endif |
| 357 | |
| 358 | " Nodule: Highlight links {{{1 |
| 359 | |
| 360 | " Define the default highlighting. |
| 361 | " For version 5.7 and earlier: only when not done already |
| 362 | " For version 5.8 and later: only when an item doesn't have highlighting yet |
| 363 | if version >= 508 || !exists("did_lpc_syn_inits") |
| 364 | if version < 508 |
| 365 | let did_lpc_syn_inits = 1 |
| 366 | command -nargs=+ HiLink hi link <args> |
| 367 | else |
| 368 | command -nargs=+ HiLink hi def link <args> |
| 369 | endif |
| 370 | |
| 371 | HiLink lpcModifier lpcStorageClass |
| 372 | |
| 373 | HiLink lpcQuotedFmt lpcFormat |
| 374 | HiLink lpcFormat lpcSpecial |
| 375 | HiLink lpcCppString lpcString " Cpp means |
| 376 | " C Pre-Processor |
| 377 | HiLink lpcCommentL lpcComment |
| 378 | HiLink lpcCommentStart lpcComment |
| 379 | HiLink lpcUserLabel lpcLabel |
| 380 | HiLink lpcSpecialCharacter lpcSpecial |
| 381 | HiLink lpcOctal lpcPreProc |
| 382 | HiLink lpcOctalZero lpcSpecial " LPC will treat octal numbers |
| 383 | " as decimals, programmers should |
| 384 | " be aware of that. |
| 385 | HiLink lpcEfunError lpcError |
| 386 | HiLink lpcKeywdError lpcError |
| 387 | HiLink lpcOctalError lpcError |
| 388 | HiLink lpcParenError lpcError |
| 389 | HiLink lpcErrInParen lpcError |
| 390 | HiLink lpcErrInBracket lpcError |
| 391 | HiLink lpcCommentError lpcError |
| 392 | HiLink lpcCommentStartError lpcError |
| 393 | HiLink lpcSpaceError lpcError |
| 394 | HiLink lpcSpecialError lpcError |
| 395 | HiLink lpcErrFunc lpcError |
| 396 | |
| 397 | if exists("lpc_pre_v22") |
| 398 | HiLink lpcOldEfuns lpc_efuns |
| 399 | HiLink lpcNewEfuns lpcError |
| 400 | else |
| 401 | HiLink lpcOldEfuns lpcReserved |
| 402 | HiLink lpcNewEfuns lpc_efuns |
| 403 | endif |
| 404 | HiLink lpc_efuns lpcFunction |
| 405 | |
| 406 | HiLink lpcReserved lpcPreProc |
| 407 | HiLink lpcTextString lpcString " This should be preprocessors, but |
| 408 | HiLink lpcArrayString lpcPreProc " let's make some difference |
| 409 | " between text and array |
| 410 | |
| 411 | HiLink lpcIncluded lpcString |
| 412 | HiLink lpcCommentString lpcString |
| 413 | HiLink lpcComment2String lpcString |
| 414 | HiLink lpcCommentSkip lpcComment |
| 415 | HiLink lpcCommentFunc lpcComment |
| 416 | |
| 417 | HiLink lpcCppSkip lpcCppOut |
| 418 | HiLink lpcCppOut2 lpcCppOut |
| 419 | HiLink lpcCppOut lpcComment |
| 420 | |
| 421 | " Standard type below |
| 422 | HiLink lpcApplies Special |
| 423 | HiLink lpcCharacter Character |
| 424 | HiLink lpcComment Comment |
| 425 | HiLink lpcConditional Conditional |
| 426 | HiLink lpcConstant Constant |
| 427 | HiLink lpcDefine Macro |
| 428 | HiLink lpcError Error |
| 429 | HiLink lpcFloat Float |
| 430 | HiLink lpcFunction Function |
| 431 | HiLink lpcIdentifier Identifier |
| 432 | HiLink lpcInclude Include |
| 433 | HiLink lpcLabel Label |
| 434 | HiLink lpcNumber Number |
| 435 | HiLink lpcOperator Operator |
| 436 | HiLink lpcPreCondit PreCondit |
| 437 | HiLink lpcPreProc PreProc |
| 438 | HiLink lpcRepeat Repeat |
| 439 | HiLink lpcStatement Statement |
| 440 | HiLink lpcStorageClass StorageClass |
| 441 | HiLink lpcString String |
| 442 | HiLink lpcStructure Structure |
| 443 | HiLink lpcSpecial LineNr |
| 444 | HiLink lpcTodo Todo |
| 445 | HiLink lpcType Type |
| 446 | |
| 447 | delcommand HiLink |
| 448 | endif |
| 449 | |
| 450 | " Nodule: This is the end nodule. {{{1 |
| 451 | |
| 452 | let b:current_syntax = "lpc" |
| 453 | |
| 454 | " vim:ts=8:nosta:sw=2:ai:si: |
| 455 | " vim600:set fdm=marker: }}}1 |