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