diff --git a/novelwriter/core/buildsettings.py b/novelwriter/core/buildsettings.py index f1dbe57e..1037c572 100644 --- a/novelwriter/core/buildsettings.py +++ b/novelwriter/core/buildsettings.py @@ -81,6 +81,7 @@ SETTINGS_TEMPLATE = { "odt.addColours": (bool, True), "odt.pageHeader": (str, nwHeadFmt.ODT_AUTO), "odt.pageCountOffset": (int, 0), + "md.preserveBreaks": (bool, True), "html.addStyles": (bool, True), "html.preserveTabs": (bool, False), } @@ -131,6 +132,9 @@ SETTINGS_LABELS = { "odt.pageHeader": QT_TRANSLATE_NOOP("Builds", "Page Header"), "odt.pageCountOffset": QT_TRANSLATE_NOOP("Builds", "Page Counter Offset"), + "md": QT_TRANSLATE_NOOP("Builds", "Markdown (.md)"), + "md.preserveBreaks": QT_TRANSLATE_NOOP("Builds", "Preserve Hard Line Breaks"), + "html": QT_TRANSLATE_NOOP("Builds", "HTML (.html)"), "html.addStyles": QT_TRANSLATE_NOOP("Builds", "Add CSS Styles"), "html.preserveTabs": QT_TRANSLATE_NOOP("Builds", "Preserve Tab Characters"), diff --git a/novelwriter/core/docbuild.py b/novelwriter/core/docbuild.py index d5d8f176..924a038a 100644 --- a/novelwriter/core/docbuild.py +++ b/novelwriter/core/docbuild.py @@ -192,6 +192,8 @@ class NWBuildDocument: if self._build.getBool("format.replaceTabs"): makeObj.replaceTabs(nSpaces=4, spaceChar=" ") + makeObj.setPreserveBreaks(self._build.getBool("md.preserveBreaks")) + for i, tHandle in enumerate(self._queue): self._error = None if filtered.get(tHandle, (False, 0))[0]: diff --git a/novelwriter/core/tomd.py b/novelwriter/core/tomd.py index fbc2e463..a57ba18f 100644 --- a/novelwriter/core/tomd.py +++ b/novelwriter/core/tomd.py @@ -49,6 +49,7 @@ class ToMarkdown(Tokenizer): super().__init__(project) self._genMode = self.M_STD self._fullMD: list[str] = [] + self._preserveBreaks = True return ## @@ -74,6 +75,11 @@ class ToMarkdown(Tokenizer): self._genMode = self.M_EXT return + def setPreserveBreaks(self, state: bool) -> None: + """Preserve line breaks in paragraphs.""" + self._preserveBreaks = state + return + ## # Class Methods ## @@ -125,12 +131,13 @@ class ToMarkdown(Tokenizer): para = [] lines = [] + lineSep = " \n" if self._preserveBreaks else " " for tType, _, tText, tFormat, tStyle in self._tokens: if tType == self.T_EMPTY: if len(para) > 0: - tTemp = (" \n".join(para)).rstrip(" ") + tTemp = (lineSep.join(para)).rstrip(" ") lines.append(f"{tTemp}\n\n") para = [] diff --git a/novelwriter/tools/manussettings.py b/novelwriter/tools/manussettings.py index 573e8483..3ccf79e1 100644 --- a/novelwriter/tools/manussettings.py +++ b/novelwriter/tools/manussettings.py @@ -1248,6 +1248,12 @@ class _OutputTab(NScrollableForm): self.htmlPreserveTabs = NSwitch(self, height=iPx) self.addRow(self._build.getLabel("html.preserveTabs"), self.htmlPreserveTabs) + # Markdown Document + self.addGroupLabel(self._build.getLabel("md")) + + self.mdPreserveBreaks = NSwitch(self, height=iPx) + self.addRow(self._build.getLabel("md.preserveBreaks"), self.mdPreserveBreaks) + # Finalise self.finalise() @@ -1260,6 +1266,7 @@ class _OutputTab(NScrollableForm): self.odtPageCountOffset.setValue(self._build.getInt("odt.pageCountOffset")) self.htmlAddStyles.setChecked(self._build.getBool("html.addStyles")) self.htmlPreserveTabs.setChecked(self._build.getBool("html.preserveTabs")) + self.mdPreserveBreaks.setChecked(self._build.getBool("md.preserveBreaks")) return def saveContent(self) -> None: @@ -1269,6 +1276,7 @@ class _OutputTab(NScrollableForm): self._build.setValue("odt.pageCountOffset", self.odtPageCountOffset.value()) self._build.setValue("html.addStyles", self.htmlAddStyles.isChecked()) self._build.setValue("html.preserveTabs", self.htmlPreserveTabs.isChecked()) + self._build.setValue("md.preserveBreaks", self.mdPreserveBreaks.isChecked()) return ##