93 lines
3.6 KiB
JavaScript
93 lines
3.6 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.removeMarkdown = void 0;
|
|
/**
|
|
* @function removeMarkdown
|
|
*
|
|
* @description
|
|
* Parse the markdown and returns a string
|
|
*
|
|
* @param markdown - The markdown string to parse
|
|
* @param options - The options for the function
|
|
*
|
|
* @returns The parsed plain text
|
|
*/
|
|
var removeMarkdown = function (markdown, options) {
|
|
if (options === void 0) { options = {
|
|
listUnicodeChar: "",
|
|
}; }
|
|
options = options || {};
|
|
options.listUnicodeChar = options.hasOwnProperty("listUnicodeChar")
|
|
? options.listUnicodeChar
|
|
: false;
|
|
options.stripListLeaders = options.hasOwnProperty("stripListLeaders")
|
|
? options.stripListLeaders
|
|
: true;
|
|
options.gfm = options.hasOwnProperty("gfm") ? options.gfm : true;
|
|
options.useImgAltText = options.hasOwnProperty("useImgAltText")
|
|
? options.useImgAltText
|
|
: true;
|
|
options.preserveLinks = options.hasOwnProperty("preserveLinks")
|
|
? options.preserveLinks
|
|
: false;
|
|
var output = markdown || "";
|
|
// Remove horizontal rules (stripListHeaders conflict with this rule, which is why it has been moved to the top)
|
|
output = output.replace(/^(-\s*?|\*\s*?|_\s*?){3,}\s*$/gm, "");
|
|
try {
|
|
if (options.stripListLeaders) {
|
|
if (options.listUnicodeChar)
|
|
output = output.replace(/^([\s\t]*)([\*\-\+]|\d+\.)\s+/gm, options.listUnicodeChar + " $1");
|
|
else
|
|
output = output.replace(/^([\s\t]*)([\*\-\+]|\d+\.)\s+/gm, "$1");
|
|
}
|
|
if (options.gfm) {
|
|
output = output
|
|
// Header
|
|
.replace(/\n={2,}/g, "\n")
|
|
// Fenced codeblocks
|
|
.replace(/~{3}.*\n/g, "")
|
|
// Strikethrough
|
|
.replace(/~~/g, "")
|
|
// Fenced codeblocks
|
|
.replace(/`{3}.*\n/g, "");
|
|
}
|
|
if (options.preserveLinks) {
|
|
// Remove inline links while preserving the links
|
|
output = output.replace(/\[(.*?)\][\[\(](.*?)[\]\)]/g, "$1 ($2)");
|
|
}
|
|
output = output
|
|
// Remove HTML tags
|
|
.replace(/<[^>]*>/g, "")
|
|
// Remove setext-style headers
|
|
.replace(/^[=\-]{2,}\s*$/g, "")
|
|
// Remove footnotes?
|
|
.replace(/\[\^.+?\](\: .*?$)?/g, "")
|
|
.replace(/\s{0,2}\[.*?\]: .*?$/g, "")
|
|
// Remove images
|
|
.replace(/\!\[(.*?)\][\[\(].*?[\]\)]/g, options.useImgAltText ? "$1" : "")
|
|
// Remove inline links
|
|
.replace(/\[(.*?)\][\[\(].*?[\]\)]/g, "$1")
|
|
// Remove blockquotes
|
|
.replace(/^\s{0,3}>\s?/g, "")
|
|
.replace(/(^|\n)\s{0,3}>\s?/g, "\n\n")
|
|
// Remove reference-style links?
|
|
.replace(/^\s{1,2}\[(.*?)\]: (\S+)( ".*?")?\s*$/g, "")
|
|
// Remove atx-style headers
|
|
.replace(/^(\n)?\s{0,}#{1,6}\s+| {0,}(\n)?\s{0,}#{0,} {0,}(\n)?\s{0,}$/gm, "$1$2$3")
|
|
// Remove emphasis (repeat the line to remove double emphasis)
|
|
.replace(/([\*_]{1,3})(\S.*?\S{0,1})\1/g, "$2")
|
|
.replace(/([\*_]{1,3})(\S.*?\S{0,1})\1/g, "$2")
|
|
// Remove code blocks
|
|
.replace(/(`{3,})(.*?)\1/gm, "$2")
|
|
// Remove inline code
|
|
.replace(/`(.+?)`/g, "$1")
|
|
// Replace two or more newlines with exactly two? Not entirely sure this belongs here...
|
|
.replace(/\n{2,}/g, "\n\n");
|
|
}
|
|
catch (e) {
|
|
console.error(e);
|
|
return markdown;
|
|
}
|
|
return output;
|
|
};
|
|
exports.removeMarkdown = removeMarkdown;
|