UNPKG

2.08 kBJavaScriptView Raw
1(function (Prism) {
2
3 var javascript = Prism.languages.javascript;
4
5 var type = /\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})+\}/.source;
6 var parameterPrefix = '(@(?:arg|argument|param|property)\\s+(?:' + type + '\\s+)?)';
7
8 Prism.languages.jsdoc = Prism.languages.extend('javadoclike', {
9 'parameter': {
10 // @param {string} foo - foo bar
11 pattern: RegExp(parameterPrefix + /(?:(?!\s)[$\w\xA0-\uFFFF.])+(?=\s|$)/.source),
12 lookbehind: true,
13 inside: {
14 'punctuation': /\./
15 }
16 }
17 });
18
19 Prism.languages.insertBefore('jsdoc', 'keyword', {
20 'optional-parameter': {
21 // @param {string} [baz.foo="bar"] foo bar
22 pattern: RegExp(parameterPrefix + /\[(?:(?!\s)[$\w\xA0-\uFFFF.])+(?:=[^[\]]+)?\](?=\s|$)/.source),
23 lookbehind: true,
24 inside: {
25 'parameter': {
26 pattern: /(^\[)[$\w\xA0-\uFFFF\.]+/,
27 lookbehind: true,
28 inside: {
29 'punctuation': /\./
30 }
31 },
32 'code': {
33 pattern: /(=)[\s\S]*(?=\]$)/,
34 lookbehind: true,
35 inside: javascript,
36 alias: 'language-javascript'
37 },
38 'punctuation': /[=[\]]/
39 }
40 },
41 'class-name': [
42 {
43 pattern: RegExp(/(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\s+(?:<TYPE>\s+)?)[A-Z]\w*(?:\.[A-Z]\w*)*/.source.replace(/<TYPE>/g, function () { return type; })),
44 lookbehind: true,
45 inside: {
46 'punctuation': /\./
47 }
48 },
49 {
50 pattern: RegExp('(@[a-z]+\\s+)' + type),
51 lookbehind: true,
52 inside: {
53 'string': javascript.string,
54 'number': javascript.number,
55 'boolean': javascript.boolean,
56 'keyword': Prism.languages.typescript.keyword,
57 'operator': /=>|\.\.\.|[&|?:*]/,
58 'punctuation': /[.,;=<>{}()[\]]/
59 }
60 }
61 ],
62 'example': {
63 pattern: /(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,
64 lookbehind: true,
65 inside: {
66 'code': {
67 pattern: /^([\t ]*(?:\*\s*)?)\S.*$/m,
68 lookbehind: true,
69 inside: javascript,
70 alias: 'language-javascript'
71 }
72 }
73 }
74 });
75
76 Prism.languages.javadoclike.addSupport('javascript', Prism.languages.jsdoc);
77
78}(Prism));