🗜️ build v4.3.0 [skip ci]
This commit is contained in:
parent
9b452bc7f1
commit
28f4342d8f
338
lib/marked.cjs
338
lib/marked.cjs
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* marked v4.2.12 - a markdown parser
|
||||
* marked v4.3.0 - a markdown parser
|
||||
* Copyright (c) 2011-2023, Christopher Jeffrey. (MIT Licensed)
|
||||
* https://github.com/markedjs/marked
|
||||
*/
|
||||
@ -98,6 +98,7 @@ function getDefaults() {
|
||||
headerIds: true,
|
||||
headerPrefix: '',
|
||||
highlight: null,
|
||||
hooks: null,
|
||||
langPrefix: 'language-',
|
||||
mangle: true,
|
||||
pedantic: false,
|
||||
@ -252,20 +253,6 @@ function resolveUrl(base, href) {
|
||||
var noopTest = {
|
||||
exec: function noopTest() {}
|
||||
};
|
||||
function merge(obj) {
|
||||
var i = 1,
|
||||
target,
|
||||
key;
|
||||
for (; i < arguments.length; i++) {
|
||||
target = arguments[i];
|
||||
for (key in target) {
|
||||
if (Object.prototype.hasOwnProperty.call(target, key)) {
|
||||
obj[key] = target[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
function splitCells(tableRow, count) {
|
||||
// ensure that every cell-delimiting pipe has a space
|
||||
// before it to distinguish it from an escaped pipe
|
||||
@ -2371,98 +2358,170 @@ var Parser = /*#__PURE__*/function () {
|
||||
return Parser;
|
||||
}();
|
||||
|
||||
var Hooks = /*#__PURE__*/function () {
|
||||
function Hooks(options) {
|
||||
this.options = options || exports.defaults;
|
||||
}
|
||||
var _proto = Hooks.prototype;
|
||||
/**
|
||||
* Process markdown before marked
|
||||
*/
|
||||
_proto.preprocess = function preprocess(markdown) {
|
||||
return markdown;
|
||||
}
|
||||
|
||||
/**
|
||||
* Process HTML after marked is finished
|
||||
*/;
|
||||
_proto.postprocess = function postprocess(html) {
|
||||
return html;
|
||||
};
|
||||
return Hooks;
|
||||
}();
|
||||
Hooks.passThroughHooks = new Set(['preprocess', 'postprocess']);
|
||||
|
||||
function onError(silent, async, callback) {
|
||||
return function (e) {
|
||||
e.message += '\nPlease report this to https://github.com/markedjs/marked.';
|
||||
if (silent) {
|
||||
var msg = '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
|
||||
if (async) {
|
||||
return Promise.resolve(msg);
|
||||
}
|
||||
if (callback) {
|
||||
callback(null, msg);
|
||||
return;
|
||||
}
|
||||
return msg;
|
||||
}
|
||||
if (async) {
|
||||
return Promise.reject(e);
|
||||
}
|
||||
if (callback) {
|
||||
callback(e);
|
||||
return;
|
||||
}
|
||||
throw e;
|
||||
};
|
||||
}
|
||||
function parseMarkdown(lexer, parser) {
|
||||
return function (src, opt, callback) {
|
||||
if (typeof opt === 'function') {
|
||||
callback = opt;
|
||||
opt = null;
|
||||
}
|
||||
var origOpt = _extends({}, opt);
|
||||
opt = _extends({}, marked.defaults, origOpt);
|
||||
var throwError = onError(opt.silent, opt.async, callback);
|
||||
|
||||
// throw error in case of non string input
|
||||
if (typeof src === 'undefined' || src === null) {
|
||||
return throwError(new Error('marked(): input parameter is undefined or null'));
|
||||
}
|
||||
if (typeof src !== 'string') {
|
||||
return throwError(new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected'));
|
||||
}
|
||||
checkSanitizeDeprecation(opt);
|
||||
if (opt.hooks) {
|
||||
opt.hooks.options = opt;
|
||||
}
|
||||
if (callback) {
|
||||
var highlight = opt.highlight;
|
||||
var tokens;
|
||||
try {
|
||||
if (opt.hooks) {
|
||||
src = opt.hooks.preprocess(src);
|
||||
}
|
||||
tokens = lexer(src, opt);
|
||||
} catch (e) {
|
||||
return throwError(e);
|
||||
}
|
||||
var done = function done(err) {
|
||||
var out;
|
||||
if (!err) {
|
||||
try {
|
||||
if (opt.walkTokens) {
|
||||
marked.walkTokens(tokens, opt.walkTokens);
|
||||
}
|
||||
out = parser(tokens, opt);
|
||||
if (opt.hooks) {
|
||||
out = opt.hooks.postprocess(out);
|
||||
}
|
||||
} catch (e) {
|
||||
err = e;
|
||||
}
|
||||
}
|
||||
opt.highlight = highlight;
|
||||
return err ? throwError(err) : callback(null, out);
|
||||
};
|
||||
if (!highlight || highlight.length < 3) {
|
||||
return done();
|
||||
}
|
||||
delete opt.highlight;
|
||||
if (!tokens.length) return done();
|
||||
var pending = 0;
|
||||
marked.walkTokens(tokens, function (token) {
|
||||
if (token.type === 'code') {
|
||||
pending++;
|
||||
setTimeout(function () {
|
||||
highlight(token.text, token.lang, function (err, code) {
|
||||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
if (code != null && code !== token.text) {
|
||||
token.text = code;
|
||||
token.escaped = true;
|
||||
}
|
||||
pending--;
|
||||
if (pending === 0) {
|
||||
done();
|
||||
}
|
||||
});
|
||||
}, 0);
|
||||
}
|
||||
});
|
||||
if (pending === 0) {
|
||||
done();
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (opt.async) {
|
||||
return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src).then(function (src) {
|
||||
return lexer(src, opt);
|
||||
}).then(function (tokens) {
|
||||
return opt.walkTokens ? Promise.all(marked.walkTokens(tokens, opt.walkTokens)).then(function () {
|
||||
return tokens;
|
||||
}) : tokens;
|
||||
}).then(function (tokens) {
|
||||
return parser(tokens, opt);
|
||||
}).then(function (html) {
|
||||
return opt.hooks ? opt.hooks.postprocess(html) : html;
|
||||
})["catch"](throwError);
|
||||
}
|
||||
try {
|
||||
if (opt.hooks) {
|
||||
src = opt.hooks.preprocess(src);
|
||||
}
|
||||
var _tokens = lexer(src, opt);
|
||||
if (opt.walkTokens) {
|
||||
marked.walkTokens(_tokens, opt.walkTokens);
|
||||
}
|
||||
var html = parser(_tokens, opt);
|
||||
if (opt.hooks) {
|
||||
html = opt.hooks.postprocess(html);
|
||||
}
|
||||
return html;
|
||||
} catch (e) {
|
||||
return throwError(e);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Marked
|
||||
*/
|
||||
function marked(src, opt, callback) {
|
||||
// throw error in case of non string input
|
||||
if (typeof src === 'undefined' || src === null) {
|
||||
throw new Error('marked(): input parameter is undefined or null');
|
||||
}
|
||||
if (typeof src !== 'string') {
|
||||
throw new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');
|
||||
}
|
||||
if (typeof opt === 'function') {
|
||||
callback = opt;
|
||||
opt = null;
|
||||
}
|
||||
opt = merge({}, marked.defaults, opt || {});
|
||||
checkSanitizeDeprecation(opt);
|
||||
if (callback) {
|
||||
var highlight = opt.highlight;
|
||||
var tokens;
|
||||
try {
|
||||
tokens = Lexer.lex(src, opt);
|
||||
} catch (e) {
|
||||
return callback(e);
|
||||
}
|
||||
var done = function done(err) {
|
||||
var out;
|
||||
if (!err) {
|
||||
try {
|
||||
if (opt.walkTokens) {
|
||||
marked.walkTokens(tokens, opt.walkTokens);
|
||||
}
|
||||
out = Parser.parse(tokens, opt);
|
||||
} catch (e) {
|
||||
err = e;
|
||||
}
|
||||
}
|
||||
opt.highlight = highlight;
|
||||
return err ? callback(err) : callback(null, out);
|
||||
};
|
||||
if (!highlight || highlight.length < 3) {
|
||||
return done();
|
||||
}
|
||||
delete opt.highlight;
|
||||
if (!tokens.length) return done();
|
||||
var pending = 0;
|
||||
marked.walkTokens(tokens, function (token) {
|
||||
if (token.type === 'code') {
|
||||
pending++;
|
||||
setTimeout(function () {
|
||||
highlight(token.text, token.lang, function (err, code) {
|
||||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
if (code != null && code !== token.text) {
|
||||
token.text = code;
|
||||
token.escaped = true;
|
||||
}
|
||||
pending--;
|
||||
if (pending === 0) {
|
||||
done();
|
||||
}
|
||||
});
|
||||
}, 0);
|
||||
}
|
||||
});
|
||||
if (pending === 0) {
|
||||
done();
|
||||
}
|
||||
return;
|
||||
}
|
||||
function onError(e) {
|
||||
e.message += '\nPlease report this to https://github.com/markedjs/marked.';
|
||||
if (opt.silent) {
|
||||
return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
try {
|
||||
var _tokens = Lexer.lex(src, opt);
|
||||
if (opt.walkTokens) {
|
||||
if (opt.async) {
|
||||
return Promise.all(marked.walkTokens(_tokens, opt.walkTokens)).then(function () {
|
||||
return Parser.parse(_tokens, opt);
|
||||
})["catch"](onError);
|
||||
}
|
||||
marked.walkTokens(_tokens, opt.walkTokens);
|
||||
}
|
||||
return Parser.parse(_tokens, opt);
|
||||
} catch (e) {
|
||||
onError(e);
|
||||
}
|
||||
return parseMarkdown(Lexer.lex, Parser.parse)(src, opt, callback);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2470,7 +2529,7 @@ function marked(src, opt, callback) {
|
||||
*/
|
||||
|
||||
marked.options = marked.setOptions = function (opt) {
|
||||
merge(marked.defaults, opt);
|
||||
marked.defaults = _extends({}, marked.defaults, opt);
|
||||
changeDefaults(marked.defaults);
|
||||
return marked;
|
||||
};
|
||||
@ -2491,10 +2550,10 @@ marked.use = function () {
|
||||
}
|
||||
args.forEach(function (pack) {
|
||||
// copy options to new object
|
||||
var opts = merge({}, pack);
|
||||
var opts = _extends({}, pack);
|
||||
|
||||
// set async to true if it was set to true before
|
||||
opts.async = marked.defaults.async || opts.async;
|
||||
opts.async = marked.defaults.async || opts.async || false;
|
||||
|
||||
// ==-- Parse "addon" extensions --== //
|
||||
if (pack.extensions) {
|
||||
@ -2604,6 +2663,42 @@ marked.use = function () {
|
||||
})();
|
||||
}
|
||||
|
||||
// ==-- Parse Hooks extensions --== //
|
||||
if (pack.hooks) {
|
||||
(function () {
|
||||
var hooks = marked.defaults.hooks || new Hooks();
|
||||
var _loop3 = function _loop3(prop) {
|
||||
var prevHook = hooks[prop];
|
||||
if (Hooks.passThroughHooks.has(prop)) {
|
||||
hooks[prop] = function (arg) {
|
||||
if (marked.defaults.async) {
|
||||
return Promise.resolve(pack.hooks[prop].call(hooks, arg)).then(function (ret) {
|
||||
return prevHook.call(hooks, ret);
|
||||
});
|
||||
}
|
||||
var ret = pack.hooks[prop].call(hooks, arg);
|
||||
return prevHook.call(hooks, ret);
|
||||
};
|
||||
} else {
|
||||
hooks[prop] = function () {
|
||||
for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
|
||||
args[_key5] = arguments[_key5];
|
||||
}
|
||||
var ret = pack.hooks[prop].apply(hooks, args);
|
||||
if (ret === false) {
|
||||
ret = prevHook.apply(hooks, args);
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
}
|
||||
};
|
||||
for (var prop in pack.hooks) {
|
||||
_loop3(prop);
|
||||
}
|
||||
opts.hooks = hooks;
|
||||
})();
|
||||
}
|
||||
|
||||
// ==-- Parse WalkTokens extensions --== //
|
||||
if (pack.walkTokens) {
|
||||
var _walkTokens = marked.defaults.walkTokens;
|
||||
@ -2626,7 +2721,7 @@ marked.use = function () {
|
||||
|
||||
marked.walkTokens = function (tokens, callback) {
|
||||
var values = [];
|
||||
var _loop3 = function _loop3() {
|
||||
var _loop4 = function _loop4() {
|
||||
var token = _step.value;
|
||||
values = values.concat(callback.call(marked, token));
|
||||
switch (token.type) {
|
||||
@ -2664,7 +2759,7 @@ marked.walkTokens = function (tokens, callback) {
|
||||
}
|
||||
};
|
||||
for (var _iterator = _createForOfIteratorHelperLoose(tokens), _step; !(_step = _iterator()).done;) {
|
||||
_loop3();
|
||||
_loop4();
|
||||
}
|
||||
return values;
|
||||
};
|
||||
@ -2673,30 +2768,7 @@ marked.walkTokens = function (tokens, callback) {
|
||||
* Parse Inline
|
||||
* @param {string} src
|
||||
*/
|
||||
marked.parseInline = function (src, opt) {
|
||||
// throw error in case of non string input
|
||||
if (typeof src === 'undefined' || src === null) {
|
||||
throw new Error('marked.parseInline(): input parameter is undefined or null');
|
||||
}
|
||||
if (typeof src !== 'string') {
|
||||
throw new Error('marked.parseInline(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');
|
||||
}
|
||||
opt = merge({}, marked.defaults, opt || {});
|
||||
checkSanitizeDeprecation(opt);
|
||||
try {
|
||||
var tokens = Lexer.lexInline(src, opt);
|
||||
if (opt.walkTokens) {
|
||||
marked.walkTokens(tokens, opt.walkTokens);
|
||||
}
|
||||
return Parser.parseInline(tokens, opt);
|
||||
} catch (e) {
|
||||
e.message += '\nPlease report this to https://github.com/markedjs/marked.';
|
||||
if (opt.silent) {
|
||||
return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
};
|
||||
marked.parseInline = parseMarkdown(Lexer.lexInline, Parser.parseInline);
|
||||
|
||||
/**
|
||||
* Expose
|
||||
@ -2709,6 +2781,7 @@ marked.Lexer = Lexer;
|
||||
marked.lexer = Lexer.lex;
|
||||
marked.Tokenizer = Tokenizer;
|
||||
marked.Slugger = Slugger;
|
||||
marked.Hooks = Hooks;
|
||||
marked.parse = marked;
|
||||
var options = marked.options;
|
||||
var setOptions = marked.setOptions;
|
||||
@ -2719,6 +2792,7 @@ var parse = marked;
|
||||
var parser = Parser.parse;
|
||||
var lexer = Lexer.lex;
|
||||
|
||||
exports.Hooks = Hooks;
|
||||
exports.Lexer = Lexer;
|
||||
exports.Parser = Parser;
|
||||
exports.Renderer = Renderer;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* marked v4.2.12 - a markdown parser
|
||||
* marked v4.3.0 - a markdown parser
|
||||
* Copyright (c) 2011-2023, Christopher Jeffrey. (MIT Licensed)
|
||||
* https://github.com/markedjs/marked
|
||||
*/
|
||||
@ -19,6 +19,7 @@ function getDefaults() {
|
||||
headerIds: true,
|
||||
headerPrefix: '',
|
||||
highlight: null,
|
||||
hooks: null,
|
||||
langPrefix: 'language-',
|
||||
mangle: true,
|
||||
pedantic: false,
|
||||
@ -183,23 +184,6 @@ function resolveUrl(base, href) {
|
||||
|
||||
const noopTest = { exec: function noopTest() {} };
|
||||
|
||||
function merge(obj) {
|
||||
let i = 1,
|
||||
target,
|
||||
key;
|
||||
|
||||
for (; i < arguments.length; i++) {
|
||||
target = arguments[i];
|
||||
for (key in target) {
|
||||
if (Object.prototype.hasOwnProperty.call(target, key)) {
|
||||
obj[key] = target[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
function splitCells(tableRow, count) {
|
||||
// ensure that every cell-delimiting pipe has a space
|
||||
// before it to distinguish it from an escaped pipe
|
||||
@ -2483,122 +2467,194 @@ class Parser {
|
||||
}
|
||||
}
|
||||
|
||||
class Hooks {
|
||||
constructor(options) {
|
||||
this.options = options || defaults;
|
||||
}
|
||||
|
||||
static passThroughHooks = new Set([
|
||||
'preprocess',
|
||||
'postprocess'
|
||||
]);
|
||||
|
||||
/**
|
||||
* Process markdown before marked
|
||||
*/
|
||||
preprocess(markdown) {
|
||||
return markdown;
|
||||
}
|
||||
|
||||
/**
|
||||
* Process HTML after marked is finished
|
||||
*/
|
||||
postprocess(html) {
|
||||
return html;
|
||||
}
|
||||
}
|
||||
|
||||
function onError(silent, async, callback) {
|
||||
return (e) => {
|
||||
e.message += '\nPlease report this to https://github.com/markedjs/marked.';
|
||||
|
||||
if (silent) {
|
||||
const msg = '<p>An error occurred:</p><pre>'
|
||||
+ escape(e.message + '', true)
|
||||
+ '</pre>';
|
||||
if (async) {
|
||||
return Promise.resolve(msg);
|
||||
}
|
||||
if (callback) {
|
||||
callback(null, msg);
|
||||
return;
|
||||
}
|
||||
return msg;
|
||||
}
|
||||
|
||||
if (async) {
|
||||
return Promise.reject(e);
|
||||
}
|
||||
if (callback) {
|
||||
callback(e);
|
||||
return;
|
||||
}
|
||||
throw e;
|
||||
};
|
||||
}
|
||||
|
||||
function parseMarkdown(lexer, parser) {
|
||||
return (src, opt, callback) => {
|
||||
if (typeof opt === 'function') {
|
||||
callback = opt;
|
||||
opt = null;
|
||||
}
|
||||
|
||||
const origOpt = { ...opt };
|
||||
opt = { ...marked.defaults, ...origOpt };
|
||||
const throwError = onError(opt.silent, opt.async, callback);
|
||||
|
||||
// throw error in case of non string input
|
||||
if (typeof src === 'undefined' || src === null) {
|
||||
return throwError(new Error('marked(): input parameter is undefined or null'));
|
||||
}
|
||||
if (typeof src !== 'string') {
|
||||
return throwError(new Error('marked(): input parameter is of type '
|
||||
+ Object.prototype.toString.call(src) + ', string expected'));
|
||||
}
|
||||
|
||||
checkSanitizeDeprecation(opt);
|
||||
|
||||
if (opt.hooks) {
|
||||
opt.hooks.options = opt;
|
||||
}
|
||||
|
||||
if (callback) {
|
||||
const highlight = opt.highlight;
|
||||
let tokens;
|
||||
|
||||
try {
|
||||
if (opt.hooks) {
|
||||
src = opt.hooks.preprocess(src);
|
||||
}
|
||||
tokens = lexer(src, opt);
|
||||
} catch (e) {
|
||||
return throwError(e);
|
||||
}
|
||||
|
||||
const done = function(err) {
|
||||
let out;
|
||||
|
||||
if (!err) {
|
||||
try {
|
||||
if (opt.walkTokens) {
|
||||
marked.walkTokens(tokens, opt.walkTokens);
|
||||
}
|
||||
out = parser(tokens, opt);
|
||||
if (opt.hooks) {
|
||||
out = opt.hooks.postprocess(out);
|
||||
}
|
||||
} catch (e) {
|
||||
err = e;
|
||||
}
|
||||
}
|
||||
|
||||
opt.highlight = highlight;
|
||||
|
||||
return err
|
||||
? throwError(err)
|
||||
: callback(null, out);
|
||||
};
|
||||
|
||||
if (!highlight || highlight.length < 3) {
|
||||
return done();
|
||||
}
|
||||
|
||||
delete opt.highlight;
|
||||
|
||||
if (!tokens.length) return done();
|
||||
|
||||
let pending = 0;
|
||||
marked.walkTokens(tokens, function(token) {
|
||||
if (token.type === 'code') {
|
||||
pending++;
|
||||
setTimeout(() => {
|
||||
highlight(token.text, token.lang, function(err, code) {
|
||||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
if (code != null && code !== token.text) {
|
||||
token.text = code;
|
||||
token.escaped = true;
|
||||
}
|
||||
|
||||
pending--;
|
||||
if (pending === 0) {
|
||||
done();
|
||||
}
|
||||
});
|
||||
}, 0);
|
||||
}
|
||||
});
|
||||
|
||||
if (pending === 0) {
|
||||
done();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (opt.async) {
|
||||
return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)
|
||||
.then(src => lexer(src, opt))
|
||||
.then(tokens => opt.walkTokens ? Promise.all(marked.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)
|
||||
.then(tokens => parser(tokens, opt))
|
||||
.then(html => opt.hooks ? opt.hooks.postprocess(html) : html)
|
||||
.catch(throwError);
|
||||
}
|
||||
|
||||
try {
|
||||
if (opt.hooks) {
|
||||
src = opt.hooks.preprocess(src);
|
||||
}
|
||||
const tokens = lexer(src, opt);
|
||||
if (opt.walkTokens) {
|
||||
marked.walkTokens(tokens, opt.walkTokens);
|
||||
}
|
||||
let html = parser(tokens, opt);
|
||||
if (opt.hooks) {
|
||||
html = opt.hooks.postprocess(html);
|
||||
}
|
||||
return html;
|
||||
} catch (e) {
|
||||
return throwError(e);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Marked
|
||||
*/
|
||||
function marked(src, opt, callback) {
|
||||
// throw error in case of non string input
|
||||
if (typeof src === 'undefined' || src === null) {
|
||||
throw new Error('marked(): input parameter is undefined or null');
|
||||
}
|
||||
if (typeof src !== 'string') {
|
||||
throw new Error('marked(): input parameter is of type '
|
||||
+ Object.prototype.toString.call(src) + ', string expected');
|
||||
}
|
||||
|
||||
if (typeof opt === 'function') {
|
||||
callback = opt;
|
||||
opt = null;
|
||||
}
|
||||
|
||||
opt = merge({}, marked.defaults, opt || {});
|
||||
checkSanitizeDeprecation(opt);
|
||||
|
||||
if (callback) {
|
||||
const highlight = opt.highlight;
|
||||
let tokens;
|
||||
|
||||
try {
|
||||
tokens = Lexer.lex(src, opt);
|
||||
} catch (e) {
|
||||
return callback(e);
|
||||
}
|
||||
|
||||
const done = function(err) {
|
||||
let out;
|
||||
|
||||
if (!err) {
|
||||
try {
|
||||
if (opt.walkTokens) {
|
||||
marked.walkTokens(tokens, opt.walkTokens);
|
||||
}
|
||||
out = Parser.parse(tokens, opt);
|
||||
} catch (e) {
|
||||
err = e;
|
||||
}
|
||||
}
|
||||
|
||||
opt.highlight = highlight;
|
||||
|
||||
return err
|
||||
? callback(err)
|
||||
: callback(null, out);
|
||||
};
|
||||
|
||||
if (!highlight || highlight.length < 3) {
|
||||
return done();
|
||||
}
|
||||
|
||||
delete opt.highlight;
|
||||
|
||||
if (!tokens.length) return done();
|
||||
|
||||
let pending = 0;
|
||||
marked.walkTokens(tokens, function(token) {
|
||||
if (token.type === 'code') {
|
||||
pending++;
|
||||
setTimeout(() => {
|
||||
highlight(token.text, token.lang, function(err, code) {
|
||||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
if (code != null && code !== token.text) {
|
||||
token.text = code;
|
||||
token.escaped = true;
|
||||
}
|
||||
|
||||
pending--;
|
||||
if (pending === 0) {
|
||||
done();
|
||||
}
|
||||
});
|
||||
}, 0);
|
||||
}
|
||||
});
|
||||
|
||||
if (pending === 0) {
|
||||
done();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
function onError(e) {
|
||||
e.message += '\nPlease report this to https://github.com/markedjs/marked.';
|
||||
if (opt.silent) {
|
||||
return '<p>An error occurred:</p><pre>'
|
||||
+ escape(e.message + '', true)
|
||||
+ '</pre>';
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
|
||||
try {
|
||||
const tokens = Lexer.lex(src, opt);
|
||||
if (opt.walkTokens) {
|
||||
if (opt.async) {
|
||||
return Promise.all(marked.walkTokens(tokens, opt.walkTokens))
|
||||
.then(() => {
|
||||
return Parser.parse(tokens, opt);
|
||||
})
|
||||
.catch(onError);
|
||||
}
|
||||
marked.walkTokens(tokens, opt.walkTokens);
|
||||
}
|
||||
return Parser.parse(tokens, opt);
|
||||
} catch (e) {
|
||||
onError(e);
|
||||
}
|
||||
return parseMarkdown(Lexer.lex, Parser.parse)(src, opt, callback);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2607,7 +2663,7 @@ function marked(src, opt, callback) {
|
||||
|
||||
marked.options =
|
||||
marked.setOptions = function(opt) {
|
||||
merge(marked.defaults, opt);
|
||||
marked.defaults = { ...marked.defaults, ...opt };
|
||||
changeDefaults(marked.defaults);
|
||||
return marked;
|
||||
};
|
||||
@ -2625,10 +2681,10 @@ marked.use = function(...args) {
|
||||
|
||||
args.forEach((pack) => {
|
||||
// copy options to new object
|
||||
const opts = merge({}, pack);
|
||||
const opts = { ...pack };
|
||||
|
||||
// set async to true if it was set to true before
|
||||
opts.async = marked.defaults.async || opts.async;
|
||||
opts.async = marked.defaults.async || opts.async || false;
|
||||
|
||||
// ==-- Parse "addon" extensions --== //
|
||||
if (pack.extensions) {
|
||||
@ -2715,6 +2771,35 @@ marked.use = function(...args) {
|
||||
opts.tokenizer = tokenizer;
|
||||
}
|
||||
|
||||
// ==-- Parse Hooks extensions --== //
|
||||
if (pack.hooks) {
|
||||
const hooks = marked.defaults.hooks || new Hooks();
|
||||
for (const prop in pack.hooks) {
|
||||
const prevHook = hooks[prop];
|
||||
if (Hooks.passThroughHooks.has(prop)) {
|
||||
hooks[prop] = (arg) => {
|
||||
if (marked.defaults.async) {
|
||||
return Promise.resolve(pack.hooks[prop].call(hooks, arg)).then(ret => {
|
||||
return prevHook.call(hooks, ret);
|
||||
});
|
||||
}
|
||||
|
||||
const ret = pack.hooks[prop].call(hooks, arg);
|
||||
return prevHook.call(hooks, ret);
|
||||
};
|
||||
} else {
|
||||
hooks[prop] = (...args) => {
|
||||
let ret = pack.hooks[prop].apply(hooks, args);
|
||||
if (ret === false) {
|
||||
ret = prevHook.apply(hooks, args);
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
}
|
||||
}
|
||||
opts.hooks = hooks;
|
||||
}
|
||||
|
||||
// ==-- Parse WalkTokens extensions --== //
|
||||
if (pack.walkTokens) {
|
||||
const walkTokens = marked.defaults.walkTokens;
|
||||
@ -2774,35 +2859,7 @@ marked.walkTokens = function(tokens, callback) {
|
||||
* Parse Inline
|
||||
* @param {string} src
|
||||
*/
|
||||
marked.parseInline = function(src, opt) {
|
||||
// throw error in case of non string input
|
||||
if (typeof src === 'undefined' || src === null) {
|
||||
throw new Error('marked.parseInline(): input parameter is undefined or null');
|
||||
}
|
||||
if (typeof src !== 'string') {
|
||||
throw new Error('marked.parseInline(): input parameter is of type '
|
||||
+ Object.prototype.toString.call(src) + ', string expected');
|
||||
}
|
||||
|
||||
opt = merge({}, marked.defaults, opt || {});
|
||||
checkSanitizeDeprecation(opt);
|
||||
|
||||
try {
|
||||
const tokens = Lexer.lexInline(src, opt);
|
||||
if (opt.walkTokens) {
|
||||
marked.walkTokens(tokens, opt.walkTokens);
|
||||
}
|
||||
return Parser.parseInline(tokens, opt);
|
||||
} catch (e) {
|
||||
e.message += '\nPlease report this to https://github.com/markedjs/marked.';
|
||||
if (opt.silent) {
|
||||
return '<p>An error occurred:</p><pre>'
|
||||
+ escape(e.message + '', true)
|
||||
+ '</pre>';
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
};
|
||||
marked.parseInline = parseMarkdown(Lexer.lexInline, Parser.parseInline);
|
||||
|
||||
/**
|
||||
* Expose
|
||||
@ -2815,6 +2872,7 @@ marked.Lexer = Lexer;
|
||||
marked.lexer = Lexer.lex;
|
||||
marked.Tokenizer = Tokenizer;
|
||||
marked.Slugger = Slugger;
|
||||
marked.Hooks = Hooks;
|
||||
marked.parse = marked;
|
||||
|
||||
const options = marked.options;
|
||||
@ -2826,4 +2884,4 @@ const parse = marked;
|
||||
const parser = Parser.parse;
|
||||
const lexer = Lexer.lex;
|
||||
|
||||
export { Lexer, Parser, Renderer, Slugger, TextRenderer, Tokenizer, defaults, getDefaults, lexer, marked, options, parse, parseInline, parser, setOptions, use, walkTokens };
|
||||
export { Hooks, Lexer, Parser, Renderer, Slugger, TextRenderer, Tokenizer, defaults, getDefaults, lexer, marked, options, parse, parseInline, parser, setOptions, use, walkTokens };
|
||||
|
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* marked v4.2.12 - a markdown parser
|
||||
* marked v4.3.0 - a markdown parser
|
||||
* Copyright (c) 2011-2023, Christopher Jeffrey. (MIT Licensed)
|
||||
* https://github.com/markedjs/marked
|
||||
*/
|
||||
@ -102,6 +102,7 @@
|
||||
headerIds: true,
|
||||
headerPrefix: '',
|
||||
highlight: null,
|
||||
hooks: null,
|
||||
langPrefix: 'language-',
|
||||
mangle: true,
|
||||
pedantic: false,
|
||||
@ -256,20 +257,6 @@
|
||||
var noopTest = {
|
||||
exec: function noopTest() {}
|
||||
};
|
||||
function merge(obj) {
|
||||
var i = 1,
|
||||
target,
|
||||
key;
|
||||
for (; i < arguments.length; i++) {
|
||||
target = arguments[i];
|
||||
for (key in target) {
|
||||
if (Object.prototype.hasOwnProperty.call(target, key)) {
|
||||
obj[key] = target[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
function splitCells(tableRow, count) {
|
||||
// ensure that every cell-delimiting pipe has a space
|
||||
// before it to distinguish it from an escaped pipe
|
||||
@ -2375,98 +2362,170 @@
|
||||
return Parser;
|
||||
}();
|
||||
|
||||
var Hooks = /*#__PURE__*/function () {
|
||||
function Hooks(options) {
|
||||
this.options = options || exports.defaults;
|
||||
}
|
||||
var _proto = Hooks.prototype;
|
||||
/**
|
||||
* Process markdown before marked
|
||||
*/
|
||||
_proto.preprocess = function preprocess(markdown) {
|
||||
return markdown;
|
||||
}
|
||||
|
||||
/**
|
||||
* Process HTML after marked is finished
|
||||
*/;
|
||||
_proto.postprocess = function postprocess(html) {
|
||||
return html;
|
||||
};
|
||||
return Hooks;
|
||||
}();
|
||||
Hooks.passThroughHooks = new Set(['preprocess', 'postprocess']);
|
||||
|
||||
function onError(silent, async, callback) {
|
||||
return function (e) {
|
||||
e.message += '\nPlease report this to https://github.com/markedjs/marked.';
|
||||
if (silent) {
|
||||
var msg = '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
|
||||
if (async) {
|
||||
return Promise.resolve(msg);
|
||||
}
|
||||
if (callback) {
|
||||
callback(null, msg);
|
||||
return;
|
||||
}
|
||||
return msg;
|
||||
}
|
||||
if (async) {
|
||||
return Promise.reject(e);
|
||||
}
|
||||
if (callback) {
|
||||
callback(e);
|
||||
return;
|
||||
}
|
||||
throw e;
|
||||
};
|
||||
}
|
||||
function parseMarkdown(lexer, parser) {
|
||||
return function (src, opt, callback) {
|
||||
if (typeof opt === 'function') {
|
||||
callback = opt;
|
||||
opt = null;
|
||||
}
|
||||
var origOpt = _extends({}, opt);
|
||||
opt = _extends({}, marked.defaults, origOpt);
|
||||
var throwError = onError(opt.silent, opt.async, callback);
|
||||
|
||||
// throw error in case of non string input
|
||||
if (typeof src === 'undefined' || src === null) {
|
||||
return throwError(new Error('marked(): input parameter is undefined or null'));
|
||||
}
|
||||
if (typeof src !== 'string') {
|
||||
return throwError(new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected'));
|
||||
}
|
||||
checkSanitizeDeprecation(opt);
|
||||
if (opt.hooks) {
|
||||
opt.hooks.options = opt;
|
||||
}
|
||||
if (callback) {
|
||||
var highlight = opt.highlight;
|
||||
var tokens;
|
||||
try {
|
||||
if (opt.hooks) {
|
||||
src = opt.hooks.preprocess(src);
|
||||
}
|
||||
tokens = lexer(src, opt);
|
||||
} catch (e) {
|
||||
return throwError(e);
|
||||
}
|
||||
var done = function done(err) {
|
||||
var out;
|
||||
if (!err) {
|
||||
try {
|
||||
if (opt.walkTokens) {
|
||||
marked.walkTokens(tokens, opt.walkTokens);
|
||||
}
|
||||
out = parser(tokens, opt);
|
||||
if (opt.hooks) {
|
||||
out = opt.hooks.postprocess(out);
|
||||
}
|
||||
} catch (e) {
|
||||
err = e;
|
||||
}
|
||||
}
|
||||
opt.highlight = highlight;
|
||||
return err ? throwError(err) : callback(null, out);
|
||||
};
|
||||
if (!highlight || highlight.length < 3) {
|
||||
return done();
|
||||
}
|
||||
delete opt.highlight;
|
||||
if (!tokens.length) return done();
|
||||
var pending = 0;
|
||||
marked.walkTokens(tokens, function (token) {
|
||||
if (token.type === 'code') {
|
||||
pending++;
|
||||
setTimeout(function () {
|
||||
highlight(token.text, token.lang, function (err, code) {
|
||||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
if (code != null && code !== token.text) {
|
||||
token.text = code;
|
||||
token.escaped = true;
|
||||
}
|
||||
pending--;
|
||||
if (pending === 0) {
|
||||
done();
|
||||
}
|
||||
});
|
||||
}, 0);
|
||||
}
|
||||
});
|
||||
if (pending === 0) {
|
||||
done();
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (opt.async) {
|
||||
return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src).then(function (src) {
|
||||
return lexer(src, opt);
|
||||
}).then(function (tokens) {
|
||||
return opt.walkTokens ? Promise.all(marked.walkTokens(tokens, opt.walkTokens)).then(function () {
|
||||
return tokens;
|
||||
}) : tokens;
|
||||
}).then(function (tokens) {
|
||||
return parser(tokens, opt);
|
||||
}).then(function (html) {
|
||||
return opt.hooks ? opt.hooks.postprocess(html) : html;
|
||||
})["catch"](throwError);
|
||||
}
|
||||
try {
|
||||
if (opt.hooks) {
|
||||
src = opt.hooks.preprocess(src);
|
||||
}
|
||||
var _tokens = lexer(src, opt);
|
||||
if (opt.walkTokens) {
|
||||
marked.walkTokens(_tokens, opt.walkTokens);
|
||||
}
|
||||
var html = parser(_tokens, opt);
|
||||
if (opt.hooks) {
|
||||
html = opt.hooks.postprocess(html);
|
||||
}
|
||||
return html;
|
||||
} catch (e) {
|
||||
return throwError(e);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Marked
|
||||
*/
|
||||
function marked(src, opt, callback) {
|
||||
// throw error in case of non string input
|
||||
if (typeof src === 'undefined' || src === null) {
|
||||
throw new Error('marked(): input parameter is undefined or null');
|
||||
}
|
||||
if (typeof src !== 'string') {
|
||||
throw new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');
|
||||
}
|
||||
if (typeof opt === 'function') {
|
||||
callback = opt;
|
||||
opt = null;
|
||||
}
|
||||
opt = merge({}, marked.defaults, opt || {});
|
||||
checkSanitizeDeprecation(opt);
|
||||
if (callback) {
|
||||
var highlight = opt.highlight;
|
||||
var tokens;
|
||||
try {
|
||||
tokens = Lexer.lex(src, opt);
|
||||
} catch (e) {
|
||||
return callback(e);
|
||||
}
|
||||
var done = function done(err) {
|
||||
var out;
|
||||
if (!err) {
|
||||
try {
|
||||
if (opt.walkTokens) {
|
||||
marked.walkTokens(tokens, opt.walkTokens);
|
||||
}
|
||||
out = Parser.parse(tokens, opt);
|
||||
} catch (e) {
|
||||
err = e;
|
||||
}
|
||||
}
|
||||
opt.highlight = highlight;
|
||||
return err ? callback(err) : callback(null, out);
|
||||
};
|
||||
if (!highlight || highlight.length < 3) {
|
||||
return done();
|
||||
}
|
||||
delete opt.highlight;
|
||||
if (!tokens.length) return done();
|
||||
var pending = 0;
|
||||
marked.walkTokens(tokens, function (token) {
|
||||
if (token.type === 'code') {
|
||||
pending++;
|
||||
setTimeout(function () {
|
||||
highlight(token.text, token.lang, function (err, code) {
|
||||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
if (code != null && code !== token.text) {
|
||||
token.text = code;
|
||||
token.escaped = true;
|
||||
}
|
||||
pending--;
|
||||
if (pending === 0) {
|
||||
done();
|
||||
}
|
||||
});
|
||||
}, 0);
|
||||
}
|
||||
});
|
||||
if (pending === 0) {
|
||||
done();
|
||||
}
|
||||
return;
|
||||
}
|
||||
function onError(e) {
|
||||
e.message += '\nPlease report this to https://github.com/markedjs/marked.';
|
||||
if (opt.silent) {
|
||||
return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
try {
|
||||
var _tokens = Lexer.lex(src, opt);
|
||||
if (opt.walkTokens) {
|
||||
if (opt.async) {
|
||||
return Promise.all(marked.walkTokens(_tokens, opt.walkTokens)).then(function () {
|
||||
return Parser.parse(_tokens, opt);
|
||||
})["catch"](onError);
|
||||
}
|
||||
marked.walkTokens(_tokens, opt.walkTokens);
|
||||
}
|
||||
return Parser.parse(_tokens, opt);
|
||||
} catch (e) {
|
||||
onError(e);
|
||||
}
|
||||
return parseMarkdown(Lexer.lex, Parser.parse)(src, opt, callback);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2474,7 +2533,7 @@
|
||||
*/
|
||||
|
||||
marked.options = marked.setOptions = function (opt) {
|
||||
merge(marked.defaults, opt);
|
||||
marked.defaults = _extends({}, marked.defaults, opt);
|
||||
changeDefaults(marked.defaults);
|
||||
return marked;
|
||||
};
|
||||
@ -2495,10 +2554,10 @@
|
||||
}
|
||||
args.forEach(function (pack) {
|
||||
// copy options to new object
|
||||
var opts = merge({}, pack);
|
||||
var opts = _extends({}, pack);
|
||||
|
||||
// set async to true if it was set to true before
|
||||
opts.async = marked.defaults.async || opts.async;
|
||||
opts.async = marked.defaults.async || opts.async || false;
|
||||
|
||||
// ==-- Parse "addon" extensions --== //
|
||||
if (pack.extensions) {
|
||||
@ -2608,6 +2667,42 @@
|
||||
})();
|
||||
}
|
||||
|
||||
// ==-- Parse Hooks extensions --== //
|
||||
if (pack.hooks) {
|
||||
(function () {
|
||||
var hooks = marked.defaults.hooks || new Hooks();
|
||||
var _loop3 = function _loop3(prop) {
|
||||
var prevHook = hooks[prop];
|
||||
if (Hooks.passThroughHooks.has(prop)) {
|
||||
hooks[prop] = function (arg) {
|
||||
if (marked.defaults.async) {
|
||||
return Promise.resolve(pack.hooks[prop].call(hooks, arg)).then(function (ret) {
|
||||
return prevHook.call(hooks, ret);
|
||||
});
|
||||
}
|
||||
var ret = pack.hooks[prop].call(hooks, arg);
|
||||
return prevHook.call(hooks, ret);
|
||||
};
|
||||
} else {
|
||||
hooks[prop] = function () {
|
||||
for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
|
||||
args[_key5] = arguments[_key5];
|
||||
}
|
||||
var ret = pack.hooks[prop].apply(hooks, args);
|
||||
if (ret === false) {
|
||||
ret = prevHook.apply(hooks, args);
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
}
|
||||
};
|
||||
for (var prop in pack.hooks) {
|
||||
_loop3(prop);
|
||||
}
|
||||
opts.hooks = hooks;
|
||||
})();
|
||||
}
|
||||
|
||||
// ==-- Parse WalkTokens extensions --== //
|
||||
if (pack.walkTokens) {
|
||||
var _walkTokens = marked.defaults.walkTokens;
|
||||
@ -2630,7 +2725,7 @@
|
||||
|
||||
marked.walkTokens = function (tokens, callback) {
|
||||
var values = [];
|
||||
var _loop3 = function _loop3() {
|
||||
var _loop4 = function _loop4() {
|
||||
var token = _step.value;
|
||||
values = values.concat(callback.call(marked, token));
|
||||
switch (token.type) {
|
||||
@ -2668,7 +2763,7 @@
|
||||
}
|
||||
};
|
||||
for (var _iterator = _createForOfIteratorHelperLoose(tokens), _step; !(_step = _iterator()).done;) {
|
||||
_loop3();
|
||||
_loop4();
|
||||
}
|
||||
return values;
|
||||
};
|
||||
@ -2677,30 +2772,7 @@
|
||||
* Parse Inline
|
||||
* @param {string} src
|
||||
*/
|
||||
marked.parseInline = function (src, opt) {
|
||||
// throw error in case of non string input
|
||||
if (typeof src === 'undefined' || src === null) {
|
||||
throw new Error('marked.parseInline(): input parameter is undefined or null');
|
||||
}
|
||||
if (typeof src !== 'string') {
|
||||
throw new Error('marked.parseInline(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');
|
||||
}
|
||||
opt = merge({}, marked.defaults, opt || {});
|
||||
checkSanitizeDeprecation(opt);
|
||||
try {
|
||||
var tokens = Lexer.lexInline(src, opt);
|
||||
if (opt.walkTokens) {
|
||||
marked.walkTokens(tokens, opt.walkTokens);
|
||||
}
|
||||
return Parser.parseInline(tokens, opt);
|
||||
} catch (e) {
|
||||
e.message += '\nPlease report this to https://github.com/markedjs/marked.';
|
||||
if (opt.silent) {
|
||||
return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
};
|
||||
marked.parseInline = parseMarkdown(Lexer.lexInline, Parser.parseInline);
|
||||
|
||||
/**
|
||||
* Expose
|
||||
@ -2713,6 +2785,7 @@
|
||||
marked.lexer = Lexer.lex;
|
||||
marked.Tokenizer = Tokenizer;
|
||||
marked.Slugger = Slugger;
|
||||
marked.Hooks = Hooks;
|
||||
marked.parse = marked;
|
||||
var options = marked.options;
|
||||
var setOptions = marked.setOptions;
|
||||
@ -2723,6 +2796,7 @@
|
||||
var parser = Parser.parse;
|
||||
var lexer = Lexer.lex;
|
||||
|
||||
exports.Hooks = Hooks;
|
||||
exports.Lexer = Lexer;
|
||||
exports.Parser = Parser;
|
||||
exports.Renderer = Renderer;
|
||||
|
4
marked.min.js
vendored
4
marked.min.js
vendored
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user