UNPKG

4.49 kBJavaScriptView Raw
1/*
2Language: Dart
3Requires: markdown.js
4Author: Maxim Dikun <dikmax@gmail.com>
5Description: Dart a modern, object-oriented language developed by Google. For more information see https://www.dartlang.org/
6Website: https://dart.dev
7Category: scripting
8*/
9
10/** @type LanguageFn */
11function dart(hljs) {
12 const SUBST = {
13 className: 'subst',
14 variants: [{
15 begin: '\\$[A-Za-z0-9_]+'
16 }]
17 };
18
19 const BRACED_SUBST = {
20 className: 'subst',
21 variants: [{
22 begin: /\$\{/,
23 end: /\}/
24 }],
25 keywords: 'true false null this is new super'
26 };
27
28 const STRING = {
29 className: 'string',
30 variants: [
31 {
32 begin: 'r\'\'\'',
33 end: '\'\'\''
34 },
35 {
36 begin: 'r"""',
37 end: '"""'
38 },
39 {
40 begin: 'r\'',
41 end: '\'',
42 illegal: '\\n'
43 },
44 {
45 begin: 'r"',
46 end: '"',
47 illegal: '\\n'
48 },
49 {
50 begin: '\'\'\'',
51 end: '\'\'\'',
52 contains: [
53 hljs.BACKSLASH_ESCAPE,
54 SUBST,
55 BRACED_SUBST
56 ]
57 },
58 {
59 begin: '"""',
60 end: '"""',
61 contains: [
62 hljs.BACKSLASH_ESCAPE,
63 SUBST,
64 BRACED_SUBST
65 ]
66 },
67 {
68 begin: '\'',
69 end: '\'',
70 illegal: '\\n',
71 contains: [
72 hljs.BACKSLASH_ESCAPE,
73 SUBST,
74 BRACED_SUBST
75 ]
76 },
77 {
78 begin: '"',
79 end: '"',
80 illegal: '\\n',
81 contains: [
82 hljs.BACKSLASH_ESCAPE,
83 SUBST,
84 BRACED_SUBST
85 ]
86 }
87 ]
88 };
89 BRACED_SUBST.contains = [
90 hljs.C_NUMBER_MODE,
91 STRING
92 ];
93
94 const BUILT_IN_TYPES = [
95 // dart:core
96 'Comparable',
97 'DateTime',
98 'Duration',
99 'Function',
100 'Iterable',
101 'Iterator',
102 'List',
103 'Map',
104 'Match',
105 'Object',
106 'Pattern',
107 'RegExp',
108 'Set',
109 'Stopwatch',
110 'String',
111 'StringBuffer',
112 'StringSink',
113 'Symbol',
114 'Type',
115 'Uri',
116 'bool',
117 'double',
118 'int',
119 'num',
120 // dart:html
121 'Element',
122 'ElementList'
123 ];
124 const NULLABLE_BUILT_IN_TYPES = BUILT_IN_TYPES.map((e) => `${e}?`);
125
126 const BASIC_KEYWORDS = [
127 "abstract",
128 "as",
129 "assert",
130 "async",
131 "await",
132 "break",
133 "case",
134 "catch",
135 "class",
136 "const",
137 "continue",
138 "covariant",
139 "default",
140 "deferred",
141 "do",
142 "dynamic",
143 "else",
144 "enum",
145 "export",
146 "extends",
147 "extension",
148 "external",
149 "factory",
150 "false",
151 "final",
152 "finally",
153 "for",
154 "Function",
155 "get",
156 "hide",
157 "if",
158 "implements",
159 "import",
160 "in",
161 "inferface",
162 "is",
163 "late",
164 "library",
165 "mixin",
166 "new",
167 "null",
168 "on",
169 "operator",
170 "part",
171 "required",
172 "rethrow",
173 "return",
174 "set",
175 "show",
176 "static",
177 "super",
178 "switch",
179 "sync",
180 "this",
181 "throw",
182 "true",
183 "try",
184 "typedef",
185 "var",
186 "void",
187 "while",
188 "with",
189 "yield"
190 ];
191
192 const KEYWORDS = {
193 keyword: BASIC_KEYWORDS,
194 built_in:
195 BUILT_IN_TYPES
196 .concat(NULLABLE_BUILT_IN_TYPES)
197 .concat([
198 // dart:core
199 'Never',
200 'Null',
201 'dynamic',
202 'print',
203 // dart:html
204 'document',
205 'querySelector',
206 'querySelectorAll',
207 'window'
208 ]),
209 $pattern: /[A-Za-z][A-Za-z0-9_]*\??/
210 };
211
212 return {
213 name: 'Dart',
214 keywords: KEYWORDS,
215 contains: [
216 STRING,
217 hljs.COMMENT(
218 /\/\*\*(?!\/)/,
219 /\*\//,
220 {
221 subLanguage: 'markdown',
222 relevance: 0
223 }
224 ),
225 hljs.COMMENT(
226 /\/{3,} ?/,
227 /$/, {
228 contains: [{
229 subLanguage: 'markdown',
230 begin: '.',
231 end: '$',
232 relevance: 0
233 }]
234 }
235 ),
236 hljs.C_LINE_COMMENT_MODE,
237 hljs.C_BLOCK_COMMENT_MODE,
238 {
239 className: 'class',
240 beginKeywords: 'class interface',
241 end: /\{/,
242 excludeEnd: true,
243 contains: [
244 {
245 beginKeywords: 'extends implements'
246 },
247 hljs.UNDERSCORE_TITLE_MODE
248 ]
249 },
250 hljs.C_NUMBER_MODE,
251 {
252 className: 'meta',
253 begin: '@[A-Za-z]+'
254 },
255 {
256 begin: '=>' // No markup, just a relevance booster
257 }
258 ]
259 };
260}
261
262export { dart as default };