blob: f087def794021588df4c8f5f2fbd2622b22ea9b0 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaar37c64c72017-09-19 22:06:03 +02002" Language: Mason (Perl embedded in HTML)
3" Maintainer: vim-perl <vim-perl@googlegroups.com>
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 <hinrik.sig@gmail.com>
8" Andrew Smith <andrewdsmith@yahoo.com>
Bram Moolenaar071d4272004-06-13 20:20:40 +00009"
Bram Moolenaar37c64c72017-09-19 22:06:03 +020010" TODO:
Bram Moolenaar071d4272004-06-13 20:20:40 +000011" - Fix <%text> blocks to show HTML tags but ignore Mason tags.
12"
13
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020014" quit when a syntax file was already loaded
15if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000016 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"
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020027runtime! syntax/html.vim
28unlet b:current_syntax
Bram Moolenaar071d4272004-06-13 20:20:40 +000029
30syn cluster htmlPreproc add=@masonTop
31
32" Now pull in the Perl syntax.
33"
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020034syn include @perlTop syntax/perl.vim
Bram Moolenaar37c64c72017-09-19 22:06:03 +020035unlet b:current_syntax
36syn include @podTop syntax/pod.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +000037
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"
Bram Moolenaar37c64c72017-09-19 22:06:03 +020042syn 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
Bram Moolenaar071d4272004-06-13 20:20:40 +000051
Bram Moolenaar37c64c72017-09-19 22:06:03 +020052syn region masonArgs matchgroup=Delimiter start="<%args>" end="</%args>" contains=masonPod,@perlTop
Bram Moolenaar071d4272004-06-13 20:20:40 +000053
Bram Moolenaar37c64c72017-09-19 22:06:03 +020054syn 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
Bram Moolenaar071d4272004-06-13 20:20:40 +000059
Bram Moolenaar37c64c72017-09-19 22:06:03 +020060syn 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
Bram Moolenaar071d4272004-06-13 20:20:40 +000062
Bram Moolenaar37c64c72017-09-19 22:06:03 +020063syn region masonFlags matchgroup=Delimiter start="<%flags>" end="</%flags>" contains=masonPod,@perlTop
64syn region masonAttr matchgroup=Delimiter start="<%attr>" end="</%attr>" contains=masonPod,@perlTop
Bram Moolenaar071d4272004-06-13 20:20:40 +000065
Bram Moolenaar37c64c72017-09-19 22:06:03 +020066syn region masonFilter matchgroup=Delimiter start="<%filter>" end="</%filter>" contains=masonPod,@perlTop
Bram Moolenaar071d4272004-06-13 20:20:40 +000067
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.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020075hi def link masonDoc Comment
Bram Moolenaar37c64c72017-09-19 22:06:03 +020076hi def link masonPod Comment
77hi def link masonPerlComment perlComment
Bram Moolenaar071d4272004-06-13 20:20:40 +000078
79let b:current_syntax = "mason"
80
81if main_syntax == 'mason'
82 unlet main_syntax
83endif