123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- (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));
|