home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / runtime / dos / syntax / lpc.vim < prev    next >
Encoding:
Text File  |  2012-05-31  |  23.3 KB  |  461 lines

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