UNPKG

2.74 kBJavaScriptView Raw
1(function (Prism) {
2
3 Prism.languages.insertBefore('javascript', 'function-variable', {
4 'method-variable': {
5 pattern: RegExp('(\\.\\s*)' + Prism.languages.javascript['function-variable'].pattern.source),
6 lookbehind: true,
7 alias: ['function-variable', 'method', 'function', 'property-access']
8 }
9 });
10
11 Prism.languages.insertBefore('javascript', 'function', {
12 'method': {
13 pattern: RegExp('(\\.\\s*)' + Prism.languages.javascript['function'].source),
14 lookbehind: true,
15 alias: ['function', 'property-access']
16 }
17 });
18
19 Prism.languages.insertBefore('javascript', 'constant', {
20 'known-class-name': [
21 {
22 // standard built-ins
23 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects
24 pattern: /\b(?:(?:(?:Uint|Int)(?:8|16|32)|Uint8Clamped|Float(?:32|64))?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|(?:Weak)?(?:Set|Map)|WebAssembly)\b/,
25 alias: 'class-name'
26 },
27 {
28 // errors
29 pattern: /\b(?:[A-Z]\w*)Error\b/,
30 alias: 'class-name'
31 }
32 ]
33 });
34
35 Prism.languages.javascript['keyword'].unshift(
36 {
37 pattern: /\b(?:as|default|export|from|import)\b/,
38 alias: 'module'
39 },
40 {
41 pattern: /\bnull\b/,
42 alias: ['null', 'nil']
43 },
44 {
45 pattern: /\bundefined\b/,
46 alias: 'nil'
47 }
48 );
49
50 Prism.languages.insertBefore('javascript', 'operator', {
51 'spread': {
52 pattern: /\.{3}/,
53 alias: 'operator'
54 },
55 'arrow': {
56 pattern: /=>/,
57 alias: 'operator'
58 }
59 });
60
61 Prism.languages.insertBefore('javascript', 'punctuation', {
62 'property-access': {
63 pattern: /(\.\s*)#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*/,
64 lookbehind: true
65 },
66 'maybe-class-name': {
67 pattern: /(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,
68 lookbehind: true
69 },
70 'dom': {
71 // this contains only a few commonly used DOM variables
72 pattern: /\b(?:document|location|navigator|performance|(?:local|session)Storage|window)\b/,
73 alias: 'variable'
74 },
75 'console': {
76 pattern: /\bconsole(?=\s*\.)/,
77 alias: 'class-name'
78 }
79 });
80
81
82 // add 'maybe-class-name' to tokens which might be a class name
83 var maybeClassNameTokens = ['function', 'function-variable', 'method', 'method-variable', 'property-access'];
84
85 for (var i = 0; i < maybeClassNameTokens.length; i++) {
86 var token = maybeClassNameTokens[i];
87 var value = Prism.languages.javascript[token];
88
89 // convert regex to object
90 if (Prism.util.type(value) === 'RegExp') {
91 value = Prism.languages.javascript[token] = {
92 pattern: value
93 };
94 }
95
96 // keep in mind that we don't support arrays
97
98 var inside = value.inside || {};
99 value.inside = inside;
100
101 inside['maybe-class-name'] = /^[A-Z][\s\S]*/;
102 }
103
104}(Prism));