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 / unix / vim-6.2.tar.bz2 / vim-6.2.tar / vim62 / runtime / syntax / lpc.vim < prev    next >
Encoding:
Text File  |  2003-05-11  |  22.8 KB  |  456 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:    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
  456.