blob: e1638ece757ec578222c0b1362243a16b2a328ad [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaar8c1b8cb2022-06-14 17:41:28 +01002" Language: Mason (Perl embedded in HTML)
3" Maintainer: vim-perl <vim-perl@googlegroups.com>
4" Homepage: https://github.com/vim-perl/vim-perl
5" Bugs/requests: https://github.com/vim-perl/vim-perl/issues
6" License: Vim License (see :help license)
7" Last Change: 2021 Oct 10
8" Contributors: Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
9" Andrew Smith <andrewdsmith@yahoo.com>
Bram Moolenaar071d4272004-06-13 20:20:40 +000010"
Bram Moolenaar37c64c72017-09-19 22:06:03 +020011" TODO:
Bram Moolenaar071d4272004-06-13 20:20:40 +000012" - Fix <%text> blocks to show HTML tags but ignore Mason tags.
13"
14
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020015" quit when a syntax file was already loaded
16if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000017 finish
18endif
19
20" The HTML syntax file included below uses this variable.
21"
22if !exists("main_syntax")
23 let main_syntax = 'mason'
24endif
25
26" First pull in the HTML syntax.
27"
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020028runtime! syntax/html.vim
29unlet b:current_syntax
Bram Moolenaar071d4272004-06-13 20:20:40 +000030
31syn cluster htmlPreproc add=@masonTop
32
33" Now pull in the Perl syntax.
34"
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020035syn include @perlTop syntax/perl.vim
Bram Moolenaar37c64c72017-09-19 22:06:03 +020036unlet b:current_syntax
37syn include @podTop syntax/pod.vim
Bram Moolenaar071d4272004-06-13 20:20:40 +000038
39" It's hard to reduce down to the correct sub-set of Perl to highlight in some
40" of these cases so I've taken the safe option of just using perlTop in all of
41" them. If you have any suggestions, please let me know.
42"
Bram Moolenaar37c64c72017-09-19 22:06:03 +020043syn region masonPod start="^=[a-z]" end="^=cut" keepend contained contains=@podTop
44syn cluster perlTop remove=perlBraces
45syn region masonLine matchgroup=Delimiter start="^%" end="$" keepend contains=@perlTop
46syn region masonPerlComment start="#" end="\%(%>\)\@=\|$" contained contains=perlTodo,@Spell
47syn region masonExpr matchgroup=Delimiter start="<%" end="%>" contains=@perlTop,masonPerlComment
48syn region masonPerl matchgroup=Delimiter start="<%perl>" end="</%perl>" contains=masonPod,@perlTop
49syn region masonComp keepend matchgroup=Delimiter start="<&\s*\%([-._/[:alnum:]]\+:\)\?[-._/[:alnum:]]*" end="&>" contains=@perlTop
50syn region masonComp keepend matchgroup=Delimiter skipnl start="<&|\s*\%([-._/[:alnum:]]\+:\)\?[-._/[:alnum:]]*" end="&>" contains=@perlTop nextgroup=masonCompContent
51syn region masonCompContent matchgroup=Delimiter start="" end="</&>" contained contains=@masonTop
Bram Moolenaar071d4272004-06-13 20:20:40 +000052
Bram Moolenaar37c64c72017-09-19 22:06:03 +020053syn region masonArgs matchgroup=Delimiter start="<%args>" end="</%args>" contains=masonPod,@perlTop
Bram Moolenaar071d4272004-06-13 20:20:40 +000054
Bram Moolenaar37c64c72017-09-19 22:06:03 +020055syn region masonInit matchgroup=Delimiter start="<%init>" end="</%init>" contains=masonPod,@perlTop
56syn region masonCleanup matchgroup=Delimiter start="<%cleanup>" end="</%cleanup>" contains=masonPod,@perlTop
57syn region masonOnce matchgroup=Delimiter start="<%once>" end="</%once>" contains=masonPod,@perlTop
58syn region masonClass matchgroup=Delimiter start="<%class>" end="</%class>" contains=masonPod,@perlTop
59syn region masonShared matchgroup=Delimiter start="<%shared>" end="</%shared>" contains=masonPod,@perlTop
Bram Moolenaar071d4272004-06-13 20:20:40 +000060
Bram Moolenaar37c64c72017-09-19 22:06:03 +020061syn region masonDef matchgroup=Delimiter start="<%def\s*[-._/[:alnum:]]\+\s*>" end="</%def>" contains=@htmlTop
62syn region masonMethod matchgroup=Delimiter start="<%method\s*[-._/[:alnum:]]\+\s*>" end="</%method>" contains=@htmlTop
Bram Moolenaar071d4272004-06-13 20:20:40 +000063
Bram Moolenaar37c64c72017-09-19 22:06:03 +020064syn region masonFlags matchgroup=Delimiter start="<%flags>" end="</%flags>" contains=masonPod,@perlTop
65syn region masonAttr matchgroup=Delimiter start="<%attr>" end="</%attr>" contains=masonPod,@perlTop
Bram Moolenaar071d4272004-06-13 20:20:40 +000066
Bram Moolenaar37c64c72017-09-19 22:06:03 +020067syn region masonFilter matchgroup=Delimiter start="<%filter>" end="</%filter>" contains=masonPod,@perlTop
Bram Moolenaar071d4272004-06-13 20:20:40 +000068
69syn region masonDoc matchgroup=Delimiter start="<%doc>" end="</%doc>"
70syn region masonText matchgroup=Delimiter start="<%text>" end="</%text>"
71
72syn cluster masonTop contains=masonLine,masonExpr,masonPerl,masonComp,masonArgs,masonInit,masonCleanup,masonOnce,masonShared,masonDef,masonMethod,masonFlags,masonAttr,masonFilter,masonDoc,masonText
73
74" Set up default highlighting. Almost all of this is done in the included
75" syntax files.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020076hi def link masonDoc Comment
Bram Moolenaar37c64c72017-09-19 22:06:03 +020077hi def link masonPod Comment
Bram Moolenaar8c1b8cb2022-06-14 17:41:28 +010078hi def link podOrdinary masonPod
Bram Moolenaar37c64c72017-09-19 22:06:03 +020079hi def link masonPerlComment perlComment
Bram Moolenaar071d4272004-06-13 20:20:40 +000080
81let b:current_syntax = "mason"
82
83if main_syntax == 'mason'
84 unlet main_syntax
85endif