UNPKG

1.74 kBJavaScriptView Raw
1(function (Prism) {
2
3 var javascript = Prism.languages.javascript;
4
5 var type = /{(?:[^{}]|{(?:[^{}]|{[^{}]*})*})+}/.source;
6 var parameterPrefix = '(@(?:param|arg|argument|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 + /[$\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 + /\[[$\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('(@[a-z]+\\s+)' + type),
44 lookbehind: true,
45 inside: {
46 'punctuation': /[.,:?=<>|{}()[\]]/
47 }
48 },
49 {
50 pattern: /(@(?:augments|extends|class|interface|memberof!?|this)\s+)[A-Z]\w*(?:\.[A-Z]\w*)*/,
51 lookbehind: true,
52 inside: {
53 'punctuation': /\./
54 }
55 }
56 ],
57 'example': {
58 pattern: /(@example\s+)[^@]+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,
59 lookbehind: true,
60 inside: {
61 'code': {
62 pattern: /^(\s*(?:\*\s*)?).+$/m,
63 lookbehind: true,
64 inside: javascript,
65 alias: 'language-javascript'
66 }
67 }
68 }
69 });
70
71 Prism.languages.javadoclike.addSupport('javascript', Prism.languages.jsdoc);
72
73}(Prism));