diff options
| author | Armand Philippot <git@armandphilippot.com> | 2021-12-30 19:47:21 +0100 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2021-12-30 19:47:21 +0100 |
| commit | a98b5ea6fe8e8cc98a55e0fd793e6e8660ea31c1 (patch) | |
| tree | 542810ab5aef99150db228bb54fd58303dcb31c7 /public/prism/prism-javadoclike.js | |
| parent | ab355897a12b7bda1089a44de326d41455a0f7a3 (diff) | |
chore: add prismjs for syntax highlighting
Diffstat (limited to 'public/prism/prism-javadoclike.js')
| -rw-r--r-- | public/prism/prism-javadoclike.js | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/public/prism/prism-javadoclike.js b/public/prism/prism-javadoclike.js new file mode 100644 index 0000000..e427427 --- /dev/null +++ b/public/prism/prism-javadoclike.js @@ -0,0 +1,85 @@ +(function (Prism) { + var javaDocLike = (Prism.languages.javadoclike = { + parameter: { + pattern: /(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m, + lookbehind: true, + }, + keyword: { + // keywords are the first word in a line preceded be an `@` or surrounded by curly braces. + // @word, {@word} + pattern: /(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m, + lookbehind: true, + }, + punctuation: /[{}]/, + }); + + /** + * Adds doc comment support to the given language and calls a given callback on each doc comment pattern. + * + * @param {string} lang the language add doc comment support to. + * @param {(pattern: {inside: {rest: undefined}}) => void} callback the function called with each doc comment pattern as argument. + */ + function docCommentSupport(lang, callback) { + var tokenName = 'doc-comment'; + + var grammar = Prism.languages[lang]; + if (!grammar) { + return; + } + var token = grammar[tokenName]; + + if (!token) { + // add doc comment: /** */ + var definition = {}; + definition[tokenName] = { + pattern: /(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/, + lookbehind: true, + alias: 'comment', + }; + + grammar = Prism.languages.insertBefore(lang, 'comment', definition); + token = grammar[tokenName]; + } + + if (token instanceof RegExp) { + // convert regex to object + token = grammar[tokenName] = { pattern: token }; + } + + if (Array.isArray(token)) { + for (var i = 0, l = token.length; i < l; i++) { + if (token[i] instanceof RegExp) { + token[i] = { pattern: token[i] }; + } + callback(token[i]); + } + } else { + callback(token); + } + } + + /** + * Adds doc-comment support to the given languages for the given documentation language. + * + * @param {string[]|string} languages + * @param {Object} docLanguage + */ + function addSupport(languages, docLanguage) { + if (typeof languages === 'string') { + languages = [languages]; + } + + languages.forEach(function (lang) { + docCommentSupport(lang, function (pattern) { + if (!pattern.inside) { + pattern.inside = {}; + } + pattern.inside.rest = docLanguage; + }); + }); + } + + Object.defineProperty(javaDocLike, 'addSupport', { value: addSupport }); + + javaDocLike.addSupport(['java', 'javascript', 'php'], javaDocLike); +})(Prism); |
