1 package d
2
3 import (
4 . "github.com/alecthomas/chroma"
5 "github.com/alecthomas/chroma/lexers/internal"
6 )
7
8
9 var Dart = internal.Register(MustNewLazyLexer(
10 &Config{
11 Name: "Dart",
12 Aliases: []string{"dart"},
13 Filenames: []string{"*.dart"},
14 MimeTypes: []string{"text/x-dart"},
15 DotAll: true,
16 },
17 dartRules,
18 ))
19
20 func dartRules() Rules {
21 return Rules{
22 "root": {
23 Include("string_literal"),
24 {`#!(.*?)$`, CommentPreproc, nil},
25 {`\b(import|export)\b`, Keyword, Push("import_decl")},
26 {`\b(library|source|part of|part)\b`, Keyword, nil},
27 {`[^\S\n]+`, Text, nil},
28 {`//.*?\n`, CommentSingle, nil},
29 {`/\*.*?\*/`, CommentMultiline, nil},
30 {`\b(class)\b(\s+)`, ByGroups(KeywordDeclaration, Text), Push("class")},
31 {`\b(assert|break|case|catch|continue|default|do|else|finally|for|if|in|is|new|return|super|switch|this|throw|try|while)\b`, Keyword, nil},
32 {`\b(abstract|async|await|const|extends|factory|final|get|implements|native|operator|set|static|sync|typedef|var|with|yield)\b`, KeywordDeclaration, nil},
33 {`\b(bool|double|dynamic|int|num|Object|String|void)\b`, KeywordType, nil},
34 {`\b(false|null|true)\b`, KeywordConstant, nil},
35 {`[~!%^&*+=|?:<>/-]|as\b`, Operator, nil},
36 {`[a-zA-Z_$]\w*:`, NameLabel, nil},
37 {`[a-zA-Z_$]\w*`, Name, nil},
38 {`[(){}\[\],.;]`, Punctuation, nil},
39 {`0[xX][0-9a-fA-F]+`, LiteralNumberHex, nil},
40 {`\d+(\.\d*)?([eE][+-]?\d+)?`, LiteralNumber, nil},
41 {`\.\d+([eE][+-]?\d+)?`, LiteralNumber, nil},
42 {`\n`, Text, nil},
43 },
44 "class": {
45 {`[a-zA-Z_$]\w*`, NameClass, Pop(1)},
46 },
47 "import_decl": {
48 Include("string_literal"),
49 {`\s+`, Text, nil},
50 {`\b(as|show|hide)\b`, Keyword, nil},
51 {`[a-zA-Z_$]\w*`, Name, nil},
52 {`\,`, Punctuation, nil},
53 {`\;`, Punctuation, Pop(1)},
54 },
55 "string_literal": {
56 {`r"""([\w\W]*?)"""`, LiteralStringDouble, nil},
57 {`r'''([\w\W]*?)'''`, LiteralStringSingle, nil},
58 {`r"(.*?)"`, LiteralStringDouble, nil},
59 {`r'(.*?)'`, LiteralStringSingle, nil},
60 {`"""`, LiteralStringDouble, Push("string_double_multiline")},
61 {`'''`, LiteralStringSingle, Push("string_single_multiline")},
62 {`"`, LiteralStringDouble, Push("string_double")},
63 {`'`, LiteralStringSingle, Push("string_single")},
64 },
65 "string_common": {
66 {`\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\{[0-9A-Fa-f]*\}|[a-z'\"$\\])`, LiteralStringEscape, nil},
67 {`(\$)([a-zA-Z_]\w*)`, ByGroups(LiteralStringInterpol, Name), nil},
68 {`(\$\{)(.*?)(\})`, ByGroups(LiteralStringInterpol, UsingSelf("root"), LiteralStringInterpol), nil},
69 },
70 "string_double": {
71 {`"`, LiteralStringDouble, Pop(1)},
72 {`[^"$\\\n]+`, LiteralStringDouble, nil},
73 Include("string_common"),
74 {`\$+`, LiteralStringDouble, nil},
75 },
76 "string_double_multiline": {
77 {`"""`, LiteralStringDouble, Pop(1)},
78 {`[^"$\\]+`, LiteralStringDouble, nil},
79 Include("string_common"),
80 {`(\$|\")+`, LiteralStringDouble, nil},
81 },
82 "string_single": {
83 {`'`, LiteralStringSingle, Pop(1)},
84 {`[^'$\\\n]+`, LiteralStringSingle, nil},
85 Include("string_common"),
86 {`\$+`, LiteralStringSingle, nil},
87 },
88 "string_single_multiline": {
89 {`'''`, LiteralStringSingle, Pop(1)},
90 {`[^\'$\\]+`, LiteralStringSingle, nil},
91 Include("string_common"),
92 {`(\$|\')+`, LiteralStringSingle, nil},
93 },
94 }
95 }
96
View as plain text