1" Vim syntax file
2" Language:    Mason (Perl embedded in HTML)
3" Maintainer:  Andrew Smith <andrewdsmith@yahoo.com>
4" Last change: 2003 May 11
5" URL:	       http://www.masonhq.com/editors/mason.vim
6"
7" This seems to work satisfactorily with html.vim and perl.vim for version 5.5.
8" Please mail any fixes or improvements to the above address. Things that need
9" doing include:
10"
11"  - Add match for component names in <& &> blocks.
12"  - Add match for component names in <%def> and <%method> block delimiters.
13"  - Fix <%text> blocks to show HTML tags but ignore Mason tags.
14"
15
16" Clear previous syntax settings unless this is v6 or above, in which case just
17" exit without doing anything.
18"
19if version < 600
20	syn clear
21elseif exists("b:current_syntax")
22	finish
23endif
24
25" The HTML syntax file included below uses this variable.
26"
27if !exists("main_syntax")
28	let main_syntax = 'mason'
29endif
30
31" First pull in the HTML syntax.
32"
33if version < 600
34	so <sfile>:p:h/html.vim
35else
36	runtime! syntax/html.vim
37	unlet b:current_syntax
38endif
39
40syn cluster htmlPreproc add=@masonTop
41
42" Now pull in the Perl syntax.
43"
44if version < 600
45	syn include @perlTop <sfile>:p:h/perl.vim
46else
47	syn include @perlTop syntax/perl.vim
48endif
49
50" It's hard to reduce down to the correct sub-set of Perl to highlight in some
51" of these cases so I've taken the safe option of just using perlTop in all of
52" them. If you have any suggestions, please let me know.
53"
54syn region masonLine matchgroup=Delimiter start="^%" end="$" contains=@perlTop
55syn region masonExpr matchgroup=Delimiter start="<%" end="%>" contains=@perlTop
56syn region masonPerl matchgroup=Delimiter start="<%perl>" end="</%perl>" contains=@perlTop
57syn region masonComp keepend matchgroup=Delimiter start="<&" end="&>" contains=@perlTop
58
59syn region masonArgs matchgroup=Delimiter start="<%args>" end="</%args>" contains=@perlTop
60
61syn region masonInit matchgroup=Delimiter start="<%init>" end="</%init>" contains=@perlTop
62syn region masonCleanup matchgroup=Delimiter start="<%cleanup>" end="</%cleanup>" contains=@perlTop
63syn region masonOnce matchgroup=Delimiter start="<%once>" end="</%once>" contains=@perlTop
64syn region masonShared matchgroup=Delimiter start="<%shared>" end="</%shared>" contains=@perlTop
65
66syn region masonDef matchgroup=Delimiter start="<%def[^>]*>" end="</%def>" contains=@htmlTop
67syn region masonMethod matchgroup=Delimiter start="<%method[^>]*>" end="</%method>" contains=@htmlTop
68
69syn region masonFlags matchgroup=Delimiter start="<%flags>" end="</%flags>" contains=@perlTop
70syn region masonAttr matchgroup=Delimiter start="<%attr>" end="</%attr>" contains=@perlTop
71
72syn region masonFilter matchgroup=Delimiter start="<%filter>" end="</%filter>" contains=@perlTop
73
74syn region masonDoc matchgroup=Delimiter start="<%doc>" end="</%doc>"
75syn region masonText matchgroup=Delimiter start="<%text>" end="</%text>"
76
77syn cluster masonTop contains=masonLine,masonExpr,masonPerl,masonComp,masonArgs,masonInit,masonCleanup,masonOnce,masonShared,masonDef,masonMethod,masonFlags,masonAttr,masonFilter,masonDoc,masonText
78
79" Set up default highlighting. Almost all of this is done in the included
80" syntax files.
81"
82if version >= 508 || !exists("did_mason_syn_inits")
83	if version < 508
84		let did_mason_syn_inits = 1
85		com -nargs=+ HiLink hi link <args>
86	else
87		com -nargs=+ HiLink hi def link <args>
88	endif
89
90	HiLink masonDoc Comment
91
92	delc HiLink
93endif
94
95let b:current_syntax = "mason"
96
97if main_syntax == 'mason'
98	unlet main_syntax
99endif
100