1071d4279SBram Moolenaar" Vim syntax file 2071d4279SBram Moolenaar" Language: Mason (Perl embedded in HTML) 3*37c64c78SBram Moolenaar" Maintainer: vim-perl <[email protected]> 4*37c64c78SBram Moolenaar" Homepage: http://github.com/vim-perl/vim-perl/tree/master 5*37c64c78SBram Moolenaar" Bugs/requests: http://github.com/vim-perl/vim-perl/issues 6*37c64c78SBram Moolenaar" Last Change: 2017-09-12 7*37c64c78SBram Moolenaar" Contributors: Hinrik Örn Sigurðsson <[email protected]> 8*37c64c78SBram Moolenaar" Andrew Smith <[email protected]> 9071d4279SBram Moolenaar" 10*37c64c78SBram Moolenaar" TODO: 11071d4279SBram Moolenaar" - Fix <%text> blocks to show HTML tags but ignore Mason tags. 12071d4279SBram Moolenaar" 13071d4279SBram Moolenaar 1489bcfda6SBram Moolenaar" quit when a syntax file was already loaded 1589bcfda6SBram Moolenaarif exists("b:current_syntax") 16071d4279SBram Moolenaar finish 17071d4279SBram Moolenaarendif 18071d4279SBram Moolenaar 19071d4279SBram Moolenaar" The HTML syntax file included below uses this variable. 20071d4279SBram Moolenaar" 21071d4279SBram Moolenaarif !exists("main_syntax") 22071d4279SBram Moolenaar let main_syntax = 'mason' 23071d4279SBram Moolenaarendif 24071d4279SBram Moolenaar 25071d4279SBram Moolenaar" First pull in the HTML syntax. 26071d4279SBram Moolenaar" 27071d4279SBram Moolenaarruntime! syntax/html.vim 28071d4279SBram Moolenaarunlet b:current_syntax 29071d4279SBram Moolenaar 30071d4279SBram Moolenaarsyn cluster htmlPreproc add=@masonTop 31071d4279SBram Moolenaar 32071d4279SBram Moolenaar" Now pull in the Perl syntax. 33071d4279SBram Moolenaar" 34071d4279SBram Moolenaarsyn include @perlTop syntax/perl.vim 35*37c64c78SBram Moolenaarunlet b:current_syntax 36*37c64c78SBram Moolenaarsyn include @podTop syntax/pod.vim 37071d4279SBram Moolenaar 38071d4279SBram Moolenaar" It's hard to reduce down to the correct sub-set of Perl to highlight in some 39071d4279SBram Moolenaar" of these cases so I've taken the safe option of just using perlTop in all of 40071d4279SBram Moolenaar" them. If you have any suggestions, please let me know. 41071d4279SBram Moolenaar" 42*37c64c78SBram Moolenaarsyn region masonPod start="^=[a-z]" end="^=cut" keepend contained contains=@podTop 43*37c64c78SBram Moolenaarsyn cluster perlTop remove=perlBraces 44*37c64c78SBram Moolenaarsyn region masonLine matchgroup=Delimiter start="^%" end="$" keepend contains=@perlTop 45*37c64c78SBram Moolenaarsyn region masonPerlComment start="#" end="\%(%>\)\@=\|$" contained contains=perlTodo,@Spell 46*37c64c78SBram Moolenaarsyn region masonExpr matchgroup=Delimiter start="<%" end="%>" contains=@perlTop,masonPerlComment 47*37c64c78SBram Moolenaarsyn region masonPerl matchgroup=Delimiter start="<%perl>" end="</%perl>" contains=masonPod,@perlTop 48*37c64c78SBram Moolenaarsyn region masonComp keepend matchgroup=Delimiter start="<&\s*\%([-._/[:alnum:]]\+:\)\?[-._/[:alnum:]]*" end="&>" contains=@perlTop 49*37c64c78SBram Moolenaarsyn region masonComp keepend matchgroup=Delimiter skipnl start="<&|\s*\%([-._/[:alnum:]]\+:\)\?[-._/[:alnum:]]*" end="&>" contains=@perlTop nextgroup=masonCompContent 50*37c64c78SBram Moolenaarsyn region masonCompContent matchgroup=Delimiter start="" end="</&>" contained contains=@masonTop 51071d4279SBram Moolenaar 52*37c64c78SBram Moolenaarsyn region masonArgs matchgroup=Delimiter start="<%args>" end="</%args>" contains=masonPod,@perlTop 53071d4279SBram Moolenaar 54*37c64c78SBram Moolenaarsyn region masonInit matchgroup=Delimiter start="<%init>" end="</%init>" contains=masonPod,@perlTop 55*37c64c78SBram Moolenaarsyn region masonCleanup matchgroup=Delimiter start="<%cleanup>" end="</%cleanup>" contains=masonPod,@perlTop 56*37c64c78SBram Moolenaarsyn region masonOnce matchgroup=Delimiter start="<%once>" end="</%once>" contains=masonPod,@perlTop 57*37c64c78SBram Moolenaarsyn region masonClass matchgroup=Delimiter start="<%class>" end="</%class>" contains=masonPod,@perlTop 58*37c64c78SBram Moolenaarsyn region masonShared matchgroup=Delimiter start="<%shared>" end="</%shared>" contains=masonPod,@perlTop 59071d4279SBram Moolenaar 60*37c64c78SBram Moolenaarsyn region masonDef matchgroup=Delimiter start="<%def\s*[-._/[:alnum:]]\+\s*>" end="</%def>" contains=@htmlTop 61*37c64c78SBram Moolenaarsyn region masonMethod matchgroup=Delimiter start="<%method\s*[-._/[:alnum:]]\+\s*>" end="</%method>" contains=@htmlTop 62071d4279SBram Moolenaar 63*37c64c78SBram Moolenaarsyn region masonFlags matchgroup=Delimiter start="<%flags>" end="</%flags>" contains=masonPod,@perlTop 64*37c64c78SBram Moolenaarsyn region masonAttr matchgroup=Delimiter start="<%attr>" end="</%attr>" contains=masonPod,@perlTop 65071d4279SBram Moolenaar 66*37c64c78SBram Moolenaarsyn region masonFilter matchgroup=Delimiter start="<%filter>" end="</%filter>" contains=masonPod,@perlTop 67071d4279SBram Moolenaar 68071d4279SBram Moolenaarsyn region masonDoc matchgroup=Delimiter start="<%doc>" end="</%doc>" 69071d4279SBram Moolenaarsyn region masonText matchgroup=Delimiter start="<%text>" end="</%text>" 70071d4279SBram Moolenaar 71071d4279SBram Moolenaarsyn cluster masonTop contains=masonLine,masonExpr,masonPerl,masonComp,masonArgs,masonInit,masonCleanup,masonOnce,masonShared,masonDef,masonMethod,masonFlags,masonAttr,masonFilter,masonDoc,masonText 72071d4279SBram Moolenaar 73071d4279SBram Moolenaar" Set up default highlighting. Almost all of this is done in the included 74071d4279SBram Moolenaar" syntax files. 7589bcfda6SBram Moolenaarhi def link masonDoc Comment 76*37c64c78SBram Moolenaarhi def link masonPod Comment 77*37c64c78SBram Moolenaarhi def link masonPerlComment perlComment 78071d4279SBram Moolenaar 79071d4279SBram Moolenaarlet b:current_syntax = "mason" 80071d4279SBram Moolenaar 81071d4279SBram Moolenaarif main_syntax == 'mason' 82071d4279SBram Moolenaar unlet main_syntax 83071d4279SBram Moolenaarendif 84