UNPKG

2.33 kBJavaScriptView Raw
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));