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