From 4d07e9cf5bbf246e3aa4e71e28bf5cac52747f26 Mon Sep 17 00:00:00 2001 From: gabriellsh <40830821+gabriellsh@users.noreply.github.com> Date: Mon, 26 Apr 2021 11:16:20 -0300 Subject: [PATCH] regression: Markdown broken on safari (#21780) Co-authored-by: Guilherme Gazzo --- app/markdown/lib/parser/original/markdown.js | 23 +++++++++-- app/markdown/tests/client.tests.js | 41 +++++++++++++++----- 2 files changed, 50 insertions(+), 14 deletions(-) diff --git a/app/markdown/lib/parser/original/markdown.js b/app/markdown/lib/parser/original/markdown.js index 3ddfc04c52b..eec53e6e11c 100644 --- a/app/markdown/lib/parser/original/markdown.js +++ b/app/markdown/lib/parser/original/markdown.js @@ -33,6 +33,21 @@ const validateUrl = (url, message) => { } }; +const getParserWithCustomMarker = (marker, tagName) => (msg) => msg.replace(new RegExp(`(\\${ marker }+(?!\\s))([^\\${ marker }\r\n]+)(\\${ marker }+)`, 'gm'), (match, p1, p2, p3) => { + if (p2.substring(p2.length - 1).match(/\s/)) { + return match; + } + const usableMarkers = p1.length > 1 ? 2 : 1; + const finalMarkerCount = p3.length - usableMarkers >= 0 ? usableMarkers : 1; + return `${ p1.substring(finalMarkerCount) }${ marker }<${ tagName }>${ p2 }${ marker }${ p3.substring(finalMarkerCount) }`; +}); + +const parseBold = getParserWithCustomMarker('*', 'strong'); + +const parseItalic = getParserWithCustomMarker('_', 'em'); + +const parseStrike = getParserWithCustomMarker('~', 'strike'); + const parseNotEscaped = (message, { supportSchemesForLink, headers, @@ -60,13 +75,13 @@ const parseNotEscaped = (message, { } // Support *text* to make bold - msg = msg.replace(/\*{1,2}(?!\s)([^\*\r\n]+)(?*$1*'); + msg = parseBold(msg); // Support _text_ to make italics - msg = msg.replace(/(?_$1_'); + msg = parseItalic(msg); - // Support ~text~ to strike through text - msg = msg.replace(/(?~$1~'); + // // Support ~text~ to strike through text + msg = parseStrike(msg); // Support for block quote // >>> diff --git a/app/markdown/tests/client.tests.js b/app/markdown/tests/client.tests.js index fd92206771d..d6f3c3728cf 100644 --- a/app/markdown/tests/client.tests.js +++ b/app/markdown/tests/client.tests.js @@ -19,10 +19,17 @@ const inlinecodeWrapper = (text) => wrapper(`