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