io.go

 1package i
 2
 3import (
 4	. "github.com/alecthomas/chroma" // nolint
 5	"github.com/alecthomas/chroma/lexers/internal"
 6)
 7
 8// Io lexer.
 9var Io = internal.Register(MustNewLexer(
10	&Config{
11		Name:      "Io",
12		Aliases:   []string{"io"},
13		Filenames: []string{"*.io"},
14		MimeTypes: []string{"text/x-iosrc"},
15	},
16	Rules{
17		"root": {
18			{`\n`, Text, nil},
19			{`\s+`, Text, nil},
20			{`//(.*?)\n`, CommentSingle, nil},
21			{`#(.*?)\n`, CommentSingle, nil},
22			{`/(\\\n)?[*](.|\n)*?[*](\\\n)?/`, CommentMultiline, nil},
23			{`/\+`, CommentMultiline, Push("nestedcomment")},
24			{`"(\\\\|\\"|[^"])*"`, LiteralString, nil},
25			{`::=|:=|=|\(|\)|;|,|\*|-|\+|>|<|@|!|/|\||\^|\.|%|&|\[|\]|\{|\}`, Operator, nil},
26			{`(clone|do|doFile|doString|method|for|if|else|elseif|then)\b`, Keyword, nil},
27			{`(nil|false|true)\b`, NameConstant, nil},
28			{`(Object|list|List|Map|args|Sequence|Coroutine|File)\b`, NameBuiltin, nil},
29			{`[a-zA-Z_]\w*`, Name, nil},
30			{`(\d+\.?\d*|\d*\.\d+)([eE][+-]?[0-9]+)?`, LiteralNumberFloat, nil},
31			{`\d+`, LiteralNumberInteger, nil},
32		},
33		"nestedcomment": {
34			{`[^+/]+`, CommentMultiline, nil},
35			{`/\+`, CommentMultiline, Push()},
36			{`\+/`, CommentMultiline, Pop(1)},
37			{`[+/]`, CommentMultiline, nil},
38		},
39	},
40))