diff --git a/packages/app-cli/tests/html_to_md/linebreaks.html b/packages/app-cli/tests/html_to_md/linebreaks.html new file mode 100644 index 0000000000..c7a0ae1b88 --- /dev/null +++ b/packages/app-cli/tests/html_to_md/linebreaks.html @@ -0,0 +1,10 @@ +

Linebreaks

+
<br>-style linebreaks should be replaced with two spaces followed by a + newline.
This allows the generated mark
down to render to equivalent HTML + even if the markdown.plugin.softbreaks setting is enabled.
+
<br>s shouldn't
lead
to trailing spaces in +code +however. +
+

Because it isn't

+
necessary.



...
\ No newline at end of file diff --git a/packages/app-cli/tests/html_to_md/linebreaks.md b/packages/app-cli/tests/html_to_md/linebreaks.md new file mode 100644 index 0000000000..116e9d1cbe --- /dev/null +++ b/packages/app-cli/tests/html_to_md/linebreaks.md @@ -0,0 +1,21 @@ +# Linebreaks + +<br>-style linebreaks should be replaced with two spaces followed by a newline. +This allows the generated mark +down to render to equivalent HTML even if the `markdown.plugin.softbreaks` setting is enabled. + +``` +
s shouldn't +lead +to trailing spaces in +code +however. +``` + +Because it isn't + +necessary. + + + +... \ No newline at end of file diff --git a/packages/lib/HtmlToMd.ts b/packages/lib/HtmlToMd.ts index 0c7361aefe..c5d7f6c0ae 100644 --- a/packages/lib/HtmlToMd.ts +++ b/packages/lib/HtmlToMd.ts @@ -23,7 +23,12 @@ export default class HtmlToMd { bulletListMarker: '-', emDelimiter: '*', strongDelimiter: '**', - br: '', + + // If soft-breaks are enabled, lines need to end with two or more spaces for + // trailing
s to render. See + // https://github.com/laurent22/joplin/issues/8430 + br: ' ', + disableEscapeContent: 'disableEscapeContent' in options ? options.disableEscapeContent : false, }; if (options.convertEmbeddedPdfsToLinks) { diff --git a/packages/turndown/src/commonmark-rules.js b/packages/turndown/src/commonmark-rules.js index 0f1cf0ef31..d6eb8e5608 100644 --- a/packages/turndown/src/commonmark-rules.js +++ b/packages/turndown/src/commonmark-rules.js @@ -33,7 +33,10 @@ rules.lineBreak = { filter: 'br', replacement: function (content, node, options) { - return options.br + '\n' + // Code blocks may include
s -- replacing them should not be necessary + // in code blocks. + const brReplacement = node.isCode ? '' : options.br; + return brReplacement + '\n' } }