diff --git a/src/app/utils/markdown.ts b/src/app/utils/markdown.ts index 6db7a349..9fda6794 100644 --- a/src/app/utils/markdown.ts +++ b/src/app/utils/markdown.ts @@ -23,24 +23,28 @@ export type RulesRunner = ( ) => string | undefined; const MIN_ANY = '(.+?)'; +const URL_NEG_LB = '(?<!(https?|ftp|mailto|magnet):\\/\\/\\S*)'; const BOLD_MD_1 = '**'; const BOLD_PREFIX_1 = '\\*{2}'; const BOLD_NEG_LA_1 = '(?!\\*)'; -const BOLD_REG_1 = new RegExp(`${BOLD_PREFIX_1}${MIN_ANY}${BOLD_PREFIX_1}${BOLD_NEG_LA_1}`); +const BOLD_REG_1 = new RegExp( + `${URL_NEG_LB}${BOLD_PREFIX_1}${MIN_ANY}${BOLD_PREFIX_1}${BOLD_NEG_LA_1}` +); const BoldRule: MDRule = { match: (text) => text.match(BOLD_REG_1), html: (parse, match) => { const [, g1] = match; - const child = parse(g1); - return `<strong data-md="${BOLD_MD_1}">${child}</strong>`; + return `<strong data-md="${BOLD_MD_1}">${parse(g1)}</strong>`; }, }; const ITALIC_MD_1 = '*'; const ITALIC_PREFIX_1 = '\\*'; const ITALIC_NEG_LA_1 = '(?!\\*)'; -const ITALIC_REG_1 = new RegExp(`${ITALIC_PREFIX_1}${MIN_ANY}${ITALIC_PREFIX_1}${ITALIC_NEG_LA_1}`); +const ITALIC_REG_1 = new RegExp( + `${URL_NEG_LB}${ITALIC_PREFIX_1}${MIN_ANY}${ITALIC_PREFIX_1}${ITALIC_NEG_LA_1}` +); const ItalicRule1: MDRule = { match: (text) => text.match(ITALIC_REG_1), html: (parse, match) => { @@ -52,7 +56,9 @@ const ItalicRule1: MDRule = { const ITALIC_MD_2 = '_'; const ITALIC_PREFIX_2 = '_'; const ITALIC_NEG_LA_2 = '(?!_)'; -const ITALIC_REG_2 = new RegExp(`${ITALIC_PREFIX_2}${MIN_ANY}${ITALIC_PREFIX_2}${ITALIC_NEG_LA_2}`); +const ITALIC_REG_2 = new RegExp( + `${URL_NEG_LB}${ITALIC_PREFIX_2}${MIN_ANY}${ITALIC_PREFIX_2}${ITALIC_NEG_LA_2}` +); const ItalicRule2: MDRule = { match: (text) => text.match(ITALIC_REG_2), html: (parse, match) => { @@ -65,7 +71,7 @@ const UNDERLINE_MD_1 = '__'; const UNDERLINE_PREFIX_1 = '_{2}'; const UNDERLINE_NEG_LA_1 = '(?!_)'; const UNDERLINE_REG_1 = new RegExp( - `${UNDERLINE_PREFIX_1}${MIN_ANY}${UNDERLINE_PREFIX_1}${UNDERLINE_NEG_LA_1}` + `${URL_NEG_LB}${UNDERLINE_PREFIX_1}${MIN_ANY}${UNDERLINE_PREFIX_1}${UNDERLINE_NEG_LA_1}` ); const UnderlineRule: MDRule = { match: (text) => text.match(UNDERLINE_REG_1), @@ -78,7 +84,9 @@ const UnderlineRule: MDRule = { const STRIKE_MD_1 = '~~'; const STRIKE_PREFIX_1 = '~{2}'; const STRIKE_NEG_LA_1 = '(?!~)'; -const STRIKE_REG_1 = new RegExp(`${STRIKE_PREFIX_1}${MIN_ANY}${STRIKE_PREFIX_1}${STRIKE_NEG_LA_1}`); +const STRIKE_REG_1 = new RegExp( + `${URL_NEG_LB}${STRIKE_PREFIX_1}${MIN_ANY}${STRIKE_PREFIX_1}${STRIKE_NEG_LA_1}` +); const StrikeRule: MDRule = { match: (text) => text.match(STRIKE_REG_1), html: (parse, match) => { @@ -90,7 +98,9 @@ const StrikeRule: MDRule = { const CODE_MD_1 = '`'; const CODE_PREFIX_1 = '`'; const CODE_NEG_LA_1 = '(?!`)'; -const CODE_REG_1 = new RegExp(`${CODE_PREFIX_1}${MIN_ANY}${CODE_PREFIX_1}${CODE_NEG_LA_1}`); +const CODE_REG_1 = new RegExp( + `${URL_NEG_LB}${CODE_PREFIX_1}${MIN_ANY}${CODE_PREFIX_1}${CODE_NEG_LA_1}` +); const CodeRule: MDRule = { match: (text) => text.match(CODE_REG_1), html: (parse, match) => { @@ -103,7 +113,7 @@ const SPOILER_MD_1 = '||'; const SPOILER_PREFIX_1 = '\\|{2}'; const SPOILER_NEG_LA_1 = '(?!\\|)'; const SPOILER_REG_1 = new RegExp( - `${SPOILER_PREFIX_1}${MIN_ANY}${SPOILER_PREFIX_1}${SPOILER_NEG_LA_1}` + `${URL_NEG_LB}${SPOILER_PREFIX_1}${MIN_ANY}${SPOILER_PREFIX_1}${SPOILER_NEG_LA_1}` ); const SpoilerRule: MDRule = { match: (text) => text.match(SPOILER_REG_1),