hexdump.go

 1package h
 2
 3import (
 4	. "github.com/alecthomas/chroma" // nolint
 5	"github.com/alecthomas/chroma/lexers/internal"
 6)
 7
 8// Hexdump lexer.
 9var Hexdump = internal.Register(MustNewLexer(
10	&Config{
11		Name:      "Hexdump",
12		Aliases:   []string{"hexdump"},
13		Filenames: []string{},
14		MimeTypes: []string{},
15	},
16	Rules{
17		"root": {
18			{`\n`, Text, nil},
19			Include("offset"),
20			{`([0-9A-Ha-h]{2})(\-)([0-9A-Ha-h]{2})`, ByGroups(LiteralNumberHex, Punctuation, LiteralNumberHex), nil},
21			{`[0-9A-Ha-h]{2}`, LiteralNumberHex, nil},
22			{`(\s{2,3})(\>)(.{16})(\<)$`, ByGroups(Text, Punctuation, LiteralString, Punctuation), Push("bracket-strings")},
23			{`(\s{2,3})(\|)(.{16})(\|)$`, ByGroups(Text, Punctuation, LiteralString, Punctuation), Push("piped-strings")},
24			{`(\s{2,3})(\>)(.{1,15})(\<)$`, ByGroups(Text, Punctuation, LiteralString, Punctuation), nil},
25			{`(\s{2,3})(\|)(.{1,15})(\|)$`, ByGroups(Text, Punctuation, LiteralString, Punctuation), nil},
26			{`(\s{2,3})(.{1,15})$`, ByGroups(Text, LiteralString), nil},
27			{`(\s{2,3})(.{16}|.{20})$`, ByGroups(Text, LiteralString), Push("nonpiped-strings")},
28			{`\s`, Text, nil},
29			{`^\*`, Punctuation, nil},
30		},
31		"offset": {
32			{`^([0-9A-Ha-h]+)(:)`, ByGroups(NameLabel, Punctuation), Push("offset-mode")},
33			{`^[0-9A-Ha-h]+`, NameLabel, nil},
34		},
35		"offset-mode": {
36			{`\s`, Text, Pop(1)},
37			{`[0-9A-Ha-h]+`, NameLabel, nil},
38			{`:`, Punctuation, nil},
39		},
40		"piped-strings": {
41			{`\n`, Text, nil},
42			Include("offset"),
43			{`[0-9A-Ha-h]{2}`, LiteralNumberHex, nil},
44			{`(\s{2,3})(\|)(.{1,16})(\|)$`, ByGroups(Text, Punctuation, LiteralString, Punctuation), nil},
45			{`\s`, Text, nil},
46			{`^\*`, Punctuation, nil},
47		},
48		"bracket-strings": {
49			{`\n`, Text, nil},
50			Include("offset"),
51			{`[0-9A-Ha-h]{2}`, LiteralNumberHex, nil},
52			{`(\s{2,3})(\>)(.{1,16})(\<)$`, ByGroups(Text, Punctuation, LiteralString, Punctuation), nil},
53			{`\s`, Text, nil},
54			{`^\*`, Punctuation, nil},
55		},
56		"nonpiped-strings": {
57			{`\n`, Text, nil},
58			Include("offset"),
59			{`([0-9A-Ha-h]{2})(\-)([0-9A-Ha-h]{2})`, ByGroups(LiteralNumberHex, Punctuation, LiteralNumberHex), nil},
60			{`[0-9A-Ha-h]{2}`, LiteralNumberHex, nil},
61			{`(\s{19,})(.{1,20}?)$`, ByGroups(Text, LiteralString), nil},
62			{`(\s{2,3})(.{1,20})$`, ByGroups(Text, LiteralString), nil},
63			{`\s`, Text, nil},
64			{`^\*`, Punctuation, nil},
65		},
66	},
67))