forked from alecthomas/chroma
-
Notifications
You must be signed in to change notification settings - Fork 1
/
cl.go
74 lines (72 loc) · 3.2 KB
/
cl.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package c
import (
. "github.com/alecthomas/chroma" // nolint
"github.com/alecthomas/chroma/lexers/internal"
)
// Common Lisp lexer.
var CommonLisp = internal.Register(MustNewLexer(
&Config{
Name: "Common Lisp",
Aliases: []string{"common-lisp", "cl", "lisp"},
Filenames: []string{"*.cl", "*.lisp"},
MimeTypes: []string{"text/x-common-lisp"},
CaseInsensitive: true,
},
Rules{
"root": {
Default(Push("body")),
},
"multiline-comment": {
{`#\|`, CommentMultiline, Push()},
{`\|#`, CommentMultiline, Pop(1)},
{`[^|#]+`, CommentMultiline, nil},
{`[|#]`, CommentMultiline, nil},
},
"commented-form": {
{`\(`, CommentPreproc, Push()},
{`\)`, CommentPreproc, Pop(1)},
{`[^()]+`, CommentPreproc, nil},
},
"body": {
{`\s+`, Text, nil},
{`;.*$`, CommentSingle, nil},
{`#\|`, CommentMultiline, Push("multiline-comment")},
{`#\d*Y.*$`, CommentSpecial, nil},
{`"(\\.|\\\n|[^"\\])*"`, LiteralString, nil},
{`:(\|[^|]+\||(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~])(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~]|[#.:])*)`, LiteralStringSymbol, nil},
{`::(\|[^|]+\||(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~])(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~]|[#.:])*)`, LiteralStringSymbol, nil},
{`:#(\|[^|]+\||(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~])(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~]|[#.:])*)`, LiteralStringSymbol, nil},
{`'(\|[^|]+\||(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~])(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~]|[#.:])*)`, LiteralStringSymbol, nil},
{`'`, Operator, nil},
{"`", Operator, nil},
{"[-+]?\\d+\\.?(?=[ \"()\\'\\n,;`])", LiteralNumberInteger, nil},
{"[-+]?\\d+/\\d+(?=[ \"()\\'\\n,;`])", LiteralNumber, nil},
{"[-+]?(\\d*\\.\\d+([defls][-+]?\\d+)?|\\d+(\\.\\d*)?[defls][-+]?\\d+)(?=[ \"()\\'\\n,;`])", LiteralNumberFloat, nil},
{"#\\\\.(?=[ \"()\\'\\n,;`])", LiteralStringChar, nil},
{`#\\(\|[^|]+\||(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~])(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~]|[#.:])*)`, LiteralStringChar, nil},
{`#\(`, Operator, Push("body")},
{`#\d*\*[01]*`, LiteralOther, nil},
{`#:(\|[^|]+\||(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~])(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~]|[#.:])*)`, LiteralStringSymbol, nil},
{`#[.,]`, Operator, nil},
{`#\'`, NameFunction, nil},
{`#b[+-]?[01]+(/[01]+)?`, LiteralNumberBin, nil},
{`#o[+-]?[0-7]+(/[0-7]+)?`, LiteralNumberOct, nil},
{`#x[+-]?[0-9a-f]+(/[0-9a-f]+)?`, LiteralNumberHex, nil},
{`#\d+r[+-]?[0-9a-z]+(/[0-9a-z]+)?`, LiteralNumber, nil},
{`(#c)(\()`, ByGroups(LiteralNumber, Punctuation), Push("body")},
{`(#\d+a)(\()`, ByGroups(LiteralOther, Punctuation), Push("body")},
{`(#s)(\()`, ByGroups(LiteralOther, Punctuation), Push("body")},
{`#p?"(\\.|[^"])*"`, LiteralOther, nil},
{`#\d+=`, Operator, nil},
{`#\d+#`, Operator, nil},
{"#+nil(?=[ \"()\\'\\n,;`])\\s*\\(", CommentPreproc, Push("commented-form")},
{`#[+-]`, Operator, nil},
{`(,@|,|\.)`, Operator, nil},
{"(t|nil)(?=[ \"()\\'\\n,;`])", NameConstant, nil},
{`\*(\|[^|]+\||(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~])(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~]|[#.:])*)\*`, NameVariableGlobal, nil},
{`(\|[^|]+\||(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~])(?:\\.|[\w!$%&*+-/<=>?@\[\]^{}~]|[#.:])*)`, NameVariable, nil},
{`\(`, Punctuation, Push("body")},
{`\)`, Punctuation, Pop(1)},
},
},
))