UNPKG

1.97 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|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 // 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 '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 // variables and parameters
39 // this to support class names (or generic parameters) which do not contain a lower case letter (also works for methods)
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));