1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | function 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 |
|
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 |
|
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 |
|
199 | 'Never',
|
200 | 'Null',
|
201 | 'dynamic',
|
202 | 'print',
|
203 |
|
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: '=>'
|
257 | }
|
258 | ]
|
259 | };
|
260 | }
|
261 |
|
262 | export { dart as default };
|