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|extends|extension|external|factory|final|finally|for|get|hide|if|implements|import|in|interface|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 | // Handles named imports, such as http.Client
|
---|
8 | var packagePrefix = /(^|[^\w.])(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source;
|
---|
9 |
|
---|
10 | // based on the dart naming conventions
|
---|
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 | 'class-name': [
|
---|
26 | className,
|
---|
27 | {
|
---|
28 | // variables and parameters
|
---|
29 | // this to support class names (or generic parameters) which do not contain a lower case letter (also works for methods)
|
---|
30 | pattern: RegExp(packagePrefix + /[A-Z]\w*(?=\s+\w+\s*[;,=()])/.source),
|
---|
31 | lookbehind: true,
|
---|
32 | inside: className.inside
|
---|
33 | }
|
---|
34 | ],
|
---|
35 | 'keyword': keywords,
|
---|
36 | 'operator': /\bis!|\b(?:as|is)\b|\+\+|--|&&|\|\||<<=?|>>=?|~(?:\/=?)?|[+\-*\/%&^|=!<>]=?|\?/
|
---|
37 | });
|
---|
38 |
|
---|
39 | Prism.languages.insertBefore('dart', 'string', {
|
---|
40 | 'string-literal': {
|
---|
41 | pattern: /r?(?:("""|''')[\s\S]*?\1|(["'])(?:\\.|(?!\2)[^\\\r\n])*\2(?!\2))/,
|
---|
42 | greedy: true,
|
---|
43 | inside: {
|
---|
44 | 'interpolation': {
|
---|
45 | pattern: /((?:^|[^\\])(?:\\{2})*)\$(?:\w+|\{(?:[^{}]|\{[^{}]*\})*\})/,
|
---|
46 | lookbehind: true,
|
---|
47 | inside: {
|
---|
48 | 'punctuation': /^\$\{?|\}$/,
|
---|
49 | 'expression': {
|
---|
50 | pattern: /[\s\S]+/,
|
---|
51 | inside: Prism.languages.dart
|
---|
52 | }
|
---|
53 | }
|
---|
54 | },
|
---|
55 | 'string': /[\s\S]+/
|
---|
56 | }
|
---|
57 | },
|
---|
58 | 'string': undefined
|
---|
59 | });
|
---|
60 |
|
---|
61 | Prism.languages.insertBefore('dart', 'class-name', {
|
---|
62 | 'metadata': {
|
---|
63 | pattern: /@\w+/,
|
---|
64 | alias: 'function'
|
---|
65 | }
|
---|
66 | });
|
---|
67 |
|
---|
68 | Prism.languages.insertBefore('dart', 'class-name', {
|
---|
69 | 'generics': {
|
---|
70 | pattern: /<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/,
|
---|
71 | inside: {
|
---|
72 | 'class-name': className,
|
---|
73 | 'keyword': keywords,
|
---|
74 | 'punctuation': /[<>(),.:]/,
|
---|
75 | 'operator': /[?&|]/
|
---|
76 | }
|
---|
77 | },
|
---|
78 | });
|
---|
79 | }(Prism));
|
---|