|
1 | 1 | (function (Prism) {
|
2 | 2 |
|
3 |
| - var codeLines = { |
4 |
| - 'code': { |
5 |
| - pattern: /(^(?:\s*(?:\*\s*)*)).*[^*\s].+$/m, |
6 |
| - lookbehind: true, |
7 |
| - inside: Prism.languages.java, |
8 |
| - alias: 'language-java' |
9 |
| - } |
10 |
| - }; |
| 3 | + var codeLinePattern = /(^(?:\s*(?:\*\s*)*)).*[^*\s].*$/m; |
| 4 | + |
| 5 | + var memberReference = /#\s*\w+(?:\s*\([^()]*\))?/.source; |
| 6 | + var reference = /(?:[a-zA-Z]\w+\s*\.\s*)*[A-Z]\w*(?:\s*<mem>)?|<mem>/.source.replace(/<mem>/g, function () { return memberReference }); |
11 | 7 |
|
12 | 8 | Prism.languages.javadoc = Prism.languages.extend('javadoclike', {});
|
13 | 9 | Prism.languages.insertBefore('javadoc', 'keyword', {
|
14 |
| - 'class-name': [ |
15 |
| - { |
16 |
| - pattern: /(@(?:exception|throws|see|link|linkplain|value)\s+(?:[a-z\d]+\.)*)[A-Z](?:\w*[a-z]\w*)?(?:\.[A-Z](?:\w*[a-z]\w*)?)*/, |
17 |
| - lookbehind: true, |
18 |
| - inside: { |
19 |
| - 'punctuation': /\./ |
20 |
| - } |
21 |
| - }, |
22 |
| - { |
23 |
| - // @param <T> the first generic type parameter |
24 |
| - pattern: /(@param\s+)<[A-Z]\w*>/, |
25 |
| - lookbehind: true, |
26 |
| - inside: { |
27 |
| - 'punctuation': /[.<>]/ |
28 |
| - } |
| 10 | + 'reference': { |
| 11 | + pattern: RegExp(/(@(?:exception|throws|see|link|linkplain|value)\s+(?:\*\s*)?)/.source + '(?:' + reference + ')'), |
| 12 | + lookbehind: true, |
| 13 | + inside: { |
| 14 | + 'function': { |
| 15 | + pattern: /(#\s*)\w+(?=\s*\()/, |
| 16 | + lookbehind: true |
| 17 | + }, |
| 18 | + 'field': { |
| 19 | + pattern: /(#\s*)\w+/, |
| 20 | + lookbehind: true |
| 21 | + }, |
| 22 | + 'namespace': { |
| 23 | + pattern: /\b(?:[a-z]\w*\s*\.\s*)+/, |
| 24 | + inside: { |
| 25 | + 'punctuation': /\./ |
| 26 | + } |
| 27 | + }, |
| 28 | + 'class-name': /\b[A-Z]\w*/, |
| 29 | + 'keyword': Prism.languages.java.keyword, |
| 30 | + 'punctuation': /[#()[\],.]/ |
29 | 31 | }
|
30 |
| - ], |
31 |
| - 'namespace': { |
32 |
| - pattern: /(@(?:exception|throws|see|link|linkplain)\s+)(?:[a-z\d]+\.)+/, |
| 32 | + }, |
| 33 | + 'class-name': { |
| 34 | + // @param <T> the first generic type parameter |
| 35 | + pattern: /(@param\s+)<[A-Z]\w*>/, |
33 | 36 | lookbehind: true,
|
34 | 37 | inside: {
|
35 |
| - 'punctuation': /\./ |
| 38 | + 'punctuation': /[.<>]/ |
36 | 39 | }
|
37 | 40 | },
|
38 | 41 | 'code-section': [
|
39 | 42 | {
|
40 |
| - pattern: /(\{@code\s+)(?:[^{}]|\{[^{}]*\})+?(?=\s*\})/, |
| 43 | + pattern: /(\{@code\s+)(?:[^{}]|\{(?:[^{}]|\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\})*\})+?(?=\s*\})/, |
41 | 44 | lookbehind: true,
|
42 |
| - inside: codeLines |
| 45 | + inside: { |
| 46 | + 'code': { |
| 47 | + // there can't be any HTML inside of {@code} tags |
| 48 | + pattern: codeLinePattern, |
| 49 | + lookbehind: true, |
| 50 | + inside: Prism.languages.java, |
| 51 | + alias: 'language-java' |
| 52 | + } |
| 53 | + } |
43 | 54 | },
|
44 | 55 | {
|
45 |
| - pattern: /(<(code|tt)>\s*)[\s\S]+?(?=\s*<\/\2>)/, |
| 56 | + pattern: /(<(code|pre|tt)>(?!<code>)\s*)[\s\S]+?(?=\s*<\/\2>)/, |
46 | 57 | lookbehind: true,
|
47 |
| - inside: codeLines |
| 58 | + inside: { |
| 59 | + 'line': { |
| 60 | + pattern: codeLinePattern, |
| 61 | + lookbehind: true, |
| 62 | + inside: { |
| 63 | + // highlight HTML tags and entities |
| 64 | + 'tag': Prism.languages.markup.tag, |
| 65 | + 'entity': Prism.languages.markup.entity, |
| 66 | + 'code': { |
| 67 | + // everything else is Java code |
| 68 | + pattern: /.+/, |
| 69 | + inside: Prism.languages.java, |
| 70 | + alias: 'language-java' |
| 71 | + } |
| 72 | + } |
| 73 | + } |
| 74 | + } |
48 | 75 | }
|
49 | 76 | ],
|
50 | 77 | 'tag': Prism.languages.markup.tag,
|
| 78 | + 'entity': Prism.languages.markup.entity, |
51 | 79 | });
|
52 | 80 |
|
53 | 81 | Prism.languages.javadoclike.addSupport('java', Prism.languages.javadoc);
|
|
0 commit comments