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