1" Vim syntax file
2" Language:	kimwitu++
3" Maintainer:	Michael Piefel <piefel@informatik.hu-berlin.de>
4" Last Change:	2 May 2001
5
6" For version 5.x: Clear all syntax items
7" For version 6.x: Quit when a syntax file was already loaded
8if version < 600
9    syntax clear
10elseif exists("b:current_syntax")
11    finish
12endif
13
14" Read the C++ syntax to start with
15if version < 600
16  source <sfile>:p:h/cpp.vim
17else
18  runtime! syntax/cpp.vim
19  unlet b:current_syntax
20endif
21
22" kimwitu++ extentions
23
24" Don't stop at eol, messes around with CPP mode, but gives line spanning
25" strings in unparse rules
26syn region cCppString		start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat
27syn keyword cType		integer real casestring nocasestring voidptr list
28syn keyword cType		uview rview uview_enum rview_enum
29
30" avoid unparsing rule sth:view being scanned as label
31syn clear   cUserCont
32syn match   cUserCont		"^\s*\I\i*\s*:$" contains=cUserLabel contained
33syn match   cUserCont		";\s*\I\i*\s*:$" contains=cUserLabel contained
34syn match   cUserCont		"^\s*\I\i*\s*:[^:]"me=e-1 contains=cUserLabel contained
35syn match   cUserCont		";\s*\I\i*\s*:[^:]"me=e-1 contains=cUserLabel contained
36
37" highlight phylum decls
38syn match   kwtPhylum		"^\I\i*:$"
39syn match   kwtPhylum		"^\I\i*\s*{\s*\(!\|\I\)\i*\s*}\s*:$"
40
41syn keyword kwtStatement	with foreach afterforeach provided
42syn match kwtDecl		"%\(uviewvar\|rviewvar\)"
43syn match kwtDecl		"^%\(uview\|rview\|ctor\|dtor\|base\|storageclass\|list\|attr\|member\|option\)"
44syn match kwtOption		"no-csgio\|no-unparse\|no-rewrite\|no-printdot\|no-hashtables\|smart-pointer\|weak-pointer"
45syn match kwtSep		"^%}$"
46syn match kwtSep		"^%{\(\s\+\I\i*\)*$"
47syn match kwtCast		"\<phylum_cast\s*<"me=e-1
48syn match kwtCast		"\<phylum_cast\s*$"
49
50
51" match views, remove paren error in brackets
52syn clear cErrInBracket
53syn match cErrInBracket		contained ")"
54syn match kwtViews		"\(\[\|<\)\@<=[ [:alnum:]_]\{-}:"
55
56" match rule bodies
57syn region kwtUnpBody		transparent keepend extend fold start="->\s*\[" start="^\s*\[" skip="\$\@<!{\_.\{-}\$\@<!}" end="\s]\s\=;\=$" end="^]\s\=;\=$" end="}]\s\=;\=$"
58syn region kwtRewBody		transparent keepend extend fold start="->\s*<" start="^\s*<" end="\s>\s\=;\=$" end="^>\s\=;\=$"
59
60" Define the default highlighting.
61" For version 5.7 and earlier: only when not done already
62" For version 5.8 and later: only when an item doesn't have highlighting yet
63if version >= 508 || !exists("did_kwt_syn_inits")
64    if version < 508
65	let did_kwt_syn_inits = 1
66	command -nargs=+ HiLink hi link <args>
67    else
68	command -nargs=+ HiLink hi def link <args>
69    endif
70
71    HiLink kwtStatement	cppStatement
72    HiLink kwtDecl	cppStatement
73    HiLink kwtCast	cppStatement
74    HiLink kwtSep	Delimiter
75    HiLink kwtViews	Label
76    HiLink kwtPhylum	Type
77    HiLink kwtOption	PreProc
78    "HiLink cText	Comment
79
80    delcommand HiLink
81endif
82
83syn sync lines=300
84
85let b:current_syntax = "kwt"
86
87" vim: ts=8
88