1 | (function (Prism) {
|
2 |
|
3 | Prism.languages.typescript = Prism.languages.extend('javascript', {
|
4 | 'class-name': {
|
5 | pattern: /(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,
|
6 | lookbehind: true,
|
7 | greedy: true,
|
8 | inside: null
|
9 | },
|
10 | 'builtin': /\b(?:string|Function|any|number|boolean|Array|symbol|console|Promise|unknown|never)\b/,
|
11 | });
|
12 |
|
13 |
|
14 | Prism.languages.typescript.keyword.push(
|
15 | /\b(?:abstract|as|declare|implements|is|keyof|readonly|require)\b/,
|
16 |
|
17 | /\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,
|
18 |
|
19 | /\btype\b(?=\s*(?:[\{*]|$))/
|
20 | );
|
21 |
|
22 |
|
23 | delete Prism.languages.typescript['parameter'];
|
24 |
|
25 |
|
26 | var typeInside = Prism.languages.extend('typescript', {});
|
27 | delete typeInside['class-name'];
|
28 |
|
29 | Prism.languages.typescript['class-name'].inside = typeInside;
|
30 |
|
31 | Prism.languages.insertBefore('typescript', 'function', {
|
32 | 'decorator': {
|
33 | pattern: /@[$\w\xA0-\uFFFF]+/,
|
34 | inside: {
|
35 | 'at': {
|
36 | pattern: /^@/,
|
37 | alias: 'operator'
|
38 | },
|
39 | 'function': /^[\s\S]+/
|
40 | }
|
41 | },
|
42 | 'generic-function': {
|
43 |
|
44 | pattern: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,
|
45 | greedy: true,
|
46 | inside: {
|
47 | 'function': /^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,
|
48 | 'generic': {
|
49 | pattern: /<[\s\S]+/,
|
50 | alias: 'class-name',
|
51 | inside: typeInside
|
52 | }
|
53 | }
|
54 | }
|
55 | });
|
56 |
|
57 | Prism.languages.ts = Prism.languages.typescript;
|
58 |
|
59 | }(Prism));
|