mirror of
https://github.com/jsdoc/jsdoc.git
synced 2025-12-08 19:46:11 +00:00
Note that hardwrapping is enabled by default in the GFM script (to preserve its behavior), but that it is disabled by default in the JSDoc plugin, as that seems more useful for inline documentation.
97 lines
2.9 KiB
JavaScript
97 lines
2.9 KiB
JavaScript
/**
|
|
@overview Translate doclet descriptions from MarkDown into HTML.
|
|
@module plugins/markdown
|
|
@author Michael Mathews <micmath@gmail.com>
|
|
@author Ben Blank <ben.blank@gmail.com>
|
|
*/
|
|
|
|
var conf = env.conf.markdown;
|
|
var defaultTags = [ "description", "params", "properties", "returns" ];
|
|
var parse;
|
|
var tags;
|
|
|
|
/**
|
|
Pull in the selected parser and wrap it in a common interface.
|
|
|
|
@param {String} parser The name of the selected parser.
|
|
@param {Object} [conf] Configuration for the selected parser, if any.
|
|
|
|
@returns {Function} A function which accepts markdown source, feeds it to
|
|
the selected parser, and returns the resulting HTML.
|
|
|
|
@throws {Exception} If the name does not correspond to a known parser.
|
|
*/
|
|
function getParser(parser, conf) {
|
|
conf = conf || {};
|
|
|
|
if (parser === "gfm") {
|
|
parser = new (require("gfm/showdown").Converter)();
|
|
parser.githubRepoOwner = conf.githubRepoOwner;
|
|
parser.githubRepoName = conf.githubRepoName;
|
|
parser.hardwrap = !!conf.gfmHardwrap;
|
|
|
|
return function(source) {
|
|
return parser.makeHtml(source);
|
|
};
|
|
} else if (parser === "evilstreak") {
|
|
parser = require("evilstreak/markdown");
|
|
|
|
return function(source) {
|
|
return parser.toHTML(source);
|
|
}
|
|
} else {
|
|
throw "unknown Markdown parser: '" + parser + "'";
|
|
}
|
|
}
|
|
|
|
/**
|
|
Process the markdown source in a doclet. The properties which should be
|
|
processed are configurable, but always include "description", "params",
|
|
"properties", and "returns". Handled properties can be bare strings,
|
|
objects, or arrays of objects.
|
|
*/
|
|
function process(doclet) {
|
|
tags.forEach(function(tag) {
|
|
if (typeof doclet[tag] === "string") {
|
|
doclet[tag] = doclet.description = parse(doclet[tag]);
|
|
} else if (doclet[tag] instanceof Array) {
|
|
doclet[tag].forEach(process);
|
|
} else if (doclet[tag]) {
|
|
process(doclet[tag]);
|
|
}
|
|
});
|
|
}
|
|
|
|
// determine which parser should be used based on configuration options, if any
|
|
if (conf && conf.parser) {
|
|
parse = getParser(conf.parser, conf);
|
|
} else if (conf && conf.githubRepoOwner && conf.githubRepoName) {
|
|
// use GitHub-friendly parser if GitHub-specific options are present
|
|
parse = getParser("gfm", conf);
|
|
} else {
|
|
// evilstreak is the default parser
|
|
parse = getParser("evilstreak");
|
|
}
|
|
|
|
// set up the list of "tags" (properties) to process
|
|
if (conf && conf.tags) {
|
|
tags = conf.tags.slice();
|
|
|
|
defaultTags.forEach(function(tag) {
|
|
if (tags.indexOf(tag) === -1) {
|
|
tags.push(tag);
|
|
}
|
|
});
|
|
} else {
|
|
tags = defaultTags;
|
|
}
|
|
|
|
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);
|
|
}
|
|
}; |