diff options
Diffstat (limited to 'public/prism/prism-typescript.js')
| -rw-r--r-- | public/prism/prism-typescript.js | 61 |
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); |
