aboutsummaryrefslogtreecommitdiffstats
path: root/public/prism/prism-typescript.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/prism/prism-typescript.js')
-rw-r--r--public/prism/prism-typescript.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/public/prism/prism-typescript.js b/public/prism/prism-typescript.js
new file mode 100644
index 0000000..09c3fc4
--- /dev/null
+++ b/public/prism/prism-typescript.js
@@ -0,0 +1,61 @@
+(function (Prism) {
+ Prism.languages.typescript = Prism.languages.extend('javascript', {
+ 'class-name': {
+ pattern:
+ /(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,
+ lookbehind: true,
+ greedy: true,
+ inside: null, // see below
+ },
+ builtin:
+ /\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/,
+ });
+
+ // The keywords TypeScript adds to JavaScript
+ Prism.languages.typescript.keyword.push(
+ /\b(?:abstract|declare|is|keyof|readonly|require)\b/,
+ // keywords that have to be followed by an identifier
+ /\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,
+ // This is for `import type *, {}`
+ /\btype\b(?=\s*(?:[\{*]|$))/
+ );
+
+ // doesn't work with TS because TS is too complex
+ delete Prism.languages.typescript['parameter'];
+ delete Prism.languages.typescript['literal-property'];
+
+ // a version of typescript specifically for highlighting types
+ var typeInside = Prism.languages.extend('typescript', {});
+ delete typeInside['class-name'];
+
+ Prism.languages.typescript['class-name'].inside = typeInside;
+
+ Prism.languages.insertBefore('typescript', 'function', {
+ decorator: {
+ pattern: /@[$\w\xA0-\uFFFF]+/,
+ inside: {
+ at: {
+ pattern: /^@/,
+ alias: 'operator',
+ },
+ function: /^[\s\S]+/,
+ },
+ },
+ 'generic-function': {
+ // e.g. foo<T extends "bar" | "baz">( ...
+ pattern:
+ /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,
+ greedy: true,
+ inside: {
+ function: /^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,
+ generic: {
+ pattern: /<[\s\S]+/, // everything after the first <
+ alias: 'class-name',
+ inside: typeInside,
+ },
+ },
+ },
+ });
+
+ Prism.languages.ts = Prism.languages.typescript;
+})(Prism);