1 | (function (Prism) {
|
2 | var keywords = [
|
3 | /\b(?:async|sync|yield)\*/,
|
4 | /\b(?:abstract|assert|async|await|break|case|catch|class|const|continue|covariant|default|deferred|do|dynamic|else|enum|export|extension|external|extends|factory|final|finally|for|get|hide|if|implements|interface|import|in|library|mixin|new|null|on|operator|part|rethrow|return|set|show|static|super|switch|sync|this|throw|try|typedef|var|void|while|with|yield)\b/
|
5 | ];
|
6 |
|
7 |
|
8 | var packagePrefix = /(^|[^\w.])(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source;
|
9 |
|
10 |
|
11 | var className = {
|
12 | pattern: RegExp(packagePrefix + /[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),
|
13 | lookbehind: true,
|
14 | inside: {
|
15 | 'namespace': {
|
16 | pattern: /^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,
|
17 | inside: {
|
18 | 'punctuation': /\./
|
19 | }
|
20 | },
|
21 | }
|
22 | };
|
23 |
|
24 | Prism.languages.dart = Prism.languages.extend('clike', {
|
25 | 'string': [
|
26 | {
|
27 | pattern: /r?("""|''')[\s\S]*?\1/,
|
28 | greedy: true
|
29 | },
|
30 | {
|
31 | pattern: /r?(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,
|
32 | greedy: true
|
33 | }
|
34 | ],
|
35 | 'class-name': [
|
36 | className,
|
37 | {
|
38 |
|
39 |
|
40 | pattern: RegExp(packagePrefix + /[A-Z]\w*(?=\s+\w+\s*[;,=()])/.source),
|
41 | lookbehind: true,
|
42 | inside: className.inside
|
43 | }
|
44 | ],
|
45 | 'keyword': keywords,
|
46 | 'operator': /\bis!|\b(?:as|is)\b|\+\+|--|&&|\|\||<<=?|>>=?|~(?:\/=?)?|[+\-*\/%&^|=!<>]=?|\?/
|
47 | });
|
48 |
|
49 | Prism.languages.insertBefore('dart', 'function', {
|
50 | 'metadata': {
|
51 | pattern: /@\w+/,
|
52 | alias: 'symbol'
|
53 | }
|
54 | });
|
55 |
|
56 | Prism.languages.insertBefore('dart', 'class-name', {
|
57 | 'generics': {
|
58 | pattern: /<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/,
|
59 | inside: {
|
60 | 'class-name': className,
|
61 | 'keyword': keywords,
|
62 | 'punctuation': /[<>(),.:]/,
|
63 | 'operator': /[?&|]/
|
64 | }
|
65 | },
|
66 | });
|
67 | }(Prism));
|