myghty.go

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