12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /**
- * Translate doclet descriptions from Markdown into HTML.
- *
- * @module plugins/markdown
- */
- 'use strict';
- var env = require('jsdoc/env');
- var config = env.conf.markdown || {};
- var defaultTags = [
- 'author',
- 'classdesc',
- 'description',
- 'exceptions',
- 'params',
- 'properties',
- 'returns',
- 'see',
- 'summary'
- ];
- var hasOwnProp = Object.prototype.hasOwnProperty;
- var parse = require('jsdoc/util/markdown').getParser();
- var tags = [];
- var excludeTags = [];
- function shouldProcessString(tagName, text) {
- var shouldProcess = true;
- // we only want to process `@author` and `@see` tags that contain Markdown links
- if ( (tagName === 'author' || tagName === 'see') && text.indexOf('[') === -1 ) {
- shouldProcess = false;
- }
- return shouldProcess;
- }
- /**
- * Process the markdown source in a doclet. The properties that should be processed are
- * configurable, but always include "author", "classdesc", "description", "exceptions", "params",
- * "properties", "returns", and "see". Handled properties can be bare strings, objects, or arrays
- * of objects.
- */
- function process(doclet) {
- tags.forEach(function(tag) {
- if ( !hasOwnProp.call(doclet, tag) ) {
- return;
- }
- if (typeof doclet[tag] === 'string' && shouldProcessString(tag, doclet[tag]) ) {
- doclet[tag] = parse(doclet[tag]);
- }
- else if ( Array.isArray(doclet[tag]) ) {
- doclet[tag].forEach(function(value, index, original) {
- var inner = {};
- inner[tag] = value;
- process(inner);
- original[index] = inner[tag];
- });
- }
- else if (doclet[tag]) {
- process(doclet[tag]);
- }
- });
- }
- // set up the list of "tags" (properties) to process
- if (config.tags) {
- tags = config.tags.slice();
- }
- // set up the list of default tags to exclude from processing
- if (config.excludeTags) {
- excludeTags = config.excludeTags.slice();
- }
- defaultTags.forEach(function(tag) {
- if (excludeTags.indexOf(tag) === -1 && tags.indexOf(tag) === -1) {
- tags.push(tag);
- }
- });
- exports.handlers = {
- /**
- * Translate Markdown syntax in a new doclet's description into HTML. Is run
- * by JSDoc 3 whenever a "newDoclet" event fires.
- */
- newDoclet: function(e) {
- process(e.doclet);
- }
- };
|