1package m
2
3import (
4 . "github.com/alecthomas/chroma" // nolint
5 . "github.com/alecthomas/chroma/lexers/h" // nolint
6 "github.com/alecthomas/chroma/lexers/internal"
7 . "github.com/alecthomas/chroma/lexers/p" // nolint
8)
9
10// Mason lexer.
11var Mason = internal.Register(MustNewLexer(
12 &Config{
13 Name: "Mason",
14 Aliases: []string{"mason"},
15 Filenames: []string{"*.m", "*.mhtml", "*.mc", "*.mi", "autohandler", "dhandler"},
16 MimeTypes: []string{"application/x-mason"},
17 Priority: 0.1,
18 },
19 Rules{
20 "root": {
21 {`\s+`, Text, nil},
22 {`(<%doc>)(.*?)(</%doc>)(?s)`, ByGroups(NameTag, CommentMultiline, NameTag), nil},
23 {`(<%(?:def|method))(\s*)(.*?)(>)(.*?)(</%\2\s*>)(?s)`, ByGroups(NameTag, Text, NameFunction, NameTag, UsingSelf("root"), NameTag), nil},
24 {`(<%\w+)(.*?)(>)(.*?)(</%\2\s*>)(?s)`, ByGroups(NameTag, NameFunction, NameTag, Using(Perl), NameTag), nil},
25 {`(<&[^|])(.*?)(,.*?)?(&>)(?s)`, ByGroups(NameTag, NameFunction, Using(Perl), NameTag), nil},
26 {`(<&\|)(.*?)(,.*?)?(&>)(?s)`, ByGroups(NameTag, NameFunction, Using(Perl), NameTag), nil},
27 {`</&>`, NameTag, nil},
28 {`(<%!?)(.*?)(%>)(?s)`, ByGroups(NameTag, Using(Perl), NameTag), nil},
29 {`(?<=^)#[^\n]*(\n|\Z)`, Comment, nil},
30 {`(?<=^)(%)([^\n]*)(\n|\Z)`, ByGroups(NameTag, Using(Perl), Other), nil},
31 {`(?sx)
32 (.+?) # anything, followed by:
33 (?:
34 (?<=\n)(?=[%#]) | # an eval or comment line
35 (?=</?[%&]) | # a substitution or block or
36 # call start or end
37 # - don't consume
38 (\\\n) | # an escaped newline
39 \Z # end of string
40 )`, ByGroups(Using(HTML), Operator), nil},
41 },
42 },
43))