diff --git a/m2d/converters/event-to-message.js b/m2d/converters/event-to-message.js index f9403f9b..c22e1a81 100644 --- a/m2d/converters/event-to-message.js +++ b/m2d/converters/event-to-message.js @@ -54,16 +54,17 @@ const turndownService = new TurndownService({ */ // @ts-ignore bad type from turndown turndownService.escape = function (string) { - const escapedWords = string.split(" ").map(word => { - if (word.match(/^https?:\/\//)) { - return word + return string.replace(/\s+|\S+/g, part => { // match chunks of spaces or non-spaces + if (part.match(/\s/)) return part // don't process spaces + + if (part.match(/^https?:\/\//)) { + return part } else { return markdownEscapes.reduce(function (accumulator, escape) { return accumulator.replace(escape[0], escape[1]) - }, word) + }, part) } }) - return escapedWords.join(" ") } turndownService.remove("mx-reply") diff --git a/m2d/converters/event-to-message.test.js b/m2d/converters/event-to-message.test.js index 9035ddb3..db443931 100644 --- a/m2d/converters/event-to-message.test.js +++ b/m2d/converters/event-to-message.test.js @@ -205,6 +205,34 @@ test("event2message: links in plaintext body are not broken", async t => { ) }) +test("event2message: links in plaintext body are not broken when preceded by a newline", async t => { + t.deepEqual( + await eventToMessage({ + type: "m.room.message", + sender: "@cadence:cadence.moe", + content: { + msgtype: "m.text", + body: "java redstoners will be like \"I hate bedrock edition redstone!!\" meanwhile java edition:\nhttps://youtu.be/g_ORb7bN3CM" + }, + event_id: "$b1c5gJZfh1gq3zz6UkhI1whJ61JVvgvvzbdSPEYnTbY", + room_id: "!kLRqKKUQXcibIMtOpl:cadence.moe" + }), + { + ensureJoined: [], + messagesToDelete: [], + messagesToEdit: [], + messagesToSend: [{ + username: "cadence [they]", + content: "java redstoners will be like \"I hate bedrock edition redstone!!\" meanwhile java edition:\nhttps://youtu.be/g_ORb7bN3CM", + avatar_url: undefined, + allowed_mentions: { + parse: ["users", "roles"] + } + }] + } + ) +}) + test("event2message: links in formatted body where the text & href are the same, just post the link once", async t => { t.deepEqual( await eventToMessage({