diff --git a/src/modules/fedimbed.js b/src/modules/fedimbed.js index 6a60707..7d4687d 100644 --- a/src/modules/fedimbed.js +++ b/src/modules/fedimbed.js @@ -118,6 +118,34 @@ async function signedFetch(url, options) { return await fetch(url, options); } +function htmlToMarkdown(str) { + // FIXME: stop being lazy and use an html parser + str = str.replace(/(.+?)<\/a>/gi, (_, url, text) => + url == text ? url : `[${text}](${url})` + ); + str = str.replace( + //gi, + "[$3]($1)" + ); + str = str.replace(/<\/?\s*br\s*\/?>/gi, "\n"); + str = str.replace( + /((.|\n)*?)<\/blockquote>/gi, + (_, quote) => "> " + quote.split("\n").join("\n> ") + ); + str = str.replace(/<\/p>

/gi, "\n\n"); + str = str.replace(/

    /gi, "\n"); + str = str.replace(/
  1. /gi, "- "); + str = str.replace(/<\/li>/gi, "\n"); + str = str.replace(/<\/?code>/gi, "`"); + str = str.replace(/<\/?em>/gi, "*"); + str = str.replace(/<\/?u>/gi, "__"); + str = str.replace(/<\/?s>/gi, "~~"); + str = str.replace(/(<([^>]+)>)/gi, ""); + str = parseHtmlEntities(str); + // whyyyyyyyyyyyy + str = str.replace(/\[https?:\/\/.+?\]\((https?:\/\/.+?)\)/gi, "$1"); +} + async function processUrl(msg, url, spoiler = false) { let invalidUrl = false; let urlObj; @@ -630,37 +658,13 @@ async function processUrl(msg, url, spoiler = false) { content = content ?? ""; cw = cw ?? ""; - // FIXME: stop being lazy and use an html parser - content = content.replace( - /(.+?)<\/a>/gi, - (_, url, text) => (url == text ? url : `[${text}](${url})`) - ); - content = content.replace( - //gi, - "[$3]($1)" - ); - content = content.replace(/<\/?\s*br\s*\/?>/gi, "\n"); - content = content.replace( - /((.|\n)*?)<\/blockquote>/gi, - (_, quote) => "> " + quote.split("\n").join("\n> ") - ); - content = content.replace(/<\/p>

    /gi, "\n\n"); - content = content.replace(/

      /gi, "\n"); - content = content.replace(/
    1. /gi, "- "); - content = content.replace(/<\/li>/gi, "\n"); - content = content.replace(/<\/?code>/gi, "`"); - content = content.replace(/<\/?em>/gi, "*"); - content = content.replace(/<\/?u>/gi, "__"); - content = content.replace(/<\/?s>/gi, "~~"); - content = content.replace(/(<([^>]+)>)/gi, ""); - content = parseHtmlEntities(content); + content = htmlToMarkdown(content); for (const emote of emotes) { content = content.replaceAll(emote.name, `[${emote.name}](${emote.url})`); } - cw = cw.replace(/(<([^>]+)>)/gi, ""); - cw = parseHtmlEntities(cw); + cw = htmlToMarkdown(cw); let desc = ""; let MAX_LENGTH = 3999;