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(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/,
|
11 | });
|
12 |
|
13 |
|
14 | Prism.languages.typescript.keyword.push(
|
15 | /\b(?:abstract|declare|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 | delete Prism.languages.typescript['literal-property'];
|
25 |
|
26 |
|
27 | var typeInside = Prism.languages.extend('typescript', {});
|
28 | delete typeInside['class-name'];
|
29 |
|
30 | Prism.languages.typescript['class-name'].inside = typeInside;
|
31 |
|
32 | Prism.languages.insertBefore('typescript', 'function', {
|
33 | 'decorator': {
|
34 | pattern: /@[$\w\xA0-\uFFFF]+/,
|
35 | inside: {
|
36 | 'at': {
|
37 | pattern: /^@/,
|
38 | alias: 'operator'
|
39 | },
|
40 | 'function': /^[\s\S]+/
|
41 | }
|
42 | },
|
43 | 'generic-function': {
|
44 |
|
45 | pattern: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,
|
46 | greedy: true,
|
47 | inside: {
|
48 | 'function': /^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,
|
49 | 'generic': {
|
50 | pattern: /<[\s\S]+/,
|
51 | alias: 'class-name',
|
52 | inside: typeInside
|
53 | }
|
54 | }
|
55 | }
|
56 | });
|
57 |
|
58 | Prism.languages.ts = Prism.languages.typescript;
|
59 |
|
60 | }(Prism));
|