Skip to content

Commit 032910b

Browse files
JavaDoc: Improvements (#2324)
This makes some improvements to JavaDoc: - Extended support for [references](https://corochann.com/javadoc-coding-rule-of-link-linkplain-see-372.html). - Better code support - Added support for `<pre>` elements - Added support for HTML inside code (but not `{@code}` code) - Fixed that the line splitting pattern required at least 2 characters per line - Added support for HTML entities. - Changed the line ends to `\r\n` for all test files.
1 parent 4172ab6 commit 032910b

9 files changed

+1207
-413
lines changed

components/prism-javadoc.js

+59-31
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,81 @@
11
(function (Prism) {
22

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 });
117

128
Prism.languages.javadoc = Prism.languages.extend('javadoclike', {});
139
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': /[#()[\],.]/
2931
}
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*>/,
3336
lookbehind: true,
3437
inside: {
35-
'punctuation': /\./
38+
'punctuation': /[.<>]/
3639
}
3740
},
3841
'code-section': [
3942
{
40-
pattern: /(\{@code\s+)(?:[^{}]|\{[^{}]*\})+?(?=\s*\})/,
43+
pattern: /(\{@code\s+)(?:[^{}]|\{(?:[^{}]|\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\})*\})+?(?=\s*\})/,
4144
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+
}
4354
},
4455
{
45-
pattern: /(<(code|tt)>\s*)[\s\S]+?(?=\s*<\/\2>)/,
56+
pattern: /(<(code|pre|tt)>(?!<code>)\s*)[\s\S]+?(?=\s*<\/\2>)/,
4657
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+
}
4875
}
4976
],
5077
'tag': Prism.languages.markup.tag,
78+
'entity': Prism.languages.markup.entity,
5179
});
5280

5381
Prism.languages.javadoclike.addSupport('java', Prism.languages.javadoc);

components/prism-javadoc.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/languages/javadoc/class-name_feature.test

-40
This file was deleted.

0 commit comments

Comments
 (0)