From 1f4e286db96305e3f7f958503f65fe6ea227e85c Mon Sep 17 00:00:00 2001 From: Robin Date: Tue, 8 Mar 2022 08:12:36 -0500 Subject: [PATCH] Fix formatting not being applied after links (#7990) --- src/Markdown.ts | 19 ++++++++++++++++++- test/Markdown-test.ts | 7 +++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/Markdown.ts b/src/Markdown.ts index e24c9b7287..9f88fbe41f 100644 --- a/src/Markdown.ts +++ b/src/Markdown.ts @@ -153,10 +153,27 @@ export default class Markdown { (node.type === 'text' && node.literal === ' ') ) { text = ''; + continue; } + + // Break up text nodes on spaces, so that we don't shoot past them without resetting if (node.type === 'text') { - text += node.literal; + const [thisPart, ...nextParts] = node.literal.split(/( )/); + node.literal = thisPart; + text += thisPart; + + // Add the remaining parts as siblings + nextParts.reverse().forEach(part => { + if (part) { + const nextNode = new commonmark.Node('text'); + nextNode.literal = part; + node.insertAfter(nextNode); + // Make the iterator aware of the newly inserted node + walker.resumeAt(nextNode, true); + } + }); } + // We should not do this if previous node was not a textnode, as we can't combine it then. if ((node.type === 'emph' || node.type === 'strong') && previousNode.type === 'text') { if (event.entering) { diff --git a/test/Markdown-test.ts b/test/Markdown-test.ts index d5f38dbb9f..c1b4b31a29 100644 --- a/test/Markdown-test.ts +++ b/test/Markdown-test.ts @@ -157,5 +157,12 @@ describe("Markdown parser test", () => { const md = new Markdown(testString); expect(md.toHTML()).toEqual(expectedResult); }); + + it('resumes applying formatting to the rest of a message after a link', () => { + const testString = 'http://google.com/_thing_ *does* __not__ exist'; + const expectedResult = 'http://google.com/_thing_ does not exist'; + const md = new Markdown(testString); + expect(md.toHTML()).toEqual(expectedResult); + }); }); });