xref: /vim-8.2.3635/runtime/syntax/mason.vim (revision 37c64c78)
1" Vim syntax file
2" Language:     Mason (Perl embedded in HTML)
3" Maintainer:   vim-perl <[email protected]>
4" Homepage:      http://github.com/vim-perl/vim-perl/tree/master
5" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
6" Last Change:  2017-09-12
7" Contributors: Hinrik Örn Sigurðsson <[email protected]>
8"               Andrew Smith <[email protected]>
9"
10" TODO:
11"  - Fix <%text> blocks to show HTML tags but ignore Mason tags.
12"
13
14" quit when a syntax file was already loaded
15if exists("b:current_syntax")
16	finish
17endif
18
19" The HTML syntax file included below uses this variable.
20"
21if !exists("main_syntax")
22	let main_syntax = 'mason'
23endif
24
25" First pull in the HTML syntax.
26"
27runtime! syntax/html.vim
28unlet b:current_syntax
29
30syn cluster htmlPreproc add=@masonTop
31
32" Now pull in the Perl syntax.
33"
34syn include @perlTop syntax/perl.vim
35unlet b:current_syntax
36syn include @podTop syntax/pod.vim
37
38" It's hard to reduce down to the correct sub-set of Perl to highlight in some
39" of these cases so I've taken the safe option of just using perlTop in all of
40" them. If you have any suggestions, please let me know.
41"
42syn region masonPod start="^=[a-z]" end="^=cut" keepend contained contains=@podTop
43syn cluster perlTop remove=perlBraces
44syn region masonLine matchgroup=Delimiter start="^%" end="$" keepend contains=@perlTop
45syn region masonPerlComment start="#" end="\%(%>\)\@=\|$" contained contains=perlTodo,@Spell
46syn region masonExpr matchgroup=Delimiter start="<%" end="%>" contains=@perlTop,masonPerlComment
47syn region masonPerl matchgroup=Delimiter start="<%perl>" end="</%perl>" contains=masonPod,@perlTop
48syn region masonComp keepend matchgroup=Delimiter start="<&\s*\%([-._/[:alnum:]]\+:\)\?[-._/[:alnum:]]*" end="&>" contains=@perlTop
49syn region masonComp keepend matchgroup=Delimiter skipnl start="<&|\s*\%([-._/[:alnum:]]\+:\)\?[-._/[:alnum:]]*" end="&>" contains=@perlTop nextgroup=masonCompContent
50syn region masonCompContent matchgroup=Delimiter start="" end="</&>" contained contains=@masonTop
51
52syn region masonArgs matchgroup=Delimiter start="<%args>" end="</%args>" contains=masonPod,@perlTop
53
54syn region masonInit matchgroup=Delimiter start="<%init>" end="</%init>" contains=masonPod,@perlTop
55syn region masonCleanup matchgroup=Delimiter start="<%cleanup>" end="</%cleanup>" contains=masonPod,@perlTop
56syn region masonOnce matchgroup=Delimiter start="<%once>" end="</%once>" contains=masonPod,@perlTop
57syn region masonClass matchgroup=Delimiter start="<%class>" end="</%class>" contains=masonPod,@perlTop
58syn region masonShared matchgroup=Delimiter start="<%shared>" end="</%shared>" contains=masonPod,@perlTop
59
60syn region masonDef matchgroup=Delimiter start="<%def\s*[-._/[:alnum:]]\+\s*>" end="</%def>" contains=@htmlTop
61syn region masonMethod matchgroup=Delimiter start="<%method\s*[-._/[:alnum:]]\+\s*>" end="</%method>" contains=@htmlTop
62
63syn region masonFlags matchgroup=Delimiter start="<%flags>" end="</%flags>" contains=masonPod,@perlTop
64syn region masonAttr matchgroup=Delimiter start="<%attr>" end="</%attr>" contains=masonPod,@perlTop
65
66syn region masonFilter matchgroup=Delimiter start="<%filter>" end="</%filter>" contains=masonPod,@perlTop
67
68syn region masonDoc matchgroup=Delimiter start="<%doc>" end="</%doc>"
69syn region masonText matchgroup=Delimiter start="<%text>" end="</%text>"
70
71syn cluster masonTop contains=masonLine,masonExpr,masonPerl,masonComp,masonArgs,masonInit,masonCleanup,masonOnce,masonShared,masonDef,masonMethod,masonFlags,masonAttr,masonFilter,masonDoc,masonText
72
73" Set up default highlighting. Almost all of this is done in the included
74" syntax files.
75hi def link masonDoc Comment
76hi def link masonPod Comment
77hi def link masonPerlComment perlComment
78
79let b:current_syntax = "mason"
80
81if main_syntax == 'mason'
82	unlet main_syntax
83endif
84