66
|
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 }
|