1package r
2
3import (
4	. "github.com/alecthomas/chroma" // nolint
5	"github.com/alecthomas/chroma/lexers/internal"
6)
7
8// Reg lexer.
9var Reg = internal.Register(MustNewLexer(
10	&Config{
11		Name:      "reg",
12		Aliases:   []string{"registry"},
13		Filenames: []string{"*.reg"},
14		MimeTypes: []string{"text/x-windows-registry"},
15	},
16	Rules{
17		"root": {
18			{`Windows Registry Editor.*`, Text, nil},
19			{`\s+`, Text, nil},
20			{`[;#].*`, CommentSingle, nil},
21			{`(\[)(-?)(HKEY_[A-Z_]+)(.*?\])$`, ByGroups(Keyword, Operator, NameBuiltin, Keyword), nil},
22			{`("(?:\\"|\\\\|[^"])+")([ \t]*)(=)([ \t]*)`, ByGroups(NameAttribute, Text, Operator, Text), Push("value")},
23			{`(.*?)([ \t]*)(=)([ \t]*)`, ByGroups(NameAttribute, Text, Operator, Text), Push("value")},
24		},
25		"value": {
26			{`-`, Operator, Pop(1)},
27			{`(dword|hex(?:\([0-9a-fA-F]\))?)(:)([0-9a-fA-F,]+)`, ByGroups(NameVariable, Punctuation, LiteralNumber), Pop(1)},
28			{`.+`, LiteralString, Pop(1)},
29			Default(Pop(1)),
30		},
31	},
32))
33