Skip to content

Commit

Permalink
JavaDoc: Improvements (#2324)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
RunDevelopment committed May 6, 2020
1 parent 4172ab6 commit 032910b
Show file tree
Hide file tree
Showing 9 changed files with 1,207 additions and 413 deletions.
90 changes: 59 additions & 31 deletions components/prism-javadoc.js
@@ -1,53 +1,81 @@
(function (Prism) {

var codeLines = {
'code': {
pattern: /(^(?:\s*(?:\*\s*)*)).*[^*\s].+$/m,
lookbehind: true,
inside: Prism.languages.java,
alias: 'language-java'
}
};
var codeLinePattern = /(^(?:\s*(?:\*\s*)*)).*[^*\s].*$/m;

var memberReference = /#\s*\w+(?:\s*\([^()]*\))?/.source;
var reference = /(?:[a-zA-Z]\w+\s*\.\s*)*[A-Z]\w*(?:\s*<mem>)?|<mem>/.source.replace(/<mem>/g, function () { return memberReference });

Prism.languages.javadoc = Prism.languages.extend('javadoclike', {});
Prism.languages.insertBefore('javadoc', 'keyword', {
'class-name': [
{
pattern: /(@(?:exception|throws|see|link|linkplain|value)\s+(?:[a-z\d]+\.)*)[A-Z](?:\w*[a-z]\w*)?(?:\.[A-Z](?:\w*[a-z]\w*)?)*/,
lookbehind: true,
inside: {
'punctuation': /\./
}
},
{
// @param <T> the first generic type parameter
pattern: /(@param\s+)<[A-Z]\w*>/,
lookbehind: true,
inside: {
'punctuation': /[.<>]/
}
'reference': {
pattern: RegExp(/(@(?:exception|throws|see|link|linkplain|value)\s+(?:\*\s*)?)/.source + '(?:' + reference + ')'),
lookbehind: true,
inside: {
'function': {
pattern: /(#\s*)\w+(?=\s*\()/,
lookbehind: true
},
'field': {
pattern: /(#\s*)\w+/,
lookbehind: true
},
'namespace': {
pattern: /\b(?:[a-z]\w*\s*\.\s*)+/,
inside: {
'punctuation': /\./
}
},
'class-name': /\b[A-Z]\w*/,
'keyword': Prism.languages.java.keyword,
'punctuation': /[#()[\],.]/
}
],
'namespace': {
pattern: /(@(?:exception|throws|see|link|linkplain)\s+)(?:[a-z\d]+\.)+/,
},
'class-name': {
// @param <T> the first generic type parameter
pattern: /(@param\s+)<[A-Z]\w*>/,
lookbehind: true,
inside: {
'punctuation': /\./
'punctuation': /[.<>]/
}
},
'code-section': [
{
pattern: /(\{@code\s+)(?:[^{}]|\{[^{}]*\})+?(?=\s*\})/,
pattern: /(\{@code\s+)(?:[^{}]|\{(?:[^{}]|\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\})*\})+?(?=\s*\})/,
lookbehind: true,
inside: codeLines
inside: {
'code': {
// there can't be any HTML inside of {@code} tags
pattern: codeLinePattern,
lookbehind: true,
inside: Prism.languages.java,
alias: 'language-java'
}
}
},
{
pattern: /(<(code|tt)>\s*)[\s\S]+?(?=\s*<\/\2>)/,
pattern: /(<(code|pre|tt)>(?!<code>)\s*)[\s\S]+?(?=\s*<\/\2>)/,
lookbehind: true,
inside: codeLines
inside: {
'line': {
pattern: codeLinePattern,
lookbehind: true,
inside: {
// highlight HTML tags and entities
'tag': Prism.languages.markup.tag,
'entity': Prism.languages.markup.entity,
'code': {
// everything else is Java code
pattern: /.+/,
inside: Prism.languages.java,
alias: 'language-java'
}
}
}
}
}
],
'tag': Prism.languages.markup.tag,
'entity': Prism.languages.markup.entity,
});

Prism.languages.javadoclike.addSupport('java', Prism.languages.javadoc);
Expand Down
2 changes: 1 addition & 1 deletion components/prism-javadoc.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

40 changes: 0 additions & 40 deletions tests/languages/javadoc/class-name_feature.test

This file was deleted.

0 comments on commit 032910b

Please sign in to comment.